2017-07-09 9 views
0

ESBサーバーでアプリケーションを設定しようとしています。私たちには必要なすべての依存関係を持つOSGiバンドルがありますが、現在は奇妙な問題があります。実行時に、サーバーはCXFクライアントをアプリケーションサーバー用にインスタンス化できません。スタックトレースは、それは両方の紛争で、その結果、FleetManagementWSServiceService、サービス、またはその両方のインスタンスを提供しているWSO2のブートアップクラスローダーのように見える前に、私は、この特定のスタックトレースを見ていないCXFクライアントとのリンクエラー

java.lang.LinkageError: loader constraint violation: when resolving method "javax.xml.ws.Service.<init>(Ljava/net/URL;Ljavax/xml/namespace/QName;)V" the class loader (instance of org/eclipse/osgi/internal/baseadaptor/DefaultClassLoader) of the current class, mil/sddc/fltmgt/ws/api/FleetManagementWSServiceService, and the class loader (instance of <bootloader>) for resolved class, javax/xml/ws/Service, have different Class objects for the type <init> used in the signature 
      at mil.sddc.fltmgt.ws.api.FleetManagementWSServiceService.<init>(FleetManagementWSServiceService.java:39) 
      at mil.sddc.ibs.mediators.fleetManagement.TestClient.mediate(TestClient.java:28) 
      at org.apache.synapse.mediators.ext.ClassMediator.mediate(ClassMediator.java:78) 
      at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:77) 
      at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:47) 
      at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:131) 
      at org.apache.synapse.rest.Resource.process(Resource.java:297) 
      at org.apache.synapse.rest.API.process(API.java:341) 
      at org.apache.synapse.rest.RESTRequestHandler.dispatchToAPI(RESTRequestHandler.java:76) 
      at org.apache.synapse.rest.RESTRequestHandler.process(RESTRequestHandler.java:63) 
      at org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:220) 
      at org.apache.synapse.core.axis2.SynapseMessageReceiver.receive(SynapseMessageReceiver.java:83) 
      at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180) 
      at org.apache.synapse.transport.passthru.ServerWorker.processNonEntityEnclosingRESTHandler(ServerWorker.java:344) 
      at org.apache.synapse.transport.passthru.ServerWorker.run(ServerWorker.java:168) 
      at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172) 
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
      at java.lang.Thread.run(Thread.java:745) 

です。

WSO2のブートアップクラスローダーのようで、OSGiバンドルのクラスローダーはFleetManagementWSServiceService、Service、またはその両方を提供しています。おそらく、OSGiバンドル内のクラスが常に優先されるべきであるように、私が誤ってそのクラスをブートアップクラスローダーによって拾われる瓶に入れたとしても、それはサービスでなければならないでしょう。

もう1つのクラスjavax.xml.ws.Serviceは、Javaランタイムと他のいくつかのjarファイルに含まれています。私はgeronimo jaxws jarファイルをサーバー上の承認済みフォルダに置いて、それを削除しましたが、これはビルドには影響しませんでした。

+0

このスタックトレースにCXFが関わっていません。 Axis2を使用しているようです。あなたの質問を更新してください。 –

+0

CXFの唯一の関連性は、この例外がCXFクライアントのインスタンス化で発生することです。 FleetManagementWSServiceServiceは自動生成されたCXFサービスで、javax.xml.ws.Serviceを継承します。問題の根源はWSO2サーバーの矛盾する依存関係だと私は信じていますが、私はどれを把握できません。 –

答えて

0

これを投稿したとき、問題はサーバーの依存関係が失われていると考えられましたが、われわれは実際にOSGiバンドルの依存関係を失っていました。 javax.xml.ws.Serviceを含むgeronimo-jaxws jarを組み込むことで、この問題は解決されました。

私がAxis2とCXFの問題は、赤ちゃんだったと言えるでしょう。バンドル内には依然としてCXFの依存関係があり、サーバーはAxis2を使用してクラスを呼び出しています。にもかかわらず、助けを正当化する!

1

CXFとAxis2が並行してインストールされていることを前提としています。これは動作しません。 stacktraceは、Axis2がクライアントを起動するように起動されたが、インストールされているCXFと競合していることを示しています。

したがって、解決策は、Axis2またはCXFのいずれかのみをインストールすることです。

関連する問題