Skip to content

Commit 0b1e0b3

Browse files
authored
Merge pull request #30 from eskabetxe/features/oneOfValidator
Features/one of validator
2 parents ce1d5c8 + 0b5d8f4 commit 0b1e0b3

File tree

2 files changed

+22
-9
lines changed

2 files changed

+22
-9
lines changed

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

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import java.util.HashSet;
2626
import java.util.List;
2727
import java.util.Set;
28+
import java.util.stream.Collectors;
2829

2930
public class OneOfValidator extends BaseJsonValidator implements JsonValidator {
3031
private static final Logger logger = LoggerFactory.getLogger(RequiredValidator.class);
@@ -45,21 +46,33 @@ public Set<ValidationMessage> validate(JsonNode node, JsonNode rootNode, String
4546
debug(logger, node, rootNode, at);
4647

4748
int numberOfValidSchema = 0;
48-
49+
Set<ValidationMessage> errors = new HashSet<>();
50+
4951
for (JsonSchema schema : schemas) {
50-
Set<ValidationMessage> errors = schema.validate(node, rootNode, at);
51-
if (errors == null || errors.isEmpty()) {
52+
Set<ValidationMessage> schemaErrors = schema.validate(node, rootNode, at);
53+
if (schemaErrors.isEmpty()) {
5254
numberOfValidSchema++;
55+
errors = new HashSet<>();
5356
}
57+
if(numberOfValidSchema == 0){
58+
errors.addAll(schemaErrors);
59+
}
5460
if (numberOfValidSchema > 1) {
5561
break;
5662
}
5763
}
58-
59-
Set<ValidationMessage> errors = new HashSet<ValidationMessage>();
60-
if (numberOfValidSchema != 1) {
61-
errors.add(buildValidationMessage(at, ""));
64+
65+
if (numberOfValidSchema == 0) {
66+
errors = errors.stream()
67+
.filter(msg -> !ValidatorTypeCode.ADDITIONAL_PROPERTIES
68+
.equals(ValidatorTypeCode.fromValue(msg.getType())))
69+
.collect(Collectors.toSet());
70+
}
71+
if (numberOfValidSchema > 1) {
72+
errors = new HashSet<>();
73+
errors.add(buildValidationMessage(at, ""));
6274
}
75+
6376
return errors;
6477
}
6578

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@ public enum ValidatorTypeCode {
2525
"{0}.{1}: is not defined in the schema and the schema does not allow additional properties")),
2626
ALL_OF("allOf", "1002", new MessageFormat("{0}: should be valid to all the schemas {1}")),
2727
ANY_OF("anyOf", "1003", new MessageFormat("{0}: should be valid to any of the schemas {1}")),
28-
CROSS_EDITS("crossEdits", "", new MessageFormat("{0}: has an error with 'cross edits'")),
28+
CROSS_EDITS("crossEdits", "1004", new MessageFormat("{0}: has an error with 'cross edits'")),
2929
DEPENDENCIES("dependencies", "1007", new MessageFormat("{0}: has an error with dependencies {1}")),
30-
EDITS("edits", "", new MessageFormat("{0}: has an error with 'edits'")),
30+
EDITS("edits", "1005", new MessageFormat("{0}: has an error with 'edits'")),
3131
ENUM("enum", "1008", new MessageFormat("{0}: does not have a value in the enumeration {1}")),
3232
FORMAT("format", "1009", new MessageFormat("{0}: does not match the {1} pattern {2}")),
3333
ITEMS("items", "1010", new MessageFormat("{0}[{1}]: no validator found at this index")),

0 commit comments

Comments
 (0)