Skip to content

YAML Anchor, reference fails with simple example #123 -- INVALID #296

@vitaliy-sk

Description

@vitaliy-sk

Issue #123 reproducible on 2.13.0

Code sample:

package test;

import com.fasterxml.jackson.annotation.JsonIdentityInfo;
import com.fasterxml.jackson.annotation.ObjectIdGenerators;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;

public class Test {

    static class ScratchModel {
        public StringHolder foo;
        public StringHolder boo;
    }

    @JsonIdentityInfo(generator = ObjectIdGenerators.None.class)
    static class StringHolder {
        public String value;

        @Override
        public String toString() {
            return value;
        }
    }

    public void testObjectIdUsingNative() throws Exception
    {
        final String YAML_CONTENT =
                "foo: &foo1\n" +
                        "  value: bar\n" +
                        "boo: *foo1\n";
        System.out.println(YAML_CONTENT);
        System.out.println("---");
        ObjectMapper om = new ObjectMapper(new YAMLFactory());
        ScratchModel result = om.readValue(YAML_CONTENT, ScratchModel.class);
        System.out.println(result);
    }

    public static void main(String[] args) throws Exception {
        new Test().testObjectIdUsingNative();
    }

}

Output:

foo: &foo1
  value: bar
boo: *foo1

---
Exception in thread "main" com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `test.Test$StringHolder` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('foo1')
 at [Source: (StringReader); line: 3, column: 6] (through reference chain: test.Test$ScratchModel["boo"])
	at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:63)
	at com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1588)
	at com.fasterxml.jackson.databind.DeserializationContext.handleMissingInstantiator(DeserializationContext.java:1213)
	at com.fasterxml.jackson.databind.deser.std.StdDeserializer._deserializeFromString(StdDeserializer.java:311)
	at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromString(BeanDeserializerBase.java:1495)
	at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeOther(BeanDeserializer.java:207)
	at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:197)
	at com.fasterxml.jackson.databind.deser.impl.FieldProperty.deserializeAndSet(FieldProperty.java:138)
	at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:324)
	at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:187)
	at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:322)
	at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4593)
	at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3548)
	at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3516)
	at test.Test.testObjectIdUsingNative(Test.java:34)
	at test.Test.main(Test.java:39)

Metadata

Metadata

Assignees

No one assigned

    Labels

    3.xduplicateIssue is (closed as) a duplicate of another issueyamlIssue related to YAML format backend

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions