2013-07-02 102 views
0

我想知道什麼是我的SOAP編碼原始異常的細節,我有一個處理的請求爲以下SOAP服務器:Zend框架2 SOAP錯誤異常

$options = array(
    'soap_version' => SOAP_1_2, 
    'actor' => someUriAString, 
    'encoding' => 'UTF-8', 
    'uri' => someUriAString); 
$server = new Server(null, $options); 
$server->setClass('SomeClass'); 
$server->setReturnResponse(true); 
$serverResponse = $server->handle(); 

,然後我檢查是否有異常出現如下所示:

if ($serverResponse instanceof \SoapFault) { 
    //log the $serverResponse exception details 
} 

,但是當我登錄這個例外,我得到了這樣的事情:

exception 'Exception' with message 'SoapFault exception: [Receiver] Unknown error 

我需要知道的是原始的異常詳細信息...例如SQL異常,或者例如ORMException,...等。即我需要確切的原始異常的詳細信息...

我已經嘗試過registerFaultException如下面的例子:

$server->registerFaultException('Doctrine\ORM\ORMException'); 

我不知道這是否是正確的,但問題是,有可能會發生其他類型的異常,我不能註冊它們,因爲我不知道我的代碼中會發生什麼異常!

+0

我有同樣的問題,終於結束了通過捕獲所有異常(是的,'Exception'類)並手動拋出一個'SoapFault'異常。所有東西都被SoapServer捕獲並正確處理,而不使用'registerFaultException'方法。您可以使用'instanceof'或'getclass'來設置錯誤代碼,然後使用這個錯誤代碼處理客戶端的異常情況。 – OlivierH

回答

0

這取決於expections是如何設置的,但你可以得到上異常消息:

$message->getPrevious(); 

可以遍歷overthem這樣的:

if($message instanceof \Exception) { 
    do { 
     echo sprintf(
      "%s:%d %s (%d) [%s]\n", 
      $message->getFile(), 
      $message->getLine(), 
      $message->getMessage(), 
      $message->getCode(), 
      get_class($message) 
     ); 
    } 
    while($message = $message->getPrevious()); 
} 
+0

這不起作用......我認爲這不應該起作用,因爲SoapFault異常引發的方式是通過「返回」新消息「未知錯誤」的SoapFault異常,因爲原始異常未使用註冊'registerFaultException' –