I work with an API for which I have no control that returns XML. Basically, I have a directory object that can contain several directory and file objects that are not wrapped by any tag, among several other primitive fields. The file object contains several primitive fields and 2 lists that are wrapped with tPathList and oPathList .
The following is an example of such XML:
<hwreply> <result>1</result> <directory> <file> <created>DATE</created> <modified>DATE</modified> <name>STRING</name> <size>INT</size> <tPath>STRING</tPath> <oPath>STRING</oPath> <aPath>STRING</aPath> <tPathList> <tPath>STRING</tPath> ... </tPathList> <oPathList> <oPath>STRING</oPath> ... </oPathList> </file> <file>...</file> ... <directory>...</directory> <directory>...</directory> ... <nEntries>5</nEntries> <created>DATE</created> <modified>DATE</modified> </directory> </hwreply>
I created Directory and File objects, and OpenDirectory is the root. When i call
OpenDirectory od = response.getEntity(OpenDirectory.class);
I get the following exception:
Exception in thread "main" java.lang.NullPointerException at com.sun.xml.internal.bind.v2.runtime.reflect.Lister$CollectionLister.addToPack(Lister.java:290) at com.sun.xml.internal.bind.v2.runtime.reflect.Lister$CollectionLister.addToPack(Lister.java:254) at com.sun.xml.internal.bind.v2.runtime.unmarshaller.Scope.add(Scope.java:106) at com.sun.xml.internal.bind.v2.runtime.property.ArrayERProperty$ReceiverImpl.receive(ArrayERProperty.java:195) at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext.endElement(UnmarshallingContext.java:507) at com.sun.xml.internal.bind.v2.runtime.unmarshaller.SAXConnector.endElement(SAXConnector.java:145) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:601) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(XMLDocumentFragmentScannerImpl.java:1782) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2938) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648) at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737) at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205) at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522) at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:200) at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:173) at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:120) at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:103) at com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider.readFrom(XMLRootElementProvider.java:115) at com.sun.jersey.core.provider.jaxb.AbstractRootElementProvider.readFrom(AbstractRootElementProvider.java:111) at com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:553) at com.sun.jersey.api.client.ClientResponse.getEntity(ClientResponse.java:506) at liveperson.lphosting.plugins.cdn.proxy.highwinds.HighwindsProxy.getDirectory(HighwindsProxy.java:49) at liveperson.lphosting.plugins.cdn.proxy.highwinds.HighwindsProxy.main(HighwindsProxy.java:59)
I thought that this refers to one of the lists that I have, but I could not understand where I was wrong. Any help would be appreciated.
Thanks in advance.
The following are the classes (minus a few fields / methods):
@XmlRootElement(name = "hwreply") public class OpenDirectory extends ResponseBase { @XmlElement(name="session") public Session getSession() {...} public void setSession(Session session) {...} @XmlElement(name="directory") public Directory getDirectory() {...} public void setDirectory(Directory directory) {...} } public class Directory { ... private List<Directory> directories; private List<File> files; @XmlElement(name="nEntries") public int getnEntries() {...} public void setnEntries(int nEntries) {...} @XmlElement(name="name") public String getName() {... } public void setName(String name) {... } @XmlElement(name="readonly") public boolean isReadonly() {... } public void setReadonly(boolean readonly) { ... } @XmlElement (name="created") public String getCreated() { ... } public void setCreated(String created) { ... } @XmlElement(name="modified") public String getModified() {... } public void setModified(String modified) {... } @XmlElements( @XmlElement(name="directory", type=Directory.class) ) public List<Directory> getDirectories() { return directories; } public void setDirectories(List directories) { this.directories = directories; } @XmlElements( @XmlElement(name="file", type=File.class) ) public List<File> getFiles() { return files; } public void setFiles(List files) { this.files = files; } } public class File { private List<String> tPathList; private List<String> oPathList; @XmlElement(name="xferStatus") public int getXferStatus() {...} public void setXferStatus(int xferStatus) {...} @XmlElement(name="size") public int getSize() {...} public void setSize(int size) {...} @XmlElement(name="tPath") public String gettPath() {...} public void settPath(String tPath) {...} @XmlElement(name="oPath") public String getoPath() {...} public void setoPath(String oPath) {...} @XmlElementWrapper(name="tPathList") @XmlElements( @XmlElement(name="tPath", type=String.class) ) public List gettPathList() { return tPathList; } public void settPathList(List tPathList) {...} @XmlElementWrapper(name="oPathList") @XmlElements( @XmlElement(name="oPath", type=String.class) ) public List getoPathList() { return oPathList; } public void setoPathList(List oPathList) { this.oPathList = oPathList; } }
Dan bar-shalom
source share