基于Soap协议的android客户端和服务器的数据交互





2013-03-10 来源:读书人网 【读书人网(Reader8.cn):综合教育门户网站】



基于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 解析返回数据:
本文来自:读书人网(http://www.reader8.cn/)原文链接:http://www.reader8.cn/jiaocheng/20130310/1372117.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值