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 |
ultimateReceiver | http://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>