diff --git a/src/main/java/com/fasterxml/jackson/databind/deser/BeanDeserializerBase.java b/src/main/java/com/fasterxml/jackson/databind/deser/BeanDeserializerBase.java index d473a70028..1e057266c2 100644 --- a/src/main/java/com/fasterxml/jackson/databind/deser/BeanDeserializerBase.java +++ b/src/main/java/com/fasterxml/jackson/databind/deser/BeanDeserializerBase.java @@ -481,7 +481,7 @@ public void resolve(DeserializationContext ctxt) // 18-May-2015, tatu: _Should_ start with consistent set. But can we really // fully count on this? May need to revisit in future; seems to hold for now. for (int i = 0, len = creatorProps.length; i < len; ++i) { - if (creatorProps[i] == origProp) { + if (creatorProps[i] == origProp && prop instanceof CreatorProperty) { creatorProps[i] = prop; break; } diff --git a/src/test/java/com/fasterxml/jackson/databind/creators/TestCreatorsWithIdentity.java b/src/test/java/com/fasterxml/jackson/databind/creators/TestCreatorsWithIdentity.java new file mode 100644 index 0000000000..ed26ed7d0a --- /dev/null +++ b/src/test/java/com/fasterxml/jackson/databind/creators/TestCreatorsWithIdentity.java @@ -0,0 +1,55 @@ +package com.fasterxml.jackson.databind.creators; + +import java.io.IOException; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIdentityInfo; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.ObjectIdGenerators; +import com.fasterxml.jackson.databind.BaseMapTest; +import com.fasterxml.jackson.databind.ObjectMapper; + +/** + * @author dharaburda + */ +public class TestCreatorsWithIdentity extends BaseMapTest { + + @JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="id", scope=Parent.class) + public static class Parent { + @JsonProperty("id") + String id; + + @JsonProperty + String parentProp; + + @JsonCreator + public Parent(@JsonProperty("parentProp") String parentProp) { + this.parentProp = parentProp; + } + } + + + public static class Child { + @JsonProperty + Parent parent; + + @JsonProperty + String childProp; + + @JsonCreator + public Child(@JsonProperty("parent") Parent parent, @JsonProperty("childProp") String childProp) { + this.parent = parent; + this.childProp = childProp; + } + } + + private static final ObjectMapper JSON_MAPPER = new ObjectMapper(); + + public void test() throws IOException { + String parentStr = "{\"id\" : \"1\", \"parentProp\" : \"parent\"}"; + String childStr = "{\"childProp\" : \"child\", \"parent\" : " + parentStr + "}"; + Parent parent = JSON_MAPPER.readValue(parentStr, Parent.class); + Child child = JSON_MAPPER.readValue(childStr, Child.class); + } + +}