【问题标题】:Eclipse RCP and Apache CXFEclipse RCP 和 Apache CXF
【发布时间】:2014-08-08 23:04:38
【问题描述】:

我正在尝试在 Eclipse RCP 应用程序中使用 Apache CXF。一个插件 (X) 将提供使用 CXF 的 OSGI 服务。另一个插件 (Y) 将调用此服务。

“X”插件使用我下载的 CXF JAR (CXF 2.7.11),它是我添加到 MANIFEST.MF 中的。当我从内部插件 X 运行我的测试用例时,一切正常,即我可以调用 Web 服务并获得响应。

当我尝试运行插件“Y”时,它会看到我可以调用的 OSGI 服务。 OSGI 服务从内部项目“X”调用与上述情况相同的代码,但现在它不起作用。我得到的例外是:

com.sun.xml.internal.ws.client.sei.SEIStub cannot be cast to org.apache.cxf.frontend.ClientProxy

在这部分:

org.apache.cxf.endpoint.Client client = ClientProxy.getClient(myServicePort);

现在,当我在这个插件(插件 X)中运行 SAME CODE 时,它运行良好。

所以我怀疑它与 JAR 和依赖项等有关,但我不确定。我搜索了这个异常,当 CXF 中缺少一些 JAR 时会出现这种情况,但是将 ALL JAR 添加到我在 CXF 发行版中找到的 MANIFEST.MF 中。

我什至不确定我真正需要哪些类的 CXF,但测试用例似乎运行得很好。

任何想法出了什么问题?

【问题讨论】:

  • 检查您的 ClientProxy 导入。
  • 我导入了所有的 CXF lib JAR。它在没有 Eclipse 的情况下运行,所以我不确定当我尝试将它作为插件运行时发生了什么
  • 粘贴你初始化或设置ClientProxy的通道。
  • 这是我发布的那一行。 myServicePort 是 cxf-codegen-plugin 通过 Java 生成的类。喜欢这里:stackoverflow.com/questions/10543306/…

标签: java eclipse-rcp jax-ws cxf manifest.mf


【解决方案1】:

我通常在创建服务和端口之前将 ClassLoader 切换到 cxf 插件。创建端口时,我将上下文类加载器设置为原始类加载器。这种方法可以确保使用 cxf 插件的类加载器并加载正确的客户端类,因此不会出现强制转换异常。

// to avoid class loader visibility issue
ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); 
try {
    Thread.currentThread().setContextClassLoader(ProviderImpl.class.getClassLoader());
    MyService ss = new MyService(wsdlURL, SERVICE_NAME);
    MyPort port = ss.getMyPort();
    Client client = ClientProxy.getClient(port);
    ...
} finally {
    Thread.currentThread().setContextClassLoader(classLoader);
}

【讨论】:

    【解决方案2】:

    我这样设置客户端:

    JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
    factory.setServiceClass(YourClass.class);
    factory.setAddress(endpoint);
    YourClass port = (YourClass) factory.create(); 
    Client client = ClientProxy.getClient(port);
    

    如果您已自动生成 java,您将拥有带有 name_name_client.java 和 name_name12_client.java 的客户端类,并且 YourClass 是 name.java(此 java 定义了 WebMethods),因此请更改此设置并设置您的端点。 试试看,让我们知道它是否适合您。

    【讨论】:

      猜你喜欢
      • 2011-08-21
      • 1970-01-01
      • 2015-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多