我想使用我使用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也可能产生更多的见解。