You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@johnzon.apache.org by rm...@apache.org on 2018/10/06 17:05:31 UTC
johnzon git commit: JOHNZON-191 ensure we validate the right value
for meta validation (jsonschema): patternproperties and additionalProperties
Repository: johnzon
Updated Branches:
refs/heads/master 6a7f7b2e2 -> d6bb9526b
JOHNZON-191 ensure we validate the right value for meta validation (jsonschema): patternproperties and additionalProperties
Project: http://git-wip-us.apache.org/repos/asf/johnzon/repo
Commit: http://git-wip-us.apache.org/repos/asf/johnzon/commit/d6bb9526
Tree: http://git-wip-us.apache.org/repos/asf/johnzon/tree/d6bb9526
Diff: http://git-wip-us.apache.org/repos/asf/johnzon/diff/d6bb9526
Branch: refs/heads/master
Commit: d6bb9526bbd84e9a81d25c333364966c28fef801
Parents: 6a7f7b2
Author: Romain Manni-Bucau <rm...@apache.org>
Authored: Sat Oct 6 19:05:19 2018 +0200
Committer: Romain Manni-Bucau <rm...@apache.org>
Committed: Sat Oct 6 19:05:19 2018 +0200
----------------------------------------------------------------------
.../jsonschema/JsonSchemaValidatorFactory.java | 11 ++++----
.../jsonschema/spi/builtin/TypeValidation.java | 27 +++++++++++++-------
.../jsonschema/JsonSchemaValidatorTest.java | 8 +++---
3 files changed, 28 insertions(+), 18 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/johnzon/blob/d6bb9526/johnzon-jsonschema/src/main/java/org/apache/johnzon/jsonschema/JsonSchemaValidatorFactory.java
----------------------------------------------------------------------
diff --git a/johnzon-jsonschema/src/main/java/org/apache/johnzon/jsonschema/JsonSchemaValidatorFactory.java b/johnzon-jsonschema/src/main/java/org/apache/johnzon/jsonschema/JsonSchemaValidatorFactory.java
index 1eb2fbb..a873dfe 100644
--- a/johnzon-jsonschema/src/main/java/org/apache/johnzon/jsonschema/JsonSchemaValidatorFactory.java
+++ b/johnzon-jsonschema/src/main/java/org/apache/johnzon/jsonschema/JsonSchemaValidatorFactory.java
@@ -192,10 +192,11 @@ public class JsonSchemaValidatorFactory implements AutoCloseable {
}
return validable.asJsonObject().entrySet().stream()
.filter(e -> pattern.test(e.getKey()))
- .flatMap(e -> buildValidator(
- Stream.concat(Stream.of(path), Stream.of(e.getKey())).toArray(String[]::new),
- currentSchema,
- new ChainedValueAccessor(valueProvider, e.getKey())).apply(e.getValue()));
+ .flatMap(e -> {
+ final String[] subPath = Stream.concat(Stream.of(path), Stream.of(e.getKey())).toArray(String[]::new);
+ final Function<JsonValue, JsonValue> provider = new ChainedValueAccessor(valueProvider, e.getKey());
+ return buildValidator(subPath, currentSchema, provider).apply(validable);
+ });
};
})
.collect(toList()))
@@ -231,7 +232,7 @@ public class JsonSchemaValidatorFactory implements AutoCloseable {
.flatMap(e -> buildValidator(
Stream.concat(Stream.of(path), Stream.of(e.getKey())).toArray(String[]::new),
currentSchema,
- new ChainedValueAccessor(valueProvider, e.getKey())).apply(e.getValue()));
+ new ChainedValueAccessor(valueProvider, e.getKey())).apply(validable));
};
})
.orElse(NO_VALIDATION);
http://git-wip-us.apache.org/repos/asf/johnzon/blob/d6bb9526/johnzon-jsonschema/src/main/java/org/apache/johnzon/jsonschema/spi/builtin/TypeValidation.java
----------------------------------------------------------------------
diff --git a/johnzon-jsonschema/src/main/java/org/apache/johnzon/jsonschema/spi/builtin/TypeValidation.java b/johnzon-jsonschema/src/main/java/org/apache/johnzon/jsonschema/spi/builtin/TypeValidation.java
index b99685f..f44573f 100644
--- a/johnzon-jsonschema/src/main/java/org/apache/johnzon/jsonschema/spi/builtin/TypeValidation.java
+++ b/johnzon-jsonschema/src/main/java/org/apache/johnzon/jsonschema/spi/builtin/TypeValidation.java
@@ -18,13 +18,15 @@
*/
package org.apache.johnzon.jsonschema.spi.builtin;
-import static java.util.Arrays.asList;
-import static java.util.stream.Collectors.joining;
+import static java.util.Comparator.comparing;
+import static java.util.stream.Collectors.toList;
+import java.util.Collection;
import java.util.Optional;
import java.util.function.Function;
import java.util.stream.Stream;
+import javax.json.JsonString;
import javax.json.JsonValue;
import org.apache.johnzon.jsonschema.ValidationResult;
@@ -34,7 +36,11 @@ import org.apache.johnzon.jsonschema.spi.ValidationExtension;
public class TypeValidation implements ValidationExtension {
@Override
public Optional<Function<JsonValue, Stream<ValidationResult.ValidationError>>> create(final ValidationContext model) {
- switch (model.getSchema().getString("type", "object")) {
+ final JsonString value = model.getSchema().getJsonString("type");
+ if (value == null) {
+ return Optional.empty();
+ }
+ switch (JsonString.class.cast(value).getString()) {
case "string":
return Optional.of(new Impl(model.toPointer(), model.getValueProvider(), JsonValue.ValueType.STRING));
case "number":
@@ -50,11 +56,14 @@ public class TypeValidation implements ValidationExtension {
}
private static class Impl extends BaseValidation {
- private final JsonValue.ValueType[] types;
+ private final Collection<JsonValue.ValueType> types;
private Impl(final String pointer, final Function<JsonValue, JsonValue> extractor, final JsonValue.ValueType... types) {
- super(pointer, extractor, JsonValue.ValueType.OBJECT /*ignored*/);
- this.types = types;
+ super(pointer, extractor, types[0] /*ignored anyway*/);
+ this.types = Stream.concat(Stream.of(types), Stream.of(JsonValue.ValueType.NULL))
+ .distinct()
+ .sorted(comparing(JsonValue.ValueType::name))
+ .collect(toList());
}
@Override
@@ -63,18 +72,18 @@ public class TypeValidation implements ValidationExtension {
return Stream.empty();
}
final JsonValue value = extractor.apply(root);
- if (value == null || Stream.of(types).anyMatch(it -> it == value.getValueType()) || JsonValue.ValueType.NULL == value.getValueType()) {
+ if (value == null || types.contains(value.getValueType())) {
return Stream.empty();
}
return Stream.of(new ValidationResult.ValidationError(
pointer,
- "Expected " + Stream.of(types).map(JsonValue.ValueType::name).collect(joining(", ")) + " but got " + value.getValueType()));
+ "Expected " + types + " but got " + value.getValueType()));
}
@Override
public String toString() {
return "Type{" +
- "type=" + asList(types) +
+ "type=" + types +
", pointer='" + pointer + '\'' +
'}';
}
http://git-wip-us.apache.org/repos/asf/johnzon/blob/d6bb9526/johnzon-jsonschema/src/test/java/org/apache/johnzon/jsonschema/JsonSchemaValidatorTest.java
----------------------------------------------------------------------
diff --git a/johnzon-jsonschema/src/test/java/org/apache/johnzon/jsonschema/JsonSchemaValidatorTest.java b/johnzon-jsonschema/src/test/java/org/apache/johnzon/jsonschema/JsonSchemaValidatorTest.java
index ff101c6..ed41c1e 100644
--- a/johnzon-jsonschema/src/test/java/org/apache/johnzon/jsonschema/JsonSchemaValidatorTest.java
+++ b/johnzon-jsonschema/src/test/java/org/apache/johnzon/jsonschema/JsonSchemaValidatorTest.java
@@ -105,7 +105,7 @@ public class JsonSchemaValidatorTest {
assertEquals(1, errors.size());
final ValidationResult.ValidationError error = errors.iterator().next();
assertEquals("/name", error.getField());
- assertEquals("Expected STRING but got NUMBER", error.getMessage());
+ assertEquals("Expected [NULL, STRING] but got NUMBER", error.getMessage());
validator.close();
}
@@ -146,7 +146,7 @@ public class JsonSchemaValidatorTest {
assertEquals(1, errors.size());
final ValidationResult.ValidationError error = errors.iterator().next();
assertEquals("/person/name", error.getField());
- assertEquals("Expected STRING but got OBJECT", error.getMessage());
+ assertEquals("Expected [NULL, STRING] but got OBJECT", error.getMessage());
validator.close();
}
@@ -172,7 +172,7 @@ public class JsonSchemaValidatorTest {
assertEquals(1, errors.size());
final ValidationResult.ValidationError error = errors.iterator().next();
assertEquals("/name", error.getField());
- assertEquals("Expected STRING but got NUMBER", error.getMessage());
+ assertEquals("Expected [NULL, STRING] but got NUMBER", error.getMessage());
validator.close();
}
@@ -569,7 +569,7 @@ public class JsonSchemaValidatorTest {
assertTrue(validator.apply(jsonFactory.createObjectBuilder()
.add("1", 1)
.build()).isSuccess());
- assertTrue(validator.apply(jsonFactory.createObjectBuilder()
+ assertFalse(validator.apply(jsonFactory.createObjectBuilder()
.add("1", "test")
.build()).isSuccess());