Webservice-4
SOAP错误
【概念】
SOAP错误消息是SOAP应用程序用于向消息路径中的“上游”节点报告错误的机制。
SOAP错误是由接收方(指消息的中介体或最终接收方)产生的。只有使用了请求/响应消息传递模式时,才要求接收方将SOAP错误传递回发送方。
?? 在单向消息传递模式中,接收方应该产生一个错误,并可能将其存储到某处,但不必试图将错误传递到发送方。
?? 要将SOAP错误返回到接收方的直接发送方。比如:如果消息路径中的第三个节点产生了一个错误,那么会将该错误消息传递回消息路径中的第二个节点,并且不会传递到其他对方。也可以这样说,除非初始发送方也是直接发送方,否则不将错误消息传递到初始发送方。
SOAP注释已经承认了SOAP错误处理的重要性,因此,BP提供了用于产生和处理SOAP错误消息的很多方案,下面我们来看具体实例吧。
【Fault元素】
Body元素中包含Fault元素的SOAP消息称为错误消息。错误消息与异常类似,即当错误发生时,就会产生错误消息。在请求/响应消息传递中要使用错误消息。当处理一个请求消息时,消息路径中的节点会产生错误消息。当错误发生时,接收节点会将错误消息传递回上游发送方,而不是期待的应答消息。不正确的消息格式,版本的不匹配,处理文件头时的错误以及与应用程序对应用的错误均会引起错误。
当产生错误消息时,SOAP消息的Body元素必须只能包含一个Fault元素,Fault元素本身又必须包含一个faultcode元素和一个faultstring元素,同时可以包含faultactor和detail元素(后2个可选),下面我们看看3-1例的SOAP错误消息的:
3-1
<?xml version=”1.0” encoding=”UTF-8”>
<soap:Envelope
Xmlns:soap=http://schemas.xmlsoap.org/soap/enevlope
Xmlns:mh=”http://www.Monson-Haefel.com/jwsbook/BookQuote”>
?? <soap:Body>
????? <soap:Fault>
??????????? <faultcode>soap:Client</faultcode>
?????????????????????????? <faultstring>
??????????????? The ISBN value contains invalid characters
</faultstring>
<faultactor>http://www.xxxxxxxxxxxxx.com</faultactor>
<detail>
???????? <mh:InvalidIsbnFaultDetail>
???????? <offending-value>198333330</offending-value>
???????? <conformance-rules>
???????????????? ………………………….
???????????????? ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
</conformance-rules>
</mh:InvalidIsbnFaultDetail >
</detail>
.
????? </soap:Fault>
?? </soap:Body>
</soap:Envelope>
【说明】
Fault元素和它的子元素是SOAP命名空间的部分,就像SOAP的Envelope元素和Body元素的关系一样。
Fault元素可以是非限定元素,也就是说它们可以不使用SOAP前缀来限定Fault元素的子元素。
Fault元素除了可以包含faultcode,faultstring,faultactor,detail元素歪,禁止它包含其他任何直接元素。