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:20 UTC

[unomi] branch jsonSchemaVendorHandling created (now 43c505a26)

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

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


      at 43c505a26 UNOMI-578: Allow for external vendor for JSON schemas deployed into the system

This branch includes the following new commits:

     new 43c505a26 UNOMI-578: Allow for external vendor for JSON schemas deployed into the system

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[unomi] 01/01: UNOMI-578: Allow for external vendor for JSON schemas deployed into the system

Posted by jk...@apache.org.
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));
                 }
             }