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



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

i当前仅指定以下明确的CXF依赖项:

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

这将获得其他几个文物,包括CXF核。

到目前为止,该应用程序一直在提供休息请求,并且运行良好。我现在尝试使用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)

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

更新

我认为这里有一个类别的冲突,所以我打开了冗长的classloading,并且我确实看到CXF类从我的WebApp Web-Inf/lib和容器的" Lib"目录,特别是" BusFactory"中加载。班级。

但是,我相信我有所有适当的设置可以说服托梅从WebApp加载所有CXF类,而不是容器。我在eclipse中的" system.properties"文件中有" openejb.classloader.forced-load = org.springframework,org.apache.cxf"中的" system.properties"文件,并且我在" cxf.properties"中in cxf.properties"中的" disabled = true"one_answers" CXF-RS.Properties"在同一地方。

更新

我还注意到,当我首次提到"客户端构造器"时,它正在加载该类中的集装箱lib,因此我尝试在"强制负载"列表中添加" javax.ws.rs.client"。不幸的是,这只是导致不同的例外:

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)

我认为tomee-plus配置文件包装cxf库,所以也许您需要将cxf依赖的 scope 声明为 provided而不是 compile

相关内容

最新更新