使用JAXB将XML解组为Java对象时出错:
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)
我如何找到原因?
更多细节:
我要解析的xml的一部分是:
<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>
在导致这种情况的事件停止时,我得到了:
next event <__field_location__>
next event <directive>
next event sun-sat
next event <file>
next event null
答案 0 :(得分:3)
一个好方法是使用JAXB
源(其实现)和IDE进行调试。
答案 1 :(得分:3)
为NullPointerException
添加例外断点。当它被击中时,在调用堆栈中探索更高级别以找出局部变量的状态,你可能会得到关于什么是null的线索。
答案 2 :(得分:1)
嗯,一个起点可能是在调用unmarshaler时设置一个断点,并确切地检查它传递的参数。
我要检查的第一件事就是你传递的内容实际上是xml,而且它的格式正确且有效。