当前位置: 首页 > 知识库问答 >
问题:

LinkageError-加载约束冲突

逄嘉禧
2023-03-14

我在WebSphereApplicationServer(8.5.5.14)中遇到了LinkageError。这里也发现了类似的问题LinkageError

原因:java。lang.LinkageError:解析方法“javax/xml/soap/SOAPElement.getElementQName()Ljavax/xml/namespace/QName;”时加载约束冲突:loader“com/ibm/ws/classloader/CompoundClassLoader@19d4f90e类“org/springframework/ws/soap/saaj/SaajSoapElement”和加载程序“com/ibm/oti/vm”/BootstrapClassLoader@ca532309“javax/xml/soap/SOAPElement”类的“类”具有不同的方法签名类型

共有1个答案

吴靖
2023-03-14

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

  1. 应用程序类引用javax/xml/soap/SOAPElement——这个类是从JDK加载的
  2. SOAPElement引用了javax/xml/namespace/QName——它使用自己的类加载器加载,因此它也可以在JDK中找到
  3. 应用程序类引用org/springframework/ws/soap/saaj/SaajSoapElement——这个类是从应用程序加载的
  4. SaajSoapElement同时引用了SOAPElement和QName——SOAPElement是从JDK加载的(和以前一样),但QName是从应用程序加载的,因为父类最后一个类加载器委托要求类加载器在委托给父类之前在本地搜索
  5. SaajSoapElement现在可以“看到”QName的两个副本,Java抛出LinkageError,因为这违反了加载约束

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

 类似资料:
  • 我见过其他的链接错误,但没有一个能说明如何使用罐子。当我在Jboss中部署我的应用程序时,它可以正常工作,但当我将应用程序部署到websphere时,我遇到了这种链接错误。在这里可以找到一个类似的问题:调用webservice方法时出现LinkageError,但不确定如何修复它 它主要是从和加载的,带有共享类 我所拥有的是jsp调用Web服务。从消息中,我看到的唯一jars来自axis.jar,

  • 帮助我如何解决这个问题?我正在使用java进行NetSuite集成,我将所需的jar文件添加到我的项目中。添加jboss 6.1.0中部署的jar后。添加此jar后org.apache.sling.commons.log-2.0.6.jar获得以下异常。这是我的堆栈跟踪。

  • 我发现以下错误: 似乎我的云平台默认包,我收到这个错误,因为我还将slf4j作为依赖项放在我的pom文件中,并且两个不同的类加载器正在加载 我解决这个问题的方法是将pom中的依赖范围更改为提供。 但副作用是我无法在本地的tomcat上运行它,因为它找不到slf4j库。 在这种情况下,可以做些什么来使我的战争在我的云平台和我的本地tomcat上正常运行?

  • A在B中使用web服务。 B在A中使用web服务。 Tomcat的一切都很好。但当我在Jboss中部署时,却面临着链接错误。

  • 有人知道我该怎么办吗?还是我做错了什么? 提前多谢

  • 类文件DTDScanner,DocumentScanner正在从两个jar文件com.ibm.ws.webservices.thinclient_8.5.0.jar(由应用程序通过WEB-INF/lib提供)和由Liberty profile Liberty提供的com.ibm.ws.xlxp.1.5.3_1.0.16.jar加载。这些类文件具有java.lang.LinkageError:loa