users@jaxb.java.net

can't unmarshal wrapper element

From: joseph <joseph_at_bbn.cn>
Date: Thu, 28 Feb 2008 09:18:16 +0800 (CST)

Hi experts,
The following program uses a wrapper element around XML representation.


@XmlRootElement
@XmlAccessorType(AccessType.FIELD)
public class Class3
{
  public Class3()
  {
  }
  @XmlElementWrapper(name = "addresses")
  @XmlElement(name = "address")
  private List val = new ArrayList();

  public static void main(String[] args)
    throws Exception
  {
    Class3 class3 = new Class3();
    class3.val = new ArrayList();
    class3.val.add("add1");
    class3.val.add("add2");
    JAXBContext jaxbContext = JAXBContext.newInstance(Class3.class);
    Marshaller marshaller = jaxbContext.createMarshaller();
    marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
    marshaller.marshal(class3, System.out);
    marshaller.marshal(class3, new FileOutputStream("d:\\test.xml"));
    Unmarshaller um = jaxbContext.createUnmarshaller();
    System.out.println(um.unmarshal(new File("d:\\test.xml")));
  }

  public void setVal(List val)
  {
    this.val = val;
  }

  public List getVal()
  {
    return val;
  }
}

the output is:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<class3>
    <addresses>
        <address xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:string">add1</address>
        <address xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:string">add2</address>
    </addresses>
</class3>
Exception in thread "main" java.lang.NullPointerException
    at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.java:36)
    at sun.reflect.UnsafeObjectFieldAccessorImpl.get(UnsafeObjectFieldAccessorImpl.java:18)
    at java.lang.reflect.Field.get(Field.java:357)
    at com.sun.xml.bind.v2.runtime.reflect.Accessor$FieldReflection.get(Accessor.java:185)
    at com.sun.xml.bind.v2.runtime.reflect.Lister$CollectionLister.startPacking(Lister.java:249)
    at com.sun.xml.bind.v2.runtime.reflect.Lister$CollectionLister.startPacking(Lister.java:224)
    at com.sun.xml.bind.v2.runtime.unmarshaller.Scope.add(Scope.java:78)
    at com.sun.xml.bind.v2.runtime.property.ArrayERProperty$ReceiverImpl.receive(ArrayERProperty.java:150)
    at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.endElement(UnmarshallingContext.java:404)
    at com.sun.xml.bind.v2.runtime.unmarshaller.SAXConnector.endElement(SAXConnector.java:125)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:633)
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanEndElement(XMLNSDocumentScannerImpl.java:719)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(XMLDocumentFragmentScannerImpl.java:1685)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:368)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:834)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:148)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1242)
    at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:200)
    at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:173)
    at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:137)
    at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:142)
    at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:151)
    at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:169)
    at test.Class3.main(Class3.java:43)


So it seems the marshal works fine but the unmarshal throws a unexpected exception. Where did I go wrong.
Thanks,
Joseph


----------------------------------------------
欢迎使用北京互联网电子邮件系统 http://mail.bbn.com.cn