SOAP较为详细文档

SOAP是一种基于XML的协议,用于在不同编程语言和平台之间实现互操作性。它通过XML命名空间增强扩展性,并利用HTTP进行传输。SOAP消息包括Envelope、Header和Body元素,Header元素可包含多个文件头,用于描述服务信息和处理细节。SOAP使用命名空间避免元素冲突,并确保消息的模块化处理。消息传递中,Header元素的文件头可以根据命名空间被不同节点处理,而Body元素的内容由最终接收方处理。SOAP头的处理是可选的,通过mustUnderstand属性指定处理的必要性。SOAP支持两种主要的消息传递模式:Document/Literal和RPC/Literal,分别用于传输XML文档和模拟过程调用。
摘要由CSDN通过智能技术生成
 
    SOAP
1 其实Web Services 的核心就是SOAP和WSDL,它们隐含于J2EE WebServices平台的通信层于部署层
2 什么是SOAP
SOAP最初是简单对象访问协议(即Simple Object AccessPropotol)的缩写,但它只是个名称而已。SOAP1.1是J2EE WebServices使用的标准消息传递协议,而且通常是Web服务的事实标准。
SOAP的主要应用是应用程序与应用程序之间的通信(A2A),且主要应用于商务对商务(B2B)的通信以及企业应用集成(EAI)。B2B和A2A是同一个问题的2个方面,两者都要解决集成软件应用程序以及共享数据这样的问题。为了使B2B和EAI真正起作用,协议必须是与平台无关,具有灵活性并且基于标准且通用的技术。
                SOAP技术与早期的B2B和EAI技术,如CORBA和EDI(电子文档交换技术)不一样,SOAP能满足这些要求,而且应用广泛,并已得到大多软件企业的支持,如(W3C,WS-I,OASIS)。
                其实SOAP只不过是伴随其使用规则的另一个XML标记语言。SOAP有一个清晰的目标,即通过网络交换数据。它将重点放在了如何封装,编码XML数据以及如何定义用于传输和接收这些数据的规则上了。简单的说,SOAP就是一个网络应用协议。

5为什么SOAP会非常受欢迎
        SOAP定义了如何通过软件以独立于各种编程语言或平台的方式来构造消息,处理消息,从而使那些用于不用编程语言编写的程序之间具有互操作性,并能在不同的操作系统上运行。
        它通过XML命名空间使SOAP具有更强的扩展性。而且它基于XML为基础,并且SOAP它用于HTTP隧道的标准方法。HTTP隧道是将另外一个协议隐藏与HTTP消息中以穿越未收到阻止的防火墙的过程。防火墙通常允许HTTP通过端口80通行,但会禁止或限制使用其他协议或端口。
       SOAP的基本结构
<?xml version=”1.0” encoding=”UTF-8”?>
<soap:Envelope
Xmlns:soap=http://schemas.xmlsoap.org/soap/envelope/>
<soap:Body>
…………………
…………………………
………………….
  </soap:Body>
</soap:Envelope>

SOAP消息与传统邮递服务中使用的信封类似。就像纸信封内包含信件一样,SOAP消息包含了XML数据。

SOAP中根元素为Envelope元素。
Envelope元素可以包含余个可选的Header元素,同时必须包含一个Body元素。
如果用户使用了Header元素,那么该元素必须是Envelope元素的直接子元素。并在Body元素之前。

Header元素以一个或多个不同XML元素的形式包含消息方面的信息,其中每一个元素描述与消息关联的服务的某些方面或质量(服务质量是说-------)

Header元素可以包含各种XML元素,这些XML元素用于描述安全凭证,ID,路由指令,或在Body元素中处理数据时涉及的其他非常重要的消息方面的信息。可以这样说,如果我们希望为每一个SOAP消息附加一个唯一的标识符,用于测试和登陆。虽然唯一标识符不是SOAP协议本身的部分,但用户可以容易的向Herder元素添加标识符,如下例:
<?xml version = “1.0” encoding = “UTF-8”?>
<soap:Envelope
Xmlns:soap=”http://schemas.xmlsoap.org/soap/envelope”
Xmlns:mi=”http://www.Monson-Haefel.com/jwsbook/message-id “>
  <soap:Header>
      <mi:message-id>2223322332233232:fffff</mi:message>
  </soap:Header>
<soap:Body>
   <!--                   -->
</soap:Body>
</soap:Envelope>

值得注意的是:message-id元素称为文件头,并且该元素是由其自己的命名空间标识的任意XML元素。
又如下面例子,带XML数字签名文件头的SOAP消息
: <?xml version = “1.0” encoding = “UTF-8”?>
<soap:Envelope>
Xmlns:soap=”http://schemas.xmlsoap.org/soap/envelope”

Xmlns:mi=”http://www.Monson-Haefel.com/jwsbook/message-id “

Xmlns:sec=http://schemas.xmlsoap.org/soap/security/2000-12

Xmlns:ds=http://w3c.org/2000/09/xmldsig#>

<soap:Header>
   <mi:message-id>111111111111111111111111111111111:-8000</mi:message>
   <sec:Signature>
      <ds:signature>
          …………………
        ……………….
       </ds:signature>
     </sec:Signature>
</soap:Header>
</soap:Envelope>

也就是说,可以在Header元素中放入任意数量的文件头,而且每个代码快均由合适的对应的函数来处理。。。。

       SOAP命名空间
XML命名空间在SOAP里起着非常重要的作用。因为SOAP可以在Header和Body元素中包含若干不同的XML元素,为了避免冲突,必须使用唯一的命名空间来标识它们。
如下例:
   : <?xml version= “1.0” encoding = “UTF-8” ?>
<soap:Envelope>
Xmlns:soap=”http://schemas.xmlsoap.org/soap/envelope”

Xmlns:mi=”http://www.Monson-Haefel.com/jwsbook/message-id “

Xmlns:sec=http://schemas.xmlsoap.org/soap/security/2000-12

Xmlns:ds=http://w3c.org/2000/09/xmldsig#>

<soap:Header>
   <mi:message-id>111111111111111111111111111111111:-8000</mi:message>
   <sec:Signature>
      <ds:signature>
       </ds:signature>
     </sec:Signature>
</soap:Header>

<soap:Body sec:id=”Body”>
  <po:purchaseOrder orderDate=”2003-09-22”
     Xmlns:po = http://www.Monson-Haefel.com/jwsbook/po
     Xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance>
   ……………………………………………
   </po:purchaseOrder>

</soap:Body>
</soap:Envelope>
正是因为SOAP使用了XML命名空间,所以使SOAP成为灵活且可扩展的协议。。命名空间完全限定了元素名称或属性名称。。

【注意】在Envelope元素声明的第一个命名空间定义了标准SOAP元素(即Envelop,Header,和Body元素)的命名空间。。。。如:

<soap:Envelope>
<Xmlns:soap=”http://schemas.xmlsoap.org/soap/envelope”>
</soap:Envelope>
此命名空间确定了所使用的SOAP1.1版本,SOAP消息必须使用Envelope元素的命名空间声明成如下标准的SOAP1.1信封命名空间:
<xmlns:soap=”http://schemas.xmlsoap.org/soap/envelope”>
此规则保证了所有确认消息使用完全相同的命名空间和XML模式。。。
Header元素中的每个文件头应有自己的命名空间,这一点非常重要,因为命名空间有帮助SOAP应用程序指定文件头并单独处理它们

SOAP 消息的所有本地元素都必须是命名空间限定的元素(就是SOAP1.1命名空间为前缀),因为SOAP1.1的XML模式将ElementFormDefault属性设置为了”qualified”,此外,Basicprofile1.0要求所有由Body元素包含的应用程序专用的元素必须喂限定元素。
同样可以通过声明xsi:schemaLocation属性来进行有效性检验,但大多数情况下,SOAP堆栈会在设计时处理此问题,并不需要在SOAP消息中显示的声明xsi:schemaLocation。
【解释】所谓的SOAP堆栈使用于处理和传递SOAP消息的代码库。比如,J2EE1.4,Microsoft.NET都用自己的SOAP堆栈,即用于处理SOAP消息的自己的代码库。

【补充】有些SOAP堆栈要大量利用XML模式实例命名空间来说明元素的数据类型(比如:xsi:type=”xsd:float”),可是有些SOAP则不一样。当接收方需要类型化元素但发送方没有类型化元素时,这样的堆栈就会出问题。根据BP&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值