分类
Android

Android使用SOAP调用远程服务

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();

发表评论

电子邮件地址不会被公开。