【问题标题】:How to debug java depenendency failure on version of DOMImplementation如何在DOMImplementation版本上调试java依赖失败
【发布时间】:2009-07-02 23:29:27
【问题描述】:

我有一段代码可以单独运行,但在客户项目中使用依赖项失败。打电话给

文档 doc = impl.createDocument(null,null,null);

失败(看起来像http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4913257 的问题)。我的单元测试中的“impl”实例是 com.sun.org.apache.xerces.internal.dom.DOMImplementationImpl 的一个实例。在我的客户代码中,它是 org.apache.xerces.dom.DOMImplementationImpl 的一个实例。

如何追溯这种依赖关系?我尝试手动浏览类路径中的所有类和 jar 文件,但找不到 org.apache.xerces.dom.DOMImplementation 的提供者。是否可以观察何时加载类(以及为什么)?如何选择特定的 DOM 实现?我现在可以强制 jvm 使用特定的实现吗?

【问题讨论】:

    标签: java xml dom dependencies


    【解决方案1】:

    “com.sun.org.apache...”包中的实现是作为 JRE 的一部分打包的 Xerces。以“org.apache ...”开头的那个是 Apache 的独立发行版。它们可以在同一个应用程序中一起运行,但会变得相当混乱。

    您的客户项目似乎包含独立 apache 发行版的副本(可能是 xercesImpl.jar)。要求他们移除它,看看它是否开始使用内置的 JRE 代码。

    【讨论】:

    • 这是有道理的。现在的问题是哪个 jar 有 apache 发行版。类路径中没有 xercesImpl,我找不到哪个 jar 具有 org.apache.xerces.* 类。运行 -Djaxp.debug=true 打印 JAXP: found jar resource=META-INF/services/javax.xml.parsers.DocumentBuilderFactory using ClassLoader: sun.misc.Launcher$AppClassLoader@53372a1a 但遗憾的是它没有说哪个 jar。
    • 其中必须有一个 JAR,其中包含 META-INF/services/javax.xml.parsers.DocumentBuilderFactory 条目。请记住还要检查客户端的 JRE 安装内部,他们可能已经在其中放置了 xerces。
    【解决方案2】:

    客户项目的类路径中很可能没有 xercesImpl.jar

    【讨论】:

      【解决方案3】:

      我认为你可以处理 endorsed standards 的东西。

      【讨论】:

        猜你喜欢
        • 2021-09-28
        • 2019-03-30
        • 1970-01-01
        • 1970-01-01
        • 2019-12-25
        • 2014-12-23
        • 2022-06-29
        • 2016-09-18
        • 2023-04-03
        相关资源
        最近更新 更多