package com.fasterxml.jackson.dataformat.xml.jaxb;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
import com.fasterxml.jackson.databind.AnnotationIntrospector;
import com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector;
import com.fasterxml.jackson.databind.type.TypeFactory;
import com.fasterxml.jackson.dataformat.xml.XmlAnnotationIntrospector;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import com.fasterxml.jackson.dataformat.xml.XmlTestBase;
public class ElementWrapperTest extends XmlTestBase
{
@XmlRootElement(name = "Individual")
static class MyPerson {
public String name;
@XmlElementWrapper(name = "offspring")
@XmlElement(name = "kid")
public List<MyPerson> children = new ArrayList<MyPerson>();
}
@XmlRootElement(name="p")
static class MyPerson2 {
public String name;
public List<MyPerson2> child = new ArrayList<MyPerson2>();
}
/*
/**********************************************************************
/* Unit tests
/**********************************************************************
*/
public void testElementWrapper() throws Exception
{
XmlMapper _jaxbMapper = new XmlMapper();
// Use JAXB-then-Jackson annotation introspector
AnnotationIntrospector intr = XmlAnnotationIntrospector.Pair.instance
(new XmlJaxbAnnotationIntrospector(TypeFactory.defaultInstance()),
new JacksonAnnotationIntrospector());
_jaxbMapper.setAnnotationIntrospector(intr);
MyPerson person = new MyPerson();
person.name = "Jay";
MyPerson child = new MyPerson();
child.name = "Junior";
person.children.add(child);
String xml = _jaxbMapper.writer().writeValueAsString(person);
String expected = "<Individual><name>Jay</name>"
+ "<offspring><kid><name>Junior</name><offspring/></kid></offspring></Individual>";
assertEquals(expected, xml);
}
// And with JAXB, default should be "no wrapper"
public void testNoElementWrapper() throws Exception
{
XmlMapper jaxbMapper = new XmlMapper();
jaxbMapper.setAnnotationIntrospector(new XmlJaxbAnnotationIntrospector(TypeFactory.defaultInstance()));
MyPerson2 person = new MyPerson2();
person.name = "Jay";
MyPerson2 child = new MyPerson2();
child.name = "Junior";
person.child.add(child);
String xml = jaxbMapper.writeValueAsString(person);
String expected = "<p><name>Jay</name><child><name>Junior</name></child></p>";
assertEquals(expected, xml);
}
}