From fc158749ff63c17359d15c0688c3ad3d7132aa4c Mon Sep 17 00:00:00 2001 From: pkupczyk <pkupczyk> Date: Mon, 18 Jun 2012 14:38:56 +0000 Subject: [PATCH] SP-111 / BIS-49: JSON-RPC - properly handle circular dependencies SVN: 25762 --- .../JsonTypeAndClassDeserializer.java | 22 +++++++++++++------ 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/openbis-common/source/java/ch/systemsx/cisd/common/api/server/json/deserializer/JsonTypeAndClassDeserializer.java b/openbis-common/source/java/ch/systemsx/cisd/common/api/server/json/deserializer/JsonTypeAndClassDeserializer.java index ec50687085e..ab6cb776ebc 100644 --- a/openbis-common/source/java/ch/systemsx/cisd/common/api/server/json/deserializer/JsonTypeAndClassDeserializer.java +++ b/openbis-common/source/java/ch/systemsx/cisd/common/api/server/json/deserializer/JsonTypeAndClassDeserializer.java @@ -20,6 +20,7 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.List; +import java.util.Map; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonProcessingException; @@ -230,16 +231,23 @@ public class JsonTypeAndClassDeserializer extends AsPropertyTypeDeserializer final JsonParser actualJp; final JsonDeserializer<Object> deserializer; - if (t == JsonToken.START_ARRAY && _baseType.getRawClass().equals(Object.class)) - { - JavaType collectionType = - ctxt.getConfig().getTypeFactory().constructRawCollectionType(Collection.class); - deserializer = ctxt.findContextualValueDeserializer(collectionType, _property); - } else + JavaType type = _baseType; + + if (type.getRawClass().equals(Object.class)) { - deserializer = ctxt.findContextualValueDeserializer(_baseType, _property); + if (t == JsonToken.START_ARRAY) + { + type = + ctxt.getConfig().getTypeFactory() + .constructRawCollectionType(Collection.class); + } else if (t == JsonToken.START_OBJECT) + { + type = ctxt.getConfig().getTypeFactory().constructRawMapType(Map.class); + } } + deserializer = ctxt.findContextualValueDeserializer(type, _property); + if (tb != null) { tb.writeEndObject(); -- GitLab