开发者

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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜