android framework开发|Android开发之SOAP学习笔记介绍

更新时间:2020-09-06    来源:Access    手机版     字体:

【www.bbyears.com--Access】

简单对象访问协议(Simple Object Access Protocol,SOAP)是一种标准化的通信规范,主要用于Web服务(Web service)。SOAP的出现可以使网页服务器(Web Server)从XML数据库中提取数据时,无需花时间去格式化页面,并能够让不同应用程序之间通过HTTP协议,以XML格式互相交换彼此的数据,使这个交换过程与编程语言、平台和硬件无关。此标准由IBM、Microsoft、UserLand和DevelopMentor在1998年共同提出,并得到IBM、Lotus(莲花)、Compaq(康柏)等公司的支持,于2000年提交给万维网联盟(World Wide Web Consortium,W3C)。目前SOAP 1.1版是业界共同的标准。

SOAP基于XML标准,用于在分布式环境中发送消息,并执行远程过程调用。使用SOAP,不用考虑任何特定的传输协议(尽管通常选用HTTP协议),就能使数据序列化。

SOAP的优点如下:

SOAP是可扩展的。SOAP无需中断已有的应用程序,SOAP客户端、服务器和协议自身都能发展。而且SOAP能极好地支持中间介质和层次化的体系结构。

SOAP是简单的。客户端发送一个请求,调用相应的对象,然后服务器返回结果。这些消息是XML格式的,并且封装成符合HTTP协议的消息。因此,它符合任何路由器、防火墙或代理服务器的要求。

SOAP是完全和厂商无关的。SOAP可以相对于平台、操作系统、目标模型和编程语言独立实现。另外,传输和语言绑定以及数据编码的参数选择都是由具体的实现决定的。

SOAP与编程语言无关。SOAP可以使用任何语言来完成,只要客户端发送正确SOAP请求(也就是说,传递一个合适的参数给一个实际的远端服务器)。SOAP没有对象模型,应用程序可以捆绑在任何对象模型中。

SOAP–消息

SOAP使用Internet应用层协议作为其传输协议。SMTP以及HTTP协议都可以用来传输SOAP消息,SOAP亦可以通过HTTPS传输。一条SOAP消息就是一个普通的XML文档,包含下列元素:

必需的Envelope元素,可把此XML文档标识为一条SOAP消息。

可选的Header元素,包含头部信息。

必需的Body元素,包含所有的调用和响应信息。

可选的Fault元素,提供有关在处理此消息时发生错误的信息。

SOAP消息的重要的语法规则如下:

SOAP消息必须使用XML来编码。

SOAP消息必须使用SOAP Envelope命名空间。

SOAP消息必须使用SOAP Encoding命名空间。

SOAP消息不能包含DTD引用。

SOAP消息不能包含XML处理指令。

实例:

请求时候发送的消息内容如下:
xmlns:soapenv=”http:// schemas.xmlsoap.org/soap/envelope/”
xmlns:xsd=”http:// www.w3.org/2001/XMLSchema”
xmlns:xsi=”http:// www.w3.org/2001/XMLSchema-instance”>


classifieds


响应时候发送的消息内容如下:
xmlns:soapenv=”http:// schemas.xmlsoap.org/soap/envelope/”
xmlns:wsa=”http:// schemas.xmlsoap.org/ws/2004/08/addressing”>

http:// schemas.xmlsoap.org/ws/2004/08/
addressing/role/anonymous


http:// localhost:8080/axis2/
services/MyService


ECE5B3F187F29D28BC11433905662036



classifieds


SOAP–调用WebService

SOAP调用WebService的具体步骤如下。

步骤1 添加ksoap2包。WebService是一种基于SOAP协议的远程调用标准,通过WebService可以将不同操作系统平台、不同语言、不同技术整合到一块。在Android SDK中并没有提供调用WebService的库,因此,需要使用第三方的SDK来调用WebService。PC版本的WebService客户端库非常丰富,例如Axis2、CXF等,但这些开发包对于Android系统来说过于庞大,也未必很容易移植到Android系统中。因此,这些开发包并不在我们考虑范围内。适合手机的WebService客户端的SDK有一些,比较常用的是Ksoap2,可以从网址http://code.google.com/p/ksoap2-android/下载,然后将下载的ksoap2-android-assembly-2.4-jar-with-dependencies.jar包复制到Eclipse工程的lib目录中,当然也可以放在其他的目录里。在Eclipse工程中引用这个jar包。

步骤2 指定WebService的命名空间和调用的方法名,如:
SoapObject request =new SoapObject(http:// service,”getName”);

SoapObject类的第一个参数表示WebService的命名空间,可以从WSDL文档中找到WebService的命名空间;第二个参数表示要调用的WebService方法名。

步骤3 设置调用方法的参数值,如果没有参数,可以省略。设置方法的参数值的代码如下:
Request.addProperty(“param1″,”value”);
Request.addProperty(“param2″,”value”);

要注意的是,addProperty方法的第1个参数虽然表示调用方法的参数名,但该参数值并不一定与服务端的WebService类中的方法参数名一致,只要设置参数的顺序一致即可。

步骤4 生成调用WebService方法的SOAP请求信息。该信息由SoapSerializationEnvelope对象描述,代码如下:
SoapSerializationEnvelope envelope=
new SoapSerializationEnvelope(SoapEnvelope.VER11);
Envelope.bodyOut = request;

创建SoapSerializationEnvelope对象时需要通过SoapSerializationEnvelope类的构造方法设置SOAP协议的版本号。该版本号需要根据服务端WebService的版本号设置。在创建SoapSerializationEnvelope对象后,不要忘了设置SOAPSoapSerializationEnvelope类的bodyOut属性,该属性的值就是在步骤2创建的SoapObject对象。

步骤5 创建HttpTransportsSE对象。通过HttpTransportsSE类的构造方法可以指定WebService的WSDL文档的URL。
HttpTransportSE ht=new HttpTransportSE
(“http:// fy.webxml.com.cn/webservices/EnglishChinese.asmxwsdl”);

步骤6 使用call方法调用WebService方法,代码如下:
ht.call(null,envelope);

call方法的第一个参数一般为null,第2个参数就是在步骤4创建的SoapSerialization-Envelope对象。

步骤7 使用getResponse方法获得WebService方法的返回结果,代码如下:
SoapObject soapObject =(SoapObject)envelope.getResponse();

步骤8 解析返回的内容。

本文来源:http://www.bbyears.com/shujuku/96998.html