Eine SOAP-Nachricht kann eine ,,SOAP Fault`` Element enthalten. In ihm kann eine Fehlermeldung an den aufrufenden Client übertragen werden. Es ist auch möglich, das SOAP Fault-Element zur Übermittlung von Statusinformationen zu verwenden. Falls eine Nachricht eine SOAP Fault-Element enthält so steht es im Body der Nachricht. Eine Nachricht darf höchstens ein SOAP Fault-Element enthalten.
Hier die Fehlernachricht beim Versuch, auf ein noch nicht gestartetes Service zuzugreifen:
<?xml version='1.0' encoding='UTF-8'?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> <SOAP-ENV:Body> <SOAP-ENV:Fault> <faultcode>SOAP-ENV:Server</faultcode> <faultstring>service 'urn:demoobj' unknown</faultstring> <faultactor>/soap/servlet/rpcrouter</faultactor> </SOAP-ENV:Fault> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
Im ,,faultcode`` wird angezeigt um was für eine Fehlerart es sich handelt. Die Fehlerklasse ,,SOAP-ENV:Server`` steht für Fehler beim Verarbeiten der SOAP-Nachricht. Jedes SOAP Fault-Element muß ein faultcode-Elemet enthalten.
Der ,,faultstring`` enthält eine Klartextfehlermeldung. Diese Meldung ist als Infomation für den Anwender gedacht, nicht zur maschinellen Auswertung. Das faultstring-Elemet ist ebenfalls zwingend erforderlich. Sinnvollerweise sollte hier eine Information über den aufgetretenen Fehler stehen.
Das Element ,,faultactor`` gibt an, wo auf dem Verarbeitungsweg der SOAP-Nachricht der Fehler aufgetrete ist.
Zusätzlich kann im SOAP Fault-Element noch ein Element Namens ,,detail`` auftauchen. Dies wird genau dann verwendet, wenn es bei der Verarbeitung von Body-Elementen zu Fehlern kommt. Beispiel zum ,,detail``-Element aus der Spezifikation:
HTTP/1.1 500 Internal Server Error Content-Type: text/xml; charset="utf-8" Content-Length: nnnn <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Body> <SOAP-ENV:Fault> <faultcode>SOAP-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> </SOAP-ENV:Fault> </SOAP-ENV:Body> </SOAP-ENV:Envelope>