我已经看到了其他的连锁错误,但没有人说明可以用罐子做些什么。当我在Jboss中部署我的应用程序时它工作正常,但是当我将我的应用程序部署到websphere时,我遇到了这种链接错误。类似的问题可以在这里找到:LinkageError when calling webservice method但不知道如何解决它
主要是从com/ibm/oti/vm/BootstrapClassLoader
和com/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调用webservice。 从消息中我看到的唯一的jar是来自axis.jar,包含类javax / xml / soap / SOAPFault
这是否意味着我需要从axis.jar中删除SOAPFault.class? (如果删除它,它不起作用,其他web服务会失败)
答案 0 :(得分:0)
您的应用程序中是否有SOAP API jar? &#34;加载约束违规&#34; LinkageError通常意味着通过两个不同的类加载器对类的重复可见性。基于堆栈我在这里猜测的是你的应用程序有SOAP API而不是JAX-WS API。当该JAX-WS类引用SOAP类时,这意味着应用程序中的类可以&#34;参见&#34;来自两个不同加载器的SOAP API - 直接在本地类加载器中,间接通过JAX-WS API。
最简单的答案就是摆脱应用程序中的任何SOAP API jar - 您可以只依赖服务器中的副本,除非您有真正特定的版本需求。或者,您可以将JAX-WS API jar添加到应用程序包中,因此应用程序会加载自己的API副本,而不是从服务器中提取它。