【发布时间】:2013-10-26 22:13:14
【问题描述】:
我正在尝试从 PHP SoapServer 返回一个 SoapFault,但一直坚持创建正确的响应格式。
处理异常时,我正在返回:
$detail = "message";
return new SoapFault("Client", "ValidationException", null, $detail, "ValidationException");
响应如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<faultcode>SOAP-ENV:Client</faultcode>
<faultstring>ValidationException</faultstring>
<detail>
<ValidationException>
<message>message</message>
</ValidationException>
</detail>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
但是,我希望响应看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<faultcode>SOAP-ENV:Client</faultcode>
<faultstring>ValidationException</faultstring>
<detail>
<ns2:ValidationException xmlns:ns2="http://service.applicationsnet.com/soap/">
<message>message</message>
</ns2:ValidationException>
</detail>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
我尝试了几件事,但都没有成功。你能帮帮我吗?
关于命名空间的另一件事,是否可以更改“SOAP-ENV”信封命名空间?谢谢。
【问题讨论】:
-
你的意思是前缀“SOAP-ENV”?喜欢将其命名为“ENV-SOAP”或“ENVELOPE”之类的吗?
-
不知道这是否可能(PHP 也没有 SOAP),请参阅php.net/soapfault.soapfault 获取有关此的 PHP 手册页。
-
是的,我知道该页面。我可以通过扩展 SoapServer 类并在发送每个响应之前更改子字符串来更改前缀“SOAP-ENV”。但是,我问的主要问题是关于SoapFault 详细信息中的“ns2”命名空间。不过谢谢你的想法。
标签: php soap namespaces soapserver soapfault