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 <[email protected]>
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();
}
+
+
}