You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by iu...@apache.org on 2021/05/13 08:22:20 UTC

[brooklyn-server] branch master updated: include deserialization trace when hitting deserialization problems

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

iuliana pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/brooklyn-server.git


The following commit(s) were added to refs/heads/master by this push:
     new e29ad66  include deserialization trace when hitting deserialization problems
     new 8d25edd  Merge pull request #1172 from ahgittin/better-errors-on-serialization-problems
e29ad66 is described below

commit e29ad6656544f921c6b2a66194976d8f4335fe17
Author: Alex Heneveld <al...@cloudsoftcorp.com>
AuthorDate: Tue May 11 21:33:04 2021 +0100

    include deserialization trace when hitting deserialization problems
    
    makes it easier to track down the root cause
---
 .../jackson/BrooklynJacksonSerializationUtils.java  | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/core/src/main/java/org/apache/brooklyn/core/resolve/jackson/BrooklynJacksonSerializationUtils.java b/core/src/main/java/org/apache/brooklyn/core/resolve/jackson/BrooklynJacksonSerializationUtils.java
index e8fbb2f..10711cc 100644
--- a/core/src/main/java/org/apache/brooklyn/core/resolve/jackson/BrooklynJacksonSerializationUtils.java
+++ b/core/src/main/java/org/apache/brooklyn/core/resolve/jackson/BrooklynJacksonSerializationUtils.java
@@ -18,13 +18,16 @@
  */
 package org.apache.brooklyn.core.resolve.jackson;
 
+import com.fasterxml.jackson.core.JsonLocation;
 import com.fasterxml.jackson.core.JsonParser;
 import com.fasterxml.jackson.core.JsonToken;
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.*;
 import com.fasterxml.jackson.databind.deser.BeanDeserializerModifier;
+import com.fasterxml.jackson.databind.exc.InvalidDefinitionException;
 import com.fasterxml.jackson.databind.module.SimpleModule;
 import com.google.common.reflect.TypeToken;
+import java.io.Closeable;
 import java.io.IOException;
 import java.lang.reflect.Type;
 import java.util.List;
@@ -38,6 +41,7 @@ import org.apache.brooklyn.util.core.flags.TypeCoercions;
 import org.apache.brooklyn.util.exceptions.Exceptions;
 import org.apache.brooklyn.util.guava.Maybe;
 import org.apache.brooklyn.util.javalang.Boxing;
+import org.apache.brooklyn.util.text.Strings;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -139,6 +143,23 @@ public class BrooklynJacksonSerializationUtils {
         }
 
         @Override
+        public void resolve(DeserializationContext ctxt) throws JsonMappingException {
+            try {
+                super.resolve(ctxt);
+            } catch (JsonMappingException e) {
+                // supplying process or cause causes location to appear multiple times in message,
+                // so clumsy way to maintain a good message and the JsonMappingException type
+                // (though not sure we need to maintain that exception; we already lose subtypes
+                // eg InvalidDefinitionException, but nothing seems to mind)
+                throw (JsonMappingException) new JsonMappingException(
+                        null,
+                        (Strings.isBlank(e.getMessage()) ? e.toString() : e.getMessage()) +
+                        (handledType()!=null ? ", processing "+handledType() : ""),
+                        (JsonLocation)null).initCause(e);
+            }
+        }
+
+        @Override
         protected Object deserializeWrapper(JsonParser jp, DeserializationContext ctxt, BiFunctionThrowsIoException<JsonParser, DeserializationContext, Object> nestedDeserialize) throws IOException {
             String v = jp.getCurrentToken()==JsonToken.VALUE_STRING ? jp.getValueAsString() : null;
             try {