我该如何调试这个NullPointerException

时间:2012-02-27 14:01:47

标签: java jaxb

使用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

3 个答案:

答案 0 :(得分:3)

一个好方法是使用JAXB源(其实现)和IDE进行调试。

答案 1 :(得分:3)

NullPointerException添加例外断点。当它被击中时,在调用堆栈中探索更高级别以找出局部变量的状态,你可能会得到关于什么是null的线索。

答案 2 :(得分:1)

嗯,一个起点可能是在调用unmarshaler时设置一个断点,并确切地检查它传递的参数。

我要检查的第一件事就是你传递的内容实际上是xml,而且它的格式正确且有效。