Skip to content

Commit 309065e

Browse files
committed
2 parents 6ce41a7 + b01b8aa commit 309065e

File tree

7 files changed

+174
-167
lines changed

7 files changed

+174
-167
lines changed

core/src/main/java/org/everit/json/schema/ArraySchema.java

Lines changed: 33 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -200,44 +200,45 @@ public boolean requiresArray() {
200200
return requiresArray;
201201
}
202202

203-
private Optional<ValidationException> testItemCount(final JSONArray subject) {
203+
private void testItemCount(final JSONArray subject, List<ValidationException> validationExceptions) {
204204
int actualLength = subject.length();
205205
if (minItems != null && actualLength < minItems) {
206-
return Optional.of(failure("expected minimum item count: " + minItems
206+
validationExceptions.add(
207+
failure("expected minimum item count: " + minItems
207208
+ ", found: " + actualLength, "minItems"));
209+
return;
208210
}
209211
if (maxItems != null && maxItems < actualLength) {
210-
return Optional.of(failure("expected maximum item count: " + maxItems
212+
validationExceptions.add(
213+
failure("expected maximum item count: " + maxItems
211214
+ ", found: " + actualLength, "maxItems"));
212215
}
213-
return Optional.empty();
214216
}
215217

216-
private List<ValidationException> testItems(final JSONArray subject) {
217-
List<ValidationException> rval = new ArrayList<>();
218+
private void testItems(final JSONArray subject, List<ValidationException> validationExceptions) {
218219
if (allItemSchema != null) {
219220
validateItemsAgainstSchema(IntStream.range(0, subject.length()),
220221
subject,
221222
allItemSchema,
222-
rval::add);
223+
validationExceptions::add);
223224
} else if (itemSchemas != null) {
224225
if (!additionalItems && subject.length() > itemSchemas.size()) {
225-
rval.add(failure(format("expected: [%d] array items, found: [%d]",
226+
validationExceptions.add(
227+
failure(format("expected: [%d] array items, found: [%d]",
226228
itemSchemas.size(), subject.length()), "items"));
227229
}
228230
int itemValidationUntil = Math.min(subject.length(), itemSchemas.size());
229231
validateItemsAgainstSchema(IntStream.range(0, itemValidationUntil),
230232
subject,
231233
itemSchemas::get,
232-
rval::add);
234+
validationExceptions::add);
233235
if (schemaOfAdditionalItems != null) {
234236
validateItemsAgainstSchema(IntStream.range(itemValidationUntil, subject.length()),
235237
subject,
236238
schemaOfAdditionalItems,
237-
rval::add);
239+
validationExceptions::add);
238240
}
239241
}
240-
return rval;
241242
}
242243

243244
private void validateItemsAgainstSchema(final IntStream indices, final JSONArray items,
@@ -257,58 +258,57 @@ private void validateItemsAgainstSchema(final IntStream indices, final JSONArray
257258
}
258259
}
259260

260-
private Optional<ValidationException> testUniqueness(final JSONArray subject) {
261+
private void testUniqueness(final JSONArray subject, List<ValidationException> validationExceptions) {
261262
if (subject.length() == 0) {
262-
return Optional.empty();
263+
return;
263264
}
264265
Collection<Object> uniqueItems = new ArrayList<Object>(subject.length());
265266
for (int i = 0; i < subject.length(); ++i) {
266267
Object item = subject.get(i);
267268
for (Object contained : uniqueItems) {
268269
if (ObjectComparator.deepEquals(contained, item)) {
269-
return Optional.of(
270+
validationExceptions.add(
270271
failure("array items are not unique", "uniqueItems"));
272+
return;
271273
}
272274
}
273275
uniqueItems.add(item);
274276
}
275-
return Optional.empty();
276277
}
277278

278279
@Override
279280
public void validate(final Object subject) {
280-
List<ValidationException> failures = new ArrayList<>();
281281
if (!(subject instanceof JSONArray)) {
282282
if (requiresArray) {
283283
throw failure(JSONArray.class, subject);
284284
}
285285
} else {
286+
List<ValidationException> validationExceptions = new ArrayList<>();
286287
JSONArray arrSubject = (JSONArray) subject;
287-
testItemCount(arrSubject).ifPresent(failures::add);
288+
testItemCount(arrSubject, validationExceptions);
288289
if (uniqueItems) {
289-
testUniqueness(arrSubject).ifPresent(failures::add);
290+
testUniqueness(arrSubject, validationExceptions);
291+
}
292+
testItems(arrSubject, validationExceptions);
293+
testContains(arrSubject, validationExceptions);
294+
if (null != validationExceptions) {
295+
ValidationException.throwFor(this, validationExceptions);
290296
}
291-
failures.addAll(testItems(arrSubject));
292-
testContains(arrSubject).ifPresent(failures::add);
293297
}
294-
ValidationException.throwFor(this, failures);
295298
}
296299

297-
private Optional<ValidationException> testContains(JSONArray arrSubject) {
300+
private void testContains(JSONArray arrSubject, List<ValidationException> validationExceptions) {
298301
if (containedItemSchema == null) {
299-
return Optional.empty();
302+
return;
300303
}
301-
boolean anyMatch = IntStream.range(0, arrSubject.length())
302-
.mapToObj(arrSubject::get)
303-
.map(item -> ifFails(containedItemSchema, item))
304-
.filter(maybeFailure -> !maybeFailure.isPresent())
305-
.findFirst()
306-
.isPresent();
307-
if (anyMatch) {
308-
return Optional.empty();
309-
} else {
310-
return Optional.of(failure("expected at least one array item to match 'contains' schema", "contains"));
304+
for (int i = 0; i < arrSubject.length(); i++) {
305+
Optional<ValidationException> exception = ifFails(containedItemSchema, arrSubject.get(i));
306+
if (!exception.isPresent()) {
307+
return;
308+
}
311309
}
310+
validationExceptions.add(
311+
failure("expected at least one array item to match 'contains' schema", "contains"));
312312
}
313313

314314
@Override

core/src/main/java/org/everit/json/schema/CombinedSchema.java

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
import java.util.Collection;
88
import java.util.List;
99
import java.util.Objects;
10-
import java.util.stream.Collectors;
1110

1211
import org.everit.json.schema.internal.JSONPrinter;
1312

@@ -183,10 +182,13 @@ private ValidationException getFailure(final Schema schema, final Object subject
183182

184183
@Override
185184
public void validate(final Object subject) {
186-
List<ValidationException> failures = subschemas.stream()
187-
.map(schema -> getFailure(schema, subject))
188-
.filter(Objects::nonNull)
189-
.collect(Collectors.toList());
185+
List<ValidationException> failures = new ArrayList<>();
186+
for (Schema subschema: subschemas) {
187+
ValidationException exception = getFailure(subschema, subject);
188+
if (null != exception) {
189+
failures.add(exception);
190+
}
191+
}
190192
int matchingCount = subschemas.size() - failures.size();
191193
try {
192194
criterion.validate(subschemas.size(), matchingCount);
@@ -202,9 +204,12 @@ public void validate(final Object subject) {
202204

203205
@Override
204206
public boolean definesProperty(final String field) {
205-
List<Schema> matching = subschemas.stream()
206-
.filter(schema -> schema.definesProperty(field))
207-
.collect(Collectors.toList());
207+
List<Schema> matching = new ArrayList<>();
208+
for (Schema subschema: subschemas) {
209+
if (subschema.definesProperty(field)) {
210+
matching.add(subschema);
211+
}
212+
}
208213
try {
209214
criterion.validate(subschemas.size(), matching.size());
210215
} catch (ValidationException e) {

core/src/main/java/org/everit/json/schema/EnumSchema.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -72,12 +72,12 @@ public Set<Object> getPossibleValues() {
7272
@Override
7373
public void validate(final Object subject) {
7474
Object effectiveSubject = toJavaValue(subject);
75-
possibleValues
76-
.stream()
77-
.filter(val -> ObjectComparator.deepEquals(val, effectiveSubject))
78-
.findAny()
79-
.orElseThrow(
80-
() -> failure(format("%s is not a valid enum value", subject), "enum"));
75+
for (Object possibleValue: possibleValues) {
76+
if (ObjectComparator.deepEquals(possibleValue, effectiveSubject)) {
77+
return;
78+
}
79+
}
80+
throw failure(format("%s is not a valid enum value", subject), "enum");
8181
}
8282

8383
@Override

0 commit comments

Comments
 (0)