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/31 07:45:10 UTC

[unomi] branch master updated: UNOMI-578: Allow for external vendor for JSON schemas deployed into t… (#430)

This is an automated email from the ASF dual-hosted git repository.

jkevan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/unomi.git


The following commit(s) were added to refs/heads/master by this push:
     new 3351b6c54 UNOMI-578: Allow for external vendor for JSON schemas deployed into t… (#430)
3351b6c54 is described below

commit 3351b6c54243ccf5dabf13755d44045059359211
Author: kevan Jahanshahi <ke...@jahia.com>
AuthorDate: Tue May 31 09:45:05 2022 +0200

    UNOMI-578: Allow for external vendor for JSON schemas deployed into t… (#430)
    
    * UNOMI-578: Allow for external vendor for JSON schemas deployed into the system
    
    * 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/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 +-
 15 files changed, 115 insertions(+), 59 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/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));
                 }
             }