Skip to content

Commit 4faaf00

Browse files
committed
Merge branch '2.12' into 2.13
2 parents e6dce43 + 539286d commit 4faaf00

File tree

1 file changed

+95
-0
lines changed

1 file changed

+95
-0
lines changed
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
package com.fasterxml.jackson.dataformat.xml.lists;
2+
3+
import java.util.*;
4+
5+
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
6+
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
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+
// Trying to reproduce [dataformat-xml#469]
12+
public class ListDeser469Test extends XmlTestBase
13+
{
14+
static class OuterBean {
15+
@JacksonXmlProperty(localName = "Middle", namespace = "http://jackson.test.model")
16+
public MiddleBean middle;
17+
}
18+
19+
@JsonPropertyOrder({"inner1", "inner2"})
20+
static class MiddleBean
21+
{
22+
@JacksonXmlProperty(localName = "Inner1", namespace = "http://jackson.test.model")
23+
public InnerBean1 inner1;
24+
25+
@JacksonXmlElementWrapper(useWrapping = false)
26+
@JacksonXmlProperty(localName = "Inner2", namespace = "http://jackson.test.model")
27+
public List<InnerBean2> inner2;
28+
}
29+
30+
static class InnerBean1
31+
{
32+
@JacksonXmlProperty(localName = "Str", isAttribute = true)
33+
public String str;
34+
35+
@JacksonXmlProperty(localName = "InnerBean1Item", namespace = "http://jackson.test.model")
36+
public List<InnerBean1Item> item;
37+
}
38+
39+
static class InnerBean1Item
40+
{
41+
@JacksonXmlProperty(localName = "Id", isAttribute = true)
42+
public String id;
43+
}
44+
45+
static class InnerBean2
46+
{
47+
@JacksonXmlProperty(localName = "Str2", isAttribute = true)
48+
public String str2;
49+
50+
protected InnerBean2() { }
51+
public InnerBean2(String s) { str2 = s; }
52+
}
53+
54+
private final XmlMapper MAPPER = newMapper();
55+
56+
public void testIssue469() throws Exception
57+
{
58+
// First: create POJO value to test round-trip:
59+
{
60+
OuterBean source = new OuterBean();
61+
source.middle = new MiddleBean();
62+
List<InnerBean2> items = new ArrayList<>();
63+
items.add(new InnerBean2("foo"));
64+
source.middle.inner2 = items;
65+
66+
String xml = MAPPER.writerWithDefaultPrettyPrinter()
67+
.writeValueAsString(source);
68+
69+
OuterBean result = MAPPER.readValue(xml, OuterBean.class);
70+
71+
MiddleBean mid = result.middle;
72+
assertNotNull(mid);
73+
assertNotNull(mid.inner2);
74+
assertEquals(1, mid.inner2.size());
75+
assertEquals("foo", mid.inner2.get(0).str2);
76+
}
77+
78+
// And then verify from XML String
79+
String xmlInput = "<OuterBean xmlns='http://jackson.test.model'>\n" +
80+
" <Middle>\n" +
81+
" <Inner1/>\n" +
82+
" <Inner2 Str2='aaaa'/>\n" +
83+
" </Middle>\n" +
84+
"</OuterBean>\n";
85+
86+
OuterBean outer = MAPPER.readValue(xmlInput, OuterBean.class);
87+
88+
MiddleBean mid = outer.middle;
89+
assertNotNull(mid);
90+
91+
assertNotNull(mid.inner2);
92+
assertEquals(1, mid.inner2.size());
93+
assertEquals("aaaa", mid.inner2.get(0).str2);
94+
}
95+
}

0 commit comments

Comments
 (0)