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

有帮助吗?

解决方案

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

其他提示

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

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

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

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

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

理想情况下,您应该在调试器中运行您的java应用程序,因此当引发未捕获的异常时,您可以检查调用堆栈、变量等,并准确查看哪一行导致了崩溃,以及可能使用了哪些数据为空。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top