2017-07-09 2 views
0

Ich versuche, eine Anwendung auf einem ESB-Server einzurichten. Wir haben ein OSGi-Paket mit allen Abhängigkeiten, die wir brauchen würden, aber wir haben jetzt ein seltsames Problem. Zur Laufzeit kann der Server den CXF-Client für unseren App-Server nicht instanziieren. Der Stack-Trace istVerbindungsfehler mit CXF-Client

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) 

ich nicht diese besondere Stack-Trace gesehen haben, bevor aber es wie die WSO2 sieht bootup Classloader sind beide eine Instanz FleetManagementWSServiceService, Service, oder beide, was zu einem Konflikt.

Es klingt wie WSO2 Boot-Classloader und der Classloader für meine OSGi-Bundle bieten beide FleetManagementWSServiceService, Service oder beides. Vermutlich müsste es Service sein, selbst wenn ich versehentlich diese Klasse in einem Jar hätte, das vom Bootloader-Classloader aufgenommen würde, sollte derjenige im OSGi-Bundle immer bevorzugt werden.

Die andere Klasse, javax.xml.ws.Service, ist in der Java-Laufzeitumgebung sowie in einigen anderen JARs enthalten. Ich habe ein geronimo jaxws jar in dem indossierten Ordner auf dem Server gefunden und gelöscht, nur für den Fall, aber das hat den Build nicht beeinflusst.

+0

Ich sehe CXF nicht in diesem StackTrace beteiligt. Es scheint, dass Sie Axis2 verwenden. Bitte aktualisieren Sie Ihre Frage. –

+0

Die einzige Relevanz von CXF ist, dass diese Ausnahme bei Instanziierung des CXF-Clients auftritt. FleetManagementWSServiceService ist ein automatisch generierter CXF-Service und erweitert damit den javax.xml.ws.Service. Ich glaube, dass der Grund des Problems widersprüchliche Abhängigkeiten im WSO2-Server sind, aber ich kann nicht herausfinden, welche. –

Antwort

0

Als ich das veröffentlichte, dachte ich, das Problem käme von fehlenden Abhängigkeiten auf dem Server, aber wie sich herausstellte, fehlten uns tatsächlich Abhängigkeiten in unserem OSGi-Bundle. Durch die Aufnahme eines geronimo-jaxws-Jars, das javax.xml.ws.Service enthält, wurde dieses Problem behoben.

In der Nähe, wie ich die Probleme mit Axis2 und CXF sagen konnte, waren rote Heringe. Es gibt immer noch CXF-Abhängigkeiten innerhalb des Bundles, und der Server verwendet weiterhin Axis2, um unsere Klassen aufzurufen. "Schätze doch die Hilfe!

1

Ich nehme an, dass Sie CXF und Axis2 parallel installiert haben. Dies wird nicht funktionieren. Der Stacktrace zeigt, dass Axis2 ausgelöst wird, um Ihren Client zu starten, aber es widerspricht dem installierten CXF.

Also die Lösung ist nur Axis2 oder CXF zu installieren.