首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > XML SOAP >

基于Soap协议的android客户端和服务器的数据交互(学习天气预报事例的心得)

2013-03-10 
基于Soap协议的android客户端和服务器的数据交互(学习天气预报例子的心得)Webservice 是一种基于Soap协议

基于Soap协议的android客户端和服务器的数据交互(学习天气预报例子的心得)


    Webservice 是一种基于Soap协议的远程调用标准,通过webservice可以将不同操作系统平台,不同语言,不同技术整合到一起.

在PC机java客户端,需要用一些库来访问webservice,可以用Ksoap第三方

的类库来获取服务器端webService的调用.


首先

下载Ksoap包:ksoap2-android-assembly-3.0.0-RC.4-jar-with-dependencies.jar

下载链接:

//实例化SoapObject soapObject=new SoapObject(targetNameSpace, getWeatherbyCityName);//传入参数soapObject.addProperty(参数名, 参数值);soapObject.addProperty("theCityName", city);


/************建议webservice的方法传递的参数尽量用string类型。即使是int类型,kSOAP2与Java编写的webservice也有可能交互发生异常.**************/

3 设置SOAP请求信息,把构造好的soapObject封装进去,设置好属性后,再发出请求

(参数部分为SOAP协议版本号,与webservice版本号一致)

SoapSerializationEnvelope envelope=new SoapSerializationEnvelope(SoapEnvelope.VER11);    envelope.bodyOut=soapObject;    envelope.dotNet=true;    envelope.setOutputSoapObject(soapObject);    /*     *  注意:这个属性是对dotnetwebservice协议的支持,     *  如果dotnet的webservice 不指定rpc方式则用true否则要用false     */

/*****************

常量SoapEnvelope.VER10:对应于SOAP1.0规范
常量SoapEnvelope.VER11:对应于SOAP1.1规范
常量SoapEnvelope.VER12:对应于SOAP1.2规范

***********************/

/**********************

在kSOAP中,我们用Base64把二进制流编码为ASCII字符串,这样就可以通过XML/SOAP传输二进制数据了。
org.ksoap2.serialization.MarshalBase64的目的就是,把SOAP XML中的xsd:based64Binary元素序列化为Java字节数组(byete array)类型。类似的,kSOAP2还提供了MarshalDate、MarshalHashtable类来把相应的元素序列化为Java的Date、Hashtable类型。

                (该步可省 据需要决定)   (new MarshalBase64()).register(envelope); //注册envelope

*********************/

4 构建传输对象,开启调试信息

HttpTransportSE httpTranstation=new HttpTransportSE(WSDL);    httpTranstation.debug=true;
/*********如果HttpTransport的debug属性为true,那么此时就可以通过System.out.println("Response dump>>+ tx.responseDump);
打印出HttpTransport的调试信息。尤其当前面call方法和getResult方法发生异常时,这个调试信息是非常有用的。************/

/***************

对于HttpTransport的处理上,kSOAP2和kSOAP1.2的写法不一样。
   kSOAP 1.2,HttpTransport的构造函数是HttpTransport (String url, String soapAction),第二个参数soapAction可以是要调用的webservice方法名。
   kSOAP 2,构造函数是 HttpTransport(String url)。kSOAP2相当于把webservice方法名分离出去,完全交给SoapObject去封装,而HttpTransport仅仅负责把SoapEnvelope发送出去并接收响应,这样更合理一些。

***************/

5 调用WebService(其中参数为1:命名空间+方法名称,2:Envelope对象):

httpTranstation.call(targetNameSpace+getWeatherbyCityName, envelope);

/*************方法HttpTransport.call()自己就能够发送请求给服务器、接收服务器响应并序列化SOAP消息,如下所示:

ht.call(soapAction, envelope);

soapAction – SOAP 规范定义了一个名为 SOAPAction 的新 HTTP 标头,所有 SOAP HTTP 请求(即使是空的)都必须包含该标头。 

                    soapAction标头旨在表明该消息的意图。通常可以置此参数为null,这样HttpTransport就会设置HTTP标头SOAPAction为空字符串。

Envelope – 就是前面我们构造好的SoapSerializationEnvelope或SoapEnvelope对象。

*************/


6 解析返回数据:












热点排行