Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
Ayant un petit soucis avec la gestion des erreurs renvoyées par le service web, je souhaiterais savoir si vous aviez des préconisations à ce niveau.
Mon code :
Le controller
[lang=php] class ServicewebController extends Zend_Controller_Action{ public function indexAction(){ try{ $oServer = new Zend_Soap_Server( null, array( 'uri' => 'Mon_URI', 'soap_version' => SOAP_1_2 ) ); $oServer->setClass('Mon_Sweb'); // register exceptions that generate SOAP faults $oServer->registerFaultException(array('Mon_Exception')); $oServer->handle(); exit; } catch (Exception $e) { error_log(print_r('exception '. $e,true)); } } }
Ma classe Mon_Sweb
[lang=php] class Mon_Sweb { public function action($aSoapParams){ $aParams = <array contenant mes paramètres> $oServiceWeb = Mon_ServiceWeb::getInstance($aParams); try{ if($oServiceWeb instanceof Mon_ServiceWeb){ $aProcess = $oServiceWeb->process(); $aReturn = Ma_fonction_d_encodage(array('PROCESS'=>$aProcess)); return $aReturn; } else return Ma_fonction_d_encodage(array('PROCESS'=>false,'ERRORS'=>array('Erreur d\'instanciation du service web'))); } catch ( Exception $e ) { error_log(print_r('Exception caught: '. $e,true)); } } }
Ici, j'ai bien un error_log contenant le message de l'exception.
Je souhaiterai cependant pouvoir la catcher dans mon error controller pour la traiter de façon adéquate, ce que je ne parviens pas à faire.
Avez vous déjà rencontré ce type de soucis ?
Selon vous, d'où peut venir mon problème ?
En vous remerciant d'avance.
Hors ligne
Pourquoi la première classe (déclaration du Soap Server est-elle dans un controller ?
j'aurai plutot fait l'inverse : le Soap Server dans une classe et le Soap Client dans un controller.
Mais bon, je ne suis pas spécialiste.
Je viens juste d'acheter en ligne ZF Web Services (http://www.phparch.com/books/) qui traite du sujet ... et je ne l'ai pas encore commencé !
Jean
Hors ligne
Dans les différents tutos que j'ai trouvé, c'est dans un contrôleur que l'on déclare le SoapServer. Cela répond de plus à un besoin spécifique lié à mon application.
La deuxième classe n'est pas le client, il s'agit de la classe appelée dans le code au dessus, soit "Mon_Sweb", qui lance une instance de mon Service Web (contenant donc les différentes fonctions appelées à distance).
Hors ligne