Skip to content

Commit 2a94cc3

Browse files
Changes for walk method
1 parent 9f2ad72 commit 2a94cc3

11 files changed

+97
-48
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
<modelVersion>4.0.0</modelVersion>
2121
<groupId>com.networknt</groupId>
2222
<artifactId>json-schema-validator</artifactId>
23-
<version>1.0.47 </version>
23+
<version>1.0.43</version>
2424
<packaging>bundle</packaging>
2525
<description>A json schema validator that supports draft v4, v6, v7 and v2019-09</description>
2626
<url>https://github.com/networknt/json-schema-validator</url>

src/main/java/com/networknt/schema/AdditionalPropertiesValidator.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ public Set<ValidationMessage> walk(JsonNode node, JsonNode rootNode, String at,
110110
}
111111
// Validate schema if required.
112112
if (shouldValidateSchema) {
113-
return validate(node, rootNode, at);
113+
validationMessages.addAll(validate(node, rootNode, at));
114114
}
115115
for (Iterator<String> it = node.fieldNames(); it.hasNext();) {
116116
String pname = it.next();
@@ -129,8 +129,8 @@ public Set<ValidationMessage> walk(JsonNode node, JsonNode rootNode, String at,
129129
if (!allowedProperties.contains(pname) && !handledByPatternProperties) {
130130
if (allowAdditionalProperties) {
131131
if (additionalPropertiesSchema != null) {
132-
additionalPropertiesSchema.walk(node.get(pname), rootNode, at + "." + pname,
133-
shouldValidateSchema);
132+
validationMessages.addAll(additionalPropertiesSchema.walk(node.get(pname), rootNode, at + "." + pname,
133+
shouldValidateSchema));
134134
}
135135
}
136136
}

src/main/java/com/networknt/schema/AllOfValidator.java

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -50,14 +50,17 @@ public Set<ValidationMessage> validate(JsonNode node, JsonNode rootNode, String
5050

5151
@Override
5252
public Set<ValidationMessage> walk(JsonNode node, JsonNode rootNode, String at, boolean shouldValidateSchema) {
53-
// Check if validation is needed. Else just walk through the schemas.
54-
if (shouldValidateSchema) {
55-
return validate(node, rootNode, at);
56-
}
53+
Set<ValidationMessage> validationMessages = new LinkedHashSet<ValidationMessage>();
54+
5755
for (JsonSchema schema : schemas) {
58-
schema.walk(node, rootNode, at, shouldValidateSchema);
56+
// Check if validation is needed.
57+
if (shouldValidateSchema) {
58+
validationMessages.addAll(schema.validate(node, rootNode, at));
59+
}
60+
// Walk through the schema
61+
validationMessages.addAll(schema.walk(node, rootNode, at, shouldValidateSchema));
5962
}
60-
return new LinkedHashSet<ValidationMessage>();
63+
return Collections.unmodifiableSet(validationMessages);
6164
}
6265

6366
}

src/main/java/com/networknt/schema/BaseJsonValidator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ public BaseJsonValidator(String schemaPath, JsonNode schemaNode, JsonSchema pare
6262
this.failFast = failFast;
6363
}
6464

65-
protected String getSchemaPath() {
65+
public String getSchemaPath() {
6666
return schemaPath;
6767
}
6868

src/main/java/com/networknt/schema/ItemsValidator.java

Lines changed: 31 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -103,40 +103,54 @@ private void doValidate(Set<ValidationMessage> errors, int i, JsonNode node, Jso
103103

104104
@Override
105105
public Set<ValidationMessage> walk(JsonNode node, JsonNode rootNode, String at, boolean shouldValidateSchema) {
106-
if (shouldValidateSchema) {
107-
return validate(node, rootNode, at);
108-
} else {
109-
HashSet<ValidationMessage> validationMessages = new LinkedHashSet<ValidationMessage>();
110-
if (node.isArray()) {
111-
int i = 0;
112-
for (JsonNode n : node) {
113-
doWalk(i, n, rootNode, at);
114-
i++;
115-
}
116-
} else {
117-
doWalk(0, node, rootNode, at);
106+
HashSet<ValidationMessage> validationMessages = new LinkedHashSet<ValidationMessage>();
107+
if (node.isArray()) {
108+
int i = 0;
109+
for (JsonNode n : node) {
110+
doWalk(validationMessages, i, n, rootNode, at, shouldValidateSchema);
111+
i++;
118112
}
119-
return validationMessages;
113+
} else {
114+
doWalk(validationMessages, 0, node, rootNode, at, shouldValidateSchema);
120115
}
116+
return validationMessages;
121117
}
122118

123-
private void doWalk(int i, JsonNode node, JsonNode rootNode, String at) {
119+
private void doWalk(HashSet<ValidationMessage> validationMessages, int i, JsonNode node, JsonNode rootNode,
120+
String at, boolean shouldValidateSchema) {
124121
if (schema != null) {
122+
if (shouldValidateSchema) {
123+
validationMessages.addAll(schema.validate(node, rootNode, at));
124+
}
125125
// Walk the schema.
126-
schema.walk(node, rootNode, at + "[" + i + "]", false);
126+
validationMessages.addAll(schema.walk(node, rootNode, at + "[" + i + "]", shouldValidateSchema));
127127
}
128128

129129
if (tupleSchema != null) {
130130
if (i < tupleSchema.size()) {
131+
if (shouldValidateSchema) {
132+
validationMessages.addAll(tupleSchema.get(i).validate(node, rootNode, at));
133+
}
131134
// walk tuple schema
132-
tupleSchema.get(i).walk(node, rootNode, at + "[" + i + "]", false);
135+
validationMessages.addAll(tupleSchema.get(i).walk(node, rootNode, at + "[" + i + "]", shouldValidateSchema));
133136
} else {
134137
if (additionalSchema != null) {
138+
if (shouldValidateSchema) {
139+
validationMessages.addAll(additionalSchema.validate(node, rootNode, at));
140+
}
135141
// walk additional item schema
136-
additionalSchema.walk(node, rootNode, at + "[" + i + "]", false);
142+
validationMessages.addAll(additionalSchema.walk(node, rootNode, at + "[" + i + "]", shouldValidateSchema));
137143
}
138144
}
139145
}
140146
}
141147

148+
public List<JsonSchema> getTupleSchema() {
149+
return this.tupleSchema;
150+
}
151+
152+
public JsonSchema getSchema() {
153+
return schema;
154+
}
155+
142156
}

src/main/java/com/networknt/schema/JsonSchema.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,9 @@ private JsonSchema(ValidationContext validationContext, String schemaPath, URI c
8080
this.config = validationContext.getConfig();
8181
this.idKeyword = validationContext.getMetaSchema().getIdKeyword();
8282
this.currentUri = this.combineCurrentUriWithIds(currentUri, schemaNode);
83-
this.keywordWalkListenerRunner = new DefaultKeywordWalkListenerRunner(config.getKeywordWalkListenersMap());
83+
if (config != null) {
84+
this.keywordWalkListenerRunner = new DefaultKeywordWalkListenerRunner(config.getKeywordWalkListenersMap());
85+
}
8486
}
8587

8688
JsonSchema initialize() {

src/main/java/com/networknt/schema/NotValidator.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,11 +49,12 @@ public Set<ValidationMessage> validate(JsonNode node, JsonNode rootNode, String
4949

5050
@Override
5151
public Set<ValidationMessage> walk(JsonNode node, JsonNode rootNode, String at, boolean shouldValidateSchema) {
52+
Set<ValidationMessage> validationMessages = new LinkedHashSet<ValidationMessage>();
5253
if (shouldValidateSchema) {
53-
return validate(node, rootNode, at);
54+
validationMessages.addAll(validate(node, rootNode, at));
5455
}
55-
schema.walk(node, rootNode, at, shouldValidateSchema);
56-
return new LinkedHashSet<ValidationMessage>();
56+
validationMessages.addAll(schema.walk(node, rootNode, at, shouldValidateSchema));
57+
return validationMessages;
5758
}
5859

5960
}

src/main/java/com/networknt/schema/OneOfValidator.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,10 @@ public boolean allConstantsMatch(JsonNode node) {
107107
return true;
108108
}
109109

110+
private JsonSchema getSchema() {
111+
return schema;
112+
}
113+
110114
}
111115

112116
public OneOfValidator(String schemaPath, JsonNode schemaNode, JsonSchema parentSchema, ValidationContext validationContext) {
@@ -191,5 +195,13 @@ public Set<ValidationMessage> validate(JsonNode node, JsonNode rootNode, String
191195

192196
return Collections.unmodifiableSet(errors);
193197
}
198+
199+
public List<JsonSchema> getChildSchemas() {
200+
List<JsonSchema> childJsonSchemas = new ArrayList<JsonSchema>();
201+
for (ShortcutValidator shortcutValidator: schemas ) {
202+
childJsonSchemas.add(shortcutValidator.getSchema());
203+
}
204+
return childJsonSchemas;
205+
}
194206

195207
}

src/main/java/com/networknt/schema/PatternValidator.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package com.networknt.schema;
1818

1919
import java.util.Collections;
20+
import java.util.LinkedHashSet;
2021
import java.util.Set;
2122
import java.util.regex.Pattern;
2223
import java.util.regex.PatternSyntaxException;
@@ -55,7 +56,12 @@ public Set<ValidationMessage> validate(JsonNode node, JsonNode rootNode, String
5556

5657
@Override
5758
public Set<ValidationMessage> walk(JsonNode node, JsonNode rootNode, String at, boolean shouldValidateSchema) {
58-
return delegate.walk(node, rootNode, at, shouldValidateSchema);
59+
Set<ValidationMessage> validationMessages = new LinkedHashSet<ValidationMessage>();
60+
if (shouldValidateSchema) {
61+
validationMessages.addAll(validate(node, rootNode, at));
62+
}
63+
validationMessages.addAll(delegate.walk(node, rootNode, at, shouldValidateSchema));
64+
return validationMessages;
5965
}
6066

6167
private static class PatternValidatorJava extends BaseJsonValidator implements JsonValidator {

src/main/java/com/networknt/schema/PropertiesValidator.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -103,10 +103,10 @@ public Set<ValidationMessage> validate(JsonNode node, JsonNode rootNode, String
103103

104104
@Override
105105
public Set<ValidationMessage> walk(JsonNode node, JsonNode rootNode, String at, boolean shouldValidateSchema) {
106+
HashSet<ValidationMessage> validationMessages = new LinkedHashSet<ValidationMessage>();
106107
if (shouldValidateSchema) {
107-
return validate(node, rootNode, at);
108+
validationMessages.addAll(validate(node, rootNode, at));
108109
} else {
109-
HashSet<ValidationMessage> validationMessages = new LinkedHashSet<ValidationMessage>();
110110
boolean executeWalk = true;
111111
for (Map.Entry<String, JsonSchema> entry : schemas.entrySet()) {
112112
JsonSchema propertySchema = entry.getValue();
@@ -115,14 +115,20 @@ public Set<ValidationMessage> walk(JsonNode node, JsonNode rootNode, String at,
115115
propertyNode, rootNode, at + "." + entry.getKey(), propertySchema.getSchemaPath(),
116116
propertySchema.getSchemaNode(), propertySchema.getParentSchema());
117117
if (propertyNode != null && executeWalk) {
118-
propertySchema.walk(propertyNode, rootNode, at + "." + entry.getKey(), false);
118+
validationMessages.addAll(propertySchema.walk(propertyNode, rootNode, at + "." + entry.getKey(),
119+
shouldValidateSchema));
119120
}
120121
propertyWalkListenerRunner.runPostWalkListeners(ValidatorTypeCode.PROPERTIES.getValue(), propertyNode,
121122
rootNode, at + "." + entry.getKey(), propertySchema.getSchemaPath(),
122123
propertySchema.getSchemaNode(), propertySchema.getParentSchema(), validationMessages);
123124
}
124-
return validationMessages;
125125
}
126+
return validationMessages;
126127
}
127128

129+
public Map<String, JsonSchema> getSchemas() {
130+
return schemas;
131+
}
132+
133+
128134
}

0 commit comments

Comments
 (0)