Skip to content

Commit 7375278

Browse files
committed
Merge branch '2.18' of github.com:FasterXML/jackson-dataformat-xml into 2.18
2 parents a5ab6a7 + 5265704 commit 7375278

File tree

2 files changed

+161
-0
lines changed

2 files changed

+161
-0
lines changed
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package com.fasterxml.jackson.dataformat.xml.records.failing;
2+
3+
import java.util.List;
4+
5+
import org.junit.Test;
6+
7+
import com.fasterxml.jackson.dataformat.xml.XmlTestBase;
8+
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper;
9+
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
10+
11+
// [databind#517] XML wrapper doesn't work with java records
12+
// Equivalent to on in jdk17/.../deser/XmlWrapperRecord517Test.java
13+
public class XmlWrapperRecord517Test
14+
extends XmlTestBase
15+
{
16+
17+
public record Request(
18+
@JacksonXmlElementWrapper(localName = "messages")
19+
@JacksonXmlProperty(localName = "message")
20+
List<Message> messages
21+
) {
22+
public Request {}
23+
24+
private Request() {this(null);}
25+
}
26+
27+
public record Message(String text) {
28+
public Message {
29+
}
30+
31+
private Message() {
32+
this(null);
33+
}
34+
}
35+
36+
private final String expectedXML =
37+
"<Request>" +
38+
"<messages>" +
39+
"<message>" +
40+
"<text>Hello, World!</text>" +
41+
"</message>" +
42+
"</messages>" +
43+
"</Request>";
44+
45+
@Test
46+
public void testWrapper() throws Exception {
47+
XmlWrapperRecord517Test.Request request = new Request(List.of(new Message("Hello, World!")));
48+
49+
// test serialization
50+
String xml = newMapper().writeValueAsString(request);
51+
assertEquals(expectedXML, xml);
52+
53+
// test deserialization
54+
Request result = newMapper().readValue(xml, Request.class);
55+
56+
assertEquals(request.messages().size(), result.messages().size());
57+
assertEquals(request.messages().get(0).text(), result.messages().get(0).text());
58+
}
59+
}
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
package com.fasterxml.jackson.dataformat.xml.deser;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
import java.util.Objects;
6+
7+
import org.junit.Test;
8+
9+
import com.fasterxml.jackson.databind.ObjectMapper;
10+
import com.fasterxml.jackson.dataformat.xml.XmlTestBase;
11+
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper;
12+
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
13+
14+
// [databind#517] XML wrapper doesn't work with java records
15+
// Equivalent to on in jdk17/.../records/XmlWrapperRecord517Test.java
16+
public class XmlWrapperClass517Test
17+
extends XmlTestBase
18+
{
19+
public static final class Request {
20+
@JacksonXmlElementWrapper(localName = "messages")
21+
@JacksonXmlProperty(localName = "message")
22+
private final List<Message> messages;
23+
24+
private Request() { this.messages = null; }
25+
public Request(List<Message> messages) { this.messages = messages; }
26+
27+
public List<Message> getMessages() { return messages; }
28+
29+
@Override
30+
public boolean equals(Object o) {
31+
if (this == o) return true;
32+
if (!(o instanceof Request)) return false;
33+
return Objects.equals(messages, ((Request)o).messages);
34+
}
35+
36+
@Override
37+
public int hashCode() { return Objects.hash(messages); }
38+
39+
@Override
40+
public String toString() { return "Request{messages=" + messages + '}'; }
41+
}
42+
43+
public static final class Message {
44+
45+
private final String text;
46+
47+
private Message() { this.text = null; }
48+
public Message(String text) { this.text = text; }
49+
50+
public String getText() { return text; }
51+
52+
@Override
53+
public boolean equals(Object o) {
54+
if (this == o) return true;
55+
if (!(o instanceof Message)) return false;
56+
Message message = (Message) o;
57+
return Objects.equals(text, message.text);
58+
}
59+
60+
@Override
61+
public int hashCode() { return Objects.hash(text); }
62+
63+
@Override
64+
public String toString() { return "Message{text='" + text + "\'}"; }
65+
}
66+
67+
private final ObjectMapper mapper = newMapper();
68+
69+
private final String expectedXML =
70+
"<Request>" +
71+
"<messages>" +
72+
"<message>" +
73+
"<text>given text</text>" +
74+
"</message>" +
75+
"</messages>" +
76+
"</Request>";
77+
78+
@Test
79+
public void testShouldSerialize() throws Exception {
80+
Request givenRequest = _createRequest("given text");
81+
82+
String actualXml = mapper.writeValueAsString(givenRequest);
83+
84+
assertEquals(expectedXML, actualXml);
85+
}
86+
87+
@Test
88+
public void testShouldDeserialize() throws Exception {
89+
Request expected = _createRequest("given text");
90+
91+
Request actualRequest = mapper.readValue(expectedXML, Request.class);
92+
93+
assertEquals(expected, actualRequest);
94+
}
95+
96+
private Request _createRequest(String givenText) {
97+
List<Message> messages = new ArrayList<>();
98+
messages.add(new Message(givenText));
99+
return new Request(messages);
100+
}
101+
102+
}

0 commit comments

Comments
 (0)