【问题标题】:Most common cause of "java.lang.NullPointerException" when dealing with XMLs?处理 XML 时“java.lang.NullPointerException”的最常见原因?
【发布时间】:2010-09-10 06:23:15
【问题描述】:

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

【问题讨论】:

    标签: java xml dom parsing dtd


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

      • 欣赏评论!介意详细说明一下吗?
      【解决方案3】:

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

      【讨论】:

      • 感谢您的评论!不幸的是,这些是 Java EAI 应用程序的专有方法,因此我无法修改源代码。
      【解决方案4】:

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

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

      【讨论】:

      • 很遗憾,我两者都做不到,它是一个专有应用程序,因此我无权访问代码,而且它非常旧,因此几乎不受支持。
      猜你喜欢
      • 1970-01-01
      • 2014-02-03
      • 2014-11-13
      • 1970-01-01
      • 2014-02-24
      • 1970-01-01
      • 2018-01-04
      • 2020-11-05
      相关资源
      最近更新 更多