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.
精彩评论