A
SOAP message that contains a Fault element in the Body is
called a fault message. When a fault message
is generated, the Body of the SOAP message must contain only a single Fault
element and nothing else. The Fault element itself must contain a faultcode
element and a faultstring element, and optionally faultactor and detail
elements.
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
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.xyzcorp.com</faultactor>
<detail>
<mh:InvalidIsbnFaultDetail>
<offending-value>19318224-D</offending-value>
<conformance-rules>
The first nine characters must be digits. The last
character may be a digit or the letter 'X'. Case is
not important.
</conformance-rules>
</mh:InvalidIsbnFaultDetail>
</detail>
</soap:Fault>
</soap:Body>
</soap:Envelope>
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
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.xyzcorp.com</faultactor>
<detail>
<mh:InvalidIsbnFaultDetail>
<offending-value>19318224-D</offending-value>
<conformance-rules>
The first nine characters must be digits. The last
character may be a digit or the letter 'X'. Case is
not important.
</conformance-rules>
</mh:InvalidIsbnFaultDetail>
</detail>
</soap:Fault>
</soap:Body>
</soap:Envelope>
The faultcode element may use any of four standard
SOAP fault codes to identify an error.
SOAP Standard Fault Codes
1.
Client - node that sent the SOAP message
caused the error. receiver cannot process the SOAP message because there is
something wrong with the message or its data, it's considered the fault of the
client, the sender
When a node receives a fault message with a
Client code, it should
not attempt to resend the same message. It should take some action to correct
the problem or abort completely.
2.
Server - the node that received the SOAP
message malfunctioned or was otherwise unable to process the SOAP message.
In this case the sender can assume the SOAP
message to be correct, and can redeliver it after pausing some period of time
to give the receiver time to recover
3.
VersionMismatch - a SOAP 1.1 node will
generate a fault with a VersionMismatch
code if it receives a SOAP 1.2 message, because it finds an unexpected
namespace in the Envelope.
The VersionMismatch fault applies only to the
namespace assigned to the Envelope, Header, Body, and Fault elements. It does
not apply to other parts of the SOAP message, like the header blocks, XML
document version, or application-specific elements in the Body.
The VersionMismatch fault is also used in the unlikely event that the
root element of a message is not Envelope, but something else. Sending a
VersionMismatch fault message back to the sender in this case may not be
helpful, however: The
sender may be designed to handle a different protocol and doesn't understand
SOAP faults.
4.
MustUnderstand
Although you're allowed to use arbitrary fault codes, you
should use only the four standard codes listed.
The faultstring element is mandatory. It should
provide a human-readable description of the fault.
Although the faultstring
element is required, the text used to describe the fault is not standardized
Optionally, the faultstring element can indicate the
language of the text message using a special attribute, xml:lang.
The faultactor element indicates which node
encountered the error and generated the fault (the faulting node). This element
is required if the faulting node is an intermediary, but optional if it's the
ultimate receiver.
The detail element of a fault message must be
included if the fault was caused by the contents of the Body element, but it
must not be included if the error occurred while processing a header block.
The detail element may contain any number of
application-specific elements, which may be qualified or unqualified, according
to their XML schema. In addition, the detail element itself may contain any
number of qualified attributes, as long as they do not belong to the SOAP 1.1
namespace, "http://schemas.xmlsoap.org/soap/envelope".
Summary on Faults
This is probably a good time to recap. Faults result from
one of several conditions:
- The message received by the receiver is improperly structured or contains invalid data.
- The incoming message is properly structured, but it uses elements and namespaces in the Body element that the receiver doesn't recognize.
- The incoming message contains a mandatory header block that the receiver doesn't recognize.
- The incoming message specifies an XML namespace for the SOAP Envelope and its children (Body, Fault, Header) that is not the SOAP 1.1 namespace.
- The SOAP receiver has encountered an abnormal condition that prevents it from processing an otherwise valid SOAP message.
The first two conditions generate what are considered Client
faults, faults that relate to the contents of the message: The client has sent
an invalid or unfamiliar SOAP message to the receiver. The third condition
results in a MustUnderstand fault, and the fourth results in a VersionMismatch
fault. The fifth condition is considered a Server fault, which means the error
was unrelated to the contents of the SOAP message. A server fault is generated
when the receiver cannot process a SOAP message because of an abnormal
condition.
No comments:
Post a Comment