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 <jsinovassinn...@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) {