SOAP Header

时间:2020-01-09 10:44:21  来源:igfitidea点击:

SOAP的Header元素是Envelope元素的可选子元素。在Header元素内,我们可以放置不属于SOAP消息主体的信息。无论信息可能是什么,都取决于我们。例如,它可能是有关SOAP请求可能要处理的最长时间的信息,或者是与消息本身不直接相关的类似信息。

这是一个示例SOAP Header元素(Header元素以粗体显示):

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

  <env:Header>
    <jj:maxTime value="10000" xmlns:jj="http://Hyman.com"/>
  </env:Header>

  <env:Body>
  </env:Body>

</env:Envelope>

上面的示例显示了带有单个" SOAP标头块"的Header元素(Header元素的子元素)。

注意Header元素如何使用与Envelope元素相同的XML名称空间。这是SOAP规范所必需的。

标头子元素属性

Header子元素具有我们可以其中使用的标准属性的列表:

  • 必须了解
  • encodingStyle
  • 角色
  • 中继

以下各节将介绍这些属性中的每一个。

必须了解

" mustUnderstand"属性意味着处理SOAP消息的任何节点(计算机)都必须理解给定的标头块。 "节点"可能始终不是SOAP消息的最终接收者。该消息可能在到达接收/处理节点(最终的Web服务)之前通过中间节点进行路由。

如果中间节点不理解包含" mustUnderstand"属性的标头块(元素),则它必须返回SOAP错误。

这是一个例子:

<env:Header>
  <jj:maxTime value="10000" xmlns:jj="http://Hyman.com"
               mustUnderstand="true"
    />
</env:Header>

encodingStyle

这里的encodingStyle属性被跳过。

角色

据说处理/转发SOAP消息的节点扮演一个或者多个SOAP角色。标头块(元素)可以针对充当特定角色的节点。换句话说,如果将标头块定位为充当" ultimateReceiver"角色的节点,则仅充当最终接收者的节点必须处理该标头块。所有其他节点都应保留未处理的内容。

SOAP角色文本中更详细地解释了SOAP角色。

这是使用role属性的示例:

<env:Header>
  <jj:maxTime value="10000" xmlns:jj="http://Hyman.com"
    role="http://www.w3.org/2003/05/soap-envelope/role/ultimateReceiver"
    />
</env:Header>

在此示例中,标头元素<maxTime ...>仅旨在由SOAP消息的最终接收者处理。中间节点应忽略此标头元素。

relay

" relay"属性确定是否允许对头块进行中继(如果不处理的话)。换句话说,如果中间节点转发SOAP消息而未处理其中找到" relay"属性的标头元素,那么该标头元素应在消息中转发(中继)还是取出?

relay属性只有两个有效值:

  • true
  • false

如果属性设置为" true",那么即使不处理此标头元素也可以转发。

如果属性设置为" false",则如果转发消息,则应删除此标头元素。

省略" relay"属性等同于将其设置为" false"。

以下是使用relay属性的示例标头:

<env:Header>
  <jj:maxRelayTime value="10000" xmlns:jj="http://Hyman.com"
       role="http://www.w3.org/2003/05/soap-envelope/role/next"
       relay="true"
    />
</env:Header>

在此示例中,即使已处理,标头元素" <maxRelayTime ...>"也必须在节点之间进行中继。换句话说,不应删除标头元素。如我们所见,role属性设置为" next",这意味着所有中间节点都应处理此标头元素。