无法确定BusFactory实现类名:java.lang.ClassCastException: class org.apache.cxf.bus.spring.SpringBusFactory

问题描述 投票:0回答:1

我尝试了一切方法来避免 JBoss cxf 加载 jboss-deployment-struct.xml 中的以下配置。

<jboss-deployment-structure>  
    <deployment>  
         <exclude-subsystems>
            <subsystem name="webservices" /> 
        </exclude-subsystems>
    </deployment> 
</jboss-deployment-structure> 

我的代码在这部分失败:它不是一个maven项目,所有的jar都在lib文件夹和动态web项目下。我使用上面的配置告诉JBoss使用我的Jars,但看起来仍然使用JBoss jars。我我也在 eclipse 的 lib 文件夹下使用 JBossEAP7 和 cxf2.1.3 jar。有什么想法吗?

    SOAPConnection soapConnection = SOAPConnectionFactory.newInstance().createConnection();
    SOAPMessage response = soapConnection.call(request, endpointUrl);


19:17:56,103 SEVERE [org.apache.cxf.BusFactory] (default task-2) 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)
    at org.apache.cxf.BusFactory.newInstance(BusFactory.java:316)
    at org.apache.cxf.BusFactory.newInstance(BusFactory.java:303)
    at org.jboss.wsf.stack.cxf.saaj.SOAPConnectionImpl.getConduitInitiator(SOAPConnectionImpl.java:206)
    at org.jboss.wsf.stack.cxf.saaj.SOAPConnectionImpl.call(SOAPConnectionImpl.java:69)
    at com.minico.webservices.quoterate.C1ServiceUtil.sendSoapRequest(C1ServiceUtil.java:102)
    at com.minico.webservices.quoterate.C1ServiceUtil.getQuoteNumber(C1ServiceUtil.java:63)
    at com.minico.webservices.quoterate.C1ServiceUtil.getQuote(C1ServiceUtil.java:154)
    at com.minico.webservices.quoterate.IQuoteRateServiceImpl.getQuoteRate(IQuoteRateServiceImpl.java:57)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInvoker.java:136)
    at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:82)
    at org.apache.cxf.jaxws.JAXWSMethodInvoker.invoke(JAXWSMethodInvoker.java:54)
    at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:68)
    at org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:56)
    at org.apache.cxf.workqueue.SynchronousExecutor.execute(SynchronousExecutor.java:37)
    at org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:92)
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:220)
    at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:78)
    at org.apache.cxf.transport.servlet.ServletDestination.invoke(ServletDestination.java:92)
    at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:285)
    at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:168)
    at org.apache.cxf.transport.servlet.AbstractCXFServlet.invoke(AbstractCXFServlet.java:175)
    at org.apache.cxf.transport.servlet.AbstractCXFServlet.doPost(AbstractCXFServlet.java:153)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
    at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85)
    at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
    at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
    at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
    at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131)
    at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
    at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)
    at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)
    at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)
    at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)
    at io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50)
    at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
    at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
    at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
    at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:285)
    at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:264)
    at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:81)
    at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:175)
    at io.undertow.server.Connectors.executeRootHandler(Connectors.java:202)
    at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:792)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
19:17:56,122 ERROR [com.ServiceUtil] (default task-2) JBWS024009: No ConduitInitiator is available for https://xxxx

19:17:56,125 ERROR [stderr] (default task-2)    at org.jboss.wsf.stack.cxf.saaj.SOAPConnectionImpl.call(SOAPConnectionImpl.java:69)
java soap jboss
1个回答
0
投票

查看

BusFactory
类的源代码(下面的 v3.4.10),尝试将
SpringBusFactory
转换为基类
BusFactory
时会引发异常。
SpringBusFactory
确实扩展了抽象
BusFactory
,但对
isAssignableFrom
的调用仍然失败。为什么?最有可能的原因是基类
BusFactory
SpringBusFactory
是由不同的类加载器加载的。 至少在我的例子中,这个问题的一个实际解决方案是更改项目的 POM 文件,以将
cxf-*
依赖项范围缩小为
provided
。 这从应用程序的 lib 目录(在我的例子中是 EAR)中删除了 CXF jar,并解决了眼前的问题 - 应用程序成功启动。但需要注意的是:在调试中,我什至不再看到 JBoss (WildFly v26) 尝试实例化
SpringBusFactory
类。相反,实例化了一个不同的 JBoss
BusFactory
实现。这可能是一件好事,意味着现在只有一个 BusFactory 实例为应用程序提供服务,但在实际访问 CXF 类时也可能会带来麻烦(在我的情况下该部分尚未测试)。

        try {
        Class<? extends BusFactory> busFactoryClass = ClassLoaderUtils.loadClass(className, BusFactory.class)
            .asSubclass(BusFactory.class);

        return busFactoryClass.getConstructor().newInstance();
    } catch (Exception ex) {
        LogUtils.log(LOG, Level.SEVERE, "BUS_FACTORY_INSTANTIATION_EXC", ex);
        throw new RuntimeException(ex);
    }
© www.soinside.com 2019 - 2024. All rights reserved.