2017-12-04 14 views
0

私は他のリンケージエラーを見ましたが、そのどれもがジャーで何ができるのかは述べていません。 Jbossでアプリケーションをデプロイするとうまくいきますが、アプリケーションをwebsphereにデプロイすると、このリンケージエラーが発生します。同様の問題は、ここで見つけることができます:LinkageError when calling webservice methodではなく、修正するために何をすべきかわからそれLinkageError:ローディングコンストレイン違反

は、主にそれが共有クラスJSP Webサービスを呼び出している私が持っているjavax/xml/soap/SOAPFault

Caused by: java.lang.LinkageError: loading constraint violation: loader "com/ibm/oti/vm/[email protected]" previously initiated loading for a different type with name "javax/xml/soap/SOAPFault" defined by loader "com/ibm/ws/classloader/[email protected]" 
     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) 

com/ibm/oti/vm/BootstrapClassLoadercom/ibm/ws/classloader/CompoundClassLoaderからロードされました。 メッセージから、axis.jarからの唯一のjarファイルは、javax/xml/soap/SOAPFaultクラスが含まれています。

これは、axis.jarからSOAPFault.classを削除する必要があるということですか? (これは試しても動作しません。これが削除された場合、他のWebサービスは失敗します)

答えて

0

アプリケーションにSOAP API jarがありますか? 「ロード制約違反」LinkageErrorは、一般に、2つの異なるクラスローダーを介してクラスへの重複した可視性を意味します。私が推測しているのは、スタックに基づいてアプリケーションにSOAP APIがあり、JAX-WS APIはないということです。そのJAX-WSクラスがSOAPクラスを参照すると、アプリケーションのクラスがローカルのクラスローダ内の直接的に、そしてJAX-WS APIを介して間接的に、2つの異なるローダからSOAP APIを「参照​​」できることを意味します。

単純な答えは、あなたのアプリでSOAP API jar(s)を取り除くことです - 本当に特定のバージョンが必要な場合を除いて、サーバのコピーに頼ることができます。あるいは、アプリケーションパッケージにJAX-WS API jarを追加すると、アプリケーションはサーバーから引き出すのではなく、独自のAPIのコピーをロードします。

+0

同じクラスを持つ2つのJarは、saaj.jarとaxis.jarではありませんでした。どちらもSOAPFault.classを含んでいます。問題は、それらを削除しても他のクラスで失敗する可能性があるため、どちらも削除できないということです。私はどのようにエラーを修正するか分かりません。 – logger

+0

削除するとどのようなエラーが発生しますか?あなたが非常に非正統的なデプロイメント設定をしていないか、または奇妙なSOAPバージョンに頼っている場合を除き、アプリケーションに必要なSOAP APIクラスは、サーバーに付属のコピーを通して見ることができます。 – Jarid

+0

ClassDefNotFound。私はそれらを削除する場合、他のクラスのために。 – logger