代码之家  ›  专栏  ›  技术社区  ›  alexmcchessers

“当链接javax/xml/namespace/QName类时,违反了加载程序约束”在oracle10g上的webapp

  •  5
  • alexmcchessers  · 技术社区  · 16 年前

    我们有一个可以部署在许多应用服务器上的web应用程序,包括oracle10g。webapp使用jaxb2,但oracle10g附带jaxb1,这导致了错误。为了避免这些问题,我们在webapp中将Oracle配置为首选类,但是现在我们在尝试实例化JAXB上下文时遇到了上述错误。

    查找“loader constraints violated”异常-当用一个类加载器加载的类试图访问同一个包中的包私有但由另一个类加载器加载的内容时,似乎会引发此异常。我已经尝试删除我们的webapp中的任何jar,其中包括javax.xml.namespace但仍然会出现错误。有什么想法吗?

    (以下是 earlier question 关于10g和JAXB 2。)

    4 回复  |  直到 8 年前
        1
  •  3
  •   Alex Miller    16 年前

    这个类占了WS-Java库的一半。很容易从多个类加载器加载它,然后比较它们,从而导致LinkageError。

    跟踪这一点的一种有效的(但是很重的)技术是从Java源代码中修改Classloader,以便在加载时转储这个特定类从哪个jar中加载,然后在bootclasspath中添加修改后的版本:

    -Xbootclasspath/p:/path/to/hackedBin

        2
  •  1
  •   Robert Van Hoose    16 年前

    你在用什么版本的Java?最新版本在基础类库.

        3
  •  0
  •   Vladimir Dyuzhev    16 年前

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

    可能是同一个问题,只是误传了吗?试试看。

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

        4
  •  0
  •   matt b    16 年前

    你能更新应用服务器下的JAXB jar吗 lib 文件夹?