SOAP协议分析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
西安邮电大学
Web服务
课内实验报告书
院系名称:计算机学院
实验题目:SOAP协议分析学生姓名:周从军
专业名称:网络工程
班级:网络1101班学号:04112016 时间:2014年12月20日
Web服务实验报告
SOAP协议分析
一、实验目的
1.理解Web服务,了解简单对象访问协议(SOAP Simple Object Access Protocol)的内容进行分析;
2.掌握简单对象访问协议(SOAP)的格式。
二、实验内容
1.了解SOAP协议内容和技术架构
2.分析协议的原理及SOAP消息的格式、编码原则
3.掌握 SOAP消息的组成
三、设计与设计过程
1.SOAP协议的简介
SOAP(Simple Object Access Protocal,简单对象访问协议)技术有助于实现大量异构程序和平台之间的互操作性,从而使存在的应用能够被广泛的用户所访问。SOAP是把成熟的基于HTTP的WEB技术与xml的灵活性和可扩展性组合在了一起。
2.SOAP的应用范围
SOAP 的一个主要目标是使存在的应用能被更广泛的用户所使用。为了实现这个目的,没有任何SOAPAPI或SOAP对象请求代理(SOAPORB),SOAP是假设你将使用尽可能多的存在的技术。几个主要的CORBA厂商已经承诺在他们的ORB 产品中支持SOAP协议。微软也承诺在将来的COM版本中支持 SOAP。DevelopMentor已经开发了参考实现,它使得在任何平台上的任何java或Perl 程序员都可以使用SOAP。而且IBM和Sun也陆续支持了SOAP协议,和MS合作共同开发SOAP规范和应用。目前SOAP已经成为了W3C和IETF的参考标准之一。
3.SOAP与XML的关系
SOAP 的指导理念是“它是第一个没有发明任何新技术的技术”。它采用了已经广泛使用的两个协议:HTTP和XML。HTTP用于实现SOAP的RPC风格的传输,而XML是它的编码模式。采用几行代码和一个XML解析器,HTTP服务器(如MS
的IIS或Apache)马上成为了SOAP的ORBs。因为目前超过一半的Web服务器采用IIS或Apache,SOAP将会从这两个产品的广泛而可靠的使用中获取利益。这并不意味着所有的SOAP请求必须通过 Web服务器来路由,传统的Web服务器只是分派SOAP请求的一种方式。因此Web服务如IIS或Apache对建立SOAP性能的应用是充分的,但决不是必要的。
4.SOAP的结构
SOAP消息是一个XML文档,它最多包含三个组成部分:
Envelope:(必选)Envelope元素必须作为文档的第一个元素(根元素)出现在文档中,Envelope元素可以包含名称空间声明和附加属性。如果包含附加属性,这些属性必须限定名称空间。Envelope元素也可以包含附加子元素,子元素也必须限定名称空间且跟在SOAP Body元素之后。
Header:(可选)Header元素是可选的,如出现则必须作为Envelope元素的第一个直接子元素出现,Header元素也可以包含一些子元素(header entries),这些子元素也必须限定名称空间。
Body:(可选)Body元素是必选的,如有Header元素则Body直接跟在Header元素之后,否则Body元素将作为Envelope的第一个直接子元素出现。Body元素也一个包含一些子元素(body entries)。SOAP定义了Fault元素,用于指明错误信息。
SOAP消息的例子:
xmlns:SOAP-ENV=”/soap/envelope/” SOAP-ENV: encodingStyle=”/soap/encoding/”> ...//Optional ...//Mandatory
SOAP封装(Envelope)
SOAP封装是一个SOAP消息顶层的元素,可以把它看成一个通过邮政服务寄信时的信封。它包括可选择的SOAP标题和一个强制性的SOAP主体。在SOAP消息中的SOAP封装用Envlop元素表示。所有的元素都用SOAP-ENV命名空间标识符作为前缀,该标识符与/soap/envelope相关联的。所有的SOAP元素都与SOAP-ENV前缀相关联,以保证SOAP元素不会与定义的其他元素相互冲突。
SOAP的全局EncodingStyle属性被用于指明在SOAP消息中的编码方式。SOAP规范鼓励的值是/soap/encoding.它是与SOAP定义的编码规则相关的命名空间。
SOAP标题(Header)
SOAP提供了一种灵活的机制,可以以分散但标准的方式扩展消息,而不是需要通讯的双方事前协商达到一致,这就是利用SOAP Header在SOAP消息中增加特性。如:Actor属性用于指明该消息应由谁进行处理;mustUnderstand属性
则指明该处理是否是必须的。一个header entry必须有名称空间限制:包括名称空间的URI和局部名称,并可以包含encodingStyle、Aetor、mustUnderstand 等属性。
SOAP主体(Body)
SOAP主体中包含有消息的接收者必须受到的有效载荷(消息)。消息的SOAP 主体用
元素来定义。实际上,典型的载荷是由一个RPC调用、一个RPC响应或者错误报告组成。Body的所有直接子元素称为Body entry,每一个Body entry都是包含在Body元素中独立元素。Body entry项可以包含一个可选的encodingBthle属性,用于定义该主体项的编码规则。如果定义了,那它将覆盖在SOAP
SOAP Header和SOAP Body 的语义关系
Header和Body在定义上是独立的,但在事实上是相关系的。一个Body条目和一个Header条目的关系是:一个Body条目在语义上与这样一个Header条目等价;一个Body entry与一个Actor味缺省值(即不出现Actor属性)、mustUnderstand=”!”的Header entry在语义上是相等的。
SOAP错误(Fault)
SOAP Fault元素是用于在SOAP消息中传输错误及状态信息。如果SOAP消息需要包含SOAP Fatult 元素的话,它必须作为一个Body条目出现,而且在Body 元素内只能出现一次。
SOAP Fault元素定义了一下四个子元素:
Fault code:SOAP定义了一个很小的SOAP错误代码集合,以用于覆盖基本的SOAP错误。
Fault string :falut string元素为那些错误代码提供了可以读懂的错误解释。
Fault actor:fault actor元素描述在消息路径中是谁引起了该错误发生的信息。
Detail:detail元素是用于传输与Body元素相关应用程序提别的错误信息。
5 .SOAP的编码规则
当以电子方式交换数据时,进行交换的断电需要预先在两方面达成一致;校核模式和类型系统。前者与通信通道的体系结合(例如:点对点和多对弈,或分块或异步)有关。而另一方面,后者是要在对消息进行变和解码的过程中使用一致的数据格式。SOAP定义了一个简单的有限协议来传输应用程序级的数据。因为有丰富而又可扩展的类型体系,这个协议可以很容易地将任意应用程序的数据类型作为序列化的XML进行传送。这里我们一Apache SOAP类型映射为例,说明怎样将任意的JAVA类型作为序列化的XML进行传送。
首先让我们来定义一些术语。序列化(Serialization)是将java对象转换为XML实例的过程,而反序列化(Deserialization)是从XML重新构造java
对象的过程。
用于SOAP编码的模式可以在/soap/endoding 上找到。要想自定义用于数据的具体编码规则,大家可以引用一个外部模式,也可以使用xsi:type机制。
使用xsi:type机制的邮电是,SOAP文档在提结构和数据类型的值方面都是自描述的。缺点是没有描述SOAP消息的格式。