Skip to content

Commit 2ab2199

Browse files
ksychlasychlak
and
sychlak
authored
Fix oneOf bug (#537)
Co-authored-by: sychlak <[email protected]>
1 parent 0b51d25 commit 2ab2199

File tree

2 files changed

+9
-5
lines changed

2 files changed

+9
-5
lines changed

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

+4
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,7 @@ public Set<ValidationMessage> validate(JsonNode node, JsonNode rootNode, String
188188

189189
childErrors.addAll(schemaErrors);
190190
}
191+
Set<ValidationMessage> childNotRequiredErrors = childErrors.stream().filter(error -> !ValidatorTypeCode.REQUIRED.getValue().equals(error.getType())).collect(Collectors.toSet());
191192

192193
// ensure there is always an "OneOf" error reported if number of valid schemas is not equal to 1.
193194
if (numberOfValidSchema > 1) {
@@ -200,6 +201,9 @@ public Set<ValidationMessage> validate(JsonNode node, JsonNode rootNode, String
200201

201202
// ensure there is always an "OneOf" error reported if number of valid schemas is not equal to 1.
202203
else if (numberOfValidSchema < 1) {
204+
if (!childNotRequiredErrors.isEmpty()) {
205+
childErrors = childNotRequiredErrors;
206+
}
203207
if (!childErrors.isEmpty()) {
204208
if (childErrors.size() > 1) {
205209
Set<ValidationMessage> notAdditionalPropertiesOnly = new LinkedHashSet<>(childErrors.stream()

src/test/java/com/networknt/schema/Issue491Test.java

+5-5
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ void testInvalidJson1() throws Exception {
9393
JsonSchema schema = factory.getSchema(schemaInputStream);
9494
JsonNode node = getJsonNodeFromJsonData("/data/issue491-invalid-1.json");
9595
Set<ValidationMessage> errors = schema.validate(node);
96-
Assertions.assertEquals(2, errors.size());
96+
Assertions.assertEquals(1, errors.size());
9797
Assertions.assertEquals("$.search.searchAge.age: string found, integer expected", errors.iterator().next().getMessage());
9898
}
9999

@@ -104,7 +104,7 @@ void testInvalidJson2() throws Exception {
104104
JsonSchema schema = factory.getSchema(schemaInputStream);
105105
JsonNode node = getJsonNodeFromJsonData("/data/issue491-invalid-2.json");
106106
Set<ValidationMessage> errors = schema.validate(node);
107-
Assertions.assertEquals(2, errors.size());
107+
Assertions.assertEquals(1, errors.size());
108108
Assertions.assertEquals("$.search.name: integer found, string expected", errors.iterator().next().getMessage());
109109
}
110110

@@ -115,7 +115,7 @@ void testInvalidJson3() throws Exception {
115115
JsonSchema schema = factory.getSchema(schemaInputStream);
116116
JsonNode node = getJsonNodeFromJsonData("/data/issue491-invalid-3.json");
117117
Set<ValidationMessage> errors = schema.validate(node);
118-
Assertions.assertEquals(2, errors.size());
118+
Assertions.assertEquals(1, errors.size());
119119
Assertions.assertEquals("$.search.byAge.age: string found, integer expected", errors.iterator().next().getMessage());
120120
}
121121

@@ -126,7 +126,7 @@ void testInvalidJson4() throws Exception {
126126
JsonSchema schema = factory.getSchema(schemaInputStream);
127127
JsonNode node = getJsonNodeFromJsonData("/data/issue491-invalid-2.json");
128128
Set<ValidationMessage> errors = schema.validate(node);
129-
Assertions.assertEquals(2, errors.size());
129+
Assertions.assertEquals(1, errors.size());
130130
Assertions.assertEquals("$.search.name: integer found, string expected", errors.iterator().next().getMessage());
131131
}
132132

@@ -138,7 +138,7 @@ void testInvalidJson5(String jsonPath, String expectedError) throws Exception {
138138
JsonSchema schema = factory.getSchema(schemaInputStream);
139139
JsonNode node = getJsonNodeFromJsonData(jsonPath);
140140
Set<ValidationMessage> errors = schema.validate(node);
141-
Assertions.assertEquals(2, errors.size());
141+
Assertions.assertEquals(1, errors.size());
142142
Assertions.assertEquals(expectedError, errors.iterator().next().getMessage());
143143
}
144144

0 commit comments

Comments
 (0)