From 643f15aa13748c973d8b115338590c22491b72b3 Mon Sep 17 00:00:00 2001 From: Tatu Saloranta Date: Sun, 24 Nov 2024 16:21:45 -0800 Subject: [PATCH 1/2] Add test for #682 (passing with jackson-databind fix) --- release-notes/VERSION-2.x | 3 ++ .../xml/deser/EnumDeser682Test.java | 49 +++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 src/test/java/com/fasterxml/jackson/dataformat/xml/deser/EnumDeser682Test.java diff --git a/release-notes/VERSION-2.x b/release-notes/VERSION-2.x index 9850d168..2e866131 100644 --- a/release-notes/VERSION-2.x +++ b/release-notes/VERSION-2.x @@ -8,6 +8,9 @@ Project: jackson-dataformat-xml #678: XML module not registered correctly when setting a custom `SerializerFactory` (reported by @SimonCockx) +#682: `MismatchedInputException` encountered while deserializing XML to an Enum type + using a factory method + (reported by @WannabeSoftwareEngineer) 2.18.1 (28-Oct-2024) diff --git a/src/test/java/com/fasterxml/jackson/dataformat/xml/deser/EnumDeser682Test.java b/src/test/java/com/fasterxml/jackson/dataformat/xml/deser/EnumDeser682Test.java new file mode 100644 index 00000000..9a836306 --- /dev/null +++ b/src/test/java/com/fasterxml/jackson/dataformat/xml/deser/EnumDeser682Test.java @@ -0,0 +1,49 @@ +package com.fasterxml.jackson.dataformat.xml.deser; + +import com.fasterxml.jackson.annotation.JsonValue; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.*; +import com.fasterxml.jackson.dataformat.xml.XmlTestBase; + +public class EnumDeser682Test extends XmlTestBase +{ + static 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 + "'"); + } + } + + private final ObjectMapper MAPPER = newMapper(); + + public void testEnumDeser682() throws Exception { + String xml = MAPPER.writeValueAsString(Country.ITALY); + assertEquals("Italy", xml); + + assertEquals(Country.ITALY, MAPPER.readValue(xml, Country.class)); + } +} From 4fda42a8101681e5244c9d3c525a92982606dcee Mon Sep 17 00:00:00 2001 From: Tatu Saloranta Date: Sun, 24 Nov 2024 16:24:04 -0800 Subject: [PATCH 2/2] Simplify test --- .../dataformat/xml/deser/EnumDeser682Test.java | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/src/test/java/com/fasterxml/jackson/dataformat/xml/deser/EnumDeser682Test.java b/src/test/java/com/fasterxml/jackson/dataformat/xml/deser/EnumDeser682Test.java index 9a836306..3562221c 100644 --- a/src/test/java/com/fasterxml/jackson/dataformat/xml/deser/EnumDeser682Test.java +++ b/src/test/java/com/fasterxml/jackson/dataformat/xml/deser/EnumDeser682Test.java @@ -11,22 +11,13 @@ static enum Country { ITALY("Italy"), NETHERLANDS("Netherlands"); - private String value; + @JsonValue + final 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()) {