【发布时间】:2017-06-24 15:25:25
【问题描述】:
所以,我使用 Apache CXF 从 WSDL 创建了一个客户端存根应用程序。这个过程相对简单。我是在 SoapUI 界面中完成的。我提供了 WSDL 位置,告诉 CXF 生成客户端存根并点击 OK。
然后,我将项目导入 Eclipse,添加 Apache CXF 库,配置一些安全选项、证书等。
我编写了一个对我的 web 服务进行一些测试调用的 main,并且...它成功了。
现在我的问题是我不知道它为什么起作用。更具体地说,当我在 Eclipse 中运行时,调试输出清楚地显示有正在调用的 CXF 类。
INFO: Loaded configuration file cxf.xml.
和 org.apache.cxf.service.factory.ReflectionServiceFactoryBean buildServiceFromWSDL
在我的main() 中,我正在调用
MyServices ss = new MyServices(wsdlURL, SERVICE_NAME);
port = ss.getWSHttpBindingMyService();
但是 MyServices 类扩展了 javax.xml.ws.Service 并且没有任何暗示 CXF。
wsdl2java 还生成了一个MyService 接口和一个位于同一包中的MyServiceImpl 类。看起来是个不错的候选人。在我的main() 中,我可以写port.someMethod(someRequest) 之类的东西。如果我 ctrl-click someMethod 并按照实现,它实际上将我带到 MyServiceImpl 类,但那里只有虚拟代码!
public Boolean someMethod(SomeRequest request) {
LOG.info("Executing operation");
System.out.println(request);
try {
Boolean _return = null;
return _return;
} catch (java.lang.Exception ex) {
ex.printStackTrace();
throw new RuntimeException(ex);
}
}
所以必须有一些配置告诉运行时使用哪个实现。但我不知道它在哪里或哪一个。
谢谢
【问题讨论】: