Q

What is the difference between a fault and an exception in SOAP?

What is the difference between a fault and exception in SOAP?

There is no such thing as an exception in SOAP. There are only faults. A fault is a response message to a request message that could not be processed. The <FAULT> response message is the only SOAP body structure that has been defined. In SOAP 1.1, a <FAULT> message should look something like this:

  <env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
   <env:Body>
       <env:Fault>
           <faultcode>env:Server</faultcode>
           <faultstring>Server Error</faultstring>
           <detail>
               <e:myfaultdetails xmlns:e="Some-URI">
                 <message>
                   My application didn't work
                 </message>
                 <errorcode>
                   1001
                 </errorcode>
               </e:myfaultdetails>
           </detail>
       </env:Fault>
   </env:Body>
  </env:Envelope>

There are four possible <faultcode> values: VersionMismatch, MustUnderstand, Client, and Server, indicating, respectively: the SOAP service didn't understand your SOAP envelope; the SOAP service didn't understand a SOAP Header that specified mustUnderstand=1; the client sent an invalid message (or invalid data within the message); and the server was unable to process the message due to some error it encountered. You may extend these basic codes with subcodes, e.g., Client.InvalidArgument. The <detail> element can contain whatever detailed information you want to send back, such as a Java exception. Depending on the SOAP implementation you use, the client SOAP runtime system may be able to rethrow the Java exception.

The SOAP 1.2 <FAULT> element is a bit different. Here's an example of a VersionMismatch fault:

 <env:Envelope xmlns:env="http://www.w3.org/2002/06/soap-envelope">
  <env:Header>
   <upg:Upgrade xmlns:upg="http://www.w3.org/2002/06/soap-upgrade">
    <envelope qname="ns1:Envelope"
             xmlns:ns1="http://www.w3.org/2002/06/soap-envelope"/>
    <envelope qname="ns2:Envelope"
             xmlns:ns2="http://schemas.xmlsoap.org/soap/envelope/"/>
   </upg:Upgrade>
  </env:Header>
  <env:Body>
   <env:Fault>
    <env:Code><env:Value>env:VersionMismatch</env:Value></env:Code>
     <env:Reason>Version Mismatch</env:Reason>
    </env:Fault>
  </env:Body>
 </env:Envelope>

Notice that the element names within the <Fault> message are different. See the SOAP 1.2 spec for more details.


This was first published in September 2002

Dig deeper on Simple Object Access Protocol (SOAP)

Pro+

Features

Enjoy the benefits of Pro+ membership, learn more and join.

Have a question for an expert?

Please add a title for your question

Get answers from a TechTarget expert on whatever's puzzling you.

You will be able to add details on the next page.

0 comments

Oldest 

Forgot Password?

No problem! Submit your e-mail address below. We'll send you an email containing your password.

Your password has been sent to:

-ADS BY GOOGLE

SearchSoftwareQuality

SearchCloudApplications

SearchAWS

TheServerSide

SearchWinDevelopment

Close