2017-03-10 2 views
1

Ich verwende derzeit CXF 3.1.9 und Spring 4.3.5 in einer App, die mit Gradle erstellt wurde und läuft Tomcat 8 (TomEE 7.0.1)."java.lang.ClassCastException: class org.apache.cxf.bus.spring.SpringBusFactory" in TomEE

angegebene derzeit nur die folgenden expliziten CXF Abhängigkeiten:

['cxf-rt-rs-extension-providers', 'cxf-rt-management'].each { 
    compile "org.apache.cxf:${it}:3.1.9" 
} 

Diese transitively mehr anderen Artefakte bekommt, einschließlich cxf-Kern.

Bis jetzt hat die App gerade REST-Anfragen bedient, und es hat gut funktioniert. Ich versuche nun, eine einfache Anfrage an einen anderen Dienst mit ClientBuilder hinzuzufügen. Wenn ich versuche, diese Nachricht zu senden, ich diese:

SEVERE: Failed to determine BusFactory implementation class name. 
java.lang.ClassCastException: class org.apache.cxf.bus.spring.SpringBusFactory 
    at java.lang.Class.asSubclass(Class.java:3404) 
    at org.apache.cxf.BusFactory.getBusFactoryClass(BusFactory.java:390) 

Ich bemerkte, dass einige andere Leute einen ähnlichen Fehler bekommen haben, aber ich sehe nicht, eine Lösung, die Sinn für meine Situation macht.

aktualisieren:

Ich dachte, ein Classloading Konflikt hier gibt es, so drehte ich mich auf dem ausführlichen Classloading, und ich sehe CXF Klassen geladen werden beide von meinem Webapp WEB-INF/lib, und aus dem Container des " lib "Verzeichnis, speziell die Klasse" BusFactory ".

Ich glaube jedoch, ich habe alle richtigen Einstellungen, um TomEE zu überzeugen, alle CXF-Klassen von der Webanwendung anstelle des Containers zu laden. Ich habe "openejb.classloader.forced-load = org.springframework, org.apache.cxf" in der Datei "system.properties" in der Serverdefinition in Eclipse und ich habe "disabled = true" in "cxf.properties" und "cxf-rs.properties" an der gleichen Stelle.

aktualisieren:

Ich habe auch bemerkt, dass bei meinem ersten Hinweis auf „ClientBuilder“, es ist die Klasse aus dem lib Container geladen, also versuchte ich „javax.ws.rs.client“ auf die Zugabe " erzwungene "Liste. Leider ergab, dass nur in einer anderen Ausnahme:

org.apache.cxf.interceptor.Fault: ClassCastException: attempting to castjar:file:.../apache-tomee-webprofile-7.0.1/lib/javaee-api-7.0.jar!/javax/ws/rs/client/ClientBuilder.class to jar:file:.../.metadata/.plugins/org.eclipse.wst.server.core/tmp1/wtpwebapps/uslMonitorService/WEB-INF/lib/javax.ws.rs-api-2.0.1.jar!/javax/ws/rs/client/ClientBuilder.class 
    at org.apache.cxf.service.invoker.AbstractInvoker.createFault(AbstractInvoker.java:162) 
    at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:128) 
    at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:189) 
    at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:99) 
    ... 
Caused by: java.lang.LinkageError: ClassCastException: attempting to castjar:file:.../apache-tomee-webprofile-7.0.1/lib/javaee-api-7.0.jar!/javax/ws/rs/client/ClientBuilder.class to jar:file:.../.metadata/.plugins/org.eclipse.wst.server.core/tmp1/wtpwebapps/uslMonitorService/WEB-INF/lib/javax.ws.rs-api-2.0.1.jar!/javax/ws/rs/client/ClientBuilder.class 
    at javax.ws.rs.client.ClientBuilder.newBuilder(ClientBuilder.java:97) 
    at javax.ws.rs.client.ClientBuilder.newClient(ClientBuilder.java:114) 
+0

Versuchen Sie mit 'openejb.classloader.forced-load = javax.ws.rs, ...' –

+0

Wollen Sie sagen, dass der Wert dieser Reihenfolge abhängig ist, oder sagen Sie nur, es von "javax zu verkürzen. ws.rs.client "zu" javax.ws.rs "? Ich habe Variationen davon versucht, und es schlägt mit anderen Fehlern fehl. –

Antwort

0

Ich denke TomEE-plus-Profil-Pakete cxf Bibliotheken, also vielleicht müssen Sie Ihrer cxf Abhängigkeiten als provided statt compile den Umfang erklären.

+0

Das würde mich in die komplett andere Richtung bringen. Ich versuche NICHT, die vom Container bereitgestellten Bibliotheken zu verwenden. –

+0

In jedem Fall habe ich das versucht, obwohl die analoge Konfiguration für Gradle "compileOnly" ist, aber wiederum, dass nur andere Fehler verursacht, wie "NoClassDefFoundError: org/springframework/beans/factory/xml/NamespaceHandlerSupport", die noch seltsamer ist denn früher in der Ausgabe sehe ich "[Loaded org.springframework.beans.factory.xml.NamespaceHandlerSupport aus Datei: ... /. metadata/.plugins/org.eclipse.wst.server.core/tmp1/wtpwebapps/uslMonitorService/WEB-INF/lib/spring-bohnen-4.3.5.RELEASE.jar] ". –

Verwandte Themen