处理XML时,最常见的原因是" java.lang.NullPointerException"?

时间:2020-03-05 18:59:24  来源:igfitidea点击:

我最强的线索是处理传入XML的代码实际上接收到一个无效/不完整的文件,从而使DOM解析失败。有什么建议?

解决方案

回答

不完整的文件绝对是开始查找的地方。我将在我们解析该文件之前打印出该文件,以查看发送到解析器的内容。如果不完整,将很明显。如果无效,则需要进行一些搜索。

回答

我们应该有一个堆栈跟踪,指向我们抛出NPE的位置。那应该缩小可以为空的变量的数量。建议不要添加调试器或者printf,而是建议添加适当的检查并在检测到错误后立即引发异常。这是一个避免以后再遇到神秘问题的好习惯。

回答

理想情况下,我们应该在调试器中运行Java应用程序,这样,当引发未捕获的异常时,我们可以检查调用堆栈,变量等,并确切地了解导致崩溃的行,以及可能使用的数据为null。

如果由于某种原因不能使用调试器,请使用调试支持编译应用程序,并为该特定错误添加异常处理程序,并打印出堆栈跟踪。同样,这将确切显示导致崩溃的文件中的哪一行。

回答

我的第一个猜测是,使用DOM的代码将DTD中标记为可选的元素视为必选元素。

编辑添加:
我的意思是,除非我们针对DTD进行验证,否则我们无法期望类似于以下内容(使用dom4j的示例)返回除null之外的任何内容。

doc.selectSingleNode("//some/element/in/a/structure");

如果将元素导航调用串联在一起,或者通常在使用它们之前不检查返回值,则当然也是如此。