diff --git a/core/pom.xml b/core/pom.xml index 78239db8d..4661f1eb0 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -21,7 +21,7 @@ 4.0.0 org.everit.json org.everit.json.schema - 0.0.0-develop + 1.10.1-afranzi-SNAPSHOT bundle UTF-8 diff --git a/core/src/main/java/org/everit/json/schema/ArraySchema.java b/core/src/main/java/org/everit/json/schema/ArraySchema.java index 6c808091b..f29fd024f 100644 --- a/core/src/main/java/org/everit/json/schema/ArraySchema.java +++ b/core/src/main/java/org/everit/json/schema/ArraySchema.java @@ -236,8 +236,8 @@ void describePropertiesTo(final JSONPrinter writer) { } } - @Override void accept(Visitor visitor) { - visitor.visitArraySchema(this); + @Override void accept(Visitor visitor, List path) { + visitor.visitArraySchema(this, path); } @Override diff --git a/core/src/main/java/org/everit/json/schema/ArraySchemaValidatingVisitor.java b/core/src/main/java/org/everit/json/schema/ArraySchemaValidatingVisitor.java index bf92e06cc..c5555b774 100644 --- a/core/src/main/java/org/everit/json/schema/ArraySchemaValidatingVisitor.java +++ b/core/src/main/java/org/everit/json/schema/ArraySchemaValidatingVisitor.java @@ -2,7 +2,6 @@ import static java.lang.String.format; import static java.util.Objects.requireNonNull; - import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -29,12 +28,12 @@ public ArraySchemaValidatingVisitor(Object subject, ValidatingVisitor owner) { this.owner = requireNonNull(owner, "owner cannot be null"); } - @Override void visitArraySchema(ArraySchema arraySchema) { + @Override void visitArraySchema(ArraySchema arraySchema, List path) { if (owner.passesTypeCheck(JSONArray.class, arraySchema.requiresArray(), arraySchema.isNullable())) { this.arraySubject = (JSONArray) subject; this.subjectLength = arraySubject.length(); this.arraySchema = arraySchema; - super.visitArraySchema(arraySchema); + super.visitArraySchema(arraySchema, path); } } @@ -67,19 +66,19 @@ public ArraySchemaValidatingVisitor(Object subject, ValidatingVisitor owner) { } } - @Override void visitAllItemSchema(Schema allItemSchema) { + @Override void visitAllItemSchema(Schema allItemSchema, List path) { if (allItemSchema != null) { - validateItemsAgainstSchema(IntStream.range(0, subjectLength), allItemSchema); + validateItemsAgainstSchema(IntStream.range(0, subjectLength), allItemSchema, path); } } - @Override void visitItemSchema(int index, Schema itemSchema) { + @Override void visitItemSchema(int index, Schema itemSchema, List path) { if (index >= subjectLength) { return; } Object subject = arraySubject.get(index); String idx = String.valueOf(index); - ifFails(itemSchema, subject) + ifFails(itemSchema, subject, path) .map(exc -> exc.prepend(idx)) .ifPresent(owner::failure); } @@ -92,37 +91,37 @@ public ArraySchemaValidatingVisitor(Object subject, ValidatingVisitor owner) { } } - @Override void visitSchemaOfAdditionalItems(Schema schemaOfAdditionalItems) { + @Override void visitSchemaOfAdditionalItems(Schema schemaOfAdditionalItems, List path) { if (schemaOfAdditionalItems == null) { return; } int validationFrom = Math.min(subjectLength, arraySchema.getItemSchemas().size()); - validateItemsAgainstSchema(IntStream.range(validationFrom, subjectLength), schemaOfAdditionalItems); + validateItemsAgainstSchema(IntStream.range(validationFrom, subjectLength), schemaOfAdditionalItems, path); } - private void validateItemsAgainstSchema(IntStream indices, Schema schema) { - validateItemsAgainstSchema(indices, i -> schema); + private void validateItemsAgainstSchema(IntStream indices, Schema schema, List path) { + validateItemsAgainstSchema(indices, i -> schema, path); } - private void validateItemsAgainstSchema(IntStream indices, IntFunction schemaForIndex) { + private void validateItemsAgainstSchema(IntStream indices, IntFunction schemaForIndex, List path) { for (int i : indices.toArray()) { String copyOfI = String.valueOf(i); // i is not effectively final so we copy it - ifFails(schemaForIndex.apply(i), arraySubject.get(i)) + ifFails(schemaForIndex.apply(i), arraySubject.get(i), appendPath(path, i)) .map(exc -> exc.prepend(copyOfI)) .ifPresent(owner::failure); } } - private Optional ifFails(Schema schema, Object input) { - return Optional.ofNullable(owner.getFailureOfSchema(schema, input)); + private Optional ifFails(Schema schema, Object input, List path) { + return Optional.ofNullable(owner.getFailureOfSchema(schema, input, path)); } - @Override void visitContainedItemSchema(Schema containedItemSchema) { + @Override void visitContainedItemSchema(Schema containedItemSchema, List path) { if (containedItemSchema == null) { return; } for (int i = 0; i < arraySubject.length(); i++) { - Optional exception = ifFails(containedItemSchema, arraySubject.get(i)); + Optional exception = ifFails(containedItemSchema, arraySubject.get(i), appendPath(path, i)); if (!exception.isPresent()) { return; } diff --git a/core/src/main/java/org/everit/json/schema/BooleanSchema.java b/core/src/main/java/org/everit/json/schema/BooleanSchema.java index 67ed7c10f..9f3d3d079 100644 --- a/core/src/main/java/org/everit/json/schema/BooleanSchema.java +++ b/core/src/main/java/org/everit/json/schema/BooleanSchema.java @@ -1,7 +1,9 @@ package org.everit.json.schema; +import java.util.List; import org.everit.json.schema.internal.JSONPrinter; + /** * Boolean schema validator. */ @@ -48,7 +50,7 @@ public boolean equals(final Object o) { } } - @Override void accept(Visitor visitor) { + @Override void accept(Visitor visitor, List path) { visitor.visitBooleanSchema(this); } diff --git a/core/src/main/java/org/everit/json/schema/CombinedSchema.java b/core/src/main/java/org/everit/json/schema/CombinedSchema.java index b1c41c8b8..e7fbfff0e 100644 --- a/core/src/main/java/org/everit/json/schema/CombinedSchema.java +++ b/core/src/main/java/org/everit/json/schema/CombinedSchema.java @@ -180,8 +180,8 @@ public Collection getSubschemas() { return subschemas; } - @Override void accept(Visitor visitor) { - visitor.visitCombinedSchema(this); + @Override void accept(Visitor visitor, List path) { + visitor.visitCombinedSchema(this, path); } @Override diff --git a/core/src/main/java/org/everit/json/schema/ConditionalSchema.java b/core/src/main/java/org/everit/json/schema/ConditionalSchema.java index 8e472853a..34a23c4c6 100644 --- a/core/src/main/java/org/everit/json/schema/ConditionalSchema.java +++ b/core/src/main/java/org/everit/json/schema/ConditionalSchema.java @@ -1,7 +1,7 @@ package org.everit.json.schema; import java.util.Optional; - +import java.util.List; import org.everit.json.schema.internal.JSONPrinter; /** @@ -66,8 +66,8 @@ public Optional getElseSchema() { } @Override - void accept(Visitor visitor) { - visitor.visitConditionalSchema(this); + void accept(Visitor visitor, List path) { + visitor.visitConditionalSchema(this, path); } @Override void describePropertiesTo(JSONPrinter writer) { diff --git a/core/src/main/java/org/everit/json/schema/ConditionalSchemaValidatingVisitor.java b/core/src/main/java/org/everit/json/schema/ConditionalSchemaValidatingVisitor.java index ff947e494..36a90dbae 100644 --- a/core/src/main/java/org/everit/json/schema/ConditionalSchemaValidatingVisitor.java +++ b/core/src/main/java/org/everit/json/schema/ConditionalSchemaValidatingVisitor.java @@ -10,6 +10,8 @@ import org.everit.json.schema.event.ConditionalSchemaMismatchEvent; import org.everit.json.schema.event.ConditionalSchemaValidationEvent; +import java.util.List; + class ConditionalSchemaValidatingVisitor extends Visitor { private final Object subject; @@ -26,19 +28,19 @@ class ConditionalSchemaValidatingVisitor extends Visitor { } @Override - void visitConditionalSchema(ConditionalSchema conditionalSchema) { + void visitConditionalSchema(ConditionalSchema conditionalSchema, List path) { this.conditionalSchema = conditionalSchema; if (!conditionalSchema.getIfSchema().isPresent() || (!conditionalSchema.getThenSchema().isPresent() && !conditionalSchema.getElseSchema().isPresent())) { return; } - super.visitConditionalSchema(conditionalSchema); + super.visitConditionalSchema(conditionalSchema, path); } @Override - void visitIfSchema(Schema ifSchema) { + void visitIfSchema(Schema ifSchema, List path) { if (conditionalSchema.getIfSchema().isPresent()) { - ifSchemaException = owner.getFailureOfSchema(ifSchema, subject); + ifSchemaException = owner.getFailureOfSchema(ifSchema, subject, path); if (ifSchemaException == null) { owner.validationListener.ifSchemaMatch(createMatchEvent(IF)); } else { @@ -48,9 +50,9 @@ void visitIfSchema(Schema ifSchema) { } @Override - void visitThenSchema(Schema thenSchema) { + void visitThenSchema(Schema thenSchema, List path) { if (ifSchemaException == null) { - ValidationException thenSchemaException = owner.getFailureOfSchema(thenSchema, subject); + ValidationException thenSchemaException = owner.getFailureOfSchema(thenSchema, subject, path); if (thenSchemaException != null) { ValidationException failure = new ValidationException(conditionalSchema, new StringBuilder(new StringBuilder("#")), @@ -68,9 +70,9 @@ void visitThenSchema(Schema thenSchema) { } @Override - void visitElseSchema(Schema elseSchema) { + void visitElseSchema(Schema elseSchema, List path) { if (ifSchemaException != null) { - ValidationException elseSchemaException = owner.getFailureOfSchema(elseSchema, subject); + ValidationException elseSchemaException = owner.getFailureOfSchema(elseSchema, subject, path); if (elseSchemaException != null) { ValidationException failure = new ValidationException(conditionalSchema, new StringBuilder(new StringBuilder("#")), diff --git a/core/src/main/java/org/everit/json/schema/ConstSchema.java b/core/src/main/java/org/everit/json/schema/ConstSchema.java index 8fb87f9e2..d94964568 100644 --- a/core/src/main/java/org/everit/json/schema/ConstSchema.java +++ b/core/src/main/java/org/everit/json/schema/ConstSchema.java @@ -2,6 +2,7 @@ import static org.everit.json.schema.EnumSchema.toJavaValue; +import java.util.List; import org.everit.json.schema.internal.JSONPrinter; public class ConstSchema extends Schema { @@ -40,6 +41,10 @@ protected ConstSchema(ConstSchemaBuilder builder) { visitor.visitConstSchema(this); } + @Override void accept(Visitor visitor, List path) { + visitor.visitConstSchema(this); + } + public Object getPermittedValue() { return permittedValue; } diff --git a/core/src/main/java/org/everit/json/schema/EmptySchema.java b/core/src/main/java/org/everit/json/schema/EmptySchema.java index 8bc8e06ce..5ca8b72d8 100644 --- a/core/src/main/java/org/everit/json/schema/EmptySchema.java +++ b/core/src/main/java/org/everit/json/schema/EmptySchema.java @@ -1,5 +1,7 @@ package org.everit.json.schema; +import java.util.List; + /** * A schema not specifying any restrictions, ie. accepting any values. */ @@ -31,6 +33,10 @@ public EmptySchema(Builder builder) { visitor.visitEmptySchema(); } + @Override void accept(Visitor visitor, List path) { + visitor.visitEmptySchema(); + } + @Override public boolean equals(Object o) { if (this == o) diff --git a/core/src/main/java/org/everit/json/schema/EnumSchema.java b/core/src/main/java/org/everit/json/schema/EnumSchema.java index 7c6392a46..936d3ea93 100644 --- a/core/src/main/java/org/everit/json/schema/EnumSchema.java +++ b/core/src/main/java/org/everit/json/schema/EnumSchema.java @@ -115,6 +115,10 @@ public int hashCode() { visitor.visitEnumSchema(this); } + @Override public void accept(Visitor visitor, List path) { + visitor.visitEnumSchema(this); + } + @Override protected boolean canEqual(Object other) { return other instanceof EnumSchema; diff --git a/core/src/main/java/org/everit/json/schema/FalseSchema.java b/core/src/main/java/org/everit/json/schema/FalseSchema.java index 111132828..ff331c9b3 100644 --- a/core/src/main/java/org/everit/json/schema/FalseSchema.java +++ b/core/src/main/java/org/everit/json/schema/FalseSchema.java @@ -1,7 +1,9 @@ package org.everit.json.schema; +import java.util.List; import org.everit.json.schema.internal.JSONPrinter; + /** * @author erosb */ @@ -31,7 +33,7 @@ public FalseSchema(Builder builder) { } @Override - void accept(Visitor visitor) { + void accept(Visitor visitor, List path) { visitor.visitFalseSchema(this); } diff --git a/core/src/main/java/org/everit/json/schema/NotSchema.java b/core/src/main/java/org/everit/json/schema/NotSchema.java index 0cd4e7c2a..5b0d65763 100644 --- a/core/src/main/java/org/everit/json/schema/NotSchema.java +++ b/core/src/main/java/org/everit/json/schema/NotSchema.java @@ -2,8 +2,9 @@ import static java.util.Objects.requireNonNull; +import java.util.ArrayList; import java.util.Objects; - +import java.util.List; import org.everit.json.schema.internal.JSONPrinter; /** @@ -46,7 +47,11 @@ public Schema getMustNotMatch() { } @Override void accept(Visitor visitor) { - visitor.visitNotSchema(this); + visitor.visitNotSchema(this, new ArrayList<>()); + } + + @Override void accept(Visitor visitor, List path) { + visitor.visitNotSchema(this, path); } @Override diff --git a/core/src/main/java/org/everit/json/schema/NullSchema.java b/core/src/main/java/org/everit/json/schema/NullSchema.java index fadea5854..d0e5e96f6 100644 --- a/core/src/main/java/org/everit/json/schema/NullSchema.java +++ b/core/src/main/java/org/everit/json/schema/NullSchema.java @@ -1,5 +1,6 @@ package org.everit.json.schema; +import java.util.List; import org.everit.json.schema.internal.JSONPrinter; /** @@ -54,6 +55,10 @@ protected boolean canEqual(Object other) { visitor.visitNullSchema(this); } + @Override void accept(Visitor visitor, List path) { + visitor.visitNullSchema(this); + } + @Override void describePropertiesTo(JSONPrinter writer) { writer.key("type"); diff --git a/core/src/main/java/org/everit/json/schema/NumberSchema.java b/core/src/main/java/org/everit/json/schema/NumberSchema.java index 593526b13..62d31426a 100644 --- a/core/src/main/java/org/everit/json/schema/NumberSchema.java +++ b/core/src/main/java/org/everit/json/schema/NumberSchema.java @@ -1,7 +1,7 @@ package org.everit.json.schema; import java.util.Objects; - +import java.util.List; import org.everit.json.schema.internal.JSONPrinter; import org.json.JSONException; @@ -165,7 +165,7 @@ public Number getExclusiveMaximumLimit() { return exclusiveMaximumLimit; } - @Override void accept(Visitor visitor) { + @Override void accept(Visitor visitor, List path) { visitor.visitNumberSchema(this); } diff --git a/core/src/main/java/org/everit/json/schema/ObjectSchema.java b/core/src/main/java/org/everit/json/schema/ObjectSchema.java index ecd11b101..1873c649d 100644 --- a/core/src/main/java/org/everit/json/schema/ObjectSchema.java +++ b/core/src/main/java/org/everit/json/schema/ObjectSchema.java @@ -263,8 +263,8 @@ public Schema getPropertyNameSchema() { return propertyNameSchema; } - @Override void accept(Visitor visitor) { - visitor.visitObjectSchema(this); + @Override void accept(Visitor visitor, List path) { + visitor.visitObjectSchema(this, path); } public boolean permitsAdditionalProperties() { diff --git a/core/src/main/java/org/everit/json/schema/ObjectSchemaValidatingVisitor.java b/core/src/main/java/org/everit/json/schema/ObjectSchemaValidatingVisitor.java index e72409335..6e4a3747f 100644 --- a/core/src/main/java/org/everit/json/schema/ObjectSchemaValidatingVisitor.java +++ b/core/src/main/java/org/everit/json/schema/ObjectSchemaValidatingVisitor.java @@ -7,7 +7,6 @@ import java.util.ArrayList; import java.util.List; import java.util.Set; - import org.everit.json.schema.regexp.Regexp; import org.json.JSONObject; @@ -28,12 +27,12 @@ public ObjectSchemaValidatingVisitor(Object subject, ValidatingVisitor owner) { this.owner = requireNonNull(owner, "owner cannot be null"); } - @Override void visitObjectSchema(ObjectSchema objectSchema) { + @Override void visitObjectSchema(ObjectSchema objectSchema, List path) { if (owner.passesTypeCheck(JSONObject.class, objectSchema.requiresObject(), objectSchema.isNullable())) { objSubject = (JSONObject) subject; objectSize = objSubject.length(); this.schema = objectSchema; - super.visitObjectSchema(objectSchema); + super.visitObjectSchema(objectSchema, path); } } @@ -43,14 +42,14 @@ public ObjectSchemaValidatingVisitor(Object subject, ValidatingVisitor owner) { } } - @Override void visitPropertyNameSchema(Schema propertyNameSchema) { + @Override void visitPropertyNameSchema(Schema propertyNameSchema, List path) { if (propertyNameSchema != null) { String[] names = getNames(objSubject); if (names == null || names.length == 0) { return; } for (String name : names) { - ValidationException failure = owner.getFailureOfSchema(propertyNameSchema, name); + ValidationException failure = owner.getFailureOfSchema(propertyNameSchema, name, path); if (failure != null) { owner.failure(failure.prepend(name)); } @@ -70,7 +69,7 @@ public ObjectSchemaValidatingVisitor(Object subject, ValidatingVisitor owner) { } } - @Override void visitPropertyDependencies(String ifPresent, Set allMustBePresent) { + @Override void visitPropertyDependencies(String ifPresent, Set allMustBePresent, List path) { if (objSubject.has(ifPresent)) { for (String mustBePresent : allMustBePresent) { if (!objSubject.has(mustBePresent)) { @@ -92,12 +91,12 @@ public ObjectSchemaValidatingVisitor(Object subject, ValidatingVisitor owner) { } } - @Override void visitSchemaOfAdditionalProperties(Schema schemaOfAdditionalProperties) { + @Override void visitSchemaOfAdditionalProperties(Schema schemaOfAdditionalProperties, List path) { if (schemaOfAdditionalProperties != null) { List additionalPropNames = getAdditionalProperties(); for (String propName : additionalPropNames) { Object propVal = objSubject.get(propName); - ValidationException failure = owner.getFailureOfSchema(schemaOfAdditionalProperties, propVal); + ValidationException failure = owner.getFailureOfSchema(schemaOfAdditionalProperties, propVal, appendPath(path, propName)); if (failure != null) { owner.failure(failure.prepend(propName, schema)); } @@ -129,14 +128,14 @@ private boolean matchesAnyPattern(String key) { return false; } - @Override void visitPatternPropertySchema(Regexp propertyNamePattern, Schema schema) { + @Override void visitPatternPropertySchema(Regexp propertyNamePattern, Schema schema, List path) { String[] propNames = getNames(objSubject); if (propNames == null || propNames.length == 0) { return; } for (String propName : propNames) { if (!propertyNamePattern.patternMatchingFailure(propName).isPresent()) { - ValidationException failure = owner.getFailureOfSchema(schema, objSubject.get(propName)); + ValidationException failure = owner.getFailureOfSchema(schema, objSubject.get(propName), path); if (failure != null) { owner.failure(failure.prepend(propName)); } @@ -144,18 +143,18 @@ private boolean matchesAnyPattern(String key) { } } - @Override void visitSchemaDependency(String propName, Schema schema) { + @Override void visitSchemaDependency(String propName, Schema schema, List path) { if (objSubject.has(propName)) { - ValidationException failure = owner.getFailureOfSchema(schema, objSubject); + ValidationException failure = owner.getFailureOfSchema(schema, objSubject, path); if (failure != null) { owner.failure(failure); } } } - @Override void visitPropertySchema(String properyName, Schema schema) { + @Override void visitPropertySchema(String properyName, Schema schema, List path) { if (objSubject.has(properyName)) { - ValidationException failure = owner.getFailureOfSchema(schema, objSubject.get(properyName)); + ValidationException failure = owner.getFailureOfSchema(schema, objSubject.get(properyName), path); if (failure != null) { owner.failure(failure.prepend(properyName)); } diff --git a/core/src/main/java/org/everit/json/schema/ReferenceSchema.java b/core/src/main/java/org/everit/json/schema/ReferenceSchema.java index dd2a52e05..983a4029f 100644 --- a/core/src/main/java/org/everit/json/schema/ReferenceSchema.java +++ b/core/src/main/java/org/everit/json/schema/ReferenceSchema.java @@ -3,7 +3,7 @@ import static java.util.Objects.requireNonNull; import java.util.Objects; - +import java.util.List; import org.everit.json.schema.internal.JSONPrinter; /** @@ -107,8 +107,8 @@ protected boolean canEqual(Object other) { return other instanceof ReferenceSchema; } - @Override void accept(Visitor visitor) { - visitor.visitReferenceSchema(this); + @Override void accept(Visitor visitor, List path) { + visitor.visitReferenceSchema(this, path); } @Override void describePropertiesTo(JSONPrinter writer) { diff --git a/core/src/main/java/org/everit/json/schema/Schema.java b/core/src/main/java/org/everit/json/schema/Schema.java index f60210afc..307de5777 100644 --- a/core/src/main/java/org/everit/json/schema/Schema.java +++ b/core/src/main/java/org/everit/json/schema/Schema.java @@ -3,9 +3,7 @@ import static java.util.Collections.unmodifiableMap; import java.io.StringWriter; -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; +import java.util.*; import org.everit.json.schema.internal.JSONPrinter; import org.json.JSONWriter; @@ -313,7 +311,11 @@ void describePropertiesTo(JSONPrinter writer) { } - abstract void accept(Visitor visitor); + void accept(Visitor visitor) { + accept(visitor, new ArrayList<>()); + } + + abstract void accept(Visitor visitor, List path); @Override public String toString() { diff --git a/core/src/main/java/org/everit/json/schema/StringSchema.java b/core/src/main/java/org/everit/json/schema/StringSchema.java index 68ea7099d..efcd7fbfa 100644 --- a/core/src/main/java/org/everit/json/schema/StringSchema.java +++ b/core/src/main/java/org/everit/json/schema/StringSchema.java @@ -4,7 +4,7 @@ import static org.everit.json.schema.FormatValidator.NONE; import java.util.Objects; - +import java.util.List; import org.everit.json.schema.internal.JSONPrinter; import org.everit.json.schema.regexp.JavaUtilRegexpFactory; import org.everit.json.schema.regexp.Regexp; @@ -131,6 +131,10 @@ public java.util.regex.Pattern getPattern() { visitor.visitStringSchema(this); } + @Override void accept(Visitor visitor, List path) { + visitor.visitStringSchema(this); + } + @Override public boolean equals(Object o) { if (this == o) diff --git a/core/src/main/java/org/everit/json/schema/ValidatingVisitor.java b/core/src/main/java/org/everit/json/schema/ValidatingVisitor.java index 5b7b419df..b703f170b 100644 --- a/core/src/main/java/org/everit/json/schema/ValidatingVisitor.java +++ b/core/src/main/java/org/everit/json/schema/ValidatingVisitor.java @@ -44,12 +44,12 @@ private static boolean isNull(Object obj) { private final ReadWriteValidator readWriteValidator; @Override - void visit(Schema schema) { + void visit(Schema schema, List path) { if (schema.isNullable() == Boolean.FALSE && isNull(subject)) { failureReporter.failure("value cannot be null", "nullable"); } readWriteValidator.validate(schema, subject); - super.visit(schema); + super.visit(schema, path); } ValidatingVisitor(Object subject, ValidationFailureReporter failureReporter, ReadWriteValidator readWriteValidator, @@ -69,8 +69,8 @@ void visitNumberSchema(NumberSchema numberSchema) { } @Override - void visitArraySchema(ArraySchema arraySchema) { - arraySchema.accept(new ArraySchemaValidatingVisitor(subject, this)); + void visitArraySchema(ArraySchema arraySchema, List path) { + arraySchema.accept(new ArraySchemaValidatingVisitor(subject, this), path); } @Override @@ -115,32 +115,32 @@ void visitFalseSchema(FalseSchema falseSchema) { } @Override - void visitNotSchema(NotSchema notSchema) { + void visitNotSchema(NotSchema notSchema, List path) { Schema mustNotMatch = notSchema.getMustNotMatch(); - ValidationException failure = getFailureOfSchema(mustNotMatch, subject); + ValidationException failure = getFailureOfSchema(mustNotMatch, subject, path); if (failure == null) { failureReporter.failure("subject must not be valid against schema " + mustNotMatch, "not"); } } @Override - void visitReferenceSchema(ReferenceSchema referenceSchema) { + void visitReferenceSchema(ReferenceSchema referenceSchema, List path) { Schema referredSchema = referenceSchema.getReferredSchema(); if (referredSchema == null) { throw new IllegalStateException("referredSchema must be injected before validation"); } - ValidationException failure = getFailureOfSchema(referredSchema, subject); + ValidationException failure = getFailureOfSchema(referredSchema, subject, path); if (failure != null) { failureReporter.failure(failure); } - if (validationListener != null) { - validationListener.schemaReferenced(new SchemaReferencedEvent(referenceSchema, subject, referredSchema)); + else if (validationListener != null) { + validationListener.schemaReferenced(new SchemaReferencedEvent(referenceSchema, subject, referredSchema, path)); } } @Override - void visitObjectSchema(ObjectSchema objectSchema) { - objectSchema.accept(new ObjectSchemaValidatingVisitor(subject, this)); + void visitObjectSchema(ObjectSchema objectSchema, List path) { + objectSchema.accept(new ObjectSchemaValidatingVisitor(subject, this), path); } @Override @@ -149,16 +149,16 @@ void visitStringSchema(StringSchema stringSchema) { } @Override - void visitCombinedSchema(CombinedSchema combinedSchema) { + void visitCombinedSchema(CombinedSchema combinedSchema, List path) { Collection subschemas = combinedSchema.getSubschemas(); List failures = new ArrayList<>(subschemas.size()); CombinedSchema.ValidationCriterion criterion = combinedSchema.getCriterion(); for (Schema subschema : subschemas) { - ValidationException exception = getFailureOfSchema(subschema, subject); + ValidationException exception = getFailureOfSchema(subschema, subject, path); if (null != exception) { failures.add(exception); } - reportSchemaMatchEvent(combinedSchema, subschema, exception); + reportSchemaMatchEvent(combinedSchema, subschema, exception, path); } int matchingCount = subschemas.size() - failures.size(); try { @@ -174,22 +174,22 @@ void visitCombinedSchema(CombinedSchema combinedSchema) { } @Override - void visitConditionalSchema(ConditionalSchema conditionalSchema) { - conditionalSchema.accept(new ConditionalSchemaValidatingVisitor(subject, this)); + void visitConditionalSchema(ConditionalSchema conditionalSchema, List path) { + conditionalSchema.accept(new ConditionalSchemaValidatingVisitor(subject, this), path); } - private void reportSchemaMatchEvent(CombinedSchema schema, Schema subschema, ValidationException failure) { + private void reportSchemaMatchEvent(CombinedSchema schema, Schema subschema, ValidationException failure, List path) { if (failure == null) { - validationListener.combinedSchemaMatch(new CombinedSchemaMatchEvent(schema, subschema, subject)); + validationListener.combinedSchemaMatch(new CombinedSchemaMatchEvent(schema, subschema, subject, path)); } else { - validationListener.combinedSchemaMismatch(new CombinedSchemaMismatchEvent(schema, subschema, subject, failure)); + validationListener.combinedSchemaMismatch(new CombinedSchemaMismatchEvent(schema, subschema, subject, failure, path)); } } - ValidationException getFailureOfSchema(Schema schema, Object input) { + ValidationException getFailureOfSchema(Schema schema, Object input, List path) { Object origSubject = this.subject; this.subject = input; - ValidationException rval = failureReporter.inContextOfSchema(schema, () -> visit(schema)); + ValidationException rval = failureReporter.inContextOfSchema(schema, () -> visit(schema, path)); this.subject = origSubject; return rval; } diff --git a/core/src/main/java/org/everit/json/schema/Validator.java b/core/src/main/java/org/everit/json/schema/Validator.java index 5bcf8d852..be9020530 100644 --- a/core/src/main/java/org/everit/json/schema/Validator.java +++ b/core/src/main/java/org/everit/json/schema/Validator.java @@ -1,5 +1,8 @@ package org.everit.json.schema; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; import java.util.function.BiFunction; import org.everit.json.schema.event.ValidationListener; @@ -40,6 +43,7 @@ static ValidatorBuilder builder() { } void performValidation(Schema schema, Object input); + } class DefaultValidator implements Validator { @@ -63,10 +67,14 @@ class DefaultValidator implements Validator { } @Override public void performValidation(Schema schema, Object input) { + performValidation(schema, input, Collections.singletonList("#")); + } + + public void performValidation(Schema schema, Object input, List path) { ValidationFailureReporter failureReporter = createFailureReporter(schema); ReadWriteValidator readWriteValidator = ReadWriteValidator.createForContext(readWriteContext, failureReporter); ValidatingVisitor visitor = new ValidatingVisitor(input, failureReporter, readWriteValidator, validationListener); - visitor.visit(schema); + visitor.visit(schema, path); visitor.failIfErrorFound(); } diff --git a/core/src/main/java/org/everit/json/schema/Visitor.java b/core/src/main/java/org/everit/json/schema/Visitor.java index 18d5d12a9..bb8ffef57 100644 --- a/core/src/main/java/org/everit/json/schema/Visitor.java +++ b/core/src/main/java/org/everit/json/schema/Visitor.java @@ -1,13 +1,21 @@ package org.everit.json.schema; +import java.util.*; import java.util.List; -import java.util.Map; -import java.util.Set; - import org.everit.json.schema.regexp.Regexp; abstract class Visitor { + List appendPath(List path, int index) { + return appendPath(path, String.format("[%d]", index)); + } + + List appendPath(List path, String field) { + List newList = new ArrayList<>(path); + newList.add(field); + return newList; + } + void visitNumberSchema(NumberSchema numberSchema) { visitExclusiveMinimum(numberSchema.isExclusiveMinimum()); visitMinimum(numberSchema.getMinimum()); @@ -39,24 +47,24 @@ void visitExclusiveMaximumLimit(Number exclusiveMaximumLimit) { void visitMultipleOf(Number multipleOf) { } - void visit(Schema schema) { - schema.accept(this); + void visit(Schema schema, List path) { + schema.accept(this, path); } - void visitArraySchema(ArraySchema arraySchema) { + void visitArraySchema(ArraySchema arraySchema, List path) { visitMinItems(arraySchema.getMinItems()); visitMaxItems(arraySchema.getMaxItems()); visitUniqueItems(arraySchema.needsUniqueItems()); - visitAllItemSchema(arraySchema.getAllItemSchema()); + visitAllItemSchema(arraySchema.getAllItemSchema(), path); visitAdditionalItems(arraySchema.permitsAdditionalItems()); List itemSchemas = arraySchema.getItemSchemas(); if (itemSchemas != null) { for (int i = 0; i < itemSchemas.size(); ++i) { - visitItemSchema(i, itemSchemas.get(i)); + visitItemSchema(i, itemSchemas.get(i), appendPath(path, i)); } } - visitSchemaOfAdditionalItems(arraySchema.getSchemaOfAdditionalItems()); - visitContainedItemSchema(arraySchema.getContainedItemSchema()); + visitSchemaOfAdditionalItems(arraySchema.getSchemaOfAdditionalItems(), path); + visitContainedItemSchema(arraySchema.getContainedItemSchema(), path); } void visitMinItems(Integer minItems) { @@ -68,19 +76,19 @@ void visitMaxItems(Integer maxItems) { void visitUniqueItems(boolean uniqueItems) { } - void visitAllItemSchema(Schema allItemSchema) { + void visitAllItemSchema(Schema allItemSchema, List path) { } void visitAdditionalItems(boolean additionalItems) { } - void visitItemSchema(int index, Schema itemSchema) { + void visitItemSchema(int index, Schema itemSchema, List path) { } - void visitSchemaOfAdditionalItems(Schema schemaOfAdditionalItems) { + void visitSchemaOfAdditionalItems(Schema schemaOfAdditionalItems, List path) { } - void visitContainedItemSchema(Schema containedItemSchema) { + void visitContainedItemSchema(Schema containedItemSchema, List path) { } void visitBooleanSchema(BooleanSchema schema) { @@ -101,54 +109,54 @@ void visitEnumSchema(EnumSchema enumSchema) { void visitFalseSchema(FalseSchema falseSchema) { } - void visitNotSchema(NotSchema notSchema) { + void visitNotSchema(NotSchema notSchema, List path) { } - void visitReferenceSchema(ReferenceSchema referenceSchema) { + void visitReferenceSchema(ReferenceSchema referenceSchema, List path) { } - void visitObjectSchema(ObjectSchema objectSchema) { + void visitObjectSchema(ObjectSchema objectSchema, List path) { for (String requiredPropName : objectSchema.getRequiredProperties()) { visitRequiredPropertyName(requiredPropName); } - visitPropertyNameSchema(objectSchema.getPropertyNameSchema()); + visitPropertyNameSchema(objectSchema.getPropertyNameSchema(), path); visitMinProperties(objectSchema.getMinProperties()); visitMaxProperties(objectSchema.getMaxProperties()); for (Map.Entry> entry : objectSchema.getPropertyDependencies().entrySet()) { - visitPropertyDependencies(entry.getKey(), entry.getValue()); + visitPropertyDependencies(entry.getKey(), entry.getValue(), appendPath(path, entry.getKey())); } visitAdditionalProperties(objectSchema.permitsAdditionalProperties()); - visitSchemaOfAdditionalProperties(objectSchema.getSchemaOfAdditionalProperties()); + visitSchemaOfAdditionalProperties(objectSchema.getSchemaOfAdditionalProperties(), path); for (Map.Entry entry : objectSchema.getRegexpPatternProperties().entrySet()) { - visitPatternPropertySchema(entry.getKey(), entry.getValue()); + visitPatternPropertySchema(entry.getKey(), entry.getValue(), path); } for (Map.Entry schemaDep : objectSchema.getSchemaDependencies().entrySet()) { - visitSchemaDependency(schemaDep.getKey(), schemaDep.getValue()); + visitSchemaDependency(schemaDep.getKey(), schemaDep.getValue(), appendPath(path, schemaDep.getKey())); } Map propertySchemas = objectSchema.getPropertySchemas(); if (propertySchemas != null) { for (Map.Entry entry : propertySchemas.entrySet()) { - visitPropertySchema(entry.getKey(), entry.getValue()); + visitPropertySchema(entry.getKey(), entry.getValue(), appendPath(path, entry.getKey())); } } } - void visitPropertySchema(String properyName, Schema schema) { + void visitPropertySchema(String properyName, Schema schema, List path) { } - void visitSchemaDependency(String propKey, Schema schema) { + void visitSchemaDependency(String propKey, Schema schema, List path) { } - void visitPatternPropertySchema(Regexp propertyNamePattern, Schema schema) { + void visitPatternPropertySchema(Regexp propertyNamePattern, Schema schema, List path) { } - void visitSchemaOfAdditionalProperties(Schema schemaOfAdditionalProperties) { + void visitSchemaOfAdditionalProperties(Schema schemaOfAdditionalProperties, List path) { } void visitAdditionalProperties(boolean additionalProperties) { } - void visitPropertyDependencies(String ifPresent, Set allMustBePresent) { + void visitPropertyDependencies(String ifPresent, Set allMustBePresent, List path) { } void visitMaxProperties(Integer maxProperties) { @@ -157,7 +165,7 @@ void visitMaxProperties(Integer maxProperties) { void visitMinProperties(Integer minProperties) { } - void visitPropertyNameSchema(Schema propertyNameSchema) { + void visitPropertyNameSchema(Schema propertyNameSchema, List path) { } void visitRequiredPropertyName(String requiredPropName) { @@ -182,21 +190,21 @@ void visitMaxLength(Integer maxLength) { void visitMinLength(Integer minLength) { } - void visitCombinedSchema(CombinedSchema combinedSchema) { + void visitCombinedSchema(CombinedSchema combinedSchema, List path) { } - void visitConditionalSchema(ConditionalSchema conditionalSchema) { - conditionalSchema.getIfSchema().ifPresent(this::visitIfSchema); - conditionalSchema.getThenSchema().ifPresent(this::visitThenSchema); - conditionalSchema.getElseSchema().ifPresent(this::visitElseSchema); + void visitConditionalSchema(ConditionalSchema conditionalSchema, List path) { + conditionalSchema.getIfSchema().ifPresent(schema -> visitIfSchema(schema, path)); + conditionalSchema.getThenSchema().ifPresent(schema -> visitThenSchema(schema, path)); + conditionalSchema.getElseSchema().ifPresent(schema -> visitElseSchema(schema, path)); } - void visitIfSchema(Schema ifSchema) { + void visitIfSchema(Schema ifSchema, List path) { } - void visitThenSchema(Schema thenSchema) { + void visitThenSchema(Schema thenSchema, List path) { } - void visitElseSchema(Schema elseSchema) { + void visitElseSchema(Schema elseSchema, List path) { } } diff --git a/core/src/main/java/org/everit/json/schema/event/CombinedSchemaMatchEvent.java b/core/src/main/java/org/everit/json/schema/event/CombinedSchemaMatchEvent.java index efe5cc3b8..f561981ed 100644 --- a/core/src/main/java/org/everit/json/schema/event/CombinedSchemaMatchEvent.java +++ b/core/src/main/java/org/everit/json/schema/event/CombinedSchemaMatchEvent.java @@ -1,5 +1,6 @@ package org.everit.json.schema.event; +import java.util.List; import org.everit.json.schema.CombinedSchema; import org.everit.json.schema.Schema; import org.json.JSONObject; @@ -7,7 +8,12 @@ public class CombinedSchemaMatchEvent extends CombinedSchemaValidationEvent { public CombinedSchemaMatchEvent(CombinedSchema schema, Schema subSchema, - Object instance) { + Object instance, List path) { + super(schema, subSchema, instance, path); + } + + public CombinedSchemaMatchEvent(CombinedSchema schema, Schema subSchema, + Object instance) { super(schema, subSchema, instance); } diff --git a/core/src/main/java/org/everit/json/schema/event/CombinedSchemaMismatchEvent.java b/core/src/main/java/org/everit/json/schema/event/CombinedSchemaMismatchEvent.java index 5729b33ff..de455aa4f 100644 --- a/core/src/main/java/org/everit/json/schema/event/CombinedSchemaMismatchEvent.java +++ b/core/src/main/java/org/everit/json/schema/event/CombinedSchemaMismatchEvent.java @@ -1,7 +1,7 @@ package org.everit.json.schema.event; import java.util.Objects; - +import java.util.List; import org.everit.json.schema.CombinedSchema; import org.everit.json.schema.Schema; import org.everit.json.schema.ValidationException; @@ -12,6 +12,11 @@ public class CombinedSchemaMismatchEvent extends CombinedSchemaValidationEvent i private final ValidationException failure; + public CombinedSchemaMismatchEvent(CombinedSchema schema, Schema subSchema, Object instance, ValidationException failure, List path) { + super(schema, subSchema, instance, path); + this.failure = failure; + } + public CombinedSchemaMismatchEvent(CombinedSchema schema, Schema subSchema, Object instance, ValidationException failure) { super(schema, subSchema, instance); this.failure = failure; diff --git a/core/src/main/java/org/everit/json/schema/event/CombinedSchemaValidationEvent.java b/core/src/main/java/org/everit/json/schema/event/CombinedSchemaValidationEvent.java index 202785ea7..751856841 100644 --- a/core/src/main/java/org/everit/json/schema/event/CombinedSchemaValidationEvent.java +++ b/core/src/main/java/org/everit/json/schema/event/CombinedSchemaValidationEvent.java @@ -1,6 +1,7 @@ package org.everit.json.schema.event; import java.util.Objects; +import java.util.List; import org.everit.json.schema.CombinedSchema; import org.everit.json.schema.Schema; @@ -9,6 +10,11 @@ public abstract class CombinedSchemaValidationEvent extends ValidationEvent path) { + super(schema, instance, path); + this.subSchema = subSchema; + } + public CombinedSchemaValidationEvent(CombinedSchema schema, Schema subSchema, Object instance) { super(schema, instance); this.subSchema = subSchema; diff --git a/core/src/main/java/org/everit/json/schema/event/SchemaReferencedEvent.java b/core/src/main/java/org/everit/json/schema/event/SchemaReferencedEvent.java index d8ab07c1c..eeb7aa5f7 100644 --- a/core/src/main/java/org/everit/json/schema/event/SchemaReferencedEvent.java +++ b/core/src/main/java/org/everit/json/schema/event/SchemaReferencedEvent.java @@ -1,7 +1,7 @@ package org.everit.json.schema.event; import java.util.Objects; - +import java.util.List; import org.everit.json.schema.ReferenceSchema; import org.everit.json.schema.Schema; import org.json.JSONObject; @@ -10,11 +10,17 @@ public class SchemaReferencedEvent extends ValidationEvent { private final Schema referredSchema; + public SchemaReferencedEvent(ReferenceSchema schema, Object instance, Schema referredSchema, List path) { + super(schema, instance, path); + this.referredSchema = referredSchema; + } + public SchemaReferencedEvent(ReferenceSchema schema, Object instance, Schema referredSchema) { super(schema, instance); this.referredSchema = referredSchema; } + @Override void describeTo(JSONObject obj) { obj.put("type", "ref"); diff --git a/core/src/main/java/org/everit/json/schema/event/ValidationEvent.java b/core/src/main/java/org/everit/json/schema/event/ValidationEvent.java index 573e42c75..b04328f2d 100644 --- a/core/src/main/java/org/everit/json/schema/event/ValidationEvent.java +++ b/core/src/main/java/org/everit/json/schema/event/ValidationEvent.java @@ -1,7 +1,8 @@ package org.everit.json.schema.event; +import java.util.ArrayList; import java.util.Objects; - +import java.util.List; import org.everit.json.schema.Schema; import org.json.JSONObject; @@ -11,11 +12,20 @@ public abstract class ValidationEvent { protected final Object instance; + protected final List path; + protected ValidationEvent(S schema, Object instance) { + this(schema, instance, new ArrayList<>()); + } + + protected ValidationEvent(S schema, Object instance, List path) { this.schema = schema; this.instance = instance; + this.path = path; } + public List getPath() { return path; } + public S getSchema() { return schema; } diff --git a/core/src/test/java/org/everit/json/schema/ValidatingVisitorTest.java b/core/src/test/java/org/everit/json/schema/ValidatingVisitorTest.java index 30581cd56..635cb7328 100644 --- a/core/src/test/java/org/everit/json/schema/ValidatingVisitorTest.java +++ b/core/src/test/java/org/everit/json/schema/ValidatingVisitorTest.java @@ -9,7 +9,11 @@ import java.math.BigDecimal; import java.math.BigInteger; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; + +import java.util.List; import org.everit.json.schema.event.CombinedSchemaMatchEvent; import org.everit.json.schema.event.CombinedSchemaMismatchEvent; import org.everit.json.schema.event.ValidationListener; @@ -131,12 +135,12 @@ public void triggersCombinedSchemaEvents() { ValidationFailureReporter reporter = new CollectingFailureReporter(combinedSchema); JSONObject instance = new JSONObject(); - new ValidatingVisitor(instance, reporter, ReadWriteValidator.NONE, listener).visit(combinedSchema); + new ValidatingVisitor(instance, reporter, ReadWriteValidator.NONE, listener).visit(combinedSchema, Collections.singletonList("#")); ValidationException exc = new ValidationException(stringSchema, String.class, instance); - verify(listener).combinedSchemaMismatch(new CombinedSchemaMismatchEvent(combinedSchema, stringSchema, instance, exc)); - verify(listener).combinedSchemaMatch(new CombinedSchemaMatchEvent(combinedSchema, emptySchema, instance)); - verify(listener).combinedSchemaMatch(new CombinedSchemaMatchEvent(combinedSchema, objectSchema, instance)); + verify(listener).combinedSchemaMismatch(new CombinedSchemaMismatchEvent(combinedSchema, stringSchema, instance, exc, new ArrayList<>())); + verify(listener).combinedSchemaMatch(new CombinedSchemaMatchEvent(combinedSchema, emptySchema, instance, new ArrayList<>())); + verify(listener).combinedSchemaMatch(new CombinedSchemaMatchEvent(combinedSchema, objectSchema, instance, new ArrayList<>())); } } diff --git a/core/src/test/java/org/everit/json/schema/event/CombinedSchemaMatchEventTest.java b/core/src/test/java/org/everit/json/schema/event/CombinedSchemaMatchEventTest.java index 8d5d980b1..c3be9ff48 100644 --- a/core/src/test/java/org/everit/json/schema/event/CombinedSchemaMatchEventTest.java +++ b/core/src/test/java/org/everit/json/schema/event/CombinedSchemaMatchEventTest.java @@ -11,6 +11,7 @@ public class CombinedSchemaMatchEventTest { public void equalsVerifier() { EqualsVerifier.forClass(CombinedSchemaMatchEvent.class) .withNonnullFields("subSchema", "schema", "instance") + .withIgnoredFields("path") .withRedefinedSuperclass() .suppress(Warning.STRICT_INHERITANCE) .verify(); diff --git a/core/src/test/java/org/everit/json/schema/event/CombinedSchemaMismatchEventTest.java b/core/src/test/java/org/everit/json/schema/event/CombinedSchemaMismatchEventTest.java index 480428eec..f8bfdfe22 100644 --- a/core/src/test/java/org/everit/json/schema/event/CombinedSchemaMismatchEventTest.java +++ b/core/src/test/java/org/everit/json/schema/event/CombinedSchemaMismatchEventTest.java @@ -16,6 +16,7 @@ public void equalsVerifier() { ValidationException exc2 = new ValidationException(FalseSchema.INSTANCE, "message", "keyword", "#/loca/tion"); EqualsVerifier.forClass(CombinedSchemaMismatchEvent.class) .withNonnullFields("subSchema", "schema", "instance", "failure") + .withIgnoredFields("path") .withRedefinedSuperclass() .withPrefabValues(ValidationException.class, exc1, exc2) .suppress(Warning.STRICT_INHERITANCE) diff --git a/core/src/test/java/org/everit/json/schema/event/ConditionalSchemaMatchEventTest.java b/core/src/test/java/org/everit/json/schema/event/ConditionalSchemaMatchEventTest.java index e5c1e0fd3..952c999c2 100644 --- a/core/src/test/java/org/everit/json/schema/event/ConditionalSchemaMatchEventTest.java +++ b/core/src/test/java/org/everit/json/schema/event/ConditionalSchemaMatchEventTest.java @@ -11,6 +11,7 @@ public class ConditionalSchemaMatchEventTest { public void equalsVerifier() { EqualsVerifier.forClass(ConditionalSchemaMatchEvent.class) .withNonnullFields("keyword", "schema", "instance") + .withIgnoredFields("path") .withRedefinedSuperclass() .suppress(Warning.STRICT_INHERITANCE) .verify(); diff --git a/core/src/test/java/org/everit/json/schema/event/ConditionalSchemaMismatchEventTest.java b/core/src/test/java/org/everit/json/schema/event/ConditionalSchemaMismatchEventTest.java index c6f73babe..6e0824ec1 100644 --- a/core/src/test/java/org/everit/json/schema/event/ConditionalSchemaMismatchEventTest.java +++ b/core/src/test/java/org/everit/json/schema/event/ConditionalSchemaMismatchEventTest.java @@ -16,6 +16,7 @@ public void equalsVerifier() { ValidationException exc2 = new ValidationException(FalseSchema.INSTANCE, "message", "keyword", "#/loca/tion"); EqualsVerifier.forClass(ConditionalSchemaMismatchEvent.class) .withNonnullFields("keyword", "schema", "instance", "failure") + .withIgnoredFields("path") .withRedefinedSuperclass() .withPrefabValues(ValidationException.class, exc1, exc2) .suppress(Warning.STRICT_INHERITANCE) diff --git a/core/src/test/java/org/everit/json/schema/event/EventToStringTest.java b/core/src/test/java/org/everit/json/schema/event/EventToStringTest.java index a5a3994d9..227da9290 100644 --- a/core/src/test/java/org/everit/json/schema/event/EventToStringTest.java +++ b/core/src/test/java/org/everit/json/schema/event/EventToStringTest.java @@ -5,6 +5,8 @@ import static org.everit.json.schema.event.ConditionalSchemaValidationEvent.Keyword.IF; import static org.junit.Assert.assertThat; +import java.util.ArrayList; +import java.util.List; import org.everit.json.schema.CombinedSchema; import org.everit.json.schema.ConditionalSchema; import org.everit.json.schema.FalseSchema; @@ -17,6 +19,8 @@ import org.json.JSONObject; import org.junit.Test; + + public class EventToStringTest { private static final ResourceLoader LOADER = new ResourceLoader("/org/everit/jsonvalidator/event/"); @@ -45,7 +49,7 @@ public class EventToStringTest { INSTANCE.put("hello", new JSONArray("[\"world\"]")); } - private static final SchemaReferencedEvent REF_EVENT = new SchemaReferencedEvent(REF_SCHEMA, INSTANCE, REFERRED_SCHEMA); + private static final SchemaReferencedEvent REF_EVENT = new SchemaReferencedEvent(REF_SCHEMA, INSTANCE, REFERRED_SCHEMA, new ArrayList<>()); @Test public void schemaReferenceEventToStringTest() { @@ -96,7 +100,7 @@ public void conditionalSchemaMismatchEvent() { @Test public void combinedSchemaMatchEventToString() { JSONObject expected = LOADER.readObj("combined-schema-match.json"); - CombinedSchemaMatchEvent subject = new CombinedSchemaMatchEvent(COMBINED_SCHEMA, TrueSchema.INSTANCE, INSTANCE); + CombinedSchemaMatchEvent subject = new CombinedSchemaMatchEvent(COMBINED_SCHEMA, TrueSchema.INSTANCE, INSTANCE, new ArrayList<>()); JSONObject actual = new JSONObject(subject.toString()); @@ -107,7 +111,7 @@ public void combinedSchemaMatchEventToString() { public void combinedSchemaMismatchEventToString() { JSONObject expected = LOADER.readObj("combined-schema-mismatch.json"); ValidationException exc = new ValidationException(COMBINED_SCHEMA, "message", "anyOf", "#/schema/location"); - CombinedSchemaMismatchEvent subject = new CombinedSchemaMismatchEvent(COMBINED_SCHEMA, FalseSchema.INSTANCE, INSTANCE, exc); + CombinedSchemaMismatchEvent subject = new CombinedSchemaMismatchEvent(COMBINED_SCHEMA, FalseSchema.INSTANCE, INSTANCE, exc, new ArrayList()); JSONObject actual = new JSONObject(subject.toJSON(true, true).toString()); diff --git a/core/src/test/java/org/everit/json/schema/event/SchemaReferencedEventTest.java b/core/src/test/java/org/everit/json/schema/event/SchemaReferencedEventTest.java index 96afc2851..b486c5820 100644 --- a/core/src/test/java/org/everit/json/schema/event/SchemaReferencedEventTest.java +++ b/core/src/test/java/org/everit/json/schema/event/SchemaReferencedEventTest.java @@ -11,6 +11,7 @@ public class SchemaReferencedEventTest { public void equalsVerifier() { EqualsVerifier.forClass(SchemaReferencedEvent.class) .withNonnullFields("referredSchema", "schema", "instance") + .withIgnoredFields("path") .withRedefinedSuperclass() .suppress(Warning.STRICT_INHERITANCE) .verify(); diff --git a/pom.xml b/pom.xml index f4dace638..e04d96e73 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ org.everit.json org.everit.json.schema.parent - 0.0.0-develop + 1.10.1-afranzi-SNAPSHOT pom diff --git a/tests/android/pom.xml b/tests/android/pom.xml index cccb042dd..678bdee60 100644 --- a/tests/android/pom.xml +++ b/tests/android/pom.xml @@ -7,7 +7,7 @@ org.everit.json org.everit.json.schema.tests.parent - 0.0.0-develop + 1.10.1-afranzi-SNAPSHOT org.everit.json.schema.tests.android diff --git a/tests/pom.xml b/tests/pom.xml index 637e3c14b..2200cd1a6 100644 --- a/tests/pom.xml +++ b/tests/pom.xml @@ -5,7 +5,7 @@ org.everit.json org.everit.json.schema.parent - 0.0.0-develop + 1.10.1-afranzi-SNAPSHOT org.everit.json.schema.tests.parent diff --git a/tests/vanilla/pom.xml b/tests/vanilla/pom.xml index 750abb107..20851d62b 100644 --- a/tests/vanilla/pom.xml +++ b/tests/vanilla/pom.xml @@ -7,7 +7,7 @@ org.everit.json org.everit.json.schema.tests.parent - 0.0.0-develop + 1.10.1-afranzi-SNAPSHOT org.everit.json.schema.tests.vanilla