2013-10-26 3 views
2

Я пытаюсь вернуть SoapFault из PHP SoapServer, но застрял в создании правильного формата ответа.PHP SoapFault detail namespace

При обработке исключений, я возвращаю:

$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

Да, я знаю о странице .. Я могу изменить префикс «SOAP-ENV», расширив класс SoapServer и изменив подстроку перед отправкой каждого ответа. Однако основной вопрос, который я задал, касался пространства имен «ns2» в деталях SoapFault , Спасибо за эту мысль. –

ответ

0

Я не знаю, если это все еще актуально, но для определения soapfault, такого как тот, который вы хотите, чтобы правильный тип soapfault определялся в wsdl.

Возьмите и 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

Смежные вопросы