IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

[Symphony2] interception des exceptions [2.x]


Sujet :

Symfony PHP

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 6
    Points : 1
    Points
    1
    Par défaut [Symphony2] interception des exceptions
    Bonjour,

    Après avoir beaucoup cherché et testé plusieurs solutions qui ne me conviennent pas, je me permet de poster mon problème au cas où quelqu'un pourrait m'aider.

    Mon problème est donc le suivant : Je dispose d'un service symphony dans lequel je crée une connexion cliente Soap.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $soap = new \SoapClient($wes, array('features' => SOAP_SINGLE_ELEMENT_ARRAYS, 'cache_wsdl' =>  WSDL_CACHE_NONE));
    où $wes est l'URL du service distant.

    Cet appel fonctionne très bien tant que le serveur est disponible.

    En revanche, quand il n'y a pas de connexion vers ce service soap, je me retrouve avec une exception causée par le timeout.

    Cette erreur se traduit par une erreur 500 en prod, et un ContextErrorException en dev.

    Le premier réflexe est de faire un try...catch, mais apparemment c'est peine perdue car le kernel intercepte avant.

    Ensuite, il y a bien la solution de personnalisation de la page d'erreur 500, mais ce n'est pas vraiment le comportement attendu : en fait, je souhaite simplement revenir sur la page appelante et y afficher un message indiquant que la connexion a échouée, de la même manière que lorsqu'on valide in formulaire, on est capable d'informer l'utilisateur si l'enregistrement a été effectué correctement.

    La dernière piste testée concerne la création d'un listener personnalisé qui implémente une fonction onKernelException(), mais je ne suis pas bien sur que ça corresponde à mon besoin étant donné que je ne sais pas vraiment comment récupérer l'origine de l'erreur afin de n'intercepter que l'erreur qui m'intéresse.

    J'espère avoir été assez clair dans l'énoncé de mon problème.

    Merci par avance à ceux qui pourront m'éclairer sur ce chemin.

  2. #2
    Membre expérimenté Avatar de Nico_F
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 728
    Points : 1 310
    Points
    1 310
    Par défaut
    Est-ce que l'erreur se produit à l'instanciation du SoapClient ou au moment ou tu appelles une méthode de ton objet $soap ?
    Est-ce que tu as essayé de faire ton try catch autour de l'instanciation ou autour de l'appel de la méthode ?

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Bonjour Nico_F.

    Tout d'abord, merci de te pencher sur mon problème.

    L'erreur se produit à l'instanciation du SoapClient et plus précisément quand le timeout de connexion a expiré (une 30aine de secondes environ).
    J'ai même commenté l'appel de la méthode pour être sur que ce soit bien ça.

    Je peux aisément reproduire le problème étant donné que l'accès au webservice que j'utilise dépend d'une connexion VPN que j'active ou non pour le simuler.

    Avant de te répondre, j'ai donc effectué un nouveau test simplifié :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    try{
    	$soap = new \SoapClient($wes, array('features' => SOAP_SINGLE_ELEMENT_ARRAYS, 'cache_wsdl' =>  WSDL_CACHE_NONE));
    	return true;
    }
    catch (Exception $ex)
    {
    	echo $ex->getMessage();
    }
    return false;
    J'ai testé différentes manières de déclarer l'exception à intercepter sans incidence sur le résultat.

    L'erreur retournée ressemble à ça :
    ContextErrorException: Warning: SoapClient::SoapClient(http://.../monwebserviceSoap.php?wsdl)
    [soapclient.soapclient]: failed to open stream: Une tentative de connexion a échoué car le parti connecté
    n'a pas répondu convenablement au-delà d'une certaine durée ou une connexion établie a échoué car
    l'hôte de connexion n'a pas répondu.
    in D:\...\Symfony\...\Services\WebServices.php line 17
    Après mes diverses tentatives, je sèche toujours

  4. #4
    Membre expérimenté Avatar de Nico_F
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 728
    Points : 1 310
    Points
    1 310
    Par défaut
    Et en rajoutant un backslash devant le typehint de l'exception ?


  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Il me semble avoir déjà essayé.
    Je retenterai dès que possible.

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Vérifié à l'instant sans amélioration...

  7. #7
    Membre éprouvé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 552
    Points : 1 060
    Points
    1 060
    Par défaut
    Tu es sûr que l'exception est bien lancée à la construction? Je l'imagine plutôt au niveau de la première requête.

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Bonjour bretus,

    Malheureusement, j'en suis sur car je fais les tests en désactivant les appels.

    Par ailleurs, j'utilise Symfony en version 2.4, je ne sais pas si ça change quelque chose au niveau des exceptions.

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 168
    Points : 219
    Points
    219
    Par défaut
    Citation Envoyé par ForrestSJ Voir le message
    Bonjour bretus,

    Malheureusement, j'en suis sur car je fais les tests en désactivant les appels.

    Par ailleurs, j'utilise Symfony en version 2.4, je ne sais pas si ça change quelque chose au niveau des exceptions.
    De mémoire il faut ruser ... :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    try{
     $client = @new SoapClient(
    }catch(\Exception $e){....
    }

  10. #10
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 6
    Points : 1
    Points
    1
    Par défaut [Résolu][Symphony2] interception des exceptions
    Bonjour goabonga,

    Merci, je ne connaissait pas cette syntaxe et je passe bien dans le catch maintenant.
    En prod, mon problème est totalement résolu, et ce résultat me convient amplement pour l'immédiat.

    Cependant, en dev, bien que la page s'affiche "correctement", à la fin de cette dernière, il y a tout de meme le "FatalErreurException" de Symfony qui s'affiche.
    J'imagine que c'est une histoire de propagation d'exception de symfony, et ça donne une impression d'innachevé.

    Toute idée supplémentaire est bienvenue et je passe tout de même le sujet en résolu.

    Merci encore

  11. #11
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 168
    Points : 219
    Points
    219
    Par défaut
    Test un try try

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    try {
        $client= @new SoapClient($uri ,array('trace'=>false));
        try {
           $response = $client->_call('....');
        } catch (\SoapFault $sp) {
          // renvoyer une jolie erreur 
        }
    }catch(Exception $e) {
          // renvoyer une jolie erreur 
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 17/08/2014, 11h46
  2. Intercepter des Exceptions
    Par rvzip64 dans le forum Langage
    Réponses: 1
    Dernier message: 25/05/2010, 11h53
  3. GRIDVIEW DATABINDING - Interception des exceptions
    Par pitbulle dans le forum ASP.NET
    Réponses: 2
    Dernier message: 18/06/2007, 11h54
  4. Interception des commandes in et out
    Par KDD dans le forum x86 16-bits
    Réponses: 13
    Dernier message: 18/12/2002, 16h55
  5. c: gestion des exceptions
    Par vince_lille dans le forum C
    Réponses: 7
    Dernier message: 05/06/2002, 14h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo