From 86bcc89b0d56e1ba72eca0f2f0b1ea87d6837d27 Mon Sep 17 00:00:00 2001 From: "Kim, Joo Hyuk" Date: Fri, 11 Oct 2024 08:35:17 +0900 Subject: [PATCH 1/6] Add tests --- .../xml/records/XmlWrapperRecord517Test.java | 58 +++++++++++++ .../xml/deser/XmlWrapperClass517Test.java | 85 +++++++++++++++++++ 2 files changed, 143 insertions(+) create mode 100644 src/test-jdk17/java/com/fasterxml/jackson/dataformat/xml/records/XmlWrapperRecord517Test.java create mode 100644 src/test/java/com/fasterxml/jackson/dataformat/xml/deser/XmlWrapperClass517Test.java diff --git a/src/test-jdk17/java/com/fasterxml/jackson/dataformat/xml/records/XmlWrapperRecord517Test.java b/src/test-jdk17/java/com/fasterxml/jackson/dataformat/xml/records/XmlWrapperRecord517Test.java new file mode 100644 index 00000000..de5ca79a --- /dev/null +++ b/src/test-jdk17/java/com/fasterxml/jackson/dataformat/xml/records/XmlWrapperRecord517Test.java @@ -0,0 +1,58 @@ +package com.fasterxml.jackson.dataformat.xml.records; + +import java.util.List; + +import com.fasterxml.jackson.dataformat.xml.XmlTestBase; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; + +import org.junit.Test; + +// [databind#517] XML wrapper doesn't work with java records +// Equivalent to on in jdk17/.../deser/XmlWrapperRecord517Test.java +public class XmlWrapperRecord517Test + extends XmlTestBase { + + public record Request( + @JacksonXmlElementWrapper(localName = "messages") + @JacksonXmlProperty(localName = "message") + List messages + ) { + public Request {} + + private Request() {this(null);} + } + + public record Message(String text) { + public Message { + } + + private Message() { + this(null); + } + } + + private String expectedXML = + "" + + "" + + "" + + "Hello, World!" + + "" + + "" + + ""; + + @Test + public void testWrapper() throws Exception { + XmlWrapperRecord517Test.Request request = new Request(List.of(new Message("Hello, World!"))); + + // test serialization + String xml = newMapper().writeValueAsString(request); + assertEquals(expectedXML, xml); + + // test deserialization + Request result = newMapper().readValue(xml, Request.class); + + assertEquals(request.messages().size(), result.messages().size()); + assertEquals(request.messages().get(0).text(), result.messages().get(0).text()); + } +} diff --git a/src/test/java/com/fasterxml/jackson/dataformat/xml/deser/XmlWrapperClass517Test.java b/src/test/java/com/fasterxml/jackson/dataformat/xml/deser/XmlWrapperClass517Test.java new file mode 100644 index 00000000..02e26c1f --- /dev/null +++ b/src/test/java/com/fasterxml/jackson/dataformat/xml/deser/XmlWrapperClass517Test.java @@ -0,0 +1,85 @@ +package com.fasterxml.jackson.dataformat.xml.deser; + +import java.util.List; +import java.util.Objects; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.dataformat.xml.XmlTestBase; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; + +import org.junit.Test; + +// [databind#517] XML wrapper doesn't work with java records +// Equivalent to on in jdk17/.../records/XmlWrapperRecord517Test.java +public class XmlWrapperClass517Test + extends XmlTestBase +{ + public static final class Request { + @JacksonXmlElementWrapper(localName = "messages") + @JacksonXmlProperty(localName = "message") + private final List messages; + + private Request() { this.messages = null; } + public Request(List messages) { this.messages = messages; } + + public List getMessages() { return messages; } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof Request request)) return false; + return Objects.equals(messages, request.messages); + } + + @Override + public int hashCode() { return Objects.hash(messages); } + + @Override + public String toString() { return "Request{messages=" + messages + '}'; } + } + + public static final class Message { + + private final String text; + + private Message() { this.text = null; } + public Message(String text) { this.text = text; } + + public String getText() { return text; } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof Message)) return false; + Message message = (Message) o; + return Objects.equals(text, message.text); + } + + @Override + public int hashCode() { return Objects.hash(text); } + + @Override + public String toString() { return "Message{text='" + text + "\'}"; } + } + + private final ObjectMapper mapper = newMapper(); + + @Test + public void testShouldSerialize() throws Exception { + var givenRequest = new Request(List.of(new Message("given text"))); + var actualXml = mapper.writeValueAsString(givenRequest); + assertEquals( + "given text", + actualXml + ); + } + + @Test + public void testShouldDeserialize() throws Exception { + var givenXml = "given text"; + var actualRequest = mapper.readValue(givenXml, Request.class); + assertEquals(new Request(List.of(new Message("given text"))), actualRequest); + } + +} From cfc7c9c9d58e4c04ff5c0e9680b40f97ac424f87 Mon Sep 17 00:00:00 2001 From: "Kim, Joo Hyuk" Date: Fri, 11 Oct 2024 08:42:15 +0900 Subject: [PATCH 2/6] Move to failing directory for record test --- .../xml/records/{ => failing}/XmlWrapperRecord517Test.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename src/test-jdk17/java/com/fasterxml/jackson/dataformat/xml/records/{ => failing}/XmlWrapperRecord517Test.java (96%) diff --git a/src/test-jdk17/java/com/fasterxml/jackson/dataformat/xml/records/XmlWrapperRecord517Test.java b/src/test-jdk17/java/com/fasterxml/jackson/dataformat/xml/records/failing/XmlWrapperRecord517Test.java similarity index 96% rename from src/test-jdk17/java/com/fasterxml/jackson/dataformat/xml/records/XmlWrapperRecord517Test.java rename to src/test-jdk17/java/com/fasterxml/jackson/dataformat/xml/records/failing/XmlWrapperRecord517Test.java index de5ca79a..96b454e7 100644 --- a/src/test-jdk17/java/com/fasterxml/jackson/dataformat/xml/records/XmlWrapperRecord517Test.java +++ b/src/test-jdk17/java/com/fasterxml/jackson/dataformat/xml/records/failing/XmlWrapperRecord517Test.java @@ -1,4 +1,4 @@ -package com.fasterxml.jackson.dataformat.xml.records; +package com.fasterxml.jackson.dataformat.xml.records.failing; import java.util.List; From 061d436858aaf19a62fe1f746049add8247494a8 Mon Sep 17 00:00:00 2001 From: "Kim, Joo Hyuk" Date: Fri, 11 Oct 2024 08:43:14 +0900 Subject: [PATCH 3/6] Update XmlWrapperRecord517Test.java --- .../xml/records/failing/XmlWrapperRecord517Test.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/test-jdk17/java/com/fasterxml/jackson/dataformat/xml/records/failing/XmlWrapperRecord517Test.java b/src/test-jdk17/java/com/fasterxml/jackson/dataformat/xml/records/failing/XmlWrapperRecord517Test.java index 96b454e7..79b9de22 100644 --- a/src/test-jdk17/java/com/fasterxml/jackson/dataformat/xml/records/failing/XmlWrapperRecord517Test.java +++ b/src/test-jdk17/java/com/fasterxml/jackson/dataformat/xml/records/failing/XmlWrapperRecord517Test.java @@ -11,7 +11,8 @@ // [databind#517] XML wrapper doesn't work with java records // Equivalent to on in jdk17/.../deser/XmlWrapperRecord517Test.java public class XmlWrapperRecord517Test - extends XmlTestBase { + extends XmlTestBase +{ public record Request( @JacksonXmlElementWrapper(localName = "messages") From e72f1c6aba996d4442cc29e7b0697ede66cabc6e Mon Sep 17 00:00:00 2001 From: "Kim, Joo Hyuk" Date: Fri, 11 Oct 2024 08:50:08 +0900 Subject: [PATCH 4/6] Clean up code and fix jdk 17 error --- .../failing/XmlWrapperRecord517Test.java | 2 +- .../xml/deser/XmlWrapperClass517Test.java | 39 +++++++++++++------ 2 files changed, 29 insertions(+), 12 deletions(-) diff --git a/src/test-jdk17/java/com/fasterxml/jackson/dataformat/xml/records/failing/XmlWrapperRecord517Test.java b/src/test-jdk17/java/com/fasterxml/jackson/dataformat/xml/records/failing/XmlWrapperRecord517Test.java index 79b9de22..3057d856 100644 --- a/src/test-jdk17/java/com/fasterxml/jackson/dataformat/xml/records/failing/XmlWrapperRecord517Test.java +++ b/src/test-jdk17/java/com/fasterxml/jackson/dataformat/xml/records/failing/XmlWrapperRecord517Test.java @@ -33,7 +33,7 @@ private Message() { } } - private String expectedXML = + private final String expectedXML = "" + "" + "" + diff --git a/src/test/java/com/fasterxml/jackson/dataformat/xml/deser/XmlWrapperClass517Test.java b/src/test/java/com/fasterxml/jackson/dataformat/xml/deser/XmlWrapperClass517Test.java index 02e26c1f..c994ccac 100644 --- a/src/test/java/com/fasterxml/jackson/dataformat/xml/deser/XmlWrapperClass517Test.java +++ b/src/test/java/com/fasterxml/jackson/dataformat/xml/deser/XmlWrapperClass517Test.java @@ -1,5 +1,6 @@ package com.fasterxml.jackson.dataformat.xml.deser; +import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -28,8 +29,8 @@ public static final class Request { @Override public boolean equals(Object o) { if (this == o) return true; - if (!(o instanceof Request request)) return false; - return Objects.equals(messages, request.messages); + if (!(o instanceof Request)) return false; + return Objects.equals(messages, ((Request)o).messages); } @Override @@ -65,21 +66,37 @@ public boolean equals(Object o) { private final ObjectMapper mapper = newMapper(); + private final String expectedXML = + "" + + "" + + "" + + "Hello, World!" + + "" + + "" + + ""; + @Test public void testShouldSerialize() throws Exception { - var givenRequest = new Request(List.of(new Message("given text"))); - var actualXml = mapper.writeValueAsString(givenRequest); - assertEquals( - "given text", - actualXml - ); + Request givenRequest = _createRequest("given text"); + + String actualXml = mapper.writeValueAsString(givenRequest); + + assertEquals(expectedXML, actualXml); } @Test public void testShouldDeserialize() throws Exception { - var givenXml = "given text"; - var actualRequest = mapper.readValue(givenXml, Request.class); - assertEquals(new Request(List.of(new Message("given text"))), actualRequest); + Request expected = _createRequest("given text"); + + Request actualRequest = mapper.readValue(expectedXML, Request.class); + + assertEquals(expected, actualRequest); + } + + private Request _createRequest(String givenText) { + List messages = new ArrayList<>(); + messages.add(new Message(givenText)); + return new Request(messages); } } From d4e4ee83754789378b16fc319a5e9a95c3d58328 Mon Sep 17 00:00:00 2001 From: "Kim, Joo Hyuk" Date: Fri, 11 Oct 2024 08:51:07 +0900 Subject: [PATCH 5/6] fix test --- .../jackson/dataformat/xml/deser/XmlWrapperClass517Test.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/com/fasterxml/jackson/dataformat/xml/deser/XmlWrapperClass517Test.java b/src/test/java/com/fasterxml/jackson/dataformat/xml/deser/XmlWrapperClass517Test.java index c994ccac..eeca289b 100644 --- a/src/test/java/com/fasterxml/jackson/dataformat/xml/deser/XmlWrapperClass517Test.java +++ b/src/test/java/com/fasterxml/jackson/dataformat/xml/deser/XmlWrapperClass517Test.java @@ -70,7 +70,7 @@ public boolean equals(Object o) { "" + "" + "" + - "Hello, World!" + + "given text" + "" + "" + ""; From c7bc7c11dfd8b71233143313f54fe2fa0ffc6d19 Mon Sep 17 00:00:00 2001 From: "Kim, Joo Hyuk" Date: Fri, 11 Oct 2024 09:50:27 +0900 Subject: [PATCH 6/6] Fix importt ordering --- .../xml/records/failing/XmlWrapperRecord517Test.java | 4 ++-- .../jackson/dataformat/xml/deser/XmlWrapperClass517Test.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/test-jdk17/java/com/fasterxml/jackson/dataformat/xml/records/failing/XmlWrapperRecord517Test.java b/src/test-jdk17/java/com/fasterxml/jackson/dataformat/xml/records/failing/XmlWrapperRecord517Test.java index 3057d856..b4f953cf 100644 --- a/src/test-jdk17/java/com/fasterxml/jackson/dataformat/xml/records/failing/XmlWrapperRecord517Test.java +++ b/src/test-jdk17/java/com/fasterxml/jackson/dataformat/xml/records/failing/XmlWrapperRecord517Test.java @@ -2,12 +2,12 @@ import java.util.List; +import org.junit.Test; + import com.fasterxml.jackson.dataformat.xml.XmlTestBase; import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper; import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; -import org.junit.Test; - // [databind#517] XML wrapper doesn't work with java records // Equivalent to on in jdk17/.../deser/XmlWrapperRecord517Test.java public class XmlWrapperRecord517Test diff --git a/src/test/java/com/fasterxml/jackson/dataformat/xml/deser/XmlWrapperClass517Test.java b/src/test/java/com/fasterxml/jackson/dataformat/xml/deser/XmlWrapperClass517Test.java index eeca289b..f1f92f36 100644 --- a/src/test/java/com/fasterxml/jackson/dataformat/xml/deser/XmlWrapperClass517Test.java +++ b/src/test/java/com/fasterxml/jackson/dataformat/xml/deser/XmlWrapperClass517Test.java @@ -4,13 +4,13 @@ import java.util.List; import java.util.Objects; +import org.junit.Test; + import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.dataformat.xml.XmlTestBase; import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper; import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; -import org.junit.Test; - // [databind#517] XML wrapper doesn't work with java records // Equivalent to on in jdk17/.../records/XmlWrapperRecord517Test.java public class XmlWrapperClass517Test