This is an automated email from the ASF dual-hosted git repository. rmannibucau pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/johnzon.git
The following commit(s) were added to refs/heads/master by this push: new 9e74caa [JOHNZON-327] Json Schema Validation: added integer type validation. (#72) 9e74caa is described below commit 9e74caa3c0c19311da783313c52863967d313bf6 Author: manuelrazola <manuel.raz...@ubisoft.com> AuthorDate: Thu Dec 3 11:36:51 2020 +0100 [JOHNZON-327] Json Schema Validation: added integer type validation. (#72) * Added integer type validation to JsonSchemaValidatorFactory. * Implemented PR suggestions. --- .../jsonschema/JsonSchemaValidatorFactory.java | 2 ++ .../jsonschema/spi/builtin/IntegerValidation.java | 28 ++++++++++++++++++++++ .../spi/builtin/MultipleOfValidation.java | 4 ++-- .../jsonschema/spi/builtin/TypeValidation.java | 1 + .../jsonschema/JsonSchemaValidatorTest.java | 27 +++++++++++++++++++++ 5 files changed, 60 insertions(+), 2 deletions(-) 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 a873dfe..2fe4e27 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 @@ -43,6 +43,7 @@ import org.apache.johnzon.jsonschema.spi.builtin.ContainsValidation; import org.apache.johnzon.jsonschema.spi.builtin.EnumValidation; import org.apache.johnzon.jsonschema.spi.builtin.ExclusiveMaximumValidation; import org.apache.johnzon.jsonschema.spi.builtin.ExclusiveMinimumValidation; +import org.apache.johnzon.jsonschema.spi.builtin.IntegerValidation; import org.apache.johnzon.jsonschema.spi.builtin.ItemsValidation; import org.apache.johnzon.jsonschema.spi.builtin.MaxItemsValidation; import org.apache.johnzon.jsonschema.spi.builtin.MaxLengthValidation; @@ -88,6 +89,7 @@ public class JsonSchemaValidatorFactory implements AutoCloseable { return asList( new RequiredValidation(), new TypeValidation(), + new IntegerValidation(), new EnumValidation(), new MultipleOfValidation(), new MaximumValidation(), diff --git a/johnzon-jsonschema/src/main/java/org/apache/johnzon/jsonschema/spi/builtin/IntegerValidation.java b/johnzon-jsonschema/src/main/java/org/apache/johnzon/jsonschema/spi/builtin/IntegerValidation.java new file mode 100644 index 0000000..dc12db5 --- /dev/null +++ b/johnzon-jsonschema/src/main/java/org/apache/johnzon/jsonschema/spi/builtin/IntegerValidation.java @@ -0,0 +1,28 @@ +package org.apache.johnzon.jsonschema.spi.builtin; + +import java.util.Optional; +import java.util.function.Function; +import java.util.stream.Stream; + +import javax.json.JsonNumber; +import javax.json.JsonString; +import javax.json.JsonValue; +import javax.json.JsonValue.ValueType; + +import org.apache.johnzon.jsonschema.ValidationResult; +import org.apache.johnzon.jsonschema.ValidationResult.ValidationError; +import org.apache.johnzon.jsonschema.spi.ValidationContext; +import org.apache.johnzon.jsonschema.spi.ValidationExtension; + +public class IntegerValidation implements ValidationExtension { + + @Override + public Optional<Function<JsonValue, Stream<ValidationError>>> create(ValidationContext model) { + final JsonValue type = model.getSchema().get("type"); + if (type.getValueType().equals(ValueType.STRING) && "integer".equals(JsonString.class.cast(type).getString())) { + return Optional.of(new MultipleOfValidation.Impl(model.toPointer(), model.getValueProvider(), 1)); + } + return Optional.empty(); + } + +} diff --git a/johnzon-jsonschema/src/main/java/org/apache/johnzon/jsonschema/spi/builtin/MultipleOfValidation.java b/johnzon-jsonschema/src/main/java/org/apache/johnzon/jsonschema/spi/builtin/MultipleOfValidation.java index a4c101c..72a1862 100644 --- a/johnzon-jsonschema/src/main/java/org/apache/johnzon/jsonschema/spi/builtin/MultipleOfValidation.java +++ b/johnzon-jsonschema/src/main/java/org/apache/johnzon/jsonschema/spi/builtin/MultipleOfValidation.java @@ -40,8 +40,8 @@ public class MultipleOfValidation implements ValidationExtension { return Optional.empty(); } - private static class Impl extends BaseNumberValidation { - private Impl(final String pointer, final Function<JsonValue, JsonValue> valueProvider, final double multipleOf) { + static class Impl extends BaseNumberValidation { + Impl(final String pointer, final Function<JsonValue, JsonValue> valueProvider, final double multipleOf) { super(pointer, valueProvider, multipleOf); } 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 18a5697..67c1ace 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 @@ -55,6 +55,7 @@ public class TypeValidation implements ValidationExtension { case "string": return Stream.of(JsonValue.ValueType.STRING); case "number": + case "integer": return Stream.of(JsonValue.ValueType.NUMBER); case "array": return Stream.of(JsonValue.ValueType.ARRAY); 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 08ea742..c9aa42f 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 @@ -23,6 +23,8 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; +import java.math.BigDecimal; +import java.math.BigInteger; import java.util.Collection; import javax.json.Json; @@ -355,6 +357,29 @@ public class JsonSchemaValidatorTest { validator.close(); } + + @Test + public void integerType() { + final JsonSchemaValidator validator = factory.newInstance(jsonFactory.createObjectBuilder() + .add("type", "object") + .add("properties", jsonFactory.createObjectBuilder() + .add("age", jsonFactory.createObjectBuilder() + .add("type", "integer") + .build()) + .build()) + .build()); + + assertTrue(validator.apply(jsonFactory.createObjectBuilder().build()).isSuccess()); + assertTrue(validator.apply(jsonFactory.createObjectBuilder().add("age", 30).build()).isSuccess()); + assertTrue(validator.apply(jsonFactory.createObjectBuilder().add("age", -10).build()).isSuccess()); + assertTrue(validator.apply(jsonFactory.createObjectBuilder().add("age", BigInteger.valueOf(50)).build()).isSuccess()); + // check no decimal numbers allowed + assertFalse(validator.apply(jsonFactory.createObjectBuilder() .add("age", 30.3f) .build()).isSuccess()); + assertFalse(validator.apply(jsonFactory.createObjectBuilder() .add("age", -7.4d) .build()).isSuccess()); + assertFalse(validator.apply(jsonFactory.createObjectBuilder() .add("age", BigDecimal.valueOf(50.35613d)).build()).isSuccess()); + + validator.close(); + } @Test public void minLength() { @@ -657,4 +682,6 @@ public class JsonSchemaValidatorTest { validator.close(); } + + }