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 9379f128..1452dc33 100644 --- a/core/src/main/java/org/everit/json/schema/CombinedSchema.java +++ b/core/src/main/java/org/everit/json/schema/CombinedSchema.java @@ -154,6 +154,8 @@ public static Builder oneOf(Collection schemas) { private final boolean synthetic; + private final Collection orderedSubschemas; + private final Collection subschemas; private final ValidationCriterion criterion; @@ -168,6 +170,7 @@ public CombinedSchema(Builder builder) { super(builder); this.synthetic = builder.synthetic; this.criterion = requireNonNull(builder.criterion, "criterion cannot be null"); + this.orderedSubschemas = builder.subschemas; this.subschemas = sortByCombinedFirst(requireNonNull(builder.subschemas, "subschemas cannot be null")); } @@ -191,6 +194,14 @@ public ValidationCriterion getCriterion() { return criterion; } + /** + * Returns the subschemas in the order they were added. + * @return the subschemas in insertion order + */ + public Collection getOrderedSubschemas() { + return orderedSubschemas; + } + public Collection getSubschemas() { return subschemas; } diff --git a/core/src/test/java/org/everit/json/schema/CombinedSchemaTest.java b/core/src/test/java/org/everit/json/schema/CombinedSchemaTest.java index 8279af55..e19d4498 100644 --- a/core/src/test/java/org/everit/json/schema/CombinedSchemaTest.java +++ b/core/src/test/java/org/everit/json/schema/CombinedSchemaTest.java @@ -79,6 +79,18 @@ public void subschemasSort() { assertEquals(booleanSchema2, subschemas[5]); assertEquals(emptySchema2, subschemas[6]); assertEquals(nullSchema2, subschemas[7]); + + subschemas = subject.getOrderedSubschemas().toArray(); + + assertEquals(8, subschemas.length); + assertEquals(nullSchema1, subschemas[0]); + assertEquals(emptySchema1, subschemas[1]); + assertEquals(booleanSchema1, subschemas[2]); + assertEquals(subcombined1, subschemas[3]); + assertEquals(booleanSchema2, subschemas[4]); + assertEquals(emptySchema2, subschemas[5]); + assertEquals(nullSchema2, subschemas[6]); + assertEquals(subcombined2, subschemas[7]); } @Test @@ -172,7 +184,7 @@ public void reportCauses() { public void equalsVerifier() { EqualsVerifier.forClass(CombinedSchema.class) .withRedefinedSuperclass() - .withIgnoredFields("schemaLocation", "location") + .withIgnoredFields("schemaLocation", "location", "orderedSubschemas") .suppress(Warning.STRICT_INHERITANCE) .verify(); }