SOAP角色

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

据说处理/转发SOAP消息的节点扮演一个或者多个SOAP角色。

第一个节点是发送方。但是,SOAP规范中未提及此角色。

第二个节点是转发SOAP消息的中间节点。中间节点也可以更改SOAP消息。例如,它们可以添加,修改或者删除标题元素,甚至可以更改正文。中间节点设置为担当下一个角色。

图中的最后一个节点是SOAP消息的" ultimateReceiver"。最终接收者是实际处理SOAP消息的节点。换句话说,它是" Web服务"。聪明的人可能会声称," Web服务"实际上是由SOAP消息处理节点的整个链组成的,而不仅仅是最终的接收者。

预定义的SOAP角色

SOAP规范预定义了三个角色:

SOAP角色</ b>
角色名称</ b>角色URI </ b>
下一页http://www.w3.org/2003/05/soap-envelope/role/next
http://www.w3.org/2003/05/soap-envelope/role/none
ultimateReceiverhttp://www.w3.org/2003/05/soap-envelope/role/ultimateReceiver

"下一个"角色由中间节点和最终接收节点承担。

" none"角色很特殊。任何节点都不应扮演"无"角色。针对该角色的标头块通常应该保留未处理的状态,或者在处理其他标头块时使用。

" ultimateReceiver"角色是为SOAP消息的最终接收者保留的。没有此角色属性值的标题块不应处理该标题块。

自定义SOAP角色

SOAP角色不限于上一部分中列出的三个预定义角色。 SOAP角色可以是我们定义的任何角色。如果定义自己的角色,则还必须自己定义这些角色的语义。换句话说,我们将必须决定自己扮演的这些角色意味着什么。

标头元素中的SOAP角色

SOAP角色可以在SOAPHeader元素中使用。

这是一个使用role属性的Header示例:

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

当SOAP Header子元素包含"角色"属性时,只有担当该角色的节点才能处理该元素。所有其他节点都应该保留它。

故障元素中的SOAP角色

SOAP角色也可以在SOAPFault元素中使用。当在"故障"元素中使用时,角色会告知故障节点在故障发生时扮演的角色。

这是一个使用Role元素的Fault元素示例:

<env:Fault>

  <env:Code>
    <env:Value>env:Sender</env:Value>
  </env:Code>

  <env:Reason>
   <env:Text xml:lang="en-US">Error in Input Data</env:Text>
  </env:Reason>

  <env:Node>http://Hyman.com/theNodeThatFailed</env:Node>

  <env:Role>
    http://www.w3.org/2003/05/soap-envelope/role/ultimateReceiver
  </env:Role>

</env:Fault>