1

我已经看到其他链接错误,但没有一个说可以用罐子做什么。当我在 Jboss 中部署我的应用程序时,它工作正常,但是当我将我的应用程序部署到 websphere 时,我遇到了这个链接错误。可以在这里找到类似的问题:LinkageError when calling webservice method but not sure what to do to fix it

主要是从共享com/ibm/oti/vm/BootstrapClassLoader类加载com/ibm/ws/classloader/CompoundClassLoaderjavax/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 服务将失败)

4

1 回答 1

0

您的应用程序中有 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 副本,而不是从服务器中提取它。

于 2017-12-04T19:33:41.860 回答