SOAP Fault
Jakob Jenkov |
The SOAP Fault element is returned inside the Body element
from a web service (or intermediary node) in case an error occurs while processing
the received SOAP message.
Here is a sample SOAP Fault element (Fault element marked in bold):
<?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 Fault Structure
A SOAP Fault element has the following structure:
<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://jenkov.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://jenkov.com" >10000</jj:MaxRelayTime>
</env:Detail>
</env:Fault>
The Code and Reason elements are mandatory. The Node,
Role and Detail elements are optional.
Code
The Code element is mandatory. Inside the Code element you
can nest a Value element, and optionally a Subcode element
if you need to break down the error code into subcodes.
The Value child element can only contain one of value listed below. The values
have to be "name space expanded". This means that if you have mapped the SOAP Envelope name space
in the SOAP message to the prefix "env:", you need to prefix the values in the list below with
"env:" too. For instance, "env:Sender".
| Value | Description |
| VersionMismatch | The node that reported this error found a root element in the SOAP message
that was not a valid Envelope element |
| MustUnderstand | The node returning this fault did not understand a certain header child element - a header child element containing the "mustUnderstand" attribute, and targeted at the node returning the error. In other words, the node returning the fault did not understand the header element it was supposed to understand. |
| DataEncodingUnknown | The node returning the fault did not understand the header element encoding (encodingStyle attribute) it was supposed to understand (the header was targeted at the node). |
| Sender | The message was incorrectly formed or does not contain valid data, or lacks data etc. In other words, the sender sent a bad SOAP message. |
| Receiver | The receicer of the SOAP message failed to process the message. The blame is the receivers, and the receivers alone. For instance, if the web service needs a database and the database is down. |
You can read more about the SOAP Fault codes in the
SOAP spec - fault codes section.
The Subcode elements can contain whatever values inside their child Value element
you decide yourself. Subcode elements can contain other Subcode elements inside
them, nested recursively.
Here is an example Code element:
<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>
Reason
The Reason element is mandatory.
The Reason element can contain one or more Text elements as children.
These Text elements should contain the cause (reason) of the fault, in whatever
languages necessary. The lang attribute of Text element should
contain the ISO language code for the given text.
Here is an example that contains the same error message in both english and danish:
<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
The Node element is optional.
The Node element should contain a URI identifying the node in which the Fault
occurred. How this URI identifies the node is up to you.
Here is an example:
<env:Node>http://jenkov.com/theNodeThatFailed</env:Node>
Role
The Role element is optional.
The Role element should contain the role of
the node in which the fault occurred. The Role element is optional.
These roles are explained in the SOAP roles text. Here is an example:
<env:Role>
http://www.w3.org/2003/05/soap-envelope/role/ultimateReceiver
</env:Role>
Detail
The Detail element is optional.
The Detail element should contain child elements which contain more detail about
the fault that occurred. You cannot put text directly into the Detail element.
All text should be nested inside child elements of the Detail element.
All child elements of the Detail element should be name space qualified,
meaning they should belong to your own, custom name space.
Here is an example:
<env:Detail
<jj:maxRelayTime
xmlns:jj="http://jenkov.com" >10000</jj:MaxRelayTime>
</env:Detail>
| Tweet | |
Jakob Jenkov | |











