所以我试图使用JaxWsDynamicClientFactory动态创建SEI类。运行以下代码
JaxWsDynamicClientFactory def = JaxWsDynamicClientFactory.newInstance();
def.createClient("http://localhost:8080/TheTestService/TestService?wsdl");
生成类:
com.mycompany.project.service.GetProducts
com.mycompany.project.service.GetStatus
运行:
wsdl2Java -d "C/:outputdir" "http://localhost:8080/TheTestService/TestService?wsdl"
生成类
com.mycompany.project.service.ServiceInterface
com.mycompany.project.service.GetProducts
com.mycompany.project.service.GetStatus
com.mycompany.project.service.impl.ServiceInterface
此外,当我试着打电话
client.invoke("getProducts", 0);
我明白了:
org.apache.cxf.common.i18n.UncheckedException: No operation was found with the name {http://impl.service.project.mycompany.com/}getProducts.
我觉得有意义,因为在impl.service.project.mycompany.com上没有生成任何名为getProducts的内容。但是,自从我编写Web服务以来,我知道Web服务接口的方法是getProducts(int id)。
我在这里做错了什么?根据CXF文档,动态客户端工厂使用与wsdl2Java工具相同的代码生成器。如果是这样的话,为什么不生成相同的类?
谢谢,
查
答案 0 :(得分:2)
首先,JaxWsProxyFactoryBean
创建客户端是可以的。我解决了这个问题,你必须将你的服务接口和implementor
放在同一个类包中。当JaxWsDynamicClientFactory
用于动态创建SEI类时,它会在同一个包路径中找到implementor
,这是默认设置。但根据API,您可以设置targetNamespace
。
我不知道JaxWsProxyFactoryBean
和JaxWsDynamicClientFactory
之间存在差异。
答案 1 :(得分:0)
我认为这是一些错误,因为我有.wsdl和wsdl2java生成的一个类具有属性getItem
但是JaxWsDynamicClientFactory.newInstance().createClient()
已经使用属性getItems生成了这个类。所以我的进步是检查你想要使用的类的方法(我的意思是,使用JaxWsDynamicClientFactory.newInstance().createClient()
生成的类的方法)。要实现这个使用参考