Skip to content

Commit

Permalink
Marked #286 as fixed
Browse files Browse the repository at this point in the history
  • Loading branch information
cowtowncoder committed Mar 21, 2023
1 parent b72e31c commit 9f2c351
Show file tree
Hide file tree
Showing 2 changed files with 74 additions and 0 deletions.
2 changes: 2 additions & 0 deletions release-notes/VERSION-2.x
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ Project: jackson-dataformat-xml

2.15.0-rc1 (18-Mar-2023)

#286: Conflict between `@JsonIdentityInfo` and Unwrapped Lists
(reported by @rupert-madden-abbott)
#533: (Android) java.lang.NoClassDefFoundError: Failed resolution
of: Ljavax/xml/stream/XMLInputFactory
(reported by @clashcaddie)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
package com.fasterxml.jackson.dataformat.xml.misc;

import com.fasterxml.jackson.annotation.JsonIdentityInfo;
import com.fasterxml.jackson.annotation.ObjectIdGenerators;

import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import com.fasterxml.jackson.dataformat.xml.XmlTestBase;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;

// for [dataformat-xml#286]: parser getting confused with unwrapped lists,
// object id
public class UnwrappedJsonIdentityConflict286Test extends XmlTestBase
{
static class Town
{
public School[] schools;
public Student[] students;
}

static class Student
{
public School school;
@JacksonXmlElementWrapper(useWrapping = false)
@JacksonXmlProperty(localName = "year")
public Year[] years;
}

static class Year
{
public String grade;
}

@JsonIdentityInfo(scope = School.class, generator = ObjectIdGenerators.PropertyGenerator.class,
property = "name")
static class School
{
@JacksonXmlElementWrapper(useWrapping = false)
@JacksonXmlProperty(localName = "staffMember")
public String[] staffMembers;
public String name;
}

public void testCaseInsensitiveComplex() throws Exception
{

XmlMapper mapper = XmlMapper.builder().build();

final String input =
"<town>\n"+
" <schools>\n"+
" <school name=\"Springfield Elementary\">\n"+
" <staffMember>Principal Skinner</staffMember>\n"+
" <staffMember>Groundskeeper Willie</staffMember>\n"+
" </school>\n"+
" </schools>\n"+
" <students>\n"+
" <student>\n"+
" <school>Springfield Elementary</school>\n"+
" <year>\n"+
" <grade>3</grade>\n"+
" </year>\n"+
" </student>\n"+
" </students>\n"+
"</town>";
Town result = mapper.readValue(input, Town.class);
assertNotNull(result);
assertEquals("Principal Skinner", result.schools[0].staffMembers[0]);
assertEquals("Principal Skinner", result.students[0].school.staffMembers[0]);
assertEquals("3", result.students[0].years[0].grade);
}
}

0 comments on commit 9f2c351

Please sign in to comment.