【问题标题】:"loader constraints violated when linking javax/xml/namespace/QName class" from webapp on Oracle 10g“链接 javax/xml/namespace/QName 类时违反加载程序约束”来自 Oracle 10g 上的 webapp
【发布时间】:2010-09-13 03:16:12
【问题描述】:

我们有一个可以部署在许多应用服务器上的 Web 应用程序,包括 Oracle 10g。然而,在那个平台上,我们遇到了类路径问题。 webapp 使用 JAXB 2,但 Oracle 10g 附带 JAXB 1,这会导致错误。为了解决这些问题,我们将 Oracle 配置为首选 Web 应用程序中的类,但现在我们在尝试实例化 JAXB 上下文时遇到上述错误。

查找“违反加载器约束”异常 - 当已使用一个类加载器加载的类尝试访问同一包中的包私有但由不同的类加载器加载的内容时,似乎会抛出该异常。我已经尝试在我们的 webapp 中删除任何包含 javax.xml.namespace.QName 的 jar,并验证它是被拾取的 Oracle 中包含的实例,但错误仍然存​​在。有什么想法吗?

(这是 earlier question 关于 10g 和 JAXB 2 的后续内容。)

【问题讨论】:

  • 我知道这会倒退,但您找到可行的解决方案了吗?

标签: java oracle oracle10g jaxb classpath


【解决方案1】:

您使用的是什么版本的 Java?最新版本在 rt.jar 中附带此类。

【讨论】:

  • 1.5.0_06 这似乎包括它。不过,我不知道如何解决这个问题。从 webapp 和 oracle 本身中删除它显然不是一种选择。
【解决方案2】:

可能完全不相关,但我记得 Weblogic 在同一个类中遇到的问题。问题的原因是更改了类的序列号(Sun 意外更改了它)。解决方法是向 JVM 提供 -Dcom.sun.xml.namespace.QName.useCompatibleSerialVersionUID=1.0。

会不会是同样的问题,只是误报了?试试看。

请看这里:http://forums.bea.com/thread.jspa?threadID=600014563

【讨论】:

    【解决方案3】:

    这个类是 WS Java 库的一半。从多个类加载器加载它并稍后比较它们真的很容易,导致 LinkageError。

    一种有效的(但大锤)技术来追踪这一点是从 Java 源修改 Classloader 以转储该特定类在加载时从哪个 jar 加载,然后在您的引导类路径前面加上修改后的版本:

    -Xbootclasspath/p:/path/to/hackedBin

    【讨论】:

      【解决方案4】:

      您可以只更新应用服务器的lib 文件夹下的 JAXB jar 吗?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-15
        • 2011-07-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-21
        • 2014-04-10
        • 1970-01-01
        相关资源
        最近更新 更多