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

dgriffon 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 3b19d3932 UNOMI-811: change log message for invalid event + add debug 
information on invalid event type. (#652)
3b19d3932 is described below

commit 3b19d39320134f0a887d5c43253e29d43c5363a5
Author: David Griffon <[email protected]>
AuthorDate: Mon Dec 18 09:57:53 2023 +0100

    UNOMI-811: change log message for invalid event + add debug information on 
invalid event type. (#652)
---
 .../unomi/schema/impl/SchemaServiceImpl.java       |  1 +
 .../deserializers/ContextRequestDeserializer.java  | 13 ++-------
 .../EventsCollectorRequestDeserializer.java        |  9 ++-----
 .../java/org/apache/unomi/utils/HttpUtils.java     | 31 +++++++++++++++++++---
 4 files changed, 33 insertions(+), 21 deletions(-)

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 ca54fd243..437274c76 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
@@ -139,6 +139,7 @@ public class SchemaServiceImpl implements SchemaService {
                     }
                 }
             } catch (ValidationException e) {
+                logger.debug("Validation error : {}", e.getMessage());
                 Set<ValidationError> errors = 
buildCustomErrorMessage(e.getMessage());
                 String eventTypeOrErrorKey = eventType != null ? eventType : 
GENERIC_ERROR_KEY;
                 if (errorsPerEventType.containsKey(eventTypeOrErrorKey)) {
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 12ba8347d..4dba00ab0 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
@@ -23,12 +23,12 @@ import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
 import com.fasterxml.jackson.databind.node.ArrayNode;
 import org.apache.unomi.api.ContextRequest;
-import org.apache.unomi.api.Event;
 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.SchemaService;
+import org.apache.unomi.utils.HttpUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -87,16 +87,7 @@ public class ContextRequestDeserializer extends 
StdDeserializer<ContextRequest>
         }
         final JsonNode eventsNode = node.get("events");
         if (eventsNode instanceof ArrayNode) {
-            ArrayNode events = (ArrayNode) eventsNode;
-            List<Event> filteredEvents = new ArrayList<>();
-            for (JsonNode event : events) {
-                if (schemaService.isEventValid(event.toString())) {
-                    
filteredEvents.add(jsonParser.getCodec().treeToValue(event, Event.class));
-                } else {
-                    logger.error("An event was rejected - switch to DEBUG log 
level for more information");
-                }
-            }
-            cr.setEvents(filteredEvents);
+            cr.setEvents(HttpUtils.filterValidEvents((ArrayNode) eventsNode, 
schemaService, jsonParser));
         }
         final JsonNode filtersNode = node.get("filters");
         if (filtersNode instanceof ArrayNode) {
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 b20d6bf07..b55e4f8c5 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
@@ -26,6 +26,7 @@ import org.apache.unomi.api.Event;
 import org.apache.unomi.api.EventsCollectorRequest;
 import org.apache.unomi.rest.exception.InvalidRequestException;
 import org.apache.unomi.schema.api.SchemaService;
+import org.apache.unomi.utils.HttpUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -62,13 +63,7 @@ public class EventsCollectorRequestDeserializer extends 
StdDeserializer<EventsCo
         List<Event> filteredEvents = new ArrayList<>();
         final JsonNode eventsNode = node.get("events");
         if (eventsNode instanceof ArrayNode) {
-            for (JsonNode event : eventsNode) {
-                if (schemaService.isEventValid(event.toString())) {
-                    
filteredEvents.add(jsonParser.getCodec().treeToValue(event, Event.class));
-                } else {
-                    logger.error("An event was rejected - switch to DEBUG log 
level for more information");
-                }
-            }
+            filteredEvents.addAll(HttpUtils.filterValidEvents((ArrayNode) 
eventsNode, schemaService, jsonParser));
         }
         EventsCollectorRequest eventsCollectorRequest = new 
EventsCollectorRequest();
         final JsonNode sessionId = node.get("sessionId");
diff --git a/rest/src/main/java/org/apache/unomi/utils/HttpUtils.java 
b/rest/src/main/java/org/apache/unomi/utils/HttpUtils.java
index 678f3f0d4..87572eb22 100644
--- a/rest/src/main/java/org/apache/unomi/utils/HttpUtils.java
+++ b/rest/src/main/java/org/apache/unomi/utils/HttpUtils.java
@@ -17,24 +17,36 @@
 
 package org.apache.unomi.utils;
 
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.node.ArrayNode;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.unomi.api.Event;
 import org.apache.unomi.api.Profile;
 import org.apache.unomi.api.services.ConfigSharingService;
+import org.apache.unomi.schema.api.SchemaService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpServletRequest;
+import java.util.ArrayList;
 import java.util.Enumeration;
+import java.util.List;
 
 
 /**
  * This is duplicate of the class from the wab bundle, the original file will 
be removed once endpoints forwarded
  */
 public class HttpUtils {
+    private static final Logger logger = 
LoggerFactory.getLogger(HttpUtils.class);
 
     private static final int MAX_COOKIE_AGE_IN_SECONDS = 60 * 60 * 24 * 365; 
// 1 year
 
     /**
      * Utility to dump request info for a given http request.
+     *
      * @param httpServletRequest request to dump
      * @return the info as a String
      */
@@ -87,21 +99,34 @@ public class HttpUtils {
     /**
      * Return the cookie string for the given profile
      * We can't use the build in NewCookie jax-rs object as it does not 
support the SameSite value.
-     * @param profile to parse
+     *
+     * @param profile              to parse
      * @param configSharingService shared config location.
      * @return the cookie string to set in the header.
      */
     public static String getProfileCookieString(Profile profile, 
ConfigSharingService configSharingService, boolean isSecure) {
         final String profileIdCookieDomain = (String) 
configSharingService.getProperty("profileIdCookieDomain");
         final String profileIdCookieName = (String) 
configSharingService.getProperty("profileIdCookieName");
-        final Integer profileIdCookieMaxAgeInSeconds = (Integer) 
configSharingService.getProperty("profileIdCookieMaxAgeInSeconds") ;
+        final Integer profileIdCookieMaxAgeInSeconds = (Integer) 
configSharingService.getProperty("profileIdCookieMaxAgeInSeconds");
         final Boolean profileIdCookieHttpOnly = (Boolean) 
configSharingService.getProperty("profileIdCookieHttpOnly");
         return profileIdCookieName + "=" + profile.getItemId() +
                 "; Path=/" +
                 "; Max-Age=" + profileIdCookieMaxAgeInSeconds +
-                (StringUtils.isNotBlank(profileIdCookieDomain) ? ("; Domain=" 
+ profileIdCookieDomain) : "")  +
+                (StringUtils.isNotBlank(profileIdCookieDomain) ? ("; Domain=" 
+ profileIdCookieDomain) : "") +
                 "; SameSite=Lax" +
                 (isSecure ? "; Secure" : "") +
                 (profileIdCookieHttpOnly ? "; HttpOnly" : "");
     }
+
+    public static List<Event> filterValidEvents(ArrayNode eventsNode, 
SchemaService schemaService, JsonParser jsonParser) throws 
JsonProcessingException {
+        List<Event> filteredEvents = new ArrayList<>();
+        for (JsonNode event : eventsNode) {
+            if (schemaService.isEventValid(event.toString())) {
+                filteredEvents.add(jsonParser.getCodec().treeToValue(event, 
Event.class));
+            } else {
+                logger.error("An event was rejected - switch to DEBUG log 
level for more information OR test the payload of your event against the 
\"validateEvent\" endpoint.");
+            }
+        }
+        return filteredEvents;
+    }
 }

Reply via email to