所以,我用WSDL创建了一个Apache CXF的客户端存根应用程序。这个过程相对简单。我在SoapUI界面中完成了它。我提供了WSDL位置,告诉CXF生成客户端存根并打好。然后,我将项目导入到Eclipse中,添加了Apache CXF库,配置了一些安全选项,证书和其他东西。
我写了一个主要的几个测试调用我的web服务,并... 它的工作。Apache CXF如何生成类?
现在我的问题是,我不知道它为什么工作。更具体地说,当我在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键并点击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);
}
}
所以必须有一些配置,告诉运行时使用哪个实现。但我无法弄清楚它在哪里或哪一个。
感谢
嗨,什么我问的是,它是如何挂钩生成的Java代码与客户端的CXF实现。 – TXV
您是否在代码中创建任何客户端实例?即org.apache.cxf.endpoint.Client client = org.apache.cxf.frontend.ClientProxy .getClient(port); –
是的,我是'客户端客户端= ClientProxy.getClient(服务);' – TXV