SOAP Header
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",这意味着所有中间节点都应处理此标头元素。