From 67fbd68a62aaf98909e2dc31fbe746307c4316b5 Mon Sep 17 00:00:00 2001 From: Justin Tay <49700559+justin-tay@users.noreply.github.com> Date: Sun, 24 Nov 2024 22:41:04 +0800 Subject: [PATCH] Fix nullable issue --- .../networknt/schema/utils/JsonNodeUtil.java | 5 ++- .../networknt/schema/TypeValidatorTest.java | 32 +++++++++++++++++++ 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/networknt/schema/utils/JsonNodeUtil.java b/src/main/java/com/networknt/schema/utils/JsonNodeUtil.java index 083efc06..df2b91bc 100644 --- a/src/main/java/com/networknt/schema/utils/JsonNodeUtil.java +++ b/src/main/java/com/networknt/schema/utils/JsonNodeUtil.java @@ -84,10 +84,9 @@ public static boolean equalsToSchemaType(JsonNode node, JsonType schemaType, Jso } if (nodeType == JsonType.NULL) { - if (parentSchema != null) { + if (parentSchema != null && config.isNullableKeywordEnabled()) { JsonSchema grandParentSchema = parentSchema.getParentSchema(); - if (grandParentSchema != null - && JsonNodeUtil.isNodeNullable(grandParentSchema.getSchemaNode(), config) + if (grandParentSchema != null && JsonNodeUtil.isNodeNullable(grandParentSchema.getSchemaNode()) || JsonNodeUtil.isNodeNullable(parentSchema.getSchemaNode())) { return true; } diff --git a/src/test/java/com/networknt/schema/TypeValidatorTest.java b/src/test/java/com/networknt/schema/TypeValidatorTest.java index 59242907..3687d3e5 100644 --- a/src/test/java/com/networknt/schema/TypeValidatorTest.java +++ b/src/test/java/com/networknt/schema/TypeValidatorTest.java @@ -149,4 +149,36 @@ void walkNull() { ValidationResult result = schema.walk(null, true); assertTrue(result.getValidationMessages().isEmpty()); } + + @Test + void nullable() { + String schemaData = "{\r\n" + + " \"$schema\":\"http://json-schema.org/draft-07/schema#\",\r\n" + + " \"type\":\"object\",\r\n" + + " \"properties\":{\r\n" + + " \"test\":{\r\n" + + " \"type\":\"object\",\r\n" + + " \"properties\":{\r\n" + + " \"nested\":{\r\n" + + " \"type\":\"string\",\r\n" + + " \"nullable\":true,\r\n" + + " \"format\":\"date\"\r\n" + + " }\r\n" + + " }\r\n" + + " }\r\n" + + " }\r\n" + + "}"; + String inputData = "{\r\n" + + " \"test\":{\r\n" + + " \"nested\":null\r\n" + + " }\r\n" + + "}"; + final JsonSchemaFactory factory = JsonSchemaFactory.getInstance(VersionFlag.V7); + final JsonSchema validator = factory.getSchema(schemaData, SchemaValidatorsConfig.builder() + .nullableKeywordEnabled(false) + .build()); + + final Set errors = validator.validate(inputData, InputFormat.JSON); + assertEquals(1, errors.size()); + } }