SOAP是一种基于XML的协议规范,最近正好使用到了它。在Android中,可以使用KSOAP2来调用WebService。
KSOAP2相关文档:http://simpligility.github.io/ksoap2-android/
KSOAP2下载地址:https://oss.sonatype.org/content/repositories/ksoap2-android-releases/
下载 ksoap2-android-assembly-3.6.0-jar-with-dependencies.jar,将该jar包放入工程的libs目录中。调用步聚如下:
SoapObject request = new SoapObject("http://service", "getName");
SoapObject类的第1个参数表示WebService的命名空间,可以从WSDL文档中找到WebService的命名空间。第2个参数表示要调用的WebService方法名。
设置调用方法的参数值,这一步是可选的,如果方法没有参数,可以省略这一步。设置方法的参数值的代码如下:
request.addProperty("param1", "value1"); request.addProperty("param2", "value2");
要注意的是,addProperty方法的第1个参数虽然表示调用方法的参数名,但该参数值并不一定与服务端的WebService类中的方法参数名一致,只要设置参数的顺序一致即可。
生成调用WebService方法的SOAP请求信息。该信息由SoapSerializationEnvelope对象描述:
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); // 设置与.NET提供的Web service保持有良好的兼容性 envelope.dotNet = true; envelope.setOutputSoapObject(request);
创建SoapSerializationEnvelope对象时需要通过SoapSerializationEnvelope类的构造方法设置SOAP协议的版本号。该版本号需要根据服务端WebService的版本号设置。在创建SoapSerializationEnvelope对象后,不要忘了设置 SoapSerializationEnvelope类的bodyOut属性,该属性的值就是在第1步创建的SoapObject对象。
创建HttpTransportSE对象。通过HttpTransportSE类的构造方法可以指定WebService的WSDL文档的URL,代码如下:
HttpTransportSE ht = new HttpTransportSE("http://192.168.17.156:8080/axis2/services/SearchProductService?wsdl");
如果使用Https协议,则:
HttpsTransportSE ht = new HttpsTransportSE(HOST, 443, HOST_FILE, 20000);
使用call方法调用WebService方法,代码如下:
ht.call(null, envelope);
call方法的第1个参数一般为null,第2个参数就是在第3步创建的SoapSerializationEnvelope对象。
使用getResponse方法获得WebService方法的返回结果,代码如下:
SoapObject soapObject = (SoapObject) envelope.getResponse();