When using @XmlElementWrapper, marshalling is working OK, but I'm getting NPEs
when I try to unmarshal back again (round trip). When I remove the
@XmlElementWrapper annotation, the round trip marshal/unmarshal works fine.
Below is an example. Is this maybe a bug?
Here is the class to marshal/unmarshal:
@XmlRootElement
public class WrapTest {
private List<String> item;
@XmlElementWrapper(name="items")
@XmlElement
public List<String> getItem() {
return item;
}
public void setItem(List<String> item) {
this.item = item;
}
}
Here is the code to exercise the marshal/unmarshal:
public static void main(String[] args) throws Exception {
WrapTest myOrder = new WrapTest();
ArrayList<String> item = new ArrayList<String>();
item.add("hello");
item.add("world");
myOrder.setItem(item);
try {
JAXBContext jaxbContext = JAXBContext.newInstance(WrapTest.class);
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, new
Boolean(true));
ByteArrayOutputStream ba = new ByteArrayOutputStream();
jaxbMarshaller.marshal(myOrder, ba);
System.out.println(ba.toString());
Unmarshaller u = jaxbContext.createUnmarshaller();
WrapTest roundTripOrder =
(WrapTest) u.unmarshal(new StringReader(ba.toString()));
System.out.println(roundTripOrder.getItem().get(0));
System.out.println(roundTripOrder.getItem().get(1));
} catch (Exception e) {
e.printStackTrace();
}
}
Here is the output:
[java] <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
[java] <wrapTest>
[java] <items>
[java] <item>hello</item>
[java] <item>world</item>
[java] </items>
[java] </wrapTest>
[java]
[java] java.lang.NullPointerException
[java] at
samples.WrapTest$JaxbAccessorM_getItem_setItem_java_util_List.get(MethodAccessor_Ref.java:16)
[java] at
com.sun.xml.bind.v2.runtime.reflect.Lister$CollectionLister.startPacking(Lister.java:249)
[java] at
com.sun.xml.bind.v2.runtime.reflect.Lister$CollectionLister.startPacking(Lister.java:224)
[java] at
com.sun.xml.bind.v2.runtime.unmarshaller.Scope.add(Scope.java:78)
[java] at
com.sun.xml.bind.v2.runtime.property.ArrayERProperty$ReceiverImpl.receive(ArrayERProperty.java:150)
[java] at
com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.endElement(UnmarshallingContext.java:404)
[java] at
com.sun.xml.bind.v2.runtime.unmarshaller.SAXConnector.endElement(SAXConnector.java:125)
[java] at
com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:633)
[java] at
com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanEndElement(XMLNSDocumentScannerImpl.java:719)
[java] at
com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(XMLDocumentFragmentScannerImpl.java:1685)
[java] at
com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:368)
[java] at
com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:834)
[java] at
com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
[java] at
com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:148)
[java] at
com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1242)
[java] at
com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:200)
[java] at
com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:173)
[java] at
javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:137)
[java] at
javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:194)
[java] at samples.WrapTestExerciser.main(WrapTestExerciser.java:31)