diff --git a/errai-jaxrs/errai-jaxrs-client/src/main/java/org/jboss/errai/enterprise/client/jaxrs/JacksonTransformer.java b/errai-jaxrs/errai-jaxrs-client/src/main/java/org/jboss/errai/enterprise/client/jaxrs/JacksonTransformer.java index c3a5f90dd1..44aa103e33 100644 --- a/errai-jaxrs/errai-jaxrs-client/src/main/java/org/jboss/errai/enterprise/client/jaxrs/JacksonTransformer.java +++ b/errai-jaxrs/errai-jaxrs-client/src/main/java/org/jboss/errai/enterprise/client/jaxrs/JacksonTransformer.java @@ -141,6 +141,7 @@ else if (k.equals(ENUM_STRING_VALUE) || k.equals(NUMERIC_VALUE)) { if (parent != null) { parent.put(key, obj.get(k)); } + return toJackson(obj.get(k), k, obj, objectCache); } else if (k.equals(QUALIFIED_VALUE)) { if (parent != null) { @@ -174,7 +175,7 @@ else if (k.startsWith(SerializationParts.EMBEDDED_JSON)) { } } - return cleanUpEmbeddedJson(obj); + return (obj != null) ? cleanUpEmbeddedJson(obj) : val; } private static JSONObject cleanUpEmbeddedJson(JSONObject obj) { diff --git a/errai-jaxrs/errai-jaxrs-client/src/test/java/org/jboss/errai/enterprise/jaxrs/client/shared/entity/User.java b/errai-jaxrs/errai-jaxrs-client/src/test/java/org/jboss/errai/enterprise/jaxrs/client/shared/entity/User.java index 6557453a65..aa15855d1b 100644 --- a/errai-jaxrs/errai-jaxrs-client/src/test/java/org/jboss/errai/enterprise/jaxrs/client/shared/entity/User.java +++ b/errai-jaxrs/errai-jaxrs-client/src/test/java/org/jboss/errai/enterprise/jaxrs/client/shared/entity/User.java @@ -53,6 +53,16 @@ public enum Gender { private Map friendsNameMap = new HashMap(); private Map friendsMap = new HashMap(); + + private List genders; + + public List getGenders() { + return genders; + } + + public void setGenders(List genders) { + this.genders = genders; + } private Integer age; private boolean alive = true; @@ -263,6 +273,12 @@ else if (!friends.equals(other.friends)) } else if (!friendsMap.equals(other.friendsMap)) return false; + if (genders == null) { + if (other.genders != null) + return false; + } + else if (!genders.equals(other.genders)) + return false; if (friendsNameMap == null) { if (other.friendsNameMap != null) return false; diff --git a/errai-jaxrs/errai-jaxrs-client/src/test/java/org/jboss/errai/enterprise/jaxrs/client/test/JacksonIntegrationTest.java b/errai-jaxrs/errai-jaxrs-client/src/test/java/org/jboss/errai/enterprise/jaxrs/client/test/JacksonIntegrationTest.java index f69b3c4607..c1dba366df 100644 --- a/errai-jaxrs/errai-jaxrs-client/src/test/java/org/jboss/errai/enterprise/jaxrs/client/test/JacksonIntegrationTest.java +++ b/errai-jaxrs/errai-jaxrs-client/src/test/java/org/jboss/errai/enterprise/jaxrs/client/test/JacksonIntegrationTest.java @@ -99,8 +99,14 @@ public void testJacksonMarshalling() { put("friend2-first", friend2); } }); + + List genders = new ArrayList(); + genders.add(Gender.MALE); + genders.add(Gender.FEMALE); + user.setGenders(genders); String jackson = MarshallingWrapper.toJSON(user); + call(JacksonTestService.class, new RemoteCallback() { @Override diff --git a/errai-marshalling/src/main/java/org/jboss/errai/marshalling/client/marshallers/AbstractCollectionMarshaller.java b/errai-marshalling/src/main/java/org/jboss/errai/marshalling/client/marshallers/AbstractCollectionMarshaller.java index daf07b5974..0ab2c68d5f 100644 --- a/errai-marshalling/src/main/java/org/jboss/errai/marshalling/client/marshallers/AbstractCollectionMarshaller.java +++ b/errai-marshalling/src/main/java/org/jboss/errai/marshalling/client/marshallers/AbstractCollectionMarshaller.java @@ -72,12 +72,15 @@ protected > T marshallToCollection(final T collecti type = assumedElementType; } } + else { + type = assumedElementType; + } if (type == null) { type = ctx.determineTypeFor(null, elem); } - // the assumed element type can only be used once since they it is not set for nested collections. + // the assumed element type can only be used once since it is not set for nested collections. ctx.setAssumedElementType(null); final Marshaller marshallerInstance = ctx.getMarshallerInstance(type); if (marshallerInstance == null) {