Skip to content

Commit 3c21bb9

Browse files
committed
Allow boolean subschema during loading of conditional schema
1 parent f464e2a commit 3c21bb9

File tree

3 files changed

+17
-11
lines changed

3 files changed

+17
-11
lines changed

core/src/main/java/org/everit/json/schema/loader/SchemaLoader.java

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -368,15 +368,9 @@ private NumberSchema.Builder buildNumberSchema() {
368368

369369
private ConditionalSchema.Builder buildConditionalSchema() {
370370
ConditionalSchema.Builder builder = ConditionalSchema.builder();
371-
if (ls.schemaJson().containsKey("if")) {
372-
builder.ifSchema(loadChild(ls.schemaJson().require("if").requireObject()).build());
373-
}
374-
if (ls.schemaJson().containsKey("then")) {
375-
builder.thenSchema(loadChild(ls.schemaJson().require("then").requireObject()).build());
376-
}
377-
if (ls.schemaJson().containsKey("else")) {
378-
builder.elseSchema(loadChild(ls.schemaJson().require("else").requireObject()).build());
379-
}
371+
ls.schemaJson().maybe("if").map(this::loadChild).map(Schema.Builder::build).ifPresent(builder::ifSchema);
372+
ls.schemaJson().maybe("then").map(this::loadChild).map(Schema.Builder::build).ifPresent(builder::thenSchema);
373+
ls.schemaJson().maybe("else").map(this::loadChild).map(Schema.Builder::build).ifPresent(builder::elseSchema);
380374
return builder;
381375
}
382376

@@ -390,8 +384,6 @@ private Schema.Builder loadSchemaObject(JsonObject o) {
390384
builder = buildEnumSchema();
391385
} else if (ls.schemaJson().containsKey("const") && (config.specVersion != DRAFT_4)) {
392386
builder = buildConstSchema();
393-
} else if (config.specVersion.compareTo(DRAFT_6) > 0 && schemaHasAnyOf(CONDITIONAL_SCHEMA_KEYWORDS)) {
394-
builder = buildConditionalSchema();
395387
} else {
396388
builder = new CombinedSchemaLoader(ls, this).load()
397389
.orElseGet(() -> {
@@ -492,6 +484,8 @@ Schema.Builder<?> sniffSchemaByProps() {
492484
return buildNumberSchema().requiresNumber(false);
493485
} else if (schemaHasAnyOf(STRING_SCHEMA_PROPS)) {
494486
return new StringSchemaLoader(ls, config.formatValidators).load().requiresString(false);
487+
} else if (config.specVersion.compareTo(DRAFT_6) > 0 && schemaHasAnyOf(CONDITIONAL_SCHEMA_KEYWORDS)) {
488+
return buildConditionalSchema();
495489
}
496490
return null;
497491
}

core/src/test/java/org/everit/json/schema/loader/SchemaLoaderTest.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,15 @@ public void conditionalSchemaLoadingV6() {
186186
assertFalse(actual instanceof ConditionalSchema);
187187
}
188188

189+
@Test
190+
public void conditionalSchemaIfSubSchemaTrue() {
191+
ConditionalSchema actual = (ConditionalSchema) loadAsV7(get("conditionalSchemaIfSubSchemaTrue"));
192+
Assert.assertTrue(actual.getIfSchema().isPresent());
193+
Assert.assertFalse(actual.getThenSchema().isPresent());
194+
Assert.assertFalse(actual.getElseSchema().isPresent());
195+
assertTrue(actual.getIfSchema().get() instanceof TrueSchema);
196+
}
197+
189198
@Test(expected = SchemaException.class)
190199
public void invalidExclusiveMinimum() {
191200
SchemaLoader.load(get("invalidExclusiveMinimum"));

core/src/test/resources/org/everit/jsonvalidator/testschemas.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,9 @@
109109
"multipleOf": 2
110110
}
111111
},
112+
"conditionalSchemaIfSubSchemaTrue": {
113+
"if": true
114+
},
112115
"objectWithSchemaRectangleDep": {
113116
"type": "object",
114117
"dependencies": {

0 commit comments

Comments
 (0)