You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@unomi.apache.org by jk...@apache.org on 2022/05/30 16:11:21 UTC
[unomi] 01/01: UNOMI-578: Allow for external vendor for JSON schemas deployed into the system
This is an automated email from the ASF dual-hosted git repository.
jkevan pushed a commit to branch jsonSchemaVendorHandling
in repository https://gitbox.apache.org/repos/asf/unomi.git
commit 43c505a26357cc5e897e07805e23cab31f9fc76b
Author: Kevan <ke...@jahia.com>
AuthorDate: Mon May 30 18:10:58 2022 +0200
UNOMI-578: Allow for external vendor for JSON schemas deployed into the system
---
.../apache/unomi/schema/api/JsonSchemaWrapper.java | 12 ++++-
.../org/apache/unomi/schema/api/SchemaService.java | 17 +++++++
.../unomi/schema/impl/SchemaServiceImpl.java | 32 ++++++++++++-
.../org/apache/unomi/itests/ContextServletIT.java | 12 ++---
.../org/apache/unomi/itests/InputValidationIT.java | 16 +++----
.../java/org/apache/unomi/itests/JSONSchemaIT.java | 54 +++++++++++-----------
.../resources/schemas/schema-dummy-extension.json | 6 +--
.../schema-dummy-properties-extension-2.json | 6 +--
.../schemas/schema-dummy-properties-extension.json | 6 +--
.../schemas/schema-dummy-properties-updated.json | 4 +-
.../resources/schemas/schema-dummy-properties.json | 4 +-
.../src/test/resources/schemas/schema-dummy.json | 6 +--
.../resources/schemas/schema-invalid-name.json | 4 +-
.../src/test/resources/schemas/schema-invalid.json | 2 +-
.../deserializers/ContextRequestDeserializer.java | 3 +-
.../EventsCollectorRequestDeserializer.java | 2 +-
16 files changed, 121 insertions(+), 65 deletions(-)
diff --git a/extensions/json-schema/services/src/main/java/org/apache/unomi/schema/api/JsonSchemaWrapper.java b/extensions/json-schema/services/src/main/java/org/apache/unomi/schema/api/JsonSchemaWrapper.java
index d8efe08f5..ca175558f 100644
--- a/extensions/json-schema/services/src/main/java/org/apache/unomi/schema/api/JsonSchemaWrapper.java
+++ b/extensions/json-schema/services/src/main/java/org/apache/unomi/schema/api/JsonSchemaWrapper.java
@@ -33,6 +33,7 @@ public class JsonSchemaWrapper extends Item implements TimestampedItem {
private String schema;
private String target;
+ private String name;
private String extendsSchemaId;
private Date timeStamp;
@@ -51,10 +52,11 @@ public class JsonSchemaWrapper extends Item implements TimestampedItem {
* @param extendsSchemaId is the URI of another Schema to be extended by current one. (optional)
* @param timeStamp of the schema
*/
- public JsonSchemaWrapper(String id, String schema, String target, String extendsSchemaId, Date timeStamp) {
+ public JsonSchemaWrapper(String id, String schema, String target, String name, String extendsSchemaId, Date timeStamp) {
super(id);
this.schema = schema;
this.target = target;
+ this.name = name;
this.extendsSchemaId = extendsSchemaId;
this.timeStamp = timeStamp;
}
@@ -75,6 +77,14 @@ public class JsonSchemaWrapper extends Item implements TimestampedItem {
this.target = target;
}
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
public String getExtendsSchemaId() {
return extendsSchemaId;
}
diff --git a/extensions/json-schema/services/src/main/java/org/apache/unomi/schema/api/SchemaService.java b/extensions/json-schema/services/src/main/java/org/apache/unomi/schema/api/SchemaService.java
index 34c11e7d5..0e6d398f6 100644
--- a/extensions/json-schema/services/src/main/java/org/apache/unomi/schema/api/SchemaService.java
+++ b/extensions/json-schema/services/src/main/java/org/apache/unomi/schema/api/SchemaService.java
@@ -36,6 +36,15 @@ public interface SchemaService {
*/
boolean isValid(String data, String schemaId);
+ /**
+ * Verify if the event is valid
+ *
+ * @param event to validate
+ * @param eventType The type of the event
+ * @return true is the event is valid
+ */
+ boolean isEventValid(String event, String eventType);
+
/**
* Get the list of installed Json Schema Ids
*
@@ -59,6 +68,14 @@ public interface SchemaService {
*/
List<JsonSchemaWrapper> getSchemasByTarget(String target);
+ /**
+ * Get the schema that is able to validate the specific event type
+ *
+ * @param eventType the eventType
+ * @return The JSON Schema able to validate the given event type or null if not found.
+ */
+ JsonSchemaWrapper getSchemaForEventType(String eventType);
+
/**
* Save a new schema or update a schema
*
diff --git a/extensions/json-schema/services/src/main/java/org/apache/unomi/schema/impl/SchemaServiceImpl.java b/extensions/json-schema/services/src/main/java/org/apache/unomi/schema/impl/SchemaServiceImpl.java
index 44d3850c8..d3fac549c 100644
--- a/extensions/json-schema/services/src/main/java/org/apache/unomi/schema/impl/SchemaServiceImpl.java
+++ b/extensions/json-schema/services/src/main/java/org/apache/unomi/schema/impl/SchemaServiceImpl.java
@@ -45,6 +45,7 @@ public class SchemaServiceImpl implements SchemaService {
private static final String URI = "https://json-schema.org/draft/2019-09/schema";
private static final Logger logger = LoggerFactory.getLogger(SchemaServiceImpl.class.getName());
+ private static final String TARGET_EVENTS = "events";
ObjectMapper objectMapper = new ObjectMapper();
@@ -116,6 +117,17 @@ public class SchemaServiceImpl implements SchemaService {
}
}
+ @Override
+ public boolean isEventValid(String event, String eventType) {
+ JsonSchemaWrapper eventSchema = getSchemaForEventType(eventType);
+ if (eventSchema != null) {
+ return isValid(event, eventSchema.getItemId());
+ }
+
+ // Event schema not found
+ return false;
+ }
+
@Override
public JsonSchemaWrapper getSchema(String schemaId) {
return schemasById.get(schemaId);
@@ -133,6 +145,22 @@ public class SchemaServiceImpl implements SchemaService {
.collect(Collectors.toList());
}
+ @Override
+ public JsonSchemaWrapper getSchemaForEventType(String eventType) {
+ if (StringUtils.isEmpty(eventType)) {
+ return null;
+ }
+
+ return schemasById.values().stream()
+ .filter(jsonSchemaWrapper ->
+ jsonSchemaWrapper.getTarget() != null &&
+ jsonSchemaWrapper.getTarget().equals(TARGET_EVENTS) &&
+ jsonSchemaWrapper.getName() != null &&
+ jsonSchemaWrapper.getName().equals(eventType))
+ .findFirst()
+ .orElse(null);
+ }
+
@Override
public void saveSchema(String schema) {
JsonSchemaWrapper jsonSchemaWrapper = buildJsonSchemaWrapper(schema);
@@ -176,12 +204,12 @@ public class SchemaServiceImpl implements SchemaService {
String name = schemaNode.at("/self/name").asText();
String extendsSchemaId = schemaNode.at("/self/extends").asText();
- if ("events".equals(target) && !name.matches("[_A-Za-z][_0-9A-Za-z]*")) {
+ if (TARGET_EVENTS.equals(target) && !name.matches("[_A-Za-z][_0-9A-Za-z]*")) {
throw new IllegalArgumentException(
"The \"/self/name\" value should match the following regular expression [_A-Za-z][_0-9A-Za-z]* for the Json schema on events");
}
- return new JsonSchemaWrapper(schemaId, schema, target, extendsSchemaId, new Date());
+ return new JsonSchemaWrapper(schemaId, schema, target, name, extendsSchemaId, new Date());
}
private void refreshJSONSchemas() {
diff --git a/itests/src/test/java/org/apache/unomi/itests/ContextServletIT.java b/itests/src/test/java/org/apache/unomi/itests/ContextServletIT.java
index 90396ea14..59232f3b5 100644
--- a/itests/src/test/java/org/apache/unomi/itests/ContextServletIT.java
+++ b/itests/src/test/java/org/apache/unomi/itests/ContextServletIT.java
@@ -144,8 +144,8 @@ public class ContextServletIT extends BaseIT {
schemaService.saveSchema(resourceAsString(FLOAT_PROPERTY_EVENT_TYPE_SCHEMA));
keepTrying("Couldn't find json schemas",
() -> schemaService.getInstalledJsonSchemaIds(),
- (schemaIds) -> (schemaIds.contains("https://unomi.apache.org/schemas/json/events/floatPropertyType/1-0-0") &&
- schemaIds.contains("https://unomi.apache.org/schemas/json/events/testEventType/1-0-0")),
+ (schemaIds) -> (schemaIds.contains("https://vendor.test.com/schemas/json/events/floatPropertyType/1-0-0") &&
+ schemaIds.contains("https://vendor.test.com/schemas/json/events/testEventType/1-0-0")),
DEFAULT_TRYING_TIMEOUT, DEFAULT_TRYING_TRIES);
}
@@ -158,12 +158,12 @@ public class ContextServletIT extends BaseIT {
segmentService.removeSegmentDefinition(SEGMENT_ID, false);
// cleanup schemas
- schemaService.deleteSchema("https://unomi.apache.org/schemas/json/events/testEventType/1-0-0");
- schemaService.deleteSchema("https://unomi.apache.org/schemas/json/events/floatPropertyType/1-0-0");
+ schemaService.deleteSchema("https://vendor.test.com/schemas/json/events/testEventType/1-0-0");
+ schemaService.deleteSchema("https://vendor.test.com/schemas/json/events/floatPropertyType/1-0-0");
keepTrying("Should not find json schemas anymore",
() -> schemaService.getInstalledJsonSchemaIds(),
- (schemaIds) -> (!schemaIds.contains("https://unomi.apache.org/schemas/json/events/floatPropertyType/1-0-0") &&
- !schemaIds.contains("https://unomi.apache.org/schemas/json/events/testEventType/1-0-0")),
+ (schemaIds) -> (!schemaIds.contains("https://vendor.test.com/schemas/json/events/floatPropertyType/1-0-0") &&
+ !schemaIds.contains("https://vendor.test.com/schemas/json/events/testEventType/1-0-0")),
DEFAULT_TRYING_TIMEOUT, DEFAULT_TRYING_TRIES);
}
diff --git a/itests/src/test/java/org/apache/unomi/itests/InputValidationIT.java b/itests/src/test/java/org/apache/unomi/itests/InputValidationIT.java
index bd6f4f869..0723d58c2 100644
--- a/itests/src/test/java/org/apache/unomi/itests/InputValidationIT.java
+++ b/itests/src/test/java/org/apache/unomi/itests/InputValidationIT.java
@@ -83,7 +83,7 @@ public class InputValidationIT extends BaseIT {
schemaService.saveSchema(resourceAsString("schemas/schema-dummy.json"));
schemaService.saveSchema(resourceAsString("schemas/schema-dummy-properties.json"));
keepTrying("Event should be valid",
- () -> schemaService.isValid(resourceAsString("schemas/event-dummy-valid.json"), "https://unomi.apache.org/schemas/json/events/dummy/1-0-0"),
+ () -> schemaService.isEventValid(resourceAsString("schemas/event-dummy-valid.json"), "dummy"),
isValid -> isValid,
DEFAULT_TRYING_TIMEOUT, DEFAULT_TRYING_TRIES);
@@ -91,10 +91,10 @@ public class InputValidationIT extends BaseIT {
doGETRequestTest(EVENT_COLLECTOR_URL, null, "/validation/eventcollector_valid.json", 200, null);
// remove schemas
- schemaService.deleteSchema("https://unomi.apache.org/schemas/json/events/dummy/1-0-0");
- schemaService.deleteSchema("https://unomi.apache.org/schemas/json/events/dummy/properties/1-0-0");
+ schemaService.deleteSchema("https://vendor.test.com/schemas/json/events/dummy/1-0-0");
+ schemaService.deleteSchema("https://vendor.test.com/schemas/json/events/dummy/properties/1-0-0");
keepTrying("Event should be invalid",
- () -> schemaService.isValid(resourceAsString("schemas/event-dummy-valid.json"), "https://unomi.apache.org/schemas/json/events/dummy/1-0-0"),
+ () -> schemaService.isEventValid(resourceAsString("schemas/event-dummy-valid.json"), "dummy"),
isValid -> !isValid,
DEFAULT_TRYING_TIMEOUT, DEFAULT_TRYING_TRIES);
}
@@ -129,7 +129,7 @@ public class InputValidationIT extends BaseIT {
schemaService.saveSchema(resourceAsString("schemas/schema-dummy.json"));
schemaService.saveSchema(resourceAsString("schemas/schema-dummy-properties.json"));
keepTrying("Event should be valid",
- () -> schemaService.isValid(resourceAsString("schemas/event-dummy-valid.json"), "https://unomi.apache.org/schemas/json/events/dummy/1-0-0"),
+ () -> schemaService.isEventValid(resourceAsString("schemas/event-dummy-valid.json"), "dummy"),
isValid -> isValid,
DEFAULT_TRYING_TIMEOUT, DEFAULT_TRYING_TRIES);
@@ -137,10 +137,10 @@ public class InputValidationIT extends BaseIT {
doPOSTRequestTest(EVENT_COLLECTOR_URL, null, "/validation/eventcollector_request_size_valid.json", 200, null);
// remove schemas
- schemaService.deleteSchema("https://unomi.apache.org/schemas/json/events/dummy/1-0-0");
- schemaService.deleteSchema("https://unomi.apache.org/schemas/json/events/dummy/properties/1-0-0");
+ schemaService.deleteSchema("https://vendor.test.com/schemas/json/events/dummy/1-0-0");
+ schemaService.deleteSchema("https://vendor.test.com/schemas/json/events/dummy/properties/1-0-0");
keepTrying("Event should be invalid",
- () -> schemaService.isValid(resourceAsString("schemas/event-dummy-valid.json"), "https://unomi.apache.org/schemas/json/events/dummy/1-0-0"),
+ () -> schemaService.isEventValid(resourceAsString("schemas/event-dummy-valid.json"), "dummy"),
isValid -> !isValid,
DEFAULT_TRYING_TIMEOUT, DEFAULT_TRYING_TRIES);
}
diff --git a/itests/src/test/java/org/apache/unomi/itests/JSONSchemaIT.java b/itests/src/test/java/org/apache/unomi/itests/JSONSchemaIT.java
index d323af407..4cc9f15fe 100644
--- a/itests/src/test/java/org/apache/unomi/itests/JSONSchemaIT.java
+++ b/itests/src/test/java/org/apache/unomi/itests/JSONSchemaIT.java
@@ -66,36 +66,36 @@ public class JSONSchemaIT extends BaseIT {
// ensure all schemas have been cleaned from schemaService.
keepTrying("Should not find json schemas anymore",
() -> schemaService.getInstalledJsonSchemaIds(),
- (list) -> (!list.contains("https://unomi.apache.org/schemas/json/events/dummy/1-0-0") &&
- !list.contains("https://unomi.apache.org/schemas/json/events/dummy/properties/1-0-0")),
+ (list) -> (!list.contains("https://vendor.test.com/schemas/json/events/dummy/1-0-0") &&
+ !list.contains("https://vendor.test.com/schemas/json/events/dummy/properties/1-0-0")),
DEFAULT_TRYING_TIMEOUT, DEFAULT_TRYING_TRIES);
}
@Test
public void testValidation_SaveDeleteSchemas() throws InterruptedException, IOException {
// check that event is not valid at first
- assertFalse(schemaService.isValid(resourceAsString("schemas/event-dummy-valid.json"), "https://unomi.apache.org/schemas/json/events/dummy/1-0-0"));
+ assertFalse(schemaService.isEventValid(resourceAsString("schemas/event-dummy-valid.json"), "dummy"));
// Push schemas
schemaService.saveSchema(resourceAsString("schemas/schema-dummy.json"));
schemaService.saveSchema(resourceAsString("schemas/schema-dummy-properties.json"));
keepTrying("Event should be valid",
- () -> schemaService.isValid(resourceAsString("schemas/event-dummy-valid.json"), "https://unomi.apache.org/schemas/json/events/dummy/1-0-0"),
+ () -> schemaService.isEventValid(resourceAsString("schemas/event-dummy-valid.json"), "dummy"),
isValid -> isValid,
DEFAULT_TRYING_TIMEOUT, DEFAULT_TRYING_TRIES);
// Test multiple invalid event:
// unevaluated property at root:
- assertFalse(schemaService.isValid(resourceAsString("schemas/event-dummy-invalid-1.json"), "https://unomi.apache.org/schemas/json/events/dummy/1-0-0"));
+ assertFalse(schemaService.isEventValid(resourceAsString("schemas/event-dummy-invalid-1.json"), "dummy"));
// unevaluated property in properties:
- assertFalse(schemaService.isValid(resourceAsString("schemas/event-dummy-invalid-2.json"), "https://unomi.apache.org/schemas/json/events/dummy/1-0-0"));
+ assertFalse(schemaService.isEventValid(resourceAsString("schemas/event-dummy-invalid-2.json"), "dummy"));
// bad type number but should be string:
- assertFalse(schemaService.isValid(resourceAsString("schemas/event-dummy-invalid-3.json"), "https://unomi.apache.org/schemas/json/events/dummy/1-0-0"));
+ assertFalse(schemaService.isEventValid(resourceAsString("schemas/event-dummy-invalid-3.json"), "dummy"));
// remove one of the schema:
- assertTrue(schemaService.deleteSchema("https://unomi.apache.org/schemas/json/events/dummy/properties/1-0-0"));
+ assertTrue(schemaService.deleteSchema("https://vendor.test.com/schemas/json/events/dummy/properties/1-0-0"));
keepTrying("Event should be invalid since of the schema have been deleted",
- () -> schemaService.isValid(resourceAsString("schemas/event-dummy-valid.json"), "https://unomi.apache.org/schemas/json/events/dummy/1-0-0"),
+ () -> schemaService.isEventValid(resourceAsString("schemas/event-dummy-valid.json"), "dummy"),
isValid -> !isValid,
DEFAULT_TRYING_TIMEOUT, DEFAULT_TRYING_TRIES);
}
@@ -103,23 +103,23 @@ public class JSONSchemaIT extends BaseIT {
@Test
public void testValidation_UpdateSchema() throws InterruptedException, IOException {
// check that event is not valid at first
- assertFalse(schemaService.isValid(resourceAsString("schemas/event-dummy-valid.json"), "https://unomi.apache.org/schemas/json/events/dummy/1-0-0"));
+ assertFalse(schemaService.isEventValid(resourceAsString("schemas/event-dummy-valid.json"), "dummy"));
// Push schemas
schemaService.saveSchema(resourceAsString("schemas/schema-dummy.json"));
schemaService.saveSchema(resourceAsString("schemas/schema-dummy-properties.json"));
keepTrying("Event should be valid",
- () -> schemaService.isValid(resourceAsString("schemas/event-dummy-valid.json"), "https://unomi.apache.org/schemas/json/events/dummy/1-0-0"),
+ () -> schemaService.isEventValid(resourceAsString("schemas/event-dummy-valid.json"), "dummy"),
isValid -> isValid,
DEFAULT_TRYING_TIMEOUT, DEFAULT_TRYING_TRIES);
// Test the invalid event, that use the new prop "invalidPropName" in properties:
- assertFalse(schemaService.isValid(resourceAsString("schemas/event-dummy-invalid-2.json"), "https://unomi.apache.org/schemas/json/events/dummy/1-0-0"));
+ assertFalse(schemaService.isEventValid(resourceAsString("schemas/event-dummy-invalid-2.json"), "dummy"));
// update the schema to allow "invalidPropName":
schemaService.saveSchema(resourceAsString("schemas/schema-dummy-properties-updated.json"));
keepTrying("Event should be valid since of the schema have been updated",
- () -> schemaService.isValid(resourceAsString("schemas/event-dummy-invalid-2.json"), "https://unomi.apache.org/schemas/json/events/dummy/1-0-0"),
+ () -> schemaService.isEventValid(resourceAsString("schemas/event-dummy-invalid-2.json"), "dummy"),
isValid -> isValid,
DEFAULT_TRYING_TIMEOUT, DEFAULT_TRYING_TRIES);
}
@@ -130,25 +130,25 @@ public class JSONSchemaIT extends BaseIT {
schemaService.saveSchema(resourceAsString("schemas/schema-dummy.json"));
schemaService.saveSchema(resourceAsString("schemas/schema-dummy-properties.json"));
keepTrying("Event should be valid",
- () -> schemaService.isValid(resourceAsString("schemas/event-dummy-valid.json"), "https://unomi.apache.org/schemas/json/events/dummy/1-0-0"),
+ () -> schemaService.isEventValid(resourceAsString("schemas/event-dummy-valid.json"), "dummy"),
isValid -> isValid,
DEFAULT_TRYING_TIMEOUT, DEFAULT_TRYING_TRIES);
// check that extended event is not valid at first
- assertFalse(schemaService.isValid(resourceAsString("schemas/event-dummy-extended.json"), "https://unomi.apache.org/schemas/json/events/dummy/1-0-0"));
+ assertFalse(schemaService.isEventValid(resourceAsString("schemas/event-dummy-extended.json"), "dummy"));
// register both extensions (for root event and the properties level)
schemaService.saveSchema(resourceAsString("schemas/schema-dummy-extension.json"));
schemaService.saveSchema(resourceAsString("schemas/schema-dummy-properties-extension.json"));
keepTrying("Extended event should be valid since of the extensions have been deployed",
- () -> schemaService.isValid(resourceAsString("schemas/event-dummy-extended.json"), "https://unomi.apache.org/schemas/json/events/dummy/1-0-0"),
+ () -> schemaService.isEventValid(resourceAsString("schemas/event-dummy-extended.json"), "dummy"),
isValid -> isValid,
DEFAULT_TRYING_TIMEOUT, DEFAULT_TRYING_TRIES);
// delete one of the extension
- schemaService.deleteSchema("https://unomi.apache.org/schemas/json/events/dummy/properties/extension/1-0-0");
+ schemaService.deleteSchema("https://vendor.test.com/schemas/json/events/dummy/properties/extension/1-0-0");
keepTrying("Extended event should be invalid again, one necessary extension have been removed",
- () -> schemaService.isValid(resourceAsString("schemas/event-dummy-extended.json"), "https://unomi.apache.org/schemas/json/events/dummy/1-0-0"),
+ () -> schemaService.isEventValid(resourceAsString("schemas/event-dummy-extended.json"), "dummy"),
isValid -> !isValid,
DEFAULT_TRYING_TIMEOUT, DEFAULT_TRYING_TRIES);
}
@@ -159,28 +159,28 @@ public class JSONSchemaIT extends BaseIT {
schemaService.saveSchema(resourceAsString("schemas/schema-dummy.json"));
schemaService.saveSchema(resourceAsString("schemas/schema-dummy-properties.json"));
keepTrying("Event should be valid",
- () -> schemaService.isValid(resourceAsString("schemas/event-dummy-valid.json"), "https://unomi.apache.org/schemas/json/events/dummy/1-0-0"),
+ () -> schemaService.isEventValid(resourceAsString("schemas/event-dummy-valid.json"), "dummy"),
isValid -> isValid,
DEFAULT_TRYING_TIMEOUT, DEFAULT_TRYING_TRIES);
// check that extended event is not valid at first
- assertFalse(schemaService.isValid(resourceAsString("schemas/event-dummy-extended.json"), "https://unomi.apache.org/schemas/json/events/dummy/1-0-0"));
+ assertFalse(schemaService.isEventValid(resourceAsString("schemas/event-dummy-extended.json"), "dummy"));
// register both extensions (for root event and the properties level)
schemaService.saveSchema(resourceAsString("schemas/schema-dummy-extension.json"));
schemaService.saveSchema(resourceAsString("schemas/schema-dummy-properties-extension.json"));
keepTrying("Extended event should be valid since of the extensions have been deployed",
- () -> schemaService.isValid(resourceAsString("schemas/event-dummy-extended.json"), "https://unomi.apache.org/schemas/json/events/dummy/1-0-0"),
+ () -> schemaService.isEventValid(resourceAsString("schemas/event-dummy-extended.json"), "dummy"),
isValid -> isValid,
DEFAULT_TRYING_TIMEOUT, DEFAULT_TRYING_TRIES);
// check that extended event 2 is not valid due to usage of unevaluatedProperty not bring by schemas or extensions
- assertFalse(schemaService.isValid(resourceAsString("schemas/event-dummy-extended-2.json"), "https://unomi.apache.org/schemas/json/events/dummy/1-0-0"));
+ assertFalse(schemaService.isEventValid(resourceAsString("schemas/event-dummy-extended-2.json"), "dummy"));
// Update extensions to allow the extended event 2
schemaService.saveSchema(resourceAsString("schemas/schema-dummy-properties-extension-2.json"));
keepTrying("Extended event 2 should be valid since of the extensions have been updated",
- () -> schemaService.isValid(resourceAsString("schemas/event-dummy-extended-2.json"), "https://unomi.apache.org/schemas/json/events/dummy/1-0-0"),
+ () -> schemaService.isEventValid(resourceAsString("schemas/event-dummy-extended-2.json"), "dummy"),
isValid -> isValid,
DEFAULT_TRYING_TIMEOUT, DEFAULT_TRYING_TRIES);
}
@@ -193,7 +193,7 @@ public class JSONSchemaIT extends BaseIT {
@Test
public void testEndPoint_SaveDelete() throws InterruptedException, IOException {
- assertNull(schemaService.getSchema("https://unomi.apache.org/schemas/json/events/dummy/1-0-0"));
+ assertNull(schemaService.getSchema("https://vendor.test.com/schemas/json/events/dummy/1-0-0"));
// Post schema using REST call
try(CloseableHttpResponse response = post(JSONSCHEMA_URL, "schemas/schema-dummy.json", ContentType.TEXT_PLAIN)) {
@@ -201,17 +201,17 @@ public class JSONSchemaIT extends BaseIT {
}
// See schema is available
- keepTrying("Schema should have been created", () -> schemaService.getSchema("https://unomi.apache.org/schemas/json/events/dummy/1-0-0"),
+ keepTrying("Schema should have been created", () -> schemaService.getSchema("https://vendor.test.com/schemas/json/events/dummy/1-0-0"),
Objects::nonNull, DEFAULT_TRYING_TIMEOUT, DEFAULT_TRYING_TRIES);
// Delete Schema using REST call
String encodedString = Base64.getEncoder()
- .encodeToString("https://unomi.apache.org/schemas/json/events/dummy/1-0-0".getBytes());
+ .encodeToString("https://vendor.test.com/schemas/json/events/dummy/1-0-0".getBytes());
CloseableHttpResponse response = delete(JSONSCHEMA_URL + "/" + encodedString);
assertEquals("Invalid response code", 204, response.getStatusLine().getStatusCode());
waitForNullValue("Schema should have been deleted",
- () -> schemaService.getSchema("https://unomi.apache.org/schemas/json/events/dummy/1-0-0"),
+ () -> schemaService.getSchema("https://vendor.test.com/schemas/json/events/dummy/1-0-0"),
DEFAULT_TRYING_TIMEOUT,
DEFAULT_TRYING_TRIES);
}
diff --git a/itests/src/test/resources/schemas/schema-dummy-extension.json b/itests/src/test/resources/schemas/schema-dummy-extension.json
index 3c6f06d86..f3a4c60ea 100644
--- a/itests/src/test/resources/schemas/schema-dummy-extension.json
+++ b/itests/src/test/resources/schemas/schema-dummy-extension.json
@@ -1,11 +1,11 @@
{
- "$id": "https://unomi.apache.org/schemas/json/events/dummy/extension/1-0-0",
+ "$id": "https://vendor.test.com/schemas/json/events/dummy/extension/1-0-0",
"$schema": "https://json-schema.org/draft/2019-09/schema",
"self":{
- "vendor":"org.apache.unomi",
+ "vendor":"com.vendor.test",
"name":"dummyExtension",
"format":"jsonschema",
- "extends": "https://unomi.apache.org/schemas/json/events/dummy/1-0-0",
+ "extends": "https://vendor.test.com/schemas/json/events/dummy/1-0-0",
"version":"1-0-0"
},
"title": "DummyEventExtension",
diff --git a/itests/src/test/resources/schemas/schema-dummy-properties-extension-2.json b/itests/src/test/resources/schemas/schema-dummy-properties-extension-2.json
index 427a7f633..c2541c4f7 100644
--- a/itests/src/test/resources/schemas/schema-dummy-properties-extension-2.json
+++ b/itests/src/test/resources/schemas/schema-dummy-properties-extension-2.json
@@ -1,12 +1,12 @@
{
- "$id": "https://unomi.apache.org/schemas/json/events/dummy/properties/extension/1-0-0",
+ "$id": "https://vendor.test.com/schemas/json/events/dummy/properties/extension/1-0-0",
"$schema": "https://json-schema.org/draft/2019-09/schema",
"self": {
- "vendor": "org.modules.jahia",
+ "vendor": "com.vendor.test",
"name": "dummyPropertiesExtension",
"format": "jsonschema",
"version": "1-0-0",
- "extends": "https://unomi.apache.org/schemas/json/events/dummy/properties/1-0-0"
+ "extends": "https://vendor.test.com/schemas/json/events/dummy/properties/1-0-0"
},
"title": "dummyPropertiesExtension",
"type": "object",
diff --git a/itests/src/test/resources/schemas/schema-dummy-properties-extension.json b/itests/src/test/resources/schemas/schema-dummy-properties-extension.json
index 469cc7d29..524fff437 100644
--- a/itests/src/test/resources/schemas/schema-dummy-properties-extension.json
+++ b/itests/src/test/resources/schemas/schema-dummy-properties-extension.json
@@ -1,12 +1,12 @@
{
- "$id": "https://unomi.apache.org/schemas/json/events/dummy/properties/extension/1-0-0",
+ "$id": "https://vendor.test.com/schemas/json/events/dummy/properties/extension/1-0-0",
"$schema": "https://json-schema.org/draft/2019-09/schema",
"self": {
- "vendor": "org.modules.jahia",
+ "vendor": "com.vendor.test",
"name": "dummyPropertiesExtension",
"format": "jsonschema",
"version": "1-0-0",
- "extends": "https://unomi.apache.org/schemas/json/events/dummy/properties/1-0-0"
+ "extends": "https://vendor.test.com/schemas/json/events/dummy/properties/1-0-0"
},
"title": "dummyPropertiesExtension",
"type": "object",
diff --git a/itests/src/test/resources/schemas/schema-dummy-properties-updated.json b/itests/src/test/resources/schemas/schema-dummy-properties-updated.json
index f92c2f9d2..d1482be34 100644
--- a/itests/src/test/resources/schemas/schema-dummy-properties-updated.json
+++ b/itests/src/test/resources/schemas/schema-dummy-properties-updated.json
@@ -1,8 +1,8 @@
{
- "$id": "https://unomi.apache.org/schemas/json/events/dummy/properties/1-0-0",
+ "$id": "https://vendor.test.com/schemas/json/events/dummy/properties/1-0-0",
"$schema": "https://json-schema.org/draft/2019-09/schema",
"self": {
- "vendor": "org.modules.jahia",
+ "vendor": "com.vendor.test",
"name": "dummyProperties",
"format": "jsonschema",
"version": "1-0-0"
diff --git a/itests/src/test/resources/schemas/schema-dummy-properties.json b/itests/src/test/resources/schemas/schema-dummy-properties.json
index f5cd6121d..8a1965d0d 100644
--- a/itests/src/test/resources/schemas/schema-dummy-properties.json
+++ b/itests/src/test/resources/schemas/schema-dummy-properties.json
@@ -1,8 +1,8 @@
{
- "$id": "https://unomi.apache.org/schemas/json/events/dummy/properties/1-0-0",
+ "$id": "https://vendor.test.com/schemas/json/events/dummy/properties/1-0-0",
"$schema": "https://json-schema.org/draft/2019-09/schema",
"self": {
- "vendor": "org.modules.jahia",
+ "vendor": "com.vendor.test",
"name": "dummyProperties",
"format": "jsonschema",
"version": "1-0-0"
diff --git a/itests/src/test/resources/schemas/schema-dummy.json b/itests/src/test/resources/schemas/schema-dummy.json
index 6e133b25f..5b371010e 100644
--- a/itests/src/test/resources/schemas/schema-dummy.json
+++ b/itests/src/test/resources/schemas/schema-dummy.json
@@ -1,8 +1,8 @@
{
- "$id": "https://unomi.apache.org/schemas/json/events/dummy/1-0-0",
+ "$id": "https://vendor.test.com/schemas/json/events/dummy/1-0-0",
"$schema": "https://json-schema.org/draft/2019-09/schema",
"self":{
- "vendor":"org.apache.unomi",
+ "vendor":"com.vendor.test",
"name":"dummy",
"format":"jsonschema",
"target":"events",
@@ -15,7 +15,7 @@
],
"properties": {
"properties": {
- "$ref": "https://unomi.apache.org/schemas/json/events/dummy/properties/1-0-0"
+ "$ref": "https://vendor.test.com/schemas/json/events/dummy/properties/1-0-0"
}
},
"unevaluatedProperties": false
diff --git a/itests/src/test/resources/schemas/schema-invalid-name.json b/itests/src/test/resources/schemas/schema-invalid-name.json
index 5712c5ed5..1204cef2e 100644
--- a/itests/src/test/resources/schemas/schema-invalid-name.json
+++ b/itests/src/test/resources/schemas/schema-invalid-name.json
@@ -1,8 +1,8 @@
{
- "$id": "https://unomi.apache.org/schemas/json/events/invalidName/1-0-0",
+ "$id": "https://vendor.test.com/schemas/json/events/invalidName/1-0-0",
"$schema": "https://json-schema.org/draft/2019-09/schema",
"self":{
- "vendor":"org.apache.unomi",
+ "vendor":"com.vendor.test",
"name":"events/invalidName",
"format":"jsonschema",
"target":"events",
diff --git a/itests/src/test/resources/schemas/schema-invalid.json b/itests/src/test/resources/schemas/schema-invalid.json
index 82aa7664b..13ee944c4 100644
--- a/itests/src/test/resources/schemas/schema-invalid.json
+++ b/itests/src/test/resources/schemas/schema-invalid.json
@@ -1,7 +1,7 @@
{
"$schema": "https://json-schema.org/draft/2019-09/schema",
"self":{
- "vendor":"org.apache.unomi",
+ "vendor":"com.vendor.test",
"name":"invalid",
"format":"jsonschema",
"version":"1-0-0"
diff --git a/rest/src/main/java/org/apache/unomi/rest/deserializers/ContextRequestDeserializer.java b/rest/src/main/java/org/apache/unomi/rest/deserializers/ContextRequestDeserializer.java
index 4bd94aec1..786744278 100644
--- a/rest/src/main/java/org/apache/unomi/rest/deserializers/ContextRequestDeserializer.java
+++ b/rest/src/main/java/org/apache/unomi/rest/deserializers/ContextRequestDeserializer.java
@@ -28,6 +28,7 @@ import org.apache.unomi.api.Item;
import org.apache.unomi.api.Profile;
import org.apache.unomi.api.services.PersonalizationService;
import org.apache.unomi.rest.exception.InvalidRequestException;
+import org.apache.unomi.schema.api.JsonSchemaWrapper;
import org.apache.unomi.schema.api.SchemaService;
import java.io.IOException;
@@ -86,7 +87,7 @@ public class ContextRequestDeserializer extends StdDeserializer<ContextRequest>
ArrayNode events = (ArrayNode) eventsNode;
List<Event> filteredEvents = new ArrayList<>();
for (JsonNode event : events) {
- if (schemaService.isValid(event.toString(), "https://unomi.apache.org/schemas/json/events/" + event.get("eventType").textValue() + "/1-0-0")) {
+ if (schemaService.isEventValid(event.toString(), event.get("eventType").textValue())) {
filteredEvents.add(jsonParser.getCodec().treeToValue(event, Event.class));
}
}
diff --git a/rest/src/main/java/org/apache/unomi/rest/deserializers/EventsCollectorRequestDeserializer.java b/rest/src/main/java/org/apache/unomi/rest/deserializers/EventsCollectorRequestDeserializer.java
index 20d808d8a..28b96fb0f 100644
--- a/rest/src/main/java/org/apache/unomi/rest/deserializers/EventsCollectorRequestDeserializer.java
+++ b/rest/src/main/java/org/apache/unomi/rest/deserializers/EventsCollectorRequestDeserializer.java
@@ -59,7 +59,7 @@ public class EventsCollectorRequestDeserializer extends StdDeserializer<EventsCo
final JsonNode eventsNode = node.get("events");
if (eventsNode instanceof ArrayNode) {
for (JsonNode event : eventsNode) {
- if (schemaService.isValid(event.toString(), "https://unomi.apache.org/schemas/json/events/" + event.get("eventType").textValue() + "/1-0-0")) {
+ if (schemaService.isEventValid(event.toString(), event.get("eventType").textValue())) {
filteredEvents.add(jsonParser.getCodec().treeToValue(event, Event.class));
}
}