How to send soap request through Android?
How can I send a request to this service?
<?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:Body>
<total xmlns="http://tempuri.org/">
<validationRequest>
<Name>string</Name>
<num1>int</num1>
<num2>int</num2>
</validationRequest>
</total>
</soap:Body>
</soap:Envelope>
Android code:
private static final String NAMESPACE ="http://tempuri.org/";
private static final String SOAP_ACTION ="http://tem开发者_StackOverflowpuri.org/total";
private static final String URL ="http://10.0.2.2:1743/Service1.asmx";
private TextView tv;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv = (TextView) findViewById(R.id.tv);
tv.setText(ws());
}
private String ws() {
String result = "";
try {
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
System.out.println("ohaissxh");
PropertyInfo quotesProperty = new PropertyInfo();
request.addProperty("Name","Nas");
request.addProperty("num1",6);
request.addProperty("num2",5);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
HttpTransportSE ht = new HttpTransportSE(URL);
ht.call(SOAP_ACTION, envelope);
System.out.println("dfdjsssf");
if(envelope.getResponse()!=null){
//SoapObject response = (SoapObject)envelope.bodyIn;
Object response = envelope.getResponse();
result = response.toString();
}
} catch (Exception e) {
result = e.getMessage();
}
return result;
}
In your SOAP request,
<validationRequest> is a complex request type and you simply cannot add the property in the request, as usually done for primitive types.
You need to create a class which extends Vector and implements KVMSerializable.
public class ValidationReq extends Vector<String> implements KvmSerializable {
@Override
public Object getProperty(int arg0) {
return this.get(arg0);
}
@Override
public int getPropertyCount() {
return this.size();
}
@Override
public void getPropertyInfo(int arg0, Hashtable arg1, PropertyInfo arg2) {
arg2.name = "string";
arg2.type = PropertyInfo.STRING_CLASS;
}
@Override
public void setProperty(int arg0, Object arg1) {
this.add(arg1.toString());
}
}
Your class would contain the parameters that you want to send and you need to add the object of the class to the request.
Sample code snippet can be found in the official KSOAP documentation.
加载中,请稍侯......
精彩评论