To get custom Soap Error Codes use in the catch $e->faultcode instead of $e->getCode.
<?php
try {
// ...
} catch (SoapFault $e) {
echo $e->faultcode;
}
?>
SoapFault::SoapFault
(PHP 5 >= 5.0.1)
SoapFault::SoapFault — Constructor de SoapFault
Descripción
$faultcode
, string $faultstring
[, string $faultactor
[, string $detail
[, string $faultname
[, string $headerfault
]]]] )
Esta clase es usada para respuestas SOAP con errores desde el controlador de PHP.
faultcode, faultstring,
faultactor y detail son
elementos estándar de SOAP Fault.
Parámetros
-
faultcode -
El código de error de SoapFault.
-
faultstring -
El mensaje de error de SoapFault.
-
faultactor -
Una cadena identificando el actor que causó el error.
-
detail -
Más información sobre lo que causó el error.
-
faultname -
Puede ser usado para selecionar la codificación fault apropiada desde WSDL.
-
headerfault -
Puede ser usado durante el controlador del encabezado SOAP para informar del e rror en la respuesta del encabezado.
Ejemplos
Ejemplo #1 Algunos ejemplos
<?php
function test($x)
{
return new SoapFault("Server", "Algun mensaje de error");
}
$server = new SoapServer(null, array('uri' => "http://test-uri/"));
$server->addFunction("test");
$server->handle();
?>
Es posible usar el sistema de excepciones de PHP para lanzar un SOAP Fault.
Ejemplo #2 Algunos ejemplos
<?php
function test($x)
{
throw new SoapFault("Servidor", "Algún mensaje de error");
}
$server = new SoapServer(null, array('uri' => "http://test-uri/"));
$server->addFunction("test");
$server->handle();
?>
Ver también
- SoapServer::fault() - SoapServer indica que ocurrió un fallo
- is_soap_fault() - Comprueba si una llamada SOAP ha fallado
There are only a few legitimate "codes" that a SOAP fault can have and be understood by most clients in accordance with the protocol. You can't just pass in, for example, a database error code or you'll get a fatal error like "SoapFault::__construct(): Invalid parameters. Invalid fault code."
The ones you generally want to use are "Sender" where you've gotten bad parameters, or "Receiver" where the server has gotten an error for some reason.
See here:
http://www.w3.org/TR/soap12-part1/#faultcodes
In case you need to return SOAP Fault for SOAP Client based on Adobe Flash/Flex/AIR and stuck with Flash's inability to process SOAP messages with HTTP code 500 (that's what SOAP Fault returns; read more on this error here: http://bugs.php.net/bug.php?id=43507) then try this dirty hack:
<?php
$server = new SoapServer ( "SomeWSDL.wsdl" );
$server->setClass ( "SOAP_Class" );
/**
* Catching SOAP Server response and overriding HTTP Status code.
*/
ob_start();
$server->handle ();
$soapResponse = ob_get_contents();
ob_end_clean();
header('HTTP/1.0 200 OK');
echo $soapResponse;
?>
Keep in mind that from PHP 5.2.6 SOAP Fault has an HTTP Status Code = 200 if User-agent is "Shockwave Flash", but when Flash object is integrated into HTML page SOAP Server receives User-agent = Broswer-agent and NOT "Shockwave Flash".
Also it'll be a good idea to return HTTP 200 Code only if 500 Error is caused by known service faults.
