处理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");
如果将元素导航调用串联在一起,或者通常在使用它们之前不检查返回值,则当然也是如此。