SOAP协议分析

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

SOAP协议分析1西安邮电大学Web服务课内实验报告书院系名称:计算机学院实验题目:SOAP协议分析学生姓名:周从军专业名称:网络工程班级:网络1101班学号:04112016时间:2014年12月20日SOAP协议分析2Web服务实验报告SOAP协议分析一、实验目的1.理解Web服务,了解简单对象访问协议(SOAPSimpleObjectAccessProtocol)的内容进行分析;2.掌握简单对象访问协议(SOAP)的格式。二、实验内容1.了解SOAP协议内容和技术架构2.分析协议的原理及SOAP消息的格式、编码原则3.掌握SOAP消息的组成三、设计与设计过程1.SOAP协议的简介SOAP(SimpleObjectAccessProtocal,简单对象访问协议)技术有助于实现大量异构程序和平台之间的互操作性,从而使存在的应用能够被广泛的用户所访问。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服务器(如MSSOAP协议分析3的IIS或Apache)马上成为了SOAP的ORBs。因为目前超过一半的Web服务器采用IIS或Apache,SOAP将会从这两个产品的广泛而可靠的使用中获取利益。这并不意味着所有的SOAP请求必须通过Web服务器来路由,传统的Web服务器只是分派SOAP请求的一种方式。因此Web服务如IIS或Apache对建立SOAP性能的应用是充分的,但决不是必要的。4.SOAP的结构SOAP消息是一个XML文档,它最多包含三个组成部分:Envelope:(必选)Envelope元素必须作为文档的第一个元素(根元素)出现在文档中,Envelope元素可以包含名称空间声明和附加属性。如果包含附加属性,这些属性必须限定名称空间。Envelope元素也可以包含附加子元素,子元素也必须限定名称空间且跟在SOAPBody元素之后。Header:(可选)Header元素是可选的,如出现则必须作为Envelope元素的第一个直接子元素出现,Header元素也可以包含一些子元素(headerentries),这些子元素也必须限定名称空间。Body:(可选)Body元素是必选的,如有Header元素则Body直接跟在Header元素之后,否则Body元素将作为Envelope的第一个直接子元素出现。Body元素也一个包含一些子元素(bodyentries)。SOAP定义了Fault元素,用于指明错误信息。SOAP消息的例子:SOAP-ENV:Envelopxmlns:SOAP-ENV=””SOAP-ENV:encodingStyle=””SOAP-ENV:Header...//Optional/SOAP-ENV:HeaderSOAP-ENV:Body...//Mandatory/SOAP-ENV:Body/SOAP-ENV:EnvelopSOAP封装(Envelope)SOAP封装是一个SOAP消息顶层的元素,可以把它看成一个通过邮政服务寄信时的信封。它包括可选择的SOAP标题和一个强制性的SOAP主体。在SOAP消息中的SOAP封装用Envlop元素表示。所有的元素都用SOAP-ENV命名空间标识符作为前缀,该标识符与相关联的。所有的SOAP元素都与SOAP-ENV前缀相关联,以保证SOAP元素不会与定义的其他元素相互冲突。SOAP的全局EncodingStyle属性被用于指明在SOAP消息中的编码方式。SOAP规范鼓励的值是它是与SOAP定义的编码规则相关的命名空间。SOAP标题(Header)SOAP提供了一种灵活的机制,可以以分散但标准的方式扩展消息,而不是需要通讯的双方事前协商达到一致,这就是利用SOAPHeader在SOAP消息中增加特性。如:Actor属性用于指明该消息应由谁进行处理;mustUnderstand属性SOAP协议分析4则指明该处理是否是必须的。一个headerentry必须有名称空间限制:包括名称空间的URI和局部名称,并可以包含encodingStyle、Aetor、mustUnderstand等属性。SOAP主体(Body)SOAP主体中包含有消息的接收者必须受到的有效载荷(消息)。消息的SOAP主体用Body元素来定义。实际上,典型的载荷是由一个RPC调用、一个RPC响应或者错误报告组成。Body的所有直接子元素称为Bodyentry,每一个Bodyentry都是包含在Body元素中独立元素。Bodyentry项可以包含一个可选的encodingBthle属性,用于定义该主体项的编码规则。如果定义了,那它将覆盖在SOAPEnvelop元素中定义的编码规则。SOAPHeader和SOAPBody的语义关系Header和Body在定义上是独立的,但在事实上是相关系的。一个Body条目和一个Header条目的关系是:一个Body条目在语义上与这样一个Header条目等价;一个Bodyentry与一个Actor味缺省值(即不出现Actor属性)、mustUnderstand=”!”的Headerentry在语义上是相等的。SOAP错误(Fault)SOAPFault元素是用于在SOAP消息中传输错误及状态信息。如果SOAP消息需要包含SOAPFatult元素的话,它必须作为一个Body条目出现,而且在Body元素内只能出现一次。SOAPFault元素定义了一下四个子元素:Faultcode:SOAP定义了一个很小的SOAP错误代码集合,以用于覆盖基本的SOAP错误。Faultstring:falutstring元素为那些错误代码提供了可以读懂的错误解释。Faultactor:faultactor元素描述在消息路径中是谁引起了该错误发生的信息。Detail:detail元素是用于传输与Body元素相关应用程序提别的错误信息。5.SOAP的编码规则当以电子方式交换数据时,进行交换的断电需要预先在两方面达成一致;校核模式和类型系统。前者与通信通道的体系结合(例如:点对点和多对弈,或分块或异步)有关。而另一方面,后者是要在对消息进行变和解码的过程中使用一致的数据格式。SOAP定义了一个简单的有限协议来传输应用程序级的数据。因为有丰富而又可扩展的类型体系,这个协议可以很容易地将任意应用程序的数据类型作为序列化的XML进行传送。这里我们一ApacheSOAP类型映射为例,说明怎样将任意的JAVA类型作为序列化的XML进行传送。首先让我们来定义一些术语。序列化(Serialization)是将java对象转换为XML实例的过程,而反序列化(Deserialization)是从XML重新构造java对象的过程。用于SOAP编码的模式可以在上找到。要想自定义用于数据的具体编码规则,大家可以引用一个外部模式,也可以使用xsi:type机制。使用xsi:type机制的邮电是,SOAP文档在提结构和数据类型的值方面都是自描述的。缺点是没有描述SOAP消息的格式。SOAP协议分析5下面给出序列化的规则:所有的值以元素内容的形式表示一个简单之以字符数据表示一个简单之不可以含有元素。每个简单之都不虚使用一个合法的XML大纲数据类型或者使用一个从该数据类型集合里推导出来的数据类型。一个复合值被编码为一个元素序列复合元素的每个字段都使用一个角色:”访问器(accessor)“来加以区分,元素的名字与访问器的名称是一致的。一个多次引用的简单值或复合值被编码成一个独立的元素这个元素包含一个局部的无需校验的属性,属性名为”id“,类型为”ID”(依照XML规范)。值的每一个accessor对应一个空元素,该元素有一个局部的,无需校验的数学,属性名为”href“,类型为”urireferene“,href属性的值音乐了相对应的独立元素的URI标示符。数组是SOAP:Array型的复合值我们一个例子来说明一个java对象的SOAP表示:CodeList1.FooJavaBean:ClassFoo(Inti;Strings;PublicFoo(){).../*Foo函数的实现*/}CodeList2.Foo对象的SOAP表示:SOAP-ENV:Bodynsl:eatFooXmlns:nsl=”run:myservice”SOAP-ENV:encodingStyle=”“fooParamXmlns:ns2=””Xsi:type=”ns2:Foo”ixsi:type=”xsd:int”1000/isxsi:type=”xsd:string”HelloWorld/s/fooParam/nsl:eatFoo/SOAP-ENV:BodyCodelist2中的SOAPXML实例表示一个RPC调用,该调用将方法地阿姨eatFoo调度到由URI”urn:myservice“标出的Web服务。元素fooParam、i和s被称为访问器(accessor);它们是值的容器。Codelist2中的xsi:type属性提供访问器的子类型。通常,Web服务提供者和请求者已经预先就每个RPC调用的参数数据类型达成了一致。要对SOAPXML实例进行正确的反序列化,有了这个预先达成的一致就够了,技术没有xsi:type属性也可以。带有显式的xsi:type属性的访问器被称为多态访问器(polymorphicaccessor).SOAP协议分析66.1SOAP在HTTP上的应用将SOAP绑定到HTTP,将使我们能够利用HTTP的丰富特性来实现SOAP灵活的分布式特性。SOAP可以自然地遵循HTTP请求/应答的消息模型,通过HTTP请求发送SOAP请求参数,再通过HTTP应答来返回SOAP应答参数。给予HTTP的SOAP应用程序必须把传输中的数据指定为“text/xml”SOAP的HTTP请求我们可以通过在HTTP的“Header”域里增加一个新的名为“SOAPAction”的项目来表示SOAP请求的目的地。这个数据项的值是一个URI,但它不必是某种特定的格式,而且它也不必是可解析的。这个出现在SOAP请求中新的数据域表明一下三种情况:如果这个域出现并天上了值,它的值将告诉我们SOAP信息的目的。例如“SOAPAction”:“””.如果这个域出现了但没有填上值,则此信息的目的将由表示HTT

1 / 9
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功