【问题标题】:Could not find constructor for class org.apache.cxf.ws.policy.PolicyDataEngineImpl for args [com.ibm.ws.jaxrs20.bus.LibertyApplicationBus] Liberty找不到 args [com.ibm.ws.jaxrs20.bus.LibertyApplicationBus] Liberty 类 org.apache.cxf.ws.policy.PolicyDataEngineImpl 的构造函数
【发布时间】:2022-12-24 02:21:23
【问题描述】:

在部署在 liberty 服务器上的 springboot 应用程序中,我需要调用 REST 服务器,因此,在配置服务提供商以实例化 apache-cxf 堆栈之后,我写下了经典的两行代码

final Client client = ClientBuilder.newBuilder().build(); //plus some other configuration
                                                          //method invocation   
target = client.target(uri);

第二种方法导致标题中出现异常。

正如 this link 中所述,我在其 2.0 和 2.1 版本上都添加了 jaxrs 功能,但没有成功。

任何帮助表示赞赏。

PS:完整的堆栈跟踪是

org.apache.cxf.bus.extension.ExtensionException: Could not find constructor for class org.apache.cxf.ws.policy.PolicyDataEngineImpl for args [com.ibm.ws.jaxrs20.bus.LibertyApplicationBus@f13055b3].
    at org.apache.cxf.bus.extension.Extension.load(Extension.java:266) ~[cxf-core-3.0.12.jar:3.0.12]
    at org.apache.cxf.bus.extension.ExtensionManagerImpl.loadAndRegister(ExtensionManagerImpl.java:198) ~[cxf-core-3.0.12.jar:3.0.12]
    at org.apache.cxf.bus.extension.ExtensionManagerImpl.initialize(ExtensionManagerImpl.java:116) ~[cxf-core-3.0.12.jar:3.0.12]
    at org.apache.cxf.bus.extension.ExtensionManagerBus.doInitializeInternal(ExtensionManagerBus.java:260) ~[cxf-core-3.0.12.jar:3.0.12]
    at org.apache.cxf.bus.extension.ExtensionManagerBus.initialize(ExtensionManagerBus.java:250) ~[cxf-core-3.0.12.jar:3.0.12]
    at com.ibm.ws.jaxrs20.bus.LibertyApplicationBusFactory.createBus(LibertyApplicationBusFactory.java:135) ~[na:na]
    at com.ibm.ws.jaxrs20.client.bus.LibertyJAXRSClientBusFactory.createClientScopedBus(LibertyJAXRSClientBusFactory.java:59) ~[na:na]
    at com.ibm.ws.jaxrs20.client.bus.LibertyJAXRSClientBusFactory.getClientScopeBus(LibertyJAXRSClientBusFactory.java:98) ~[na:na]
    at com.ibm.ws.jaxrs20.client.JAXRSClientImpl.target(JAXRSClientImpl.java:207) ~[com.ibm.ws.jaxrs.2.0.client_1.0.48.jar:na]
    at org.apache.cxf.jaxrs.client.spec.ClientImpl.target(ClientImpl.java:158) ~[na:na]

【问题讨论】:

  • 听起来像是不兼容的版本冲突
  • 听起来不错,但是在 cxf-core-3.0.12 中,类 org.apache.cxf.ws.policy.PolicyDataEngineImpl 有一个接受 org.apache.cxf.Bus 的构造函数,所以异常似乎没有任何权利被提高
  • 可能是您正在使用的服务器具有相同的库但版本不同,并且正在使用该版本。或者有另一个依赖拉入不同的版本。

标签: java spring-boot jax-rs websphere-liberty cxf-client


【解决方案1】:

我遇到了类似的问题,我的 Spring 上下文在我的 war 和 cxf-rt-ws-policy 的 lib 文件夹中可用,cxf-core 保存在 tomcat lib 文件夹中(在多个其他模块中通用)

通过将 cxf-rt-ws-policy 和 cxf-core 直接添加到 pom.xml 中将其移动到 war 的 lib 文件夹解决了这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-12
    • 2013-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多