【问题标题】:SOAP web service on androidAndroid 上的 SOAP 网络服务
【发布时间】:2010-08-25 09:30:27
【问题描述】:

我正在尝试使用 ksoap2 库连接到 SOAP Web 服务。我已经阅读了一堆关于它的文档,但我被卡住了,因为我的请求不是一个普通的请求。

我需要在发送请求之前指定一些标头。

什么时候使用soap客户端来测试webservice我还需要把它放在soap信封头部分:

<SOAP-ENV:Header>
<mns:AuthIn xmlns:mns="http://enablon/wsdl/"
 SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
 <UserInfo xsi:type="wsdlns:AuthHeader">
  <EnaHomeSite xsi:type="xsd:string">sss</EnaHomeSite>
  <EnaUserName xsi:type="xsd:string">sadsa</EnaUserName>
  <EnaPassword xsi:type="xsd:string">qwertf</EnaPassword>
 </UserInfo>
</mns:AuthIn>
</SOAP-ENV:Header>

我的其余代码类似于this方法

模拟器需要一些时间来处理,所以我假设它会联系服务器,但是对 ...call 的调用会出现:

org.xmlpull.v1.XmlPullParserException: expected: END_TAG {http://schemas.xmlsoap.org/soap/envelope/}Body (position:END_TAG </{http://schemas.xmlsoap.org/soap/envelope/}SOAP-ENV:Fault>@1:505 in java.io.InputStreamReader@43ef45e8) 

我的问题是如何将上述标头附加到我的请求中?

我没有为 ksoap 制作好的文档。也许一些教程或示例。谁能指点我一些文档。我找到了javadoc,但它很薄。

我也尝试过格式化我自己的原始 HTTP 请求。 (设法在 iPhone 上这样做,它工作得很好)。但是我似乎无法添加请求的正文。我的意思是包含所有标题名称空间和调用所需数据的大肥皂 xml。任何关于这个方向的指针也将不胜感激。

非常感谢,伙计们。

干杯, 亚历克斯

【问题讨论】:

    标签: android web-services authentication soap ksoap2


    【解决方案1】:

    我也遇到了同样的问题,为此我以以下方式创建了 Header,


    public static Element[] addheader()
        {
               Element[] header = new Element[1];
               header[0] = new Element().createElement("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd","Security");
               header[0].setAttribute(null, "mustUnderstand","1");
               Element usernametoken = new Element().createElement("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", "UsernameToken");
              // usernametoken.addChild(Node.TEXT,"");
               usernametoken.setAttribute("http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd", "Id", "UsernameToken-4");
               header[0].addChild(Node.ELEMENT,usernametoken);
               Element username = new Element().createElement(null, "n0:Username");
               username.addChild(Node.TEXT, "username_value");
               //username.setPrefix("n0", null);
               usernametoken.addChild(Node.ELEMENT, username);
               Element pass = new Element().createElement(null, "n0:Password");
               //pass.setPrefix("n0",null);
               pass.setAttribute(null, "Type", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText");
               pass.addChild(Node.TEXT, "password_value");
    
               usernametoken.addChild(Node.ELEMENT, pass);
               return header;
        }
    

    并将此标头添加为soapEnvelope.headerOut = addheader();

    因为它对我有用,如果应该对你有用。

    【讨论】:

      猜你喜欢
      • 2012-09-06
      • 1970-01-01
      • 2014-04-23
      • 2017-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多