我是这个 SOAP Web 服务的新手。这是我的 ksoap lib 依赖项,
repositories {
maven { url 'https://oss.sonatype.org/content/repositories/ksoap2-android-releases/' }
}
dependencies {
compile 'com.google.code.ksoap2-android:ksoap2-android:3.6.1'
}
请查看我的 SOAP 请求和响应
POST /loyaltywebservice/LoyaltyWebService.asmx HTTP/1.1
Host: host url is here
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://tempuri.org/AttemptLogin"
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<UserCredential xmlns="http://tempuri.org/">
<userName>string</userName>
<password>string</password>
</UserCredential>
</soap:Header>
<soap:Body>
<AttemptLogin xmlns="http://tempuri.org/">
<LoyalCustCode>string</LoyalCustCode>
<PwdStr>string</PwdStr>
</AttemptLogin>
</soap:Body>
</soap:Envelope>
虽然我正在解析网络服务身份验证失败。但是它在“POSTMAN”中工作。我尝试过以下代码,并且我刚刚更改了用户名和密码,因为我无法打开凭据。所以我只是添加了 1234。看看我的代码。请帮助我哪里做错了。
public void soapLogin() {
try {
new Thread(new Runnable() {
@Override
public void run() {
try {
//Prepare the header with the authentication data.
Element headers = new Element().createElement(UrlActivity.NAMESPACE, "UserCredential");
Element username = new Element().createElement(UrlActivity.NAMESPACE, "userName");
username.addChild(Node.TEXT, "test");
headers.addChild(Node.ELEMENT, username);
Element pass = new Element().createElement(UrlActivity.NAMESPACE, "password");
pass.addChild(Node.TEXT, "1234");
headers.addChild(Node.ELEMENT, pass);
// Soap Request
final SoapObject request = new SoapObject(UrlActivity.NAMESPACE, UrlActivity.METHOD_NAME);
request.addProperty("LoyalCustCode","12345");
request.addProperty("PwdStr","12345");
final SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
// add header to envelope
envelope.headerOut = new Element[1];
envelope.headerOut[0] = headers;
envelope.setOutputSoapObject(request);
//Add the header to the envelope.
final HttpTransportSE androidHttpTransport = new HttpTransportSE(UrlActivity.URL);
androidHttpTransport.debug = true;
androidHttpTransport.call(UrlActivity.SOAP_ACTION, envelope);
Log.d("Login", "Request:- "+androidHttpTransport.requestDump);
final SoapPrimitive result = (SoapPrimitive)envelope.getResponse();
Log.d("Login", "Response:- "+androidHttpTransport.responseDump);
// final SoapObject result = (SoapObject) envelope.getResponse();
String response = result.toString();
Log.d("Login", "Response:- "+response);
}catch (Exception ex){
Log.e("Login", "soapLogin:- "+ex.getMessage());
}
}
}).start();
} catch (Exception e) {
e.printStackTrace();
}
}
最佳答案
final SoapObject request = new SoapObject(UrlActivity.NAMESPACE, UrlActivity.METHOD_NAME);
// TODO the two params are child soap objects not properties
SoapObject loyal = new SoapObject(UrlActivity.NAMESPACE, "LoyalCustCode");
loyal.setInnerText("1234");
request.addSoapObject(loyal);
loyal = new SoapObject(UrlActivity.NAMESPACE, "PwdStr");
loyal.setInnerText("1234");
request.addSoapObject(loyal);
//Params are different than child node
关于android - Android中如何解析SOAP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44540776/