WS生成错误的名称空间URI

我想连接到一个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


解决方案是微不足道的...

ListsSoap lisoap = listsService.getListsSoap12(); 

它返回SOAP 1.2的服务


如果您使用JAX-WS从WSDL生成代码,那么URI映射应该没问题,但使用HTTP-BASIC coudl进行身份验证会导致您的代码使用的问题。 也许这可以帮助:

JAX WS客户端无法进行身份验证

它指的是认证问题。

链接地址: http://www.djcxy.com/p/35307.html

上一篇: WS wrong namespace URI generated

下一篇: SOAP response/Request then how to convert it in to PHP