我正在尝试在 Eclipse RCP 应用程序中使用 Apache CXF。一个插件 (X) 将提供使用 CXF 的 OSGI 服务。另一个插件 (Y) 将调用此服务。
“X”插件使用我下载的 CXF JAR (CXF 2.7.11),我将其添加到 MANIFEST.MF。当我从内部插件 X 运行我的测试用例时,一切正常,即我可以调用网络服务并获得响应。
当我尝试运行插件“Y”时,它会看到我可以调用的 OSGI 服务。 OSGI 服务从内部项目“X”调用与上述情况相同的代码,但现在它不起作用。我得到的异常(exception)是:
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 和依赖项等有关,但我不确定。我搜索了这个异常,当一些 JAR 从 CXF 中丢失时,就会出现这个异常,但是将 ALL JAR 添加到我在 CXF 分发中找到的 MANIFEST.MF。
我什至不确定我真正需要什么类的 CXF,但测试用例似乎运行得很好。
知道哪里出了问题吗?
最佳答案
我这样设置客户端:
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setServiceClass(YourClass.class);
factory.setAddress(endpoint);
YourClass port = (YourClass) factory.create();
Client client = ClientProxy.getClient(port);
如果您已自动生成 javas,您将拥有带有 name_name_client.java 和 name_name12_client.java 的客户端类,并且 YourClass 是 name.java(此 java 定义了 WebMethods),因此更改此设置并设置您的端点。 尝试一下,让我们知道它是否适合您。
关于java - Eclipse RCP 和 Apache CXF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24289151/