Skip to content

Commit fef6916

Browse files
committed
Fixes #111 problem started from oneOf validation - Validation failure for optional field in a schema - in the PropertiesValidator
1 parent fba1e9b commit fef6916

File tree

3 files changed

+19
-5
lines changed

3 files changed

+19
-5
lines changed

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ public class JsonSchema extends BaseJsonValidator {
3333
private static final Pattern intPattern = Pattern.compile("^[0-9]+$");
3434
protected final Map<String, JsonValidator> validators;
3535
private final ValidationContext validationContext;
36+
37+
private JsonValidator requiredValidator = null;
3638

3739
public JsonSchema(ValidationContext validationContext, JsonNode schemaNode) {
3840
this(validationContext, "#", schemaNode, null);
@@ -111,6 +113,9 @@ private Map<String, JsonValidator> read(JsonNode schemaNode) {
111113
JsonValidator validator = validationContext.newValidator(getSchemaPath(), pname, n, this);
112114
if (validator != null) {
113115
validators.put(getSchemaPath() + "/" + pname, validator);
116+
117+
if(pname.equals("required"))
118+
requiredValidator = validator;
114119
}
115120

116121
}
@@ -129,4 +134,12 @@ public Set<ValidationMessage> validate(JsonNode jsonNode, JsonNode rootNode, Str
129134
public String toString() {
130135
return "\"" + getSchemaPath() + "\" : " + getSchemaNode().toString();
131136
}
137+
138+
public boolean hasRequiredValidator() {
139+
return requiredValidator != null ? true : false;
140+
}
141+
142+
public JsonValidator getRequiredValidator() {
143+
return requiredValidator;
144+
}
132145
}

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

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -163,9 +163,6 @@ public Set<ValidationMessage> validate(JsonNode node, JsonNode rootNode, String
163163
errors.addAll(schemaErrors);
164164
}
165165
}
166-
if (numberOfValidSchema > 1) {
167-
break;
168-
}
169166
}
170167

171168
if (numberOfValidSchema == 0) {

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,12 @@ public Set<ValidationMessage> validate(JsonNode node, JsonNode rootNode, String
5454
}
5555
} else {
5656
// if a node could not be found, treat is as error/continue, depending on the SchemaValidatorsConfig
57-
if(config.isMissingNodeAsError())
58-
errors.add(buildValidationMessage(at, node.toString()));
57+
if(config.isMissingNodeAsError()) {
58+
if(getParentSchema().hasRequiredValidator())
59+
errors.addAll(getParentSchema().getRequiredValidator().validate(node, rootNode, at));
60+
else
61+
errors.add(buildValidationMessage(at, node.toString()));
62+
}
5963
}
6064
}
6165

0 commit comments

Comments
 (0)