我最强的领导是处理传入XML的代码实际上是在接收无效/不完整的文件,因此无法解析DOM。有什么建议吗?
答案 0 :(得分:2)
不完整的文件绝对是开始寻找的地方。我会在解析它之前打印出文件,以查看发送给解析器的内容。如果它不完整,那将是显而易见的。如果它无效,你可以进行一些搜索。
答案 1 :(得分:2)
我的第一个猜测是使用DOM的代码将在DTD中标记为可选的元素视为必须的。
编辑添加: 我的意思是,除非你对DTD进行验证,否则你不能指望像下面的那样(使用dom4j的例子)返回除null之外的任何内容。
doc.selectSingleNode("//some/element/in/a/structure");
如果你将元素导航调用串在一起,或者通常在使用它们之前不检查返回值,那么同样如此。
答案 2 :(得分:1)
您应该有一个堆栈跟踪指向您抛出NPE的位置。这应该缩小可以为null的变量的数量。我建议添加适当的检查并在检测到错误时抛出异常,而不是将调试器或printf输出。为了避免以后出现神秘问题,这是一个很好的习惯。
答案 3 :(得分:1)
理想情况下,您应该在调试器中运行Java应用程序,因此当抛出未捕获的异常时,您可以检查调用堆栈,变量等,并确切地查看导致崩溃的行,以及可能使用的哪些数据为null。
如果由于某种原因无法使用调试器,则使用调试支持编译应用程序,并为此特定错误添加异常处理程序,并打印出堆栈跟踪。同样,这将准确显示导致崩溃的文件中的哪一行。