SoapFault 类

(PHP 5, PHP 7, PHP 8)

介绍

表示 SOAP 错误。

类概要

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

属性

_name

detail

faultactor

faultcode

faultcodens

faultstring

headerfault

目录

添加注释

用户贡献的注释 3 个注释

43
dmitry dot koterov at gmail dot com
14 年前
您可以使用未公开的不可见属性 $e->faultcode 来访问 $code 的字符串版本。因为标准的 $e->getCode() 不起作用

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

您也可以使用命名空间的错误代码

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

- 请参阅 ext/soap/soap.php,PHP_METHOD(SoapFault, SoapFault)。要访问命名空间,请使用 $e->faultcodens
11
chris AT cmbuckley DOT co DOT uk
14 年前
在 ext/soap/soap.c 和 set_soap_fault 函数中进行更多挖掘后,发现构造函数中的其他未公开的属性

<?php
try {
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);
}
?>
4
fbernoldi at gmail dot com
11 年前
大家好:

我决定发布这个内容,因为它可能对大家有所帮助。我花了好几天才搞明白这个。

为了使用 wsdl 中指定的带有复杂类型的错误,例如:

WSDL 定义

(xsd:schema 命名空间,ns1 = 目标命名空间)

<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 消息

<message name="fault_specified">
<part name="relevant_name" element="ns1:doubleFault"/>
</message>

WSDL 端口类型

<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>

您需要在 detail 参数中指定响应,作为对应标签名称的数组。

PHP 代码

<?php

function 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();

?>

这应该会返回类似这样的内容:

<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>

希望对您有所帮助,
Federico。
To Top