Skip to content

Commit 9eb0229

Browse files
committed
changed loading process so that if nullableSupport is on, then every schema is non-nullable by default
1 parent 852f61b commit 9eb0229

File tree

4 files changed

+23
-8
lines changed

4 files changed

+23
-8
lines changed

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -164,15 +164,16 @@ public boolean equals(Object o) {
164164
Objects.equals(title, schema.title) &&
165165
Objects.equals(defaultValue, schema.defaultValue) &&
166166
Objects.equals(description, schema.description) &&
167-
Objects.equals(id, schema.id);
167+
Objects.equals(id, schema.id) &&
168+
Objects.equals(nullable, schema.nullable);
168169
} else {
169170
return false;
170171
}
171172
}
172173

173174
@Override
174175
public int hashCode() {
175-
return Objects.hash(title, description, id, defaultValue);
176+
return Objects.hash(title, description, id, defaultValue, nullable);
176177
}
177178

178179
public String getTitle() {

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

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -369,17 +369,24 @@ private Schema.Builder loadSchemaObject(JsonObject o) {
369369
}
370370
});
371371
}
372+
loadCommonSchemaProperties(builder);
373+
return builder;
374+
}
375+
376+
private void loadCommonSchemaProperties(Schema.Builder builder) {
372377
ls.schemaJson().maybe(config.specVersion.idKeyword()).map(JsonValue::requireString).ifPresent(builder::id);
373378
ls.schemaJson().maybe("title").map(JsonValue::requireString).ifPresent(builder::title);
374379
ls.schemaJson().maybe("description").map(JsonValue::requireString).ifPresent(builder::description);
375380
if (config.nullableSupport) {
376-
ls.schemaJson().maybe("nullable").map(JsonValue::requireBoolean).ifPresent(builder::nullable);
381+
builder.nullable(ls.schemaJson()
382+
.maybe("nullable")
383+
.map(JsonValue::requireBoolean)
384+
.orElse(Boolean.FALSE));
377385
}
378386
if (config.useDefaults) {
379387
ls.schemaJson().maybe("default").map(JsonValue::deepToOrgJson).ifPresent(builder::defaultValue);
380388
}
381389
builder.schemaLocation(new JSONPointer(ls.pointerToCurrentObj).toURIFragment());
382-
return builder;
383390
}
384391

385392
/**

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

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -589,19 +589,23 @@ public void nullableBooleansAre_Loaded_withNullableSupport() {
589589
.build();
590590
ObjectSchema actual = (ObjectSchema) loader.load().build();
591591
Schema nullableSchema = actual.getPropertySchemas().get("isNullable");
592-
Schema nonNulableSchema = actual.getPropertySchemas().get("nonNullable");
592+
Schema nonNullableSchema = actual.getPropertySchemas().get("nonNullable");
593+
Schema implicitNonNullable = actual.getPropertySchemas().get("implicitNonNullable");
593594

594595
assertTrue(nullableSchema.isNullable());
595-
assertFalse(nonNulableSchema.isNullable());
596+
assertFalse(nonNullableSchema.isNullable());
597+
assertFalse(implicitNonNullable.isNullable());
596598
}
597599

598600
@Test
599601
public void nullableBooleansAre_NotLoaded_withoutNullableSupport() {
600602
ObjectSchema actual = (ObjectSchema) SchemaLoader.load(get("nullableSupport"));
601603
Schema nullableSchema = actual.getPropertySchemas().get("isNullable");
602-
Schema nonNulableSchema = actual.getPropertySchemas().get("nonNullable");
604+
Schema nonNullableSchema = actual.getPropertySchemas().get("nonNullable");
605+
Schema implicitNonNullable = actual.getPropertySchemas().get("implicitNonNullable");
603606

604607
assertNull(nullableSchema.isNullable());
605-
assertNull(nonNulableSchema.isNullable());
608+
assertNull(nonNullableSchema.isNullable());
609+
assertNull(implicitNonNullable.isNullable());
606610
}
607611
}

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -597,6 +597,9 @@
597597
"isNullable": {
598598
"type": "string",
599599
"nullable": true
600+
},
601+
"implicitNonNullable": {
602+
"type": "string"
600603
}
601604
}
602605
}

0 commit comments

Comments
 (0)