是否有任何JAX-WS实现支持生成的客户端中的动态命名空间?

时间:2010-03-23 15:14:44

标签: web-services namespaces jax-ws wsimport

我使用具有命名空间“http://a.mydomain”的WSDL的JAXWS-RI wsimport.bat生成了一个JAX-WS客户端(代理API)。  我想对具有命名空间“http://b.mydomain”的服务重用相同的生成代理,但是targetnamespace“http://a.mydomain”在生成的类中被编码。

使用JAXWS-RI或任何其他JAXWS实现,是否有人知道这个问题的任何好方法?我想阻止使用新的WSDL /名称空间重新生成代理类。

感谢您的回答。

2 个答案:

答案 0 :(得分:1)

步骤包括:

  1. 使用Service.create方法创建Service实例 您需要知道服务的wsdl位置,服务名称和名称空间URL 例如 URL wsdlLocation =新网址(“http://example.org/my.wsdl”); QName serviceName = new QName(“http://example.org/sample”,“MyService”); 服务s = Service.create(wsdlLocation,serviceName);

  2. 使用Service.getPort()方法获取服务代理(用于连接的服务端口)。 为此,您需要了解端点实现类名称 例如MyService port = s.getPort(MyService.class);

  3. 您现在可以通过代理调用方法。 根据您的要求更改名称空间URL。

答案 1 :(得分:0)

Jax-ws RI确实创建了这样的构造函数:

public SomeWebServiceEndpoint(URL wsdlLocation, QName serviceName) 

在QName元素中,您可以在运行时指定命名空间(或使用不同的WSDL位置,例如PROD或TEST)。

因此,您可以将Web服务子类化为新类,或者使用其他包装器来调用它们。