2013-10-26 47 views
2

我試圖從PHP SoapServer返回一個SoapFault,但我堅持創建正確的響應格式。PHP 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

你的意思是前綴 「SOAP-ENV」?就像將其命名爲「ENV-SOAP」或「ENVELOPE」或其他什麼? – hakre

+0

不知道是否可能(不論是PHP還是* SOAP),請參閱http://php.net/soapfault.soapfault關於此手冊的PHP頁面。 – hakre

+0

是的,我知道關於頁面..我可以通過在發送每個響應之前擴展SoapServer類和更改子字符串來更改前綴「SOAP-ENV」。但是,我詢問的主要問題是關於SoapFault詳細信息中的「ns2」命名空間。謝謝你的想法。 –

回答

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

你能否讓你的答案更清楚一點,比如把它分成幾句話,或者顯示一些代碼? – matsjoyce