2011-11-10 98 views

回答

2

我通過擴展SoapClient和覆蓋方法如_soapcall()_doRequest()來調試SoapClient。在我的項目中,我有一個將XML /參數寫入文件的記錄器。

我的例子包括_ 的SOAPCall() _doRequest()。我用兩種方法打印出不同的東西。可能適合您的調試需求。我喜歡閱讀__soapCall()的$ args輸出,並喜歡將XML複製到SoapUI進行驗證(Alt + V)。如果您正在調試身份驗證或其他錯誤情況,HTTP標頭也可能會很有趣。

class MySoapClient extends SoapClient { 
    public function __soapCall ($function_name, array $args, array $options = null, $input_headers = null, array &$output_headers = null) { 
     // Dump $args to file, browser printout, console, etc 
     var_dump($args); 

     parent::__soapCall ($function_name, $args, $options, $input_headers, $output_headers); 

     // XML request and response: 
     var_dump($this->__getLastRequest()); // Request sent to server 
     var_dump($this->__getLastResponse()); // Response from server 

     // HTTP headers: 
     var_dump($this->__getLastRequestHeaders()); 
     var_dump($this->__getLastResponseHeaders()); 
    } 

    public function __doRequest (string $request , string $location , string $action , int $version, int $one_way = 0) { 
     var_dump($request); // XML 

     $response = parent::__doRequest ($request, $location, $action, $version, $one_way); 
     var_dump($response); // XML 

     return $response; 
    } 
} 

$webservice = new MySoapClient('http://example.com/myservice?wsdl'); 
$webservice->__soapCall('SomeOperation', array($someArguments)); 

記錄器可以用來代替對的var_dump:

logger('debug', $this->__getLastRequest()); 
+0

對於我的生活,我想不通爲什麼我不能覆蓋__soapCall。我定義了你提供的函數,但它沒有被拾取。 –