Исключение нулевого указателя при демаршаллинге XML для объекта Java, имеющего @XMLElementWrapper

1

Я использую JAXB для unmarshalling XML файла для Java Object.

Этот XML содержит список. например

<items>
<item>
...
</item>
...
</items>

и Java Class имеют @XMLElementWrapper для элементов

@XMLElementWrapper(name="items")
@XMLElement(name="item")
private List<Item> items;

И я получаю исключение null-указателя, когда я пытаюсь разобрать.

 java.lang.NullPointerException
          at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.java:54)
          at sun.reflect.UnsafeObjectFieldAccessorImpl.get(UnsafeObjectFieldAccessorImpl.java:36)
          at java.lang.reflect.Field.get(Field.java:379)
          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 org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source)
          at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanEndElement(Unknown Source)
          at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
          at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
          at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
          at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
          at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
          at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
          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:157)
          at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:214)
          at com.amazon.epubs.edition.manifest.serializer.JAXBMarshaller.unmarshall(JAXBMarshaller.java:45)
          at amazon.PeriodicalsManagementService.handler.PreviewPublicationHandler.getFolioRenditions(PreviewPublicationHandler.java:293)
          at amazon.PeriodicalsManagementService.handler.PreviewPublicationHandler.doMainProcessing(PreviewPublicationHandler.java:176)
          ... 19 more
  • 0
    Можете ли вы предоставить более подробную информацию о вашем приложении и в какой среде вы работаете?
Теги:
jaxb

1 ответ

0

Попробуйте с классом-оболочкой для List<>:

@XmlRootElement
class Items {
    @XmlElement
    List<Item> item;
}

Затем сделайте unmarshall для Items

  • 0
    Пакет, в котором этот класс присутствует в зависимости от моего пакета (где я обращаюсь к unmarshall). Я не могу изменить этот класс, потому что может быть другой пакет, который уже использует это как зависимость, и, кроме того, я не являюсь владельцем этого пакета. Если добавить зависимость JAXB2.2 в мой пакет, эта проблема решена. Я сталкиваюсь с этой проблемой только из-за более старой версии Jaxb. Опять же, будет очень сложно изменить эту версию (ограничения нашей системы сборки). Есть ли какая-либо другая библиотека, такая как jaxb, которая может понимать аннотации Jaxb и unmarshall / marshall xml-java?
  • 0
    Да, конечно. Это xstream . Почти похоже. Проверьте это здесь
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню