A classe SoapFault

(PHP 5, PHP 7, PHP 8)

Introdução

Representa uma falha SOAP.

Resumo da classe

class SoapFault extends Exception {
/* Propriedades */
public ?string $faultcode = null;
public ?string $faultcodens = null;
public ?string $faultactor = null;
public mixed $detail = null;
public ?string $_name = null;
public mixed $headerfault = null;
/* Propriedades herdadas */
protected string $message = "";
private string $string = "";
protected int $code;
protected string $file = "";
protected int $line;
private array $trace = [];
private ?Throwable $previous = null;
/* Métodos */
public __construct(
    array|string|null $code,
    string $string,
    ?string $actor = null,
    mixed $details = null,
    ?string $name = null,
    mixed $headerFault = null
)
public __toString(): string
/* Métodos herdados */
final public Exception::getCode(): int
final public Exception::getFile(): string
final public Exception::getLine(): int
final public Exception::getTrace(): array
}

Propriedades

_name

detail

faultactor

faultcode

faultcodens

faultstring

headerfault

Índice

adicione uma nota

Notas Enviadas por Usuários (em inglês) 3 notes

up
40
dmitry dot koterov at gmail dot com
15 years ago
You may use undocumented and invisible property $e->faultcode to access string version of $code. Because standard $e->getCode() does not work:

<?php
$e = new SoapFault("test", "msg");
var_dump($e->getCode()); // prints "0"
var_dump($e->faultcode); // prints "test"
?>

Also you may use namespaced fault codes:

<?php
$e = new SoapFault(array("namespace", "test"), "msg");
?>

- see ext/soap/soap.php, PHP_METHOD(SoapFault, SoapFault). To access the namespace, use $e->faultcodens
up
10
chris AT cmbuckley DOT co DOT uk
15 years ago
A bit more digging in ext/soap/soap.c and the set_soap_fault function reveals the other undocumented properties from the constructor:<?phptry {    throw new SoapFault('code', 'string', 'actor', 'detail', 'name', 'header');} catch (Exception $ex) {    var_dump($ex->faultcode, $ex->faultstring, $ex->faultactor, $ex->detail, $ex->_name, $ex->headerfault);}?>
up
4
fbernoldi at gmail dot com
12 years ago
Hi all, I've decided to post this since it may be helpful, I've spend a couple of days trying to do this.In order to use wsdl's specified faults with complex types, i.e:WSDL definitions:(xsd:schema namespace, ns1 = target namespace)<xsd:element name="doubleFault">  <xsd:complexType>    <xsd:sequence>      <xsd:element name="detail1" type="xsd:string"/>      <xsd:element name="detail2" type="xsd:string"/>    </xsd:sequence>  </xsd:complexType></xsd:element>WSDL messages:<message name="fault_specified">    <part name="relevant_name" element="ns1:doubleFault"/></message>WSDL port type:<portType name="test">  <operation name="operationTest">  <input message="ns1:not_relevant_request"/>  <output message="ns1:not_relevant_response"/>  <fault name="FaultSpecified" message="ns1:fault_specified"/>  ....</portType>You have to specify the response in the detail parameter as an array corresponding the tag names.PHP Code:<?phpfunction operationTest($request_param ...) {    // ...    $array_details = array("detail1" => "Explanation 1", "detail2" => "Explanation 2");        return new SoapFault("Server", "example fault string", null, $array_details, "FaultSpecified");}$server = new SOAPServer("handmade.wsdl");$server->addFunction("operationTest");$server->handle(); ?>that should respond something like this:<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://mynamespace">   <SOAP-ENV:Body>      <SOAP-ENV:Fault>         <faultcode>SOAP-ENV:Server</faultcode>         <faultstring>example fault string</faultstring>         <detail>            <ns1:doubleFault>               <detail1>Explanation 1</detail1>               <detail2>Explanation 2</detail2>            </ns1:doubleFault>         </detail>      </SOAP-ENV:Fault>   </SOAP-ENV:Body></SOAP-ENV:Envelope>I Hope it helps,Federico.
To Top