Skip to content

Commit 3a38080

Browse files
committed
Create reproducer test case for FasterXML#509
This adds two additional test cases. Those tests attempt to deserialize the two classes Data and MetaData. The MetaData class simply contains a list of Data objects. The Data class contains a "key", which is derived from the attribute of the XML node, and a "content" list, which is the arbitrary data stored inside that node.
1 parent 1320f00 commit 3a38080

File tree

1 file changed

+110
-0
lines changed

1 file changed

+110
-0
lines changed
Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
package com.fasterxml.jackson.dataformat.xml.deser;
2+
3+
import static org.junit.Assert.assertEquals;
4+
import static org.junit.Assert.fail;
5+
6+
import java.util.ArrayList;
7+
import java.util.List;
8+
import java.util.Objects;
9+
10+
import org.junit.Test;
11+
12+
import com.fasterxml.jackson.core.JacksonException;
13+
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
14+
15+
import jakarta.xml.bind.annotation.XmlAccessType;
16+
import jakarta.xml.bind.annotation.XmlAccessorType;
17+
import jakarta.xml.bind.annotation.XmlAnyElement;
18+
import jakarta.xml.bind.annotation.XmlAttribute;
19+
import jakarta.xml.bind.annotation.XmlElement;
20+
import jakarta.xml.bind.annotation.XmlMixed;
21+
import jakarta.xml.bind.annotation.XmlRootElement;
22+
import jakarta.xml.bind.annotation.XmlType;
23+
24+
public class UnexpectedNonWhitespaceText509Test {
25+
@XmlRootElement(name = "data")
26+
@XmlAccessorType(XmlAccessType.FIELD)
27+
@XmlType(name = "Data", propOrder = { "key", "content" })
28+
public static class Data {
29+
@XmlMixed
30+
@XmlAnyElement(lax = true)
31+
protected List<Object> content;
32+
@XmlAttribute(name = "key", required = true)
33+
protected java.lang.String key;
34+
35+
public List<Object> getContent() {
36+
if (content == null) {
37+
content = new ArrayList<>();
38+
}
39+
return this.content;
40+
}
41+
42+
public void setContent(List<Object> content) {
43+
this.content = content;
44+
}
45+
46+
public java.lang.String getKey() {
47+
return key;
48+
}
49+
50+
public void setKey(java.lang.String value) {
51+
this.key = value;
52+
}
53+
}
54+
55+
@XmlRootElement(name = "metaData")
56+
@XmlAccessorType(XmlAccessType.FIELD)
57+
@XmlType(name = "MetaData", propOrder = { "data" })
58+
public static class MetaData {
59+
@XmlElement(required = true)
60+
protected List<Data> data;
61+
62+
public List<Data> getData() {
63+
if (data == null) {
64+
data = new ArrayList<>();
65+
}
66+
return this.data;
67+
}
68+
69+
public void setData(List<Data> data) {
70+
this.data = data;
71+
}
72+
73+
@Override
74+
public String toString() {
75+
return Objects.toString(data);
76+
}
77+
}
78+
79+
@Test
80+
public void testDeSerData() {
81+
Data value = deSer("<data key=\"MadeWith\">Text Editor</data>", Data.class);
82+
assertEquals("\"key\" attribute not correctly deserialized", value.getKey(), "MadeWith");
83+
assertEquals("\"content\" not correctly deserialized", value.getContent(), List.of("Text Editor"));
84+
}
85+
86+
@Test
87+
public void testDeSerMetaData() {
88+
MetaData value = deSer("<metaData>\n" //
89+
+ " <data key=\"MadeWith\">Text Editor</data>\n" //
90+
+ " <data key=\"Version\">1.0.0</data>\n" //
91+
+ "</metaData>", MetaData.class);
92+
List<Data> entries = value.getData();
93+
assertEquals("\"data\" not correctly deserialized", entries.size(), 2);
94+
Data entry = entries.get(0);
95+
assertEquals("\"key\" attribute not correctly deserialized", entry.getKey(), "MadeWith");
96+
assertEquals("\"content\" not correctly deserialized", entry.getContent(), List.of("Text Editor"));
97+
entry = entries.get(1);
98+
assertEquals("\"key\" attribute not correctly deserialized", entry.getKey(), "Version");
99+
assertEquals("\"content\" not correctly deserialized", entry.getContent(), List.of("1.0.0"));
100+
}
101+
102+
private <T> T deSer(String xmlString, Class<T> clazz) {
103+
try {
104+
return new XmlMapper().readValue(xmlString, clazz);
105+
} catch (JacksonException e) {
106+
fail(e.getMessage());
107+
return null;
108+
}
109+
}
110+
}

0 commit comments

Comments
 (0)