2017-07-09 161 views
0

我正試圖在ESB服務器上設置應用程序。我們有一個OSGi包,包含了我們需要的所有依賴,但是我們現在有一個奇怪的問題。在運行時,服務器將無法實例化我們的應用服務器的CXF客戶端。堆棧跟蹤爲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的啓動時加載器都提供FleetManagementWSServiceService,服務,或兩者的實例,從而導致衝突我還沒有看到這個特殊的堆棧跟蹤。

聽起來像WSO2的啓動類加載器和我的OSGi包的類加載器都提供了FleetManagementWSServiceService,Service或兩者。據推測它必須是Service,因爲即使我不小心將這個類放入了一個可以被啓動類加載器拾取的jar中,那麼OSGi包中的那個也應該始終受到青睞。

其他類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。這不起作用。堆棧跟蹤顯示Axis2被觸發來啓動客戶端,但它與安裝的CXF衝突。

所以解決方案是隻安裝Axis2或CXF。