4

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

有没有人知道使用 JAXWS-RI 或任何其他 JAXWS 实现对这个问题有什么好的解决方案?我想防止使用新的 WSDL/命名空间重新生成代理类。

感谢您的任何回答。

4

2 回答 2

1

步骤包括:

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

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

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

于 2011-06-14T11:11:11.410 回答
0

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

public SomeWebServiceEndpoint(URL wsdlLocation, QName serviceName) 

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

因此,您可以将您的 web 服务子类化为一个新类,或者使用不同的包装器来调用它们。

于 2010-11-11T16:18:56.570 回答