获取" java.lang.ClassCastException:class org.apache.cxf.bus.spring.SpringBusFactory"在TomEE

时间:2017-03-10 00:03:41

标签: java spring cxf tomee tomee-7

我目前在使用Gradle构建的应用程序中使用CXF 3.1.9和Spring 4.3.5,并在Tomcat 8(TomEE 7.0.1)中运行。

我目前只指定以下显式CXF依赖项:

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

这可以传递其他几个工件,包括cxf-core。

到目前为止,该应用程序刚刚提供REST请求,并且一直运行良好。我现在正尝试使用ClientBuilder向另一个服务添加一个简单的请求。当我尝试发送该消息时,我明白了:

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)

我注意到其他一些人也遇到了类似的错误,但我没有看到对我的情况有意义的解决方案。

更新

我认为这里有一个类加载冲突,所以我打开了详细的类加载,我确实看到CXF类都是从我的webapp WEB-INF / lib和容器中加载的#34 ; LIB"目录,特别是" BusFactory"类。

但是,我相信我拥有所有正确的设置来说服TomEE从webapp而不是容器加载所有CXF类。我有" openejb.classloader.forced-load = org.springframework,org.apache.cxf"在" system.properties"在Eclipse中的服务器定义中的文件,我有" disabled = true" in" cxf.properties"和" cxf-rs.properties"在同一个地方。

更新

我还注意到,在我第一次引用" ClientBuilder"时,它正在从容器的lib中加载该类,所以我尝试添加" javax.ws。 rs.client"到'#34;强制加载"名单。不幸的是,这只是导致了一个不同的例外:

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)

1 个答案:

答案 0 :(得分:0)

我认为TomEE-plus配置文件打包了cxf库,因此您可能需要将cxf依赖关系的范围声明为provided而不是compile

相关问题