首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LinkageError -加载约束冲突

LinkageError -加载约束冲突
EN

Stack Overflow用户
提问于 2021-05-14 18:41:39
回答 1查看 146关注 0票数 0

我面对的是websphere application server(8.5.5.14)中的LinkageError。这里发现了一个类似的问题LinkageError

由:javax:解析方法时违反加载约束"javax/xml/soap/SOAPElement.getElementQName()Ljavax/xml/namespace/QName;“:类"org/springframework/ws/soap/saaj/SaajSoapElement”的加载器"com/ibm/ws/classloader/CompoundClassLoader@19d4f90e“和类"javax/xml/soap/SOAPElement”的加载器"com/ibm/oti/vm/BootstrapClassLoader@ca532309“具有不同类型的方法签名

EN

回答 1

Stack Overflow用户

发布于 2021-05-14 21:40:00

问题的原因是在您的应用程序中包含了一个包含javax/ XML /namespace/QName的xml API jar,并且该应用程序被配置为使用父类加载。当发生这种情况时,您将获得以下链接模式:

这个类是从JDK

  • SOAPElement引用javax/xml//
  1. / QName加载的-它使用自己的类加载器加载,所以它也可以在JDK
  2. SOAPElement类引用org/springframework/ws/soap/saaj/SaajSoapElement中找到-这个类是从application
  3. SaajSoapElement引用SOAPElement和QName加载的- SOAPElement是从加载的,但QName是从应用程序加载的。因为父类加载器委派要求类加载器在委派给parents
    1. SaajSoapElement之前在本地进行搜索,所以现在可以“看到”QName的两个副本,而且Java会抛出一个LinkageError,因为这违反了

    的加载约束

要解决这个问题,可以从应用程序中删除包含QName类的XML (该应用程序接口包含在服务器的JDK中),将SOAP API添加到应用程序中(以便应用程序“看到”来自同一位置的两个类),或者将类加载切换为“父优先”。父类加载通常容易受到此类问题的影响,因为它允许在类加载器之间进行比默认设置下通常可能的更多的重复加载。如果您对自己的XML API版本没有非常明确的需求(XML已经包含在Java SE中很长一段时间了),我强烈建议您要么删除jar,要么切换到父优先。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67532986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档