我正在尝试从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”包络名称空间?感谢。
答案 0 :(得分:0)
我不知道它是否仍然相关,但是要定义一个像你想要的那样的soapfault,必须在wsdl中定义正确的soapfault类型。
拿你的wsdl并在里面用soapFault编写一个像这样的操作
<wsdl:operation name="TransferFundsRequest">
<wsdl:input name="request" message="tns:TransferFundsRequest" />
<wsdl:output name="response" message="tns:TransferFundsResponse" />
<wsdl:fault name="fault" message="tns:ExceptionType" />
</wsdl:operation>`
故障类型为
<xsd:complexType name="ExceptionType">
<xsd:sequence>
<xsd:element name="Code" type="xsd:integer" />
<xsd:element name="Message" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>