Skip to content

MismatchedInputException encountered while deserializing XML to an Enum type using a factory method #682

@WannabeSoftwareEngineer

Description

@WannabeSoftwareEngineer

Hello,
I'm trying to serialize an Enum type to XML, then read it back, but I get an input mismatch error related to JsonCreator.

Could someone provide insights into why deserialization fails?

Any help would is appreciated. Thank you.

Error

com.fasterxml.jackson.databind.exc.MismatchedInputException: Input mismatch reading Enum `com.xxx.yyy.Country`: properties-based `@JsonCreator` ([method com.xxx.yyy.Country#fromValue(java.lang.String)]) expects String Value, got Object value (`JsonToken.START_OBJECT`)

Test

@Test
void aTest() throws JsonProcessingException {
    XmlMapper xmlMapper = new XmlMapper();
    
    String s = xmlMapper.writeValueAsString(Country.ITALY);
    assertThat(s).isEqualTo("<Country>Italy</Country>");
    
    Country country = xmlMapper.readValue(s, Country.class);
    assertThat(country).isEqualTo(Country.ITALY); // fails with the error reported above
}

Country.java

public enum Country {
    ITALY("Italy"),
    NETHERLANDS("Netherlands");

    private String value;

    Country(String value) {
        this.value = value;
    }

    @JsonValue
    public String getValue() {
        return value;
    }

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

    @JsonCreator(mode = JsonCreator.Mode.DELEGATING)
    public static Country fromValue(String value) {
        for (Country b : Country.values()) {
            if (b.value.equals(value)) {
                return b;
            }
        }
        throw new IllegalArgumentException("Unexpected value '" + value + "'");
    }
}

library: com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.17.1

original report submitted here: https://groups.google.com/g/jackson-user/c/xXgyb_uKbGg/m/fCcNz9WOCAAJ

Metadata

Metadata

Assignees

No one assigned

    Labels

    2.18Issues planned at earliest for 2.18

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions