【问题标题】:PHP SoapFault detail namespacePHP SoapFault 详细命名空间
【发布时间】: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


【解决方案1】:

我不知道它是否仍然相关,但要定义一个像你想要的那样的 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>

【讨论】:

  • 能否让你的答案更清楚一些,比如拆分成几个句子,或者显示一些代码?
猜你喜欢
  • 2014-12-20
  • 1970-01-01
  • 2019-09-30
  • 1970-01-01
  • 2018-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多