From 9b1658c8009c9cf635e6b0cec64f886293a6ca2a Mon Sep 17 00:00:00 2001 From: Meer Patel Date: Fri, 29 Mar 2024 23:27:13 -0300 Subject: [PATCH 1/2] segregated getDefaultNode in utils --- .../com/networknt/schema/ItemsValidator.java | 20 ++++--------------- .../schema/ItemsValidator202012.java | 16 +++------------ .../schema/PrefixItemsValidator.java | 14 ++----------- .../networknt/schema/PropertiesValidator.java | 15 ++------------ .../networknt/schema/utils/DefaultNode.java | 19 ++++++++++++++++++ 5 files changed, 30 insertions(+), 54 deletions(-) create mode 100644 src/main/java/com/networknt/schema/utils/DefaultNode.java diff --git a/src/main/java/com/networknt/schema/ItemsValidator.java b/src/main/java/com/networknt/schema/ItemsValidator.java index 7912ebd8b..42f4fa3c6 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.DefaultNode; 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 = DefaultNode.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 = DefaultNode.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 = DefaultNode.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..50ff3a785 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.DefaultNode; 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 = DefaultNode.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..985620513 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.DefaultNode; 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 = DefaultNode.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..7d7b6687f 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.DefaultNode; 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 = DefaultNode.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/DefaultNode.java b/src/main/java/com/networknt/schema/utils/DefaultNode.java new file mode 100644 index 000000000..dbf09b2f3 --- /dev/null +++ b/src/main/java/com/networknt/schema/utils/DefaultNode.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 DefaultNode { + + 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; + } +} From 68cd4ecabff4d3b2dd0c89327932f4f63b257e76 Mon Sep 17 00:00:00 2001 From: Meer Patel Date: Sat, 30 Mar 2024 19:17:06 -0300 Subject: [PATCH 2/2] changed class name to Default and added test cases --- .../com/networknt/schema/ItemsValidator.java | 8 ++-- .../schema/ItemsValidator202012.java | 4 +- .../schema/PrefixItemsValidator.java | 4 +- .../networknt/schema/PropertiesValidator.java | 4 +- .../utils/{DefaultNode.java => Default.java} | 2 +- .../networknt/schema/utils/DefaultTest.java | 38 +++++++++++++++++++ 6 files changed, 49 insertions(+), 11 deletions(-) rename src/main/java/com/networknt/schema/utils/{DefaultNode.java => Default.java} (95%) create mode 100644 src/test/java/com/networknt/schema/utils/DefaultTest.java diff --git a/src/main/java/com/networknt/schema/ItemsValidator.java b/src/main/java/com/networknt/schema/ItemsValidator.java index 42f4fa3c6..0db1cd994 100644 --- a/src/main/java/com/networknt/schema/ItemsValidator.java +++ b/src/main/java/com/networknt/schema/ItemsValidator.java @@ -20,7 +20,7 @@ import com.fasterxml.jackson.databind.node.ArrayNode; import com.networknt.schema.annotation.JsonNodeAnnotation; import com.networknt.schema.utils.SetView; -import com.networknt.schema.utils.DefaultNode; +import com.networknt.schema.utils.Default; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -240,7 +240,7 @@ public Set walk(ExecutionContext executionContext, JsonNode n ArrayNode arrayNode = (ArrayNode) node; JsonNode defaultNode = null; if (this.validationContext.getConfig().getApplyDefaultsStrategy().shouldApplyArrayDefaults()) { - defaultNode = DefaultNode.getDefaultNode(this.schema); + defaultNode = Default.getDefaultNode(this.schema); } for (int i = 0; i < count; i++) { JsonNode n = arrayNode.get(i); @@ -265,7 +265,7 @@ else if (this.tupleSchema != null) { JsonNode defaultNode = null; JsonNode n = arrayNode.get(i); if (this.validationContext.getConfig().getApplyDefaultsStrategy().shouldApplyArrayDefaults()) { - defaultNode = DefaultNode.getDefaultNode(this.tupleSchema.get(i)); + defaultNode = Default.getDefaultNode(this.tupleSchema.get(i)); } if (n != null) { if (n.isNull() && defaultNode != null) { @@ -292,7 +292,7 @@ else if (this.tupleSchema != null) { JsonNode defaultNode = null; JsonNode n = arrayNode.get(i); if (this.validationContext.getConfig().getApplyDefaultsStrategy().shouldApplyArrayDefaults()) { - defaultNode = DefaultNode.getDefaultNode(this.additionalSchema); + defaultNode = Default.getDefaultNode(this.additionalSchema); } if (n != null) { if (n.isNull() && defaultNode != null) { diff --git a/src/main/java/com/networknt/schema/ItemsValidator202012.java b/src/main/java/com/networknt/schema/ItemsValidator202012.java index 50ff3a785..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.DefaultNode; +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 = DefaultNode.getDefaultNode(this.schema); + defaultNode = Default.getDefaultNode(this.schema); } boolean evaluated = false; for (int i = this.prefixCount; i < node.size(); ++i) { diff --git a/src/main/java/com/networknt/schema/PrefixItemsValidator.java b/src/main/java/com/networknt/schema/PrefixItemsValidator.java index 985620513..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.DefaultNode; +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 = 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) { diff --git a/src/main/java/com/networknt/schema/PropertiesValidator.java b/src/main/java/com/networknt/schema/PropertiesValidator.java index 7d7b6687f..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.DefaultNode; +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 = DefaultNode.getDefaultNode(entry.getValue()); + JsonNode defaultNode = Default.getDefaultNode(entry.getValue()); if (defaultNode == null) { continue; } diff --git a/src/main/java/com/networknt/schema/utils/DefaultNode.java b/src/main/java/com/networknt/schema/utils/Default.java similarity index 95% rename from src/main/java/com/networknt/schema/utils/DefaultNode.java rename to src/main/java/com/networknt/schema/utils/Default.java index dbf09b2f3..80a68e0f4 100644 --- a/src/main/java/com/networknt/schema/utils/DefaultNode.java +++ b/src/main/java/com/networknt/schema/utils/Default.java @@ -4,7 +4,7 @@ import com.networknt.schema.JsonSchema; import com.networknt.schema.JsonSchemaRef; -public class DefaultNode { +public class Default { public static JsonNode getDefaultNode(JsonSchema schema) { JsonNode result = schema.getSchemaNode().get("default"); 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