从Oracle 10g上的webapp链接“链接javax / xml / namespace / QName类时违反了加载器约束”

时间:2008-09-25 15:28:01

标签: java oracle oracle10g jaxb classpath

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

查看“加载器约束违反”异常 - 当一个已经加载了一个类加载器的类试图访问同一个包中但由另一个类加载器加载的包私有的东西时,它似乎被抛出。我已经尝试删除我们的webapp中包含javax.xml.namespace.QName的任何jar,并且已经验证它是正在被拾取的Oracle中包含的实例,但是仍然会发生错误。有什么想法吗?

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

4 个答案:

答案 0 :(得分:3)

这个类是WS Java库的一半。从多个类加载器加载它然后比较它们非常容易,导致LinkageError。

跟踪此问题的一种有效(但是大锤)技术是从Java源修改Classloader以转储在加载时从特定类加载的jar,然后使用修改后的版本添加bootclasspath:

-Xbootclasspath / P:/路径/到/ hackedBin

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

可能是同样的问题,只是误报了?试试吧。

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

答案 3 :(得分:0)

您是否可以在应用服务器的lib文件夹下更新JAXB jar?