Errors in SOAP should be returned as SOAP Faults. A SOAP Fault
contains specific information detailing the reason for the Fault. PEAR::SOAP provides
a SOAP_Fault class to aid in returning faults.
Faults can be of four basic types: VersionMismatch, MustUnderstand,
Client and Server:
- • VersionMismatch: invalid namespace for the SOAP Envelope
- • MustUnderstand: a required header was not understood by the server
- • Client: the message sent by the client was not properly formed, or did
not contain the necessary information to fulfill the request.
- • Server: the message could not be processed
Faults can also contain other information, such as a
basic message describing the fault, the URI of the originator of the fault, and a
detail field that can be used to provide additional information on the fault.
SOAP Fault in a SOAP Message
<SOAP-ENV:Fault>
<faultcode xsi:type="xsd:QName">
SOAP-ENV:Client
</faultcode>
<faultstring xsi:type="xsd:string">
You sent an empty string
</faultstring>
<faultactor xsi:type="xsd:anyURI">
urn:SOAP_Example_Server
</faultactor>
<detail xsi:type="xsd:string"/>
</SOAP-ENV:Fault>
Server that returns a SOAP Fault
<?php
require_once 'SOAP/Server.php';
$server = new SOAP_Server;
class SOAP_Example_Server {
var $method_namespace = 'urn:SOAP_Example_Server';
function echoString($inputString)
{
if (!$inputString) {
$faultcode = 'Client';
$faultstring = 'You sent an empty string';
$faultactor = $this->method_namespace;
$detail = NULL;
return new SOAP_Fault($faultstring,
$faultcode,
$faultactor,
$detail);
}
return $inputString;
}
}
$soapclass = new SOAP_Example_Server();
$server->addObjectMap($soapclass);
$server->service($HTTP_RAW_POST_DATA);
?>
Client for Example Server
<?php
require_once 'SOAP/Client.php';
$soapclient = new SOAP_Client(
'http://localhost/SOAP/example/exampleserver.php');
$result = $soapclient->call('echoStringSimple',
array('inputString' => NULL),
array('namespace' =>
'urn:SOAP_Example_Server');
if (PEAR::isError($result)) {
// handle the error condition
echo $result->getMessage();
}
?>