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.
Ich sehe CXF nicht in diesem StackTrace beteiligt. Es scheint, dass Sie Axis2 verwenden. Bitte aktualisieren Sie Ihre Frage. –
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. –