Unmarshall JAXB sorts list with NullPointerExceptin error

I have a list of Person objects in a ListWrapper, and each Person object contains a list of telefonnummbers. Marschalling through JAXB.marschall (file, PersonList.class) works fine. The problem is that this is non-armalling. I get a NullPointerException, see Stacktrace below. I suspect that I have missing or incorrect annotations, but I cannot figure it out myself ...

code

public class TelefonNr {[..]} public class Person { [..] List<TelefonNr> telefonNrs; [..] @XmlElement(name = "number") @XmlElementWrapper(name = "telefonnumbers") public List<TelefonNr> getTelefonNrs(){ return this.telefonNrs; } [..] } @XmlRootElement(name = "persons") public class PersonList { List<Person> persons; [..] @XmlElement(name = "person") public List<Person> getPersons() { return this.Persons; } [..] } 

Stacktrace exceptions

 at com.sun.xml.internal.bind.v2.runtime.reflect.Lister$CollectionLister.addToPack(Lister.java:289) at com.sun.xml.internal.bind.v2.runtime.reflect.Lister$CollectionLister.addToPack(Lister.java:253) 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:198) at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext.endElement(UnmarshallingContext.java:523) at com.sun.xml.internal.bind.v2.runtime.unmarshaller.SAXConnector.endElement(SAXConnector.java:143) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:609) 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:2973) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:606) at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:117) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:848) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:777) at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1213) at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:648) at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:203) at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:175) at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:157) at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:162) at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:171) at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:189) at org.twinhowi.organizer.core.DatastructureDemo.testUnmarshalling(DatastructureDemo.java:131) at org.twinhowi.organizer.core.DatastructureDemo.main(DatastructureDemo.java:144) 
+6
source share
1 answer

Theory:

You may need to initialize the collection - either impatient or lazy.

 List<TelefonNr> telefonNrs = new LinkedList<TelefonNr>(); 

Or:

 public List<Person> getPersons() { if (this.persons == null) { this.persons = new LinkedList<Person>(); } return this.persons; } 

But see also this question:

JAXB unmarshalling NPE troubleshooting help

+7
source

Source: https://habr.com/ru/post/977502/


All Articles