soap学习

来源:互联网 发布:java编程思想第四版 编辑:程序博客网 时间:2024/06/06 12:59

SOAP是基于XML的简易协议,可使应用程序在HTTP之上进行信息交换,即:SOAP是用于访问网络服务的协议。

SOAP指简易对象访问协议,是一种通信协议,用于应用程序之间的通信,是一种用于发送消息的格式,被设计用来通过因特网进行通信,独立于平台,独立于语言,基于xml,很简单并可扩展,允许您绕过防火墙,将被作为W3C标准来发展。


2、SOAP语法

一条SOAP消息就是一个普通的XML文档,包含下列元素:

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

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

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

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

3、SOAP语法规则

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

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

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

。SOAP消息不能包含DTD引用

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


SOAP消息的基本结构

<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">

<soap:Header>
  ...
  ...
</soap:Header>

<soap:Body>
  ...
  ...
  <soap:Fault>
    ...
    ...
  </soap:Fault>
</soap:Body>

</soap:Envelope>


4、SOAP Envelope元素

强制使用的SOAP的Envelope元素是SOAP消息的根元素。它可把XML文档定义为SOAP消息。

请注意xmlns:soap 命名空间的使用。它的值应当始终是:

http://www.w3.org/2001/12/soap-envelope

并且它可把封装定义为SOAP封装:

<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
  ...
  Message information goes here
  ...
</soap:Envelope>

5、encodingStyle属性

SOAP的encodingStyle属性用于定义在文档中使用的数据类型。此属性可出现在任何SOAP元素中,并会被应用到元素的内容及元素的所有子元素上。SOAP消息没有默认的编码方式。

语法:soap:encodingStyle="URI"

示例:


<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
...
Message information goes here
...
</soap:Envelope>


6、SOAP Header元素

可选的SOAP header元素可包含有关SOAP消息的应用程序专用信息(比如认证、支付等)。如果Header元素被提供,则它必须是Envelope元素的第一个子元素。

注释:所有Header元素的直接子元素必须是合格的命名空间。

<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">

<soap:Header>
<m:Trans
xmlns:m="http://www.w3school.com.cn/transaction/"
soap:mustUnderstand="1">234</m:Trans>
</soap:Header>

...
...

</soap:Envelope>


上面的例子包含了一个带有一个“Trans”元素的头部,它的值是234,此元素的“mustUnderstand”属性的值是“1”。

SOAP在默认的命名空间中("http://www.w3.org/2001/12/soap-envelope")定义了三个属性。这三个属性是:actor,mustUnderstand以及encodingStyle。这些被定义在soap头部的属性可定义容器如何对SOAP消息进行处理。


actor属性

通过沿着消息路径经过不同的端点,SOAP消息可从某个发送者传播到某个接受者。并非SOAP消息的所有部分均打算传送到SOAP消息的最终端点,不过,另一个方面,也许打算传送给消息路径上的一个或多个端点。


SOAP的actor属性可被用于将Header元素寻址到一个特定的端点。


语法:soap:actor="URI"
示例:

<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">

<soap:Header>
<m:Trans
xmlns:m="http://www.w3school.com.cn/transaction/"
soap:actor="http://www.w3school.com.cn/appml/">
234
</m:Trans>
</soap:Header>

...
...

</soap:Envelope>


mustUnderstand属性

SOAP的mustUnderstand属性可用于标识标题项对于其进行处理的接收者来说是强制的还是可选的。假如您向Header元素的某个子元素添加了“mustUnderstand=“1””,则它可指示处理此头部的接收者必须认可此元素。假如此接收者无法认可此元素,则在处理此头部时必须失效。

语法:soap:mustUnderstand="0|1"

示例:

<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">

<soap:Header>
<m:Trans
xmlns:m="http://www.w3school.com.cn/transaction/"
soap:mustUnderstand="1">
234
</m:Trans>
</soap:Header>

...
...

</soap:Envelope>


7、SOAP Body元素

必须的SOAP Body元素可包含打算传送到消息最终端点的实际SOAP 消息。

SOAP Body元素的直接子元素可以是合格的命名空间。soap在默认的命名空间中("http://www.w3.org/2001/12/soap-envelope")定义了Body元素内部的一个元素。即SOAP的Fault元素,用于指示错误消息。

<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">

<soap:Body>
   <m:GetPrice xmlns:m="http://www.w3school.com.cn/prices">
      <m:Item>Apples</m:Item>
   </m:GetPrice>
</soap:Body>

</soap:Envelope>

上面的例子请求苹果的价格。请注意,上面的m:GetPrice和Item元素是应用程序专用的元素。他们并不是SOAP标准的一部分。而一个SOAP响应应该类似这样:

<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">

<soap:Body>
   <m:GetPriceResponse xmlns:m="http://www.w3school.com.cn/prices">
      <m:Price>1.90</m:Price>
   </m:GetPriceResponse>
</soap:Body>

</soap:Envelope>


8、SOAP Fault元素

可选的SOAP Fault元素用于指示错误消息。

如果已提供了Fault元素,则它必须是Body元素的子元素。在一条SOAP消息中,Fault元素只能出现一次。

SOAP 的Fault元素拥有下列子元素:

<faultcode> 供识别故障的代码

<faultstring>可供人阅读的有关故障的说明

<faultactor>有关是谁引发故障的信息

<detail>存留设计Body元素的应用程序专用错误信息。


SOAP Fault代码

在下面定义的faultcode值必须用于描述错误是的faultcode元素中:

错误                                         描述

VersionMismatch                  SOAP Envelope元素的无效命名空间被发现

MustUnderstand                   Header元素的一个直接子元素无法被理解

Client                                       消息被不正确的构成,或包含了不正确的信息

Server                                     服务器有问题,因此无法处理进行下去。


9、SOAP HTTP Binding

HTTP在TCP/IP之上进行通信。HTTP客户机使用TCP连接到HTTP服务器。在建立连接之后,客户机可向服务器发送HTTP请求消息:

POST /item HTTP/1.1
Host: 189.123.345.239
Content-Type: text/plain
Content-Length: 200


随后服务器会处理此请求,然后向客户机发送一个HTTP响应。此响应包含了可指示请求状态的状态代码:

200 OK
Content-Type: text/plain
Content-Length: 200

在上面的例子中,服务返回了一个200的状态码。这是HTTP的标准成功代码。

假如服务器无法对请求进行解码,它可能会返回类似这样的信息:

400 Bad Request
Content-Length: 0


SOAP HTTP Binding

SOAP方法指的是遵守SOAP编码规则的HTTP请求/响应。


HTTP + XML=SOAP


SOAP请求可能是HTTP POST 或HTTP GET请求。

HTTP POST 请求规定至少两个HTTP头:Content-Type 和 Content-Length。

Content-Type

SOAP 的请求和响应的Content-Type头可定义消息的MIME类型,以及用于请求或响应的XML主体的字符编码(可选)

语法:

Content-Type:MIMEType;charset=character-encoding

例子:

POST /item HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8


Content-Length

SOAP的请求和响应的Content-Length头规定请求或响应主体的字节数。

语法:Content-Length: bytes

例子:

POST /item HTTP/1.1
Content-Type: application/soap+xml; charset=utf-8
Content-Length: 250

0 0
原创粉丝点击