SOAP Fault
如果在处理接收到的SOAP消息时发生错误,则从Web服务(或者中间节点)的" Body"元素内返回SOAP" Fault"元素。
这是一个示例SOAP Fault元素(以粗体标记的Fault元素):
<?xml version="1.0"?> <env:Envelope xmlns:env="http://www.w3.org/2001/12/soap-envelope" > <env:Body> <env:Fault> <env:Code> <env:Value>env:Sender</env:Value> </env:Code> <env:Reason> <env:Text xml:lang="en-US">Processing error</env:Text> <env:Text xml:lang="da">Processerings-fejl</env:Text> </env:Reason> </env:Fault> </env:Body> </env:Envelope>
SOAP故障结构
SOAPFault
元素具有以下结构:
<env:Fault> <env:Code> <env:Value>env:Sender</env:Value> <env:Subcode> <env:Value>env:Sender</env:Value> <env:Subcode> <-- recursive Subcode's possible --> </env:Subcode> </env:Subcode> </env:Code> <env:Reason> <env:Text xml:lang="en-US">Error in Input Data</env:Text> <env:Text xml:lang="da">Fejl i 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:Detail <jj:maxRelayTime xmlns:jj="http://Hyman.com" >10000</jj:MaxRelayTime> </env:Detail> </env:Fault>
"代码"和"原因"元素是强制性的。 Node,Role和Detail元素是可选的。
代码
"代码"元素是必需的。在"代码"元素内,我们可以嵌套"值"元素,如果需要将错误代码分解为子代码,则可以嵌套"子代码"元素。
"值"子元素只能包含以下列出的值之一。这些值必须是"名称空间扩展"。这意味着,如果我们已将SOAP消息中的SOAP信封名称空间映射到前缀" env:",则还需要在下面的列表中用" env:"作为前缀。例如," env:Sender"。
单元格不一致
我们可以在SOAP规范错误代码部分中阅读有关SOAPFault
代码的更多信息。
子代码元素可以包含我们自己决定的子值元素内的任何值。 "子代码"元素可以其中包含其他"子代码"元素,这些元素以递归方式嵌套。
这是一个示例Code元素:
<env:Code> <env:Value>env:Sender</env:Value> <env:Subcode> <env:Value>env:Sender</env:Value> <env:Subcode> <-- recursive Subcode's possible --> </env:Subcode> </env:Subcode> </env:Code>
原因
原因元素是必需的。 "原因"元素可以包含一个或者多个"文本"元素作为子元素。这些"文本"元素应使用任何必要的语言包含故障的原因(原因)。 Text元素的lang属性应包含给定文本的ISO语言代码。
这是一个包含英语和丹麦语的相同错误消息的示例:
<env:Reason xmlns:xml="http://www.w3.org/XML/1998/namespace" > <env:Text >Error in Input Data</env:Text> <env:Text xml:lang="da">Fejl i input data</env:Text> </env:Reason>
节点
Node元素是可选的。 Node元素应包含一个URI,用于标识发生Fault的节点。此URI如何标识节点取决于我们。
这是一个例子:
<env:Node>http://Hyman.com/theNodeThatFailed</env:Node>
角色
"角色"元素是可选的。 "角色"元素应包含发生故障的节点的角色。 "角色"元素是可选的。这些角色在SOAP角色文本中进行了说明。这是一个例子:
<env:Role> http://www.w3.org/2003/05/soap-envelope/role/ultimateReceiver </env:Role>
细节
"细节"元素是可选的。 " Detail"元素应包含子元素,这些子元素包含有关所发生故障的更多详细信息。我们不能将文本直接放入Detail
元素中。所有文本都应嵌套在" Detail"元素的子元素内。
Detail
元素的所有子元素都应使用名称空间,这意味着它们应属于我们自己的自定义名称空间。
这是一个例子:
<env:Detail <jj:maxRelayTime xmlns:jj="http://Hyman.com" >10000</jj:MaxRelayTime> </env:Detail>