PHP SoapFault详细命名空间

时间:2013-10-26 22:13:14

标签: php soap namespaces soapserver soapfault

我正在尝试从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”包络名称空间?感谢。

1 个答案:

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