2017-01-13 15 views
1

Я создаю WSDL, и мне нужно изменить имя функции в ответе, чтобы совместить имя с клиентом (с которым я не контролирую).Как изменить имя функции ответа в Zend Soap Server?

Вот ответ WSDL я получаю:

<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://localhost:8000/soap/index.php?wsdl" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"> 
    <SOAP-ENV:Body> 
     <ns1:fooFunctionResponse> 
     <return xsi:type="xsd:boolean">true</return> 
     </ns1:fooFunctionResponse> 
    </SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

мне нужна линия <ns1:fooFunctionResponse> читать <ns1:fooFunctionAcknowledgement>.

Вот мое мыло сервер:

if (isset($_GET['wsdl'])) { 
    ini_set('soap.wsdl_cache_enabled', 0); 
    $soapAutoDiscover = new \Zend\Soap\AutoDiscover(new \Zend\Soap\Wsdl\ComplexTypeStrategy\ArrayOfTypeSequence()); 
    $soapAutoDiscover->setBindingStyle(array('style' => 'document')); 
    $soapAutoDiscover->setOperationBodyStyle(array('use' => 'literal')); 
    $soapAutoDiscover->setClass('SoapFunction'); 
    $soapAutoDiscover->setUri(http://localhost:8000/soap/index.php); 
    $soapAutoDiscover->handle(); 
} else { 
    $soap = new \Zend\Soap\Server(null, array("soap_version" => SOAP_1_2, 'uri' => 'http://localhost:8000/soap/index.php?wsdl', 'classmap' => array('Identification', 'RemoteIdentification'))); 
    $soap->setClass('SoapFunction'); 
    $soap->handle(); 
} 

Я нашел эту строку кода в рамках Zend (Autodiscover.php линии 514), который выглядит, как он контролирует именование функции:

$element = [ 
    'name'  => $functionName . 'Response', 
    'sequence' => $sequence 
]; 

Но изменение этого ничего не делает, родительский метод никогда не вызывается. Я не знаю, как решить эту проблему, пожалуйста, помогите.

Я обнаружил, что эта строка меняет имя функции, однако я использую SoapUI, чтобы проверить мой API, и из SoapUI I всегда см Response вместо то, что я изменить строку. В Chrome я вижу Acknowledgement.

Почему SoapUI показывает другое имя функции?

ответ

0

Я не знаю много о Zend Framework и/или его структуре. Но я думаю, вы можете просто расширить класс, содержащий метод response(), и перезаписать метод.

// Example Zend Class 
class Zend_Class { 

    public function response() 
    { 
     // ... 
    } 
} 

// Your own Class 
class Own_Class extends Zend_Class 
{ 
    public function ResponseBoohoo() 
    { 
     return parent::response(); 
    } 
} 

Если я полностью и совершенно неправильно понял вас, прошу прощения. :)

+0

Я бы сделал это, если бы был уверен, что был вызван метод, содержащий вызов 'response()'. Насколько я знаю, этот метод не называется. – f7n

+0

Я только что проверил и увидел, что метод вызван, но SoapUI делает некоторые странные вещи, см. Мое редактирование. – f7n

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

  • Нет связанных вопросов^_^