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



我想使用我使用JAX-WS wsimport生成的Java客户端访问第三方Web设备,该客户端基于所提供的WSDL(我使用的是Maven插件)。

很长一段时间以来,我无法检索到有用的响应,无论是在Java客户端还是在SoapUI中,直到我发现必须对请求启用WS-a。在SoapUI中,这现在会产生预期的响应,但我必须做些什么才能在Java客户端中"启用"WS-A?我可能需要更改WSDL,或者向wsimport添加一个参数吗?

我在网上找到了一些关于WS-A的文档,但到目前为止还找不到答案。

提前谢谢。

您可以按照您提到的修改WSDL,以表明需要寻址(尽管我会要求第三方,如果他们的端点确实需要的话…)。请参阅规范中的示例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也可能产生更多的见解。

最新更新