我想连接到SOAP服务。
使用wsimport我已经从远程wsdl
生成了类我的代码:
Lists listsService = new Lists();
ListsSoap lisoap = listsService .getListsSoap();
((BindingProvider) si).getRequestContext().put(BindingProvider.USERNAME_PROPERTY, "MY_USER");
((BindingProvider) si).getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, "“MY_PASS");
((BindingProvider) si).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "http://<SOME_REMOTE_URL>/Lists.asmx");
GetListCollectionResult coll = si.getListCollection();
我跟踪了请求xml:
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soap1="http://schemas.microsoft.com/sharepoint/soap/">
<S:Header/>
<S:Body>
<soap1:GetListCollection/>
</S:Body>
</S:Envelope>
http://schemas.xmlsoap.org/soap/envelope - 错了!
在java和SOAP-UI中返回空结果
正确的URI应为http://www.w3.org/2003/05/soap-envelope
它在SOAP-UI中工作,但我不知道如何在Java中为JAX-WS设置它
我怀疑它与SOAP版本1与1.2相关
更新
试图运行这个:
soapEnv.setAttributeNS("http://schemas.xmlsoap.org/soap/envelope/", "S", "http://www.w3.org/2000/xmlns/");
但现在的输出是:
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns0="http://schemas.xmlsoap.org/soap/envelope/" ns0:S="http://www.w3.org/2000/xmlns/">
几乎不错但不是enoguh
答案 0 :(得分:1)
解决方案很简单......
ListsSoap lisoap = listsService.getListsSoap12();
它返回SOAP 1.2的服务
答案 1 :(得分:0)
如果您使用JAX-WS从WSDL生成代码,则URI映射应该没问题,但使用HTTP-BASIC coudl进行身份验证会导致代码使用问题。 也许这可以提供帮助:
JAX WS client cannot authenticate
它指的是身份验证问题。