From 550fc2b187081bf924b78d4b405fef49f1e6bb59 Mon Sep 17 00:00:00 2001 From: Justin Tay <49700559+justin-tay@users.noreply.github.com> Date: Wed, 3 Jul 2024 14:02:59 +0800 Subject: [PATCH] Fix activeDialect for custom meta schema --- .../java/com/networknt/schema/UnevaluatedItemsValidator.java | 3 +-- src/main/java/com/networknt/schema/ValidationContext.java | 3 +-- src/main/java/com/networknt/schema/utils/JsonNodeUtil.java | 5 +---- src/test/java/com/networknt/schema/VocabularyTest.java | 1 + 4 files changed, 4 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/networknt/schema/UnevaluatedItemsValidator.java b/src/main/java/com/networknt/schema/UnevaluatedItemsValidator.java index 49419f270..1794ce6bb 100644 --- a/src/main/java/com/networknt/schema/UnevaluatedItemsValidator.java +++ b/src/main/java/com/networknt/schema/UnevaluatedItemsValidator.java @@ -44,8 +44,7 @@ public UnevaluatedItemsValidator(SchemaLocation schemaLocation, JsonNodePath eva JsonSchema parentSchema, ValidationContext validationContext) { super(schemaLocation, evaluationPath, schemaNode, parentSchema, ValidatorTypeCode.UNEVALUATED_ITEMS, validationContext); - isMinV202012 = MinV202012.getVersions().contains(SpecVersionDetector - .detectOptionalVersion(validationContext.getMetaSchema().getIri()).orElse(DEFAULT_VERSION)); + isMinV202012 = MinV202012.getVersions().contains(validationContext.activeDialect().orElse(DEFAULT_VERSION)); if (schemaNode.isObject() || schemaNode.isBoolean()) { this.schema = validationContext.newSchema(schemaLocation, evaluationPath, schemaNode, parentSchema); } else { diff --git a/src/main/java/com/networknt/schema/ValidationContext.java b/src/main/java/com/networknt/schema/ValidationContext.java index f4d6e12f7..d35b29b94 100644 --- a/src/main/java/com/networknt/schema/ValidationContext.java +++ b/src/main/java/com/networknt/schema/ValidationContext.java @@ -107,7 +107,6 @@ public JsonMetaSchema getMetaSchema() { } public Optional activeDialect() { - String metaSchema = getMetaSchema().getIri(); - return SpecVersionDetector.detectOptionalVersion(metaSchema); + return Optional.of(this.metaSchema.getSpecification()); } } diff --git a/src/main/java/com/networknt/schema/utils/JsonNodeUtil.java b/src/main/java/com/networknt/schema/utils/JsonNodeUtil.java index 07c3b9151..d480ee7c4 100644 --- a/src/main/java/com/networknt/schema/utils/JsonNodeUtil.java +++ b/src/main/java/com/networknt/schema/utils/JsonNodeUtil.java @@ -131,10 +131,7 @@ public static boolean equalsToSchemaType(JsonNode node, JsonType schemaType, Jso } private static long detectVersion(ValidationContext validationContext) { - String metaSchema = validationContext.getMetaSchema().getIri(); - return SpecVersionDetector.detectOptionalVersion(metaSchema) - .orElse(VersionFlag.V4) - .getVersionFlagValue(); + return validationContext.activeDialect().orElse(VersionFlag.V4).getVersionFlagValue(); } /** diff --git a/src/test/java/com/networknt/schema/VocabularyTest.java b/src/test/java/com/networknt/schema/VocabularyTest.java index 84a9b4ffd..3c42ad05a 100644 --- a/src/test/java/com/networknt/schema/VocabularyTest.java +++ b/src/test/java/com/networknt/schema/VocabularyTest.java @@ -82,6 +82,7 @@ void noValidation() { messages = schema.validate(inputDataNoValidation, InputFormat.JSON); assertEquals(1, messages.size()); assertEquals("minimum", messages.iterator().next().getType()); + assertEquals(VersionFlag.V202012, schema.getValidationContext().activeDialect().get()); } @Test