1

所以我尝试使用 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 工具相同的代码生成器。如果是这样,为什么不生成相同的类?

谢谢,

查克

4

2 回答 2

2

首先,JaxWsProxyFactoryBean创建一个客户端是可以的。我解决了这个问题,你必须保持你的服务接口和implementor在同一个类包中。当JaxWsDynamicClientFactory用于动态创建 SEI 类时,会implementor在相同的包路径中找到,这是默认设置。但是根据 API,你可以设置你的targetNamespace.

JaxWsProxyFactoryBean我不知道和之间的区别JaxWsDynamicClientFactory

于 2012-12-03T06:14:40.567 回答
0

我认为这是一些错误,因为我有 .wsdl 并且使用 wsdl2java 生成的类之一具有属性getItemJaxWsDynamicClientFactory.newInstance().createClient()已生成具有属性 getItems 的此类。所以我的进步是检查你想要使用的类的方法(我的意思是,用 生成的类的方法JaxWsDynamicClientFactory.newInstance().createClient())。为了实现这个使用参考

于 2012-04-09T12:31:27.870 回答