2017-01-13 5 views
1

私はWSDLを生成しています。クライアントの名前と一致するように応答の関数名を変更する必要があります(これは制御できません)。私は<ns1:fooFunctionAcknowledgement>を読み取るためのライン<ns1:fooFunctionResponse>が必要Zend Soap Serverのレスポンス関数名を変更する方法は?

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

は、ここで私が取得していますWSDL応答です。

$element = [ 
    'name'  => $functionName . 'Response', 
    'sequence' => $sequence 
]; 
:私はそれは、関数の命名を制御のように見えるのZendのフレームワーク( Autodiscover.phpライン514)にこのコード行を見つけた

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(); 
} 

:ここ

は、私のSOAPサーバーであります

しかし、これを変更すると、親メソッドは決して呼び出されません。私はこの問題をどのように解決するのか分かりませんでした。

しかし、私は私のAPIをテストするためにSOAPUIを使用していて、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

関連する問題