Mam błąd podczas unmarshalingu XML do obiektu Java za pomocą JAXB:
java.lang.NullPointerException
at com.sun.xml.internal.bind.v2.model.impl.RuntimeBuiltinLeafInfoImpl$1.parse(RuntimeBuiltinLeafInfoImpl.java:188)
at com.sun.xml.internal.bind.v2.model.impl.RuntimeBuiltinLeafInfoImpl$1.parse(RuntimeBuiltinLeafInfoImpl.java:186)
at com.sun.xml.internal.bind.v2.runtime.reflect.TransducedAccessor$CompositeTransducedAccessorImpl.parse(TransducedAccessor.java:230)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.LeafPropertyLoader.text(LeafPropertyLoader.java:50)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext.text(UnmarshallingContext.java:483)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.InterningXmlVisitor.text(InterningXmlVisitor.java:78)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.StAXEventConnector.handleCharacters(StAXEventConnector.java:173)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.StAXEventConnector.bridge(StAXEventConnector.java:127)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:392)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:368)
Jak mogę znaleźć przyczynę?
Więcej szczegółów:
Część xml, którą próbuję przeanalizować, to:
<member_resources>
<__field_location__>
<directive>
sun-sat
</directive>
<file>
null
</file>
<line>
0
</line>
</__field_location__>
<sun-sat>
00:00-24:00 tester2
</sun-sat>
<__field_location__>
<directive>
isLine
</directive>
<file>
null
</file>
<line>
0
</line>
</__field_location__>
<isLine>
true
</isLine>
</member_resources>
Zatrzymując się na zdarzeniu, które to spowodowało, otrzymuję:
next event <__field_location__>
next event <directive>
next event sun-sat
next event <file>
next event null
3 odpowiedzi
Dodaj punkt przerwania wyjątku dla NullPointerException
. Kiedy zostanie trafiony, zbadaj kilka poziomów wyżej w stosie wywołań, aby poznać stan zmiennych lokalnych, prawdopodobnie dostaniesz wskazówkę, co jest puste.
Dobrym podejściem jest użycie źródła JAXB
(jego implementacji) oraz IDE do debugowania.
Cóż, punktem wyjścia może być ustawienie punktu przerwania przy wywołaniu do unmarshalera i sprawdzenie dokładnie, które argumenty są przekazywane.
Pierwszą rzeczą, którą sprawdzę, jest to, że to, co przekazujesz, jest w rzeczywistości xml i że jest zarówno dobrze sformułowane, jak i prawidłowe.
Podobne pytania
Nowe pytania
java
Java to język programowania wysokiego poziomu. Użyj tego tagu, jeśli masz problemy z używaniem lub zrozumieniem samego języka. Ten tag jest rzadko używany samodzielnie i jest najczęściej używany w połączeniu z [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] i [maven].