Skip to content

Commit 9f2c351

Browse files
committed
Marked #286 as fixed
1 parent b72e31c commit 9f2c351

File tree

2 files changed

+74
-0
lines changed

2 files changed

+74
-0
lines changed

release-notes/VERSION-2.x

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ Project: jackson-dataformat-xml
66

77
2.15.0-rc1 (18-Mar-2023)
88

9+
#286: Conflict between `@JsonIdentityInfo` and Unwrapped Lists
10+
(reported by @rupert-madden-abbott)
911
#533: (Android) java.lang.NoClassDefFoundError: Failed resolution
1012
of: Ljavax/xml/stream/XMLInputFactory
1113
(reported by @clashcaddie)
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
package com.fasterxml.jackson.dataformat.xml.misc;
2+
3+
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
4+
import com.fasterxml.jackson.annotation.ObjectIdGenerators;
5+
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+
// for [dataformat-xml#286]: parser getting confused with unwrapped lists,
12+
// object id
13+
public class UnwrappedJsonIdentityConflict286Test extends XmlTestBase
14+
{
15+
static class Town
16+
{
17+
public School[] schools;
18+
public Student[] students;
19+
}
20+
21+
static class Student
22+
{
23+
public School school;
24+
@JacksonXmlElementWrapper(useWrapping = false)
25+
@JacksonXmlProperty(localName = "year")
26+
public Year[] years;
27+
}
28+
29+
static class Year
30+
{
31+
public String grade;
32+
}
33+
34+
@JsonIdentityInfo(scope = School.class, generator = ObjectIdGenerators.PropertyGenerator.class,
35+
property = "name")
36+
static class School
37+
{
38+
@JacksonXmlElementWrapper(useWrapping = false)
39+
@JacksonXmlProperty(localName = "staffMember")
40+
public String[] staffMembers;
41+
public String name;
42+
}
43+
44+
public void testCaseInsensitiveComplex() throws Exception
45+
{
46+
47+
XmlMapper mapper = XmlMapper.builder().build();
48+
49+
final String input =
50+
"<town>\n"+
51+
" <schools>\n"+
52+
" <school name=\"Springfield Elementary\">\n"+
53+
" <staffMember>Principal Skinner</staffMember>\n"+
54+
" <staffMember>Groundskeeper Willie</staffMember>\n"+
55+
" </school>\n"+
56+
" </schools>\n"+
57+
" <students>\n"+
58+
" <student>\n"+
59+
" <school>Springfield Elementary</school>\n"+
60+
" <year>\n"+
61+
" <grade>3</grade>\n"+
62+
" </year>\n"+
63+
" </student>\n"+
64+
" </students>\n"+
65+
"</town>";
66+
Town result = mapper.readValue(input, Town.class);
67+
assertNotNull(result);
68+
assertEquals("Principal Skinner", result.schools[0].staffMembers[0]);
69+
assertEquals("Principal Skinner", result.students[0].school.staffMembers[0]);
70+
assertEquals("3", result.students[0].years[0].grade);
71+
}
72+
}

0 commit comments

Comments
 (0)