我正在尝试使用ksoap2库连接到SOAP Web服务。我已经阅读了很多关于它的文档,但我被困住了,因为我的请求不是普通的。
我需要在发送请求之前指定一些标头。
何时使用soap客户端来测试webservice我还需要将它放在soap enveope header部分中:
<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 crases:
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。任何指向这个方向的人都会非常感激。
非常感谢,伙计们。
干杯, 亚历
答案 0 :(得分:3)
我遇到了同样的问题,因为我已经按照以下方式创建了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();
因为它对我有用,如果应该为你工作。