users@jaxb.java.net

_at_XmlElementWrapper - NPE Problems When Unmarshalling

From: <mark_at_javector.com>
Date: Wed, 11 Jan 2006 22:13:37 -0700

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)