SOAP Fault

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

如果在处理接收到的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>