我尝试使用KSoap和Android调用给定的Soap Web服务。 Fiddler说有正确的回应。
请求:
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:c="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header />
<soap:Body>
<n0:HelloWorld id="o0" c:root="1" xmlns:n0="http://Walkthrough/XmlWebServices/" />
</soap:Body>
</soap:Envelope>
在Fiddler看到的回应:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<HelloWorldResponse xmlns="http://Walkthrough/XmlWebServices/">
<HelloWorldResult>Hello Thomas!</HelloWorldResult>
</HelloWorldResponse>
</soap:Body>
</soap:Envelope>
这是正确的响应,但我无法在我的代码中得到它,因为getResponse()和bodyIn为null。我的Android代码是:
private class AsyncTaskRunner extends AsyncTask<String,String,String>{
private String resp;
public final static String URL = "http://141.30.187.143/corbafahrsimulator/CorbaFahrsimulator.asmx?WSDL";
public final static String NAMESPACE = "http://Walkthrough/XmlWebServices/";
public final static String SOAP_ACTION_PREFIX = "";
public final static String METHOD = "HelloWorld";
@Override
protected String doInBackground(String... params) {
publishProgress("Loading contents");
MySoapEnvelope envelope = new MySoapEnvelope(SoapEnvelope.VER11);
envelope.implicitTypes = true;
SoapObject request = new SoapObject(NAMESPACE,METHOD);
envelope.bodyOut = request;
HttpTransportSE transport = new HttpTransportSE(URL);
try {
transport.call(NAMESPACE + SOAP_ACTION_PREFIX + METHOD,envelope);
} catch (IOException e) {
e.printStackTrace();
} catch (XmlPullParserException e) {
e.printStackTrace();
}
try {
Object result = envelope.getResponse();
} catch (SoapFault soapFault) {
soapFault.printStackTrace();
}
if (envelope.bodyIn != null){
Object so = envelope.bodyIn;
String resultSOAP = ((SoapObject) envelope.bodyIn).getInnerText();
resp=resultSOAP;
}
return resp;
}
@Override
protected void onPostExecute(String resp){
Toast.makeText(getApplicationContext(), resp, Toast.LENGTH_LONG).show();
}
@Override
protected void onProgressUpdate(String ... text){
Toast.makeText(getApplicationContext(), text[0], Toast.LENGTH_LONG).show();
}
}
private class MySoapEnvelope extends SoapSerializationEnvelope{
public MySoapEnvelope(int version) {
super(version);
}
@Override
public void write(XmlSerializer writer) throws IOException {
writer.setPrefix("xsi", xsi);
writer.setPrefix("xsd", xsd);
writer.setPrefix("c", enc);
writer.setPrefix("soap", env);
writer.startTag(env, "Envelope");
writer.startTag(env, "Header");
writeHeader(writer);
writer.endTag(env, "Header");
writer.startTag(env, "Body");
writeBody(writer);
writer.endTag(env, "Body");
writer.endTag(env, "Envelope");
}
}
答案 0 :(得分:0)
我找到答案:在我的Android设备上一切正常,我认为这是我的提琴手配置失败。