我想使用我使用JAX-WS wsimport生成的Java客户端访问第三方Web服务,该客户端基于提供的WSDL(我正在使用Maven插件)。
很长一段时间我无法检索有用的响应,不是在Java客户端中,也不是在SoapUI中,直到我发现我必须在请求中启用WS-A。 在SoapUI中,这现在会产生预期的响应,但是我还必须做什么来在Java客户端中“启用”WS-A?我是否可能需要更改WSDL,或者向wsimport添加参数?
我在网上找到了一些关于WS-A的文档,但到目前为止找不到答案。
提前致谢。
答案 0 :(得分:1)
你可以像你提到的那样修改WSDL,以指示需要寻址(尽管如果他们的端点确实需要它,我会问第三方......)。有关此问题,请参阅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也可能会产生更多洞察力。