aboutsummaryrefslogtreecommitdiffstats
path: root/utils
diff options
context:
space:
mode:
authoradheli.tavares <adheli.tavares@est.tech>2024-07-24 14:01:48 +0100
committeradheli.tavares <adheli.tavares@est.tech>2024-07-24 14:04:40 +0100
commit4474c64690faa7dcc984a3690b7fde8dafcbd59b (patch)
treee777731ddf23f32a02c9117aa97a58f5270b7b1f /utils
parent119c725def8de2593bdd8e356212fd3078740643 (diff)
Isolating the usage of json-schema validator to drools-pdp
- only drools-pdp have this validation, so moving the class and its dependencies to there to avoid loading dependencies where it's not used. Issue-ID: POLICY-5084 Change-Id: I9ec6b06f4a8b56c844725b7da8993eb3da078574 Signed-off-by: adheli.tavares <adheli.tavares@est.tech>
Diffstat (limited to 'utils')
-rw-r--r--utils/pom.xml4
-rw-r--r--utils/src/main/java/org/onap/policy/common/utils/coder/CoderRuntimeException.java35
-rw-r--r--utils/src/main/java/org/onap/policy/common/utils/coder/StandardValCoder.java138
-rw-r--r--utils/src/test/java/org/onap/policy/common/utils/coder/StandardValCoderTest.java174
-rw-r--r--utils/src/test/resources/org/onap/policy/common/utils/coder/bad-regex.json9
-rw-r--r--utils/src/test/resources/org/onap/policy/common/utils/coder/missing-required.json5
-rw-r--r--utils/src/test/resources/org/onap/policy/common/utils/coder/test.schema.json71
-rw-r--r--utils/src/test/resources/org/onap/policy/common/utils/coder/valid.json11
8 files changed, 0 insertions, 447 deletions
diff --git a/utils/pom.xml b/utils/pom.xml
index 699ed40b..791a048a 100644
--- a/utils/pom.xml
+++ b/utils/pom.xml
@@ -45,10 +45,6 @@
<version>${project.version}</version>
</dependency>
<dependency>
- <groupId>net.jimblackler.jsonschemafriend</groupId>
- <artifactId>core</artifactId>
- </dependency>
- <dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
</dependency>
diff --git a/utils/src/main/java/org/onap/policy/common/utils/coder/CoderRuntimeException.java b/utils/src/main/java/org/onap/policy/common/utils/coder/CoderRuntimeException.java
deleted file mode 100644
index 0ffd6077..00000000
--- a/utils/src/main/java/org/onap/policy/common/utils/coder/CoderRuntimeException.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * ============LICENSE_START=======================================================
- * Modifications Copyright (C) 2024 Nordix Foundation.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.common.utils.coder;
-
-import java.io.Serial;
-
-/**
- * Exceptions generated by coders.
- */
-public class CoderRuntimeException extends RuntimeException {
-
- @Serial
- private static final long serialVersionUID = 1L;
-
- public CoderRuntimeException(Throwable cause) {
- super(cause);
- }
-
-}
diff --git a/utils/src/main/java/org/onap/policy/common/utils/coder/StandardValCoder.java b/utils/src/main/java/org/onap/policy/common/utils/coder/StandardValCoder.java
deleted file mode 100644
index 408ae81e..00000000
--- a/utils/src/main/java/org/onap/policy/common/utils/coder/StandardValCoder.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/*--
- * ============LICENSE_START=======================================================
- * Copyright (C) 2020-2021 AT&T Intellectual Property. All rights reserved.
- * Modifications Copyright (C) 2024 Nordix Foundation.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.common.utils.coder;
-
-import java.io.Reader;
-import java.io.StringReader;
-import java.io.StringWriter;
-import java.io.Writer;
-import lombok.NonNull;
-import lombok.ToString;
-import net.jimblackler.jsonschemafriend.GenerationException;
-import net.jimblackler.jsonschemafriend.Schema;
-import net.jimblackler.jsonschemafriend.SchemaStore;
-import net.jimblackler.jsonschemafriend.ValidationException;
-import net.jimblackler.jsonschemafriend.Validator;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Extension to the StandardCoder to support streaming validation against a Draft-07 Json schema specification.
- */
-
-@ToString
-public class StandardValCoder extends StandardCoder {
-
- private static final Logger logger = LoggerFactory.getLogger(StandardValCoder.class);
-
- private final Schema schema;
-
- /**
- * StandardCoder with validation.
- */
- public StandardValCoder(@NonNull String jsonSchema) {
- try {
- SchemaStore store = new SchemaStore();
- this.schema = store.loadSchemaJson(jsonSchema);
- } catch (GenerationException e) {
- throw new CoderRuntimeException(e);
- }
- }
-
- @Override
- protected String toPrettyJson(Object object) {
- try {
- validate(gsonPretty.toJson(object));
- } catch (CoderException e) {
- throw new CoderRuntimeException(e);
- }
- return super.toPrettyJson(object);
- }
-
- @Override
- protected String toJson(@NonNull Object object) {
- var output = new StringWriter();
- toJson(output, object);
- return output.toString();
- }
-
- @Override
- protected void toJson(@NonNull Writer target, @NonNull Object object) {
- try {
- validate(gson.toJson(object));
- } catch (CoderException e) {
- throw new CoderRuntimeException(e);
- }
- gson.toJson(object, object.getClass(), target);
- }
-
- @Override
- protected <T> T fromJson(@NonNull Reader source, @NonNull Class<T> clazz) {
- return convertFromDouble(clazz, gson.fromJson(source, clazz));
- }
-
- @Override
- protected <T> T fromJson(String json, Class<T> clazz) {
- try {
- validate(json);
- } catch (CoderException e) {
- throw new CoderRuntimeException(e);
- }
- var reader = new StringReader(json);
- return convertFromDouble(clazz, gson.fromJson(reader, clazz));
- }
-
- /**
- * Is the json conformant?.
- */
- public boolean isConformant(@NonNull String json) {
- try {
- conformance(json);
- return true;
- } catch (Exception e) {
- logger.error("JSON is not conformant to schema", e);
- return false;
- }
- }
-
- /**
- * Check a json string for conformance against its schema definition.
- */
- public void conformance(@NonNull String json) throws CoderException {
- validate(json);
- }
-
- private void validate(Object object) throws CoderException {
- try {
- final var validator = new Validator();
- validator.validate(schema, object);
- } catch (ValidationException exception) {
- var error = String.format("JSON validation failed: %s", exception.getMessage());
- logger.error(error);
- throw new CoderException(error);
- }
- }
-
- private void validate(String json) throws CoderException {
- validate(gson.fromJson(json, Object.class));
- }
-}
diff --git a/utils/src/test/java/org/onap/policy/common/utils/coder/StandardValCoderTest.java b/utils/src/test/java/org/onap/policy/common/utils/coder/StandardValCoderTest.java
deleted file mode 100644
index 8b5f406b..00000000
--- a/utils/src/test/java/org/onap/policy/common/utils/coder/StandardValCoderTest.java
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
- * ============LICENSE_START=======================================================
- * Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
- * Modifications Copyright (C) 2024 Nordix Foundation
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.common.utils.coder;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.assertj.core.api.Assertions.assertThatThrownBy;
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertNotEquals;
-import static org.junit.jupiter.api.Assertions.assertThrows;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-import static org.junit.jupiter.api.Assertions.fail;
-
-import java.io.StringReader;
-import java.io.StringWriter;
-import java.util.List;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.onap.policy.common.utils.resources.ResourceUtils;
-
-class StandardValCoderTest {
- private String jsonSchema;
- private String validJson;
- private String missingReqJson;
- private String badRegexJson;
-
- @Data
- @NoArgsConstructor
- public static class ValOuter {
- @Data
- @NoArgsConstructor
- public static class ValInner {
- public String subItemString;
- public Integer subItemInteger;
- }
-
- public String aaString;
- public int anInteger;
- public boolean aaBoolean;
- public List<ValInner> aaCollection;
- }
-
- @BeforeEach
- public void testSetUp() {
- jsonSchema = getJson("src/test/resources/org/onap/policy/common/utils/coder/test.schema.json");
- validJson = getJson("src/test/resources/org/onap/policy/common/utils/coder/valid.json");
- missingReqJson = getJson("src/test/resources/org/onap/policy/common/utils/coder/missing-required.json");
- badRegexJson = getJson("src/test/resources/org/onap/policy/common/utils/coder/bad-regex.json");
- }
-
- @Test
- void testDecode() throws CoderException {
- StandardValCoder valCoder = new StandardValCoder(jsonSchema);
-
- ValOuter valOuter = valCoder.decode(validJson, ValOuter.class);
- assertValidJson(valOuter);
-
- StringReader reader = new StringReader(validJson);
- valOuter = valCoder.decode(reader, ValOuter.class);
- assertValidJson(valOuter);
-
- try {
- valCoder.decode(missingReqJson, ValOuter.class);
- fail("missing required field should have been flagged by the schema validation");
- } catch (CoderException e) {
- assertThat(e.getMessage()).contains("Missing property aaCollection");
- }
-
- try {
- valCoder.decode(badRegexJson, ValOuter.class);
- fail("bad regex should have been flagged by the schema validation");
- } catch (CoderException e) {
- assertThat(e.getMessage())
- .contains("Validation errors: \"abc123\" at #/aaString failed")
- .contains("Did not match pattern: ^([a-z]*)$");
- }
- }
-
- @Test
- void testEncode() throws CoderException {
- StandardValCoder valCoder = new StandardValCoder(jsonSchema);
- ValOuter valOuter = valCoder.decode(validJson, ValOuter.class);
-
- String valOuterJson = valCoder.encode(valOuter);
- assertEquals(valOuter, valCoder.decode(valOuterJson, ValOuter.class));
- assertValidJson(valOuter);
-
- StringWriter writer = new StringWriter();
- valCoder.encode(writer, valOuter);
- assertEquals(valOuterJson, writer.toString());
-
- // test exception case with an empty object
- assertThatThrownBy(() -> valCoder.encode(new ValOuter())).isInstanceOf(CoderException.class);
- }
-
- @Test
- void testPretty() throws CoderException {
- StandardValCoder valCoder = new StandardValCoder(jsonSchema);
- ValOuter valOuter = valCoder.decode(validJson, ValOuter.class);
-
- String valOuterJson = valCoder.encode(valOuter);
- assertEquals(valOuterJson, valCoder.encode(valOuter, false));
- String prettyValOuterJson = valCoder.encode(valOuter, true);
- assertNotEquals(valOuterJson, prettyValOuterJson);
-
- assertEquals(valOuter, valCoder.decode(prettyValOuterJson, ValOuter.class));
-
- // test exception cases with an empty object
- assertThatThrownBy(() -> valCoder.encode(new ValOuter(), false)).isInstanceOf(CoderException.class);
- assertThatThrownBy(() -> valCoder.encode(new ValOuter(), true)).isInstanceOf(CoderException.class);
- }
-
- @Test
- void testConformance() {
- StandardValCoder valCoder = new StandardValCoder(jsonSchema);
- assertTrue(valCoder.isConformant(validJson));
- assertFalse(valCoder.isConformant(missingReqJson));
- assertFalse(valCoder.isConformant(badRegexJson));
- }
-
- @Test
- void testNullValues() throws CoderException {
- StandardValCoder valCoder = new StandardValCoder(jsonSchema);
- assertThrows(NullPointerException.class, () -> valCoder.toJson(null));
- assertThrows(NullPointerException.class, () -> valCoder.isConformant(null));
- assertThrows(NullPointerException.class, () -> valCoder.conformance(null));
-
- assertThrows(NullPointerException.class, () -> valCoder.toJson(null, null));
- var writer = new StringWriter();
- assertThrows(NullPointerException.class, () -> valCoder.toJson(writer, null));
- ValOuter valOuter = valCoder.decode(validJson, ValOuter.class);
- assertThrows(NullPointerException.class, () -> valCoder.toJson(null, valOuter));
- }
-
- @Test
- void testConstructor() {
- assertThrows(NullPointerException.class, () -> new StandardValCoder(null));
-
- assertThrows(CoderRuntimeException.class, () -> new StandardValCoder("$schema"));
- }
-
- private void assertValidJson(ValOuter valOuter) {
- assertEquals("abcd", valOuter.getAaString());
- assertEquals(90, valOuter.getAnInteger());
- assertTrue(valOuter.isAaBoolean());
- assertEquals("defg", valOuter.getAaCollection().get(0).getSubItemString());
- assertEquals(Integer.valueOf(1200), valOuter.getAaCollection().get(0).getSubItemInteger());
- }
-
- private String getJson(String filePath) {
- return ResourceUtils.getResourceAsString(filePath);
- }
-} \ No newline at end of file
diff --git a/utils/src/test/resources/org/onap/policy/common/utils/coder/bad-regex.json b/utils/src/test/resources/org/onap/policy/common/utils/coder/bad-regex.json
deleted file mode 100644
index 049de2cf..00000000
--- a/utils/src/test/resources/org/onap/policy/common/utils/coder/bad-regex.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "aaString": "abc123",
- "anInteger": 90,
- "aaBoolean": true,
- "aaCollection": [ {
- "subItemString": "defg",
- "subItemInteger": 1200
- }]
-} \ No newline at end of file
diff --git a/utils/src/test/resources/org/onap/policy/common/utils/coder/missing-required.json b/utils/src/test/resources/org/onap/policy/common/utils/coder/missing-required.json
deleted file mode 100644
index e19db9db..00000000
--- a/utils/src/test/resources/org/onap/policy/common/utils/coder/missing-required.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "aaString": "abcd",
- "anInteger": 90,
- "aaBoolean": true
-} \ No newline at end of file
diff --git a/utils/src/test/resources/org/onap/policy/common/utils/coder/test.schema.json b/utils/src/test/resources/org/onap/policy/common/utils/coder/test.schema.json
deleted file mode 100644
index 60e70fb4..00000000
--- a/utils/src/test/resources/org/onap/policy/common/utils/coder/test.schema.json
+++ /dev/null
@@ -1,71 +0,0 @@
-{
- "definitions": {},
- "$schema": "http://json-schema.org/draft-07/schema#",
- "$id": "http://onap.org/policy/common/coders/root.json",
- "type": "object",
- "title": "Test Schema",
- "required": [
- "aaString",
- "anInteger",
- "aaBoolean",
- "aaCollection"
- ],
- "properties": {
- "aaString": {
- "$id": "#/properties/aaString",
- "type": "string",
- "title": "an alphabetical string",
- "default": "",
- "examples": [
- "abcdef"
- ],
- "pattern": "^([a-z]*)$"
- },
- "anInteger": {
- "$id": "#/properties/anInteger",
- "type": "integer",
- "title": "a bounded integer",
- "default": 5,
- "examples": [
- 98
- ],
- "minimum": 10,
- "maximum": 100
- },
- "aaBoolean": {
- "$id": "#/properties/aaBoolean",
- "type": "boolean",
- "title": "a boolean",
- "default": false,
- "examples": [
- true
- ]
- },
- "aaCollection": {
- "$id": "#/properties/aaCollection",
- "type": "array",
- "title": "a collection",
- "items": {
- "$id": "#/properties/aaCollection/items",
- "type": "object",
- "title": "the collection items",
- "required": [
- "subItemString"
- ],
- "properties": {
- "subItemString": {
- "$id": "#/properties/aaCollection/items/properties/subItemString",
- "type": "string",
- "title": "the subitem string",
- "default": "blah",
- "pattern": "^(.*)$"
- },
- "subItemInteger": {
- "$id": "#/properties/aaCollection/items/properties/subItemInteger",
- "type": "integer"
- }
- }
- }
- }
- }
-} \ No newline at end of file
diff --git a/utils/src/test/resources/org/onap/policy/common/utils/coder/valid.json b/utils/src/test/resources/org/onap/policy/common/utils/coder/valid.json
deleted file mode 100644
index a2cdb932..00000000
--- a/utils/src/test/resources/org/onap/policy/common/utils/coder/valid.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
- "aaString": "abcd",
- "anInteger": 90,
- "aaBoolean": true,
- "aaCollection": [
- {
- "subItemString": "defg",
- "subItemInteger": 1200
- }
- ]
-} \ No newline at end of file