如何在我的 JAX-WS 生成的客户端代码上启用 WS-A 寻址

How to enable WS-A Addressing on my JAX-WS generated client code

我想使用我使用 JAX-WS wsimport 生成的 Java 客户端访问第三方网络服务,基于提供的 WSDL(我使用的是 Maven 插件)。

很长一段时间我都无法检索到有用的响应,在 Java 客户端和 SoapUI 中都找不到,直到我发现我必须根据请求启用 WS-A。 在 SoapUI 中,这现在会产生预期的响应,但是我还必须对 Java 客户端中的 'enable' WS-A 做些什么?我可能必须更改 WSDL 或向 wsimport 添加参数吗?

我在网上找到了一些关于 WS-A 的文档,但至今找不到答案。

提前致谢。

您可以像您提到的那样修改 WSDL,以指示需要寻址(尽管我会要求第 3 方这样做,如果他们的端点确实需要它......)。有关此信息,请参见 the specification 上的示例 3-1 和 3-2。您可能需要重新生成您的客户端 (wsimport);这个我不确定。

如果您想以编程方式完成此操作,您可以尝试获取您的端口并按如下方式传递 javax.xml.ws.soap.AddressingFeature

import javax.xml.ws.soap.AddressingFeature;
...
//however you are obtaining your service - 
//perhaps @WebServiceRef or instantiation with WSDL location, etc
HelloWorldService service = ... 
...
//true,true means enable Addressing, and indicate it is required
HelloWorld port = service.getHelloWorldPort(new AddressingFeature(true, true));
... call operations/methods on HelloWorld port

AddressingFeature 的 javadoc 也可能会产生更多见解。