try catch не ловят SoapFault

npodesign

Новичок
try catch не ловят SoapFault

При работе с Soap иногда возникают ошибки Fatal error: Uncaught SoapFault exception: [HTTP] Could not connect to host in.... Решил поймать ошибку и обработать сам (делать повторный Soap запрос), но почему то catch не ловит ошибку, а перебрасывает на exception_handler.

Вот код:
PHP:
...

function exception_handler($exception) {

	// Сюда попадает при ошибке
	echo "\n<hr>\nFatal Error: could not precessing request ("  , $exception->getMessage(), ")\n<hr>\n";
	
}

set_exception_handler('exception_handler');

...

	try{	
    	
		$rtrn = parent::__doRequest($request, $location, $action, $version);
			
	} catch (SoapFault $exception){
			
		// Сюда никогда не попадает
		echo "error... retry...";
		$rtrn = parent::__doRequest($request, $location, $action, $version); 
			
	}
...
Где накосячил? Что поправить?
 

dimagolov

Новичок
видимо там, где делаешь parent::__doRequest в блоке catch, там уже никакие исключения не будут словлены.
 

dimagolov

Новичок
потому что в __doRequest выбрасывается исключение SoapFault, а словить его уже некому. уже вне try {}

исправить просто сделать tty {} catch {} в цикле, из которого выходить в конце try {} по break (ну и по кол-ву итераций тоже), а parent::__doRequest из catch {} убрать
 

npodesign

Новичок
Автор оригинала: dimagolov
потому что в __doRequest выбрасывается исключение SoapFault, а словить его уже некому. уже вне try {}

исправить просто сделать tty {} catch {} в цикле, из которого выходить в конце try {} по break (ну и по кол-ву итераций тоже), а parent::__doRequest из catch {} убрать
Я понял идею, но проблема сложнее. catch вообще не перехватывает ошибку.

К прмиеру если заменить этот блок на:
PHP:
...
while(1){
     	
	try{	
    	
		$rtrn = parent::__doRequest($request, $location, $action, $version);
		break;
			
	} catch (SoapFault $exception){
			
		echo "\n<hr>\nCatched Error: Soapr request failed (error #70955)\n<hr>\n";
		exit;
			
	}
}
...
То всеравно ошибка уходит на exception_handler
 

FB3

Новичок
http://ru2.php.net/manual/en/soapclient.dorequest.php
В документации не написано, что оно какие-то экспешены должно выкидывать.
Но если ты уверен, что выкидывает, то попробуй ловить Exception, а не SoapFault и посмотреть, какой именно Exception выходит.
 
Сверху