【问题标题】:LinkageError: loading contraint violationLinkageError:加载约束冲突
【发布时间】:2017-12-04 15:54:31
【问题描述】:

我看到了其他链接错误,但没有一个说可以用罐子做什么。当我在 Jboss 中部署我的应用程序时,它工作正常,但是当我将我的应用程序部署到 websphere 时,我遇到了这个链接错误。可以在这里找到类似的问题:LinkageError when calling webservice method 但不确定如何解决它

主要从com/ibm/oti/vm/BootstrapClassLoadercom/ibm/ws/classloader/CompoundClassLoader加载,共享类javax/xml/soap/SOAPFault

Caused by: java.lang.LinkageError: loading constraint violation: loader "com/ibm/oti/vm/BootstrapClassLoader@dda62209" previously initiated loading for a different type with name "javax/xml/soap/SOAPFault" defined by loader "com/ibm/ws/classloader/CompoundClassLoader@fdebcda2"
        at com.ibm.oti.vm.VM.findClassOrNull(Native Method)
        at com.ibm.oti.vm.BootstrapClassLoader.loadClass(BootstrapClassLoader.java:63)
        at javax.xml.ws.soap.SOAPFaultException.<init>(SOAPFaultException.java:78)
        at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:160)
        at com.sun.proxy.$Proxy118.collectionsInquiryV2(Unknown Source)

我所拥有的是 jsp 调用 web 服务。 从消息中,我看到的唯一 jar 来自axis.jar,其中包含类 javax/xml/soap/SOAPFault

这是否意味着我需要从axis.jar 中删除SOAPFault.class? (它不起作用,如果删除它,其他 web 服务将失败)

【问题讨论】:

    标签: java websphere linkageerror


    【解决方案1】:

    您的应用程序中有 SOAP API jar 吗? “加载约束违规” LinkageError 通常意味着通过两个不同的类加载器对类的重复可见性。根据堆栈,我猜这里发生的是您的应用程序具有 SOAP API 但没有 JAX-WS API。当 JAX-WS 类引用 SOAP 类时,这意味着您的应用程序中的类可以“看到”来自两个不同加载器的 SOAP API - 直接在本地类加载器中,以及间接通过 JAX-WS API。

    最简单的答案就是删除应用程序中的任何 SOAP API jar - 您可以只依赖服务器中的副本,除非您有真正特定的版本需要。或者,您可以将 JAX-WS API jar 添加到应用程序包中,以便应用程序加载它自己的 API 副本,而不是从服务器中提取它。

    【讨论】:

    • 没有同一个类的两个Jar是saaj.jar和axis.jar。它们都包含 SOAPFault.class。问题是我无法删除它们中的任何一个,因为如果我删除它们会导致其他类失败。我不知道如何纠正错误。
    • 删除它们会导致什么样的错误?除非您有一个非常非正统的部署设置(或依赖一个奇怪的 SOAP 版本),否则应用程序所需的任何 SOAP API 类都将通过服务器提供的副本可见。
    • ClassDefNotFound。如果我删除其他课程。
    猜你喜欢
    • 2021-08-04
    • 2017-07-05
    • 1970-01-01
    • 2014-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多