diff --git a/src/main/java/com/networknt/schema/ItemsValidator.java b/src/main/java/com/networknt/schema/ItemsValidator.java index 7912ebd8b..0db1cd994 100644 --- a/src/main/java/com/networknt/schema/ItemsValidator.java +++ b/src/main/java/com/networknt/schema/ItemsValidator.java @@ -19,9 +19,8 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.ArrayNode; import com.networknt.schema.annotation.JsonNodeAnnotation; -import com.networknt.schema.utils.JsonSchemaRefs; import com.networknt.schema.utils.SetView; - +import com.networknt.schema.utils.Default; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -241,7 +240,7 @@ public Set walk(ExecutionContext executionContext, JsonNode n ArrayNode arrayNode = (ArrayNode) node; JsonNode defaultNode = null; if (this.validationContext.getConfig().getApplyDefaultsStrategy().shouldApplyArrayDefaults()) { - defaultNode = getDefaultNode(this.schema); + defaultNode = Default.getDefaultNode(this.schema); } for (int i = 0; i < count; i++) { JsonNode n = arrayNode.get(i); @@ -266,7 +265,7 @@ else if (this.tupleSchema != null) { JsonNode defaultNode = null; JsonNode n = arrayNode.get(i); if (this.validationContext.getConfig().getApplyDefaultsStrategy().shouldApplyArrayDefaults()) { - defaultNode = getDefaultNode(this.tupleSchema.get(i)); + defaultNode = Default.getDefaultNode(this.tupleSchema.get(i)); } if (n != null) { if (n.isNull() && defaultNode != null) { @@ -293,7 +292,7 @@ else if (this.tupleSchema != null) { JsonNode defaultNode = null; JsonNode n = arrayNode.get(i); if (this.validationContext.getConfig().getApplyDefaultsStrategy().shouldApplyArrayDefaults()) { - defaultNode = getDefaultNode(this.additionalSchema); + defaultNode = Default.getDefaultNode(this.additionalSchema); } if (n != null) { if (n.isNull() && defaultNode != null) { @@ -326,17 +325,6 @@ else if (this.tupleSchema != null) { return validationMessages; } - private static JsonNode getDefaultNode(JsonSchema schema) { - JsonNode result = schema.getSchemaNode().get("default"); - if (result == null) { - JsonSchemaRef schemaRef = JsonSchemaRefs.from(schema); - if (schemaRef != null) { - result = getDefaultNode(schemaRef.getSchema()); - } - } - return result; - } - private void walkSchema(ExecutionContext executionContext, JsonSchema walkSchema, JsonNode node, JsonNode rootNode, JsonNodePath instanceLocation, boolean shouldValidateSchema, Set validationMessages, String keyword) { boolean executeWalk = this.validationContext.getConfig().getItemWalkListenerRunner().runPreWalkListeners(executionContext, keyword, diff --git a/src/main/java/com/networknt/schema/ItemsValidator202012.java b/src/main/java/com/networknt/schema/ItemsValidator202012.java index 9edcb37ef..991ac8a4f 100644 --- a/src/main/java/com/networknt/schema/ItemsValidator202012.java +++ b/src/main/java/com/networknt/schema/ItemsValidator202012.java @@ -19,7 +19,7 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.ArrayNode; import com.networknt.schema.annotation.JsonNodeAnnotation; -import com.networknt.schema.utils.JsonSchemaRefs; +import com.networknt.schema.utils.Default; import com.networknt.schema.utils.SetView; import org.slf4j.Logger; @@ -120,7 +120,7 @@ public Set walk(ExecutionContext executionContext, JsonNode n JsonNode defaultNode = null; if (this.validationContext.getConfig().getApplyDefaultsStrategy().shouldApplyArrayDefaults() && this.schema != null) { - defaultNode = getDefaultNode(this.schema); + defaultNode = Default.getDefaultNode(this.schema); } boolean evaluated = false; for (int i = this.prefixCount; i < node.size(); ++i) { @@ -155,17 +155,7 @@ public Set walk(ExecutionContext executionContext, JsonNode n return validationMessages; } - private static JsonNode getDefaultNode(JsonSchema schema) { - JsonNode result = schema.getSchemaNode().get("default"); - if (result == null) { - JsonSchemaRef schemaRef = JsonSchemaRefs.from(schema); - if (schemaRef != null) { - result = getDefaultNode(schemaRef.getSchema()); - } - } - return result; - } - + private void walkSchema(ExecutionContext executionContext, JsonSchema walkSchema, JsonNode node, JsonNode rootNode, JsonNodePath instanceLocation, boolean shouldValidateSchema, Set validationMessages) { //@formatter:off diff --git a/src/main/java/com/networknt/schema/PrefixItemsValidator.java b/src/main/java/com/networknt/schema/PrefixItemsValidator.java index ccda85859..52babcd74 100644 --- a/src/main/java/com/networknt/schema/PrefixItemsValidator.java +++ b/src/main/java/com/networknt/schema/PrefixItemsValidator.java @@ -19,7 +19,7 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.ArrayNode; import com.networknt.schema.annotation.JsonNodeAnnotation; -import com.networknt.schema.utils.JsonSchemaRefs; +import com.networknt.schema.utils.Default; import com.networknt.schema.utils.SetView; import org.slf4j.Logger; @@ -110,7 +110,7 @@ public Set walk(ExecutionContext executionContext, JsonNode n for (int i = 0; i < count; ++i) { JsonNode n = node.get(i); if (this.validationContext.getConfig().getApplyDefaultsStrategy().shouldApplyArrayDefaults()) { - JsonNode defaultNode = getDefaultNode(this.tupleSchema.get(i)); + JsonNode defaultNode = Default.getDefaultNode(this.tupleSchema.get(i)); if (n != null) { // Defaults only set if array index is explicitly null if (n.isNull() && defaultNode != null) { @@ -150,16 +150,6 @@ public Set walk(ExecutionContext executionContext, JsonNode n return validationMessages; } - private static JsonNode getDefaultNode(JsonSchema schema) { - JsonNode result = schema.getSchemaNode().get("default"); - if (result == null) { - JsonSchemaRef schemaRef = JsonSchemaRefs.from(schema); - if (schemaRef != null) { - result = getDefaultNode(schemaRef.getSchema()); - } - } - return result; - } private void doWalk(ExecutionContext executionContext, Set validationMessages, int i, JsonNode node, JsonNode rootNode, JsonNodePath instanceLocation, boolean shouldValidateSchema) { diff --git a/src/main/java/com/networknt/schema/PropertiesValidator.java b/src/main/java/com/networknt/schema/PropertiesValidator.java index f378905ee..1dafe3b88 100644 --- a/src/main/java/com/networknt/schema/PropertiesValidator.java +++ b/src/main/java/com/networknt/schema/PropertiesValidator.java @@ -21,7 +21,7 @@ import com.fasterxml.jackson.databind.node.MissingNode; import com.fasterxml.jackson.databind.node.ObjectNode; import com.networknt.schema.annotation.JsonNodeAnnotation; -import com.networknt.schema.utils.JsonSchemaRefs; +import com.networknt.schema.utils.Default; import com.networknt.schema.utils.SetView; import com.networknt.schema.walk.WalkListenerRunner; import org.slf4j.Logger; @@ -192,7 +192,7 @@ private void applyPropertyDefaults(ObjectNode node) { for (Map.Entry entry : this.schemas.entrySet()) { JsonNode propertyNode = node.get(entry.getKey()); - JsonNode defaultNode = getDefaultNode(entry.getValue()); + JsonNode defaultNode = Default.getDefaultNode(entry.getValue()); if (defaultNode == null) { continue; } @@ -204,17 +204,6 @@ private void applyPropertyDefaults(ObjectNode node) { } } - private static JsonNode getDefaultNode(JsonSchema schema) { - JsonNode result = schema.getSchemaNode().get("default"); - if (result == null) { - JsonSchemaRef schemaRef = JsonSchemaRefs.from(schema); - if (schemaRef != null) { - result = getDefaultNode(schemaRef.getSchema()); - } - } - return result; - } - private void walkSchema(ExecutionContext executionContext, Map.Entry entry, JsonNode node, JsonNode rootNode, JsonNodePath instanceLocation, boolean shouldValidateSchema, SetView validationMessages, WalkListenerRunner propertyWalkListenerRunner) { diff --git a/src/main/java/com/networknt/schema/utils/Default.java b/src/main/java/com/networknt/schema/utils/Default.java new file mode 100644 index 000000000..80a68e0f4 --- /dev/null +++ b/src/main/java/com/networknt/schema/utils/Default.java @@ -0,0 +1,19 @@ +package com.networknt.schema.utils; + +import com.fasterxml.jackson.databind.JsonNode; +import com.networknt.schema.JsonSchema; +import com.networknt.schema.JsonSchemaRef; + +public class Default { + + public static JsonNode getDefaultNode(JsonSchema schema) { + JsonNode result = schema.getSchemaNode().get("default"); + if (result == null) { + JsonSchemaRef schemaRef = JsonSchemaRefs.from(schema); + if (schemaRef != null) { + result = getDefaultNode(schemaRef.getSchema()); + } + } + return result; + } +} diff --git a/src/test/java/com/networknt/schema/utils/DefaultTest.java b/src/test/java/com/networknt/schema/utils/DefaultTest.java new file mode 100644 index 000000000..a55c63530 --- /dev/null +++ b/src/test/java/com/networknt/schema/utils/DefaultTest.java @@ -0,0 +1,38 @@ +package com.networknt.schema.utils; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; + +import java.io.IOException; + +import org.junit.jupiter.api.Test; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.networknt.schema.JsonSchema; +import com.networknt.schema.JsonSchemaFactory; +import com.networknt.schema.JsonSchemaRef; +import com.networknt.schema.SpecVersion.VersionFlag; +public class DefaultTest { + + @Test + void testGetDefaultNodeNotNull() throws Exception { + ObjectMapper mapper = new ObjectMapper(); + JsonNode node = mapper.readTree("{\"default\": \"defaultValue\"}"); + JsonSchemaFactory factory = JsonSchemaFactory.getInstance(VersionFlag.V7); + JsonSchema schema = factory.getSchema(node); + JsonNode result = Default.getDefaultNode(schema); + assertNotNull(result, "Default node should not be null"); + } + + @Test + void testGetDefaultNodeEquals() throws Exception { + ObjectMapper mapper = new ObjectMapper(); + JsonNode node = mapper.readTree("{\"default\": \"defaultValue\"}"); + JsonSchemaFactory factory = JsonSchemaFactory.getInstance(VersionFlag.V7); + JsonSchema schema = factory.getSchema(node); + JsonNode result = Default.getDefaultNode(schema); + assertEquals("defaultValue", result.asText(), "Default node should have the default value"); + } +} \ No newline at end of file