You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@unomi.apache.org by js...@apache.org on 2023/05/02 12:53:11 UTC

[unomi] branch UNOMI-775-add-validation-endpoint updated: feedbacks

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

jsinovassinnaik pushed a commit to branch UNOMI-775-add-validation-endpoint
in repository https://gitbox.apache.org/repos/asf/unomi.git


The following commit(s) were added to refs/heads/UNOMI-775-add-validation-endpoint by this push:
     new 61519b3ba feedbacks
61519b3ba is described below

commit 61519b3bac0fd2df84de734963bd72b354e29504
Author: jsinovassin <js...@jahia.com>
AuthorDate: Tue May 2 11:03:38 2023 +0200

    feedbacks
---
 .../unomi/schema/rest/JsonSchemaEndPoint.java      |  2 +-
 .../apache/unomi/schema/api/ValidationError.java   | 12 +++-----
 .../unomi/schema/api/ValidationException.java      | 16 +++++++++++
 .../unomi/schema/impl/SchemaServiceImpl.java       | 32 +++++++++++-----------
 4 files changed, 37 insertions(+), 25 deletions(-)

diff --git a/extensions/json-schema/rest/src/main/java/org/apache/unomi/schema/rest/JsonSchemaEndPoint.java b/extensions/json-schema/rest/src/main/java/org/apache/unomi/schema/rest/JsonSchemaEndPoint.java
index c157370fd..4064edf20 100644
--- a/extensions/json-schema/rest/src/main/java/org/apache/unomi/schema/rest/JsonSchemaEndPoint.java
+++ b/extensions/json-schema/rest/src/main/java/org/apache/unomi/schema/rest/JsonSchemaEndPoint.java
@@ -149,7 +149,7 @@ public class JsonSchemaEndPoint {
         try {
             return schemaService.validateEvents(events);
         } catch (Exception e) {
-            String errorMessage = "Unable to validate event: " + e.getMessage();
+            String errorMessage = "Unable to validate events: " + e.getMessage();
             throw new InvalidRequestException(errorMessage, errorMessage);
         }
     }
diff --git a/extensions/json-schema/services/src/main/java/org/apache/unomi/schema/api/ValidationError.java b/extensions/json-schema/services/src/main/java/org/apache/unomi/schema/api/ValidationError.java
index 259c4cfdf..7adfabef1 100644
--- a/extensions/json-schema/services/src/main/java/org/apache/unomi/schema/api/ValidationError.java
+++ b/extensions/json-schema/services/src/main/java/org/apache/unomi/schema/api/ValidationError.java
@@ -27,23 +27,19 @@ import java.io.Serializable;
  */
 public class ValidationError implements Serializable {
 
-    private transient final ValidationMessage validationMessage;
+    private transient final String validationMessage;
 
-    public ValidationError(ValidationMessage validationMessage) {
+    public ValidationError(String validationMessage) {
         this.validationMessage = validationMessage;
     }
 
     public String getError() {
-        return validationMessage.getMessage();
-    }
-
-    public String toString() {
-        return validationMessage.toString();
+        return validationMessage;
     }
 
     public boolean equals(Object o) {
         ValidationError other = (ValidationError) o;
-        return validationMessage.equals(other.validationMessage);
+        return validationMessage.equals(other.getError());
     }
 
     public int hashCode() {
diff --git a/extensions/json-schema/services/src/main/java/org/apache/unomi/schema/api/ValidationException.java b/extensions/json-schema/services/src/main/java/org/apache/unomi/schema/api/ValidationException.java
index d2a278907..c5481da83 100644
--- a/extensions/json-schema/services/src/main/java/org/apache/unomi/schema/api/ValidationException.java
+++ b/extensions/json-schema/services/src/main/java/org/apache/unomi/schema/api/ValidationException.java
@@ -22,10 +22,18 @@ package org.apache.unomi.schema.api;
  * Or when we can't perform the validation due to missing data or invalid required data
  */
 public class ValidationException extends Exception {
+
+    private String eventType;
+
     public ValidationException(String message) {
         super(message);
     }
 
+    public ValidationException(String message, String eventType) {
+        super(message);
+        this.eventType = eventType;
+    }
+
     public ValidationException(Throwable throwable) {
         super(throwable);
     }
@@ -33,4 +41,12 @@ public class ValidationException extends Exception {
     public ValidationException(String message, Throwable throwable) {
         super(message, throwable);
     }
+
+    public void setEventType(String eventType) {
+        this.eventType = eventType;
+    }
+
+    public String getEventType() {
+        return eventType;
+    }
 }
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 7da059fa6..d4b695a4d 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
@@ -52,6 +52,8 @@ public class SchemaServiceImpl implements SchemaService {
     private static final Logger logger = LoggerFactory.getLogger(SchemaServiceImpl.class.getName());
     private static final String TARGET_EVENTS = "events";
 
+    private static final String GENERIC_ERROR_KEY = "error";
+
     ObjectMapper objectMapper = new ObjectMapper();
 
     /**
@@ -120,33 +122,31 @@ public class SchemaServiceImpl implements SchemaService {
         Map<String, Set<ValidationError>> errorsPerEventType = new HashMap<>();
         JsonNode eventsNodes = parseData(events);
         eventsNodes.forEach(event -> {
-            String eventType = event.get("eventType").asText();
             try {
                 Set<ValidationError> errors = validateNodeEvent(event);
-                if (errorsPerEventType.containsKey(eventType)) {
-                    errorsPerEventType.get(eventType).addAll(errors);
-                } else {
-                    errorsPerEventType.put(eventType, errors);
+                if (!errors.isEmpty()) {
+                    String eventType = event.get("eventType").asText();
+                    if (errorsPerEventType.containsKey(eventType)) {
+                        errorsPerEventType.get(eventType).addAll(errors);
+                    } else {
+                        errorsPerEventType.put(eventType, errors);
+                    }
                 }
             } catch (ValidationException e) {
-                Set<ValidationError> errors = buildCustomErrorMessage();
+                Set<ValidationError> errors = buildCustomErrorMessage(e.getMessage());
+                String eventType = e.getEventType() != null ? e.getEventType() : GENERIC_ERROR_KEY;
                 if (errorsPerEventType.containsKey(eventType)) {
                     errorsPerEventType.get(eventType).addAll(errors);
                 } else {
                     errorsPerEventType.put(eventType, errors);
                 }
-                errorsPerEventType.put(eventType, errors);
-
-                logger.debug(e.getMessage());
             }
         });
         return errorsPerEventType;
     }
 
-    private Set<ValidationError> buildCustomErrorMessage() {
-        ValidationMessage.Builder builder = new ValidationMessage.Builder();
-        builder.customMessage("No Schema found for this event type").format(new MessageFormat("Not used pattern. Message format is required"));
-        ValidationError error = new ValidationError(builder.build());
+    private Set<ValidationError> buildCustomErrorMessage(String errorMessage) {
+        ValidationError error = new ValidationError(errorMessage);
         Set<ValidationError> errors = new HashSet<>();
         errors.add(error);
         return errors;
@@ -180,7 +180,7 @@ public class SchemaServiceImpl implements SchemaService {
     @Override
     public JsonSchemaWrapper getSchemaForEventType(String eventType) throws ValidationException {
         if (StringUtils.isEmpty(eventType)) {
-            throw new ValidationException("eventType missing");
+            throw new ValidationException("eventType missing", eventType);
         }
 
         return schemasById.values().stream()
@@ -190,7 +190,7 @@ public class SchemaServiceImpl implements SchemaService {
                                 jsonSchemaWrapper.getName() != null &&
                                 jsonSchemaWrapper.getName().equals(eventType))
                 .findFirst()
-                .orElseThrow(() -> new ValidationException("Schema not found for event type: " + eventType));
+                .orElseThrow(() -> new ValidationException("Schema not found for event type: " + eventType, eventType));
     }
 
     @Override
@@ -240,7 +240,7 @@ public class SchemaServiceImpl implements SchemaService {
 
             return validationMessages != null ?
                     validationMessages.stream()
-                            .map(ValidationError::new)
+                            .map(validationMessage -> new ValidationError(validationMessage.getMessage()))
                             .collect(Collectors.toSet()) :
                     Collections.emptySet();
         } catch (Exception e) {