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

avec Java Discussion :

Capturer correctement les exceptions


Sujet :

avec Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 10
    Points : 8
    Points
    8
    Par défaut Capturer correctement les exceptions
    Bonjour,

    J'ai une question concernant la capture des exceptions.
    Voici un exemple de code que j'ai fait ci-dessous.
    Il permet d'envoyer une requette Http à un serveur.
    J'ai utilisé l'API URLConnection.
    Mais bon ce n'est pas la compréhension du code qui est important mais plutôt comment capturer correctement les exceptions.

    Comme vous pouvez le voir, j'ai capturé avec des try,catch.

    Prenons un exemple try, catch:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    catch (IOException ioe) {
                logger.severe(
                    "An I/O exception occurs when calling openConnection()or getOutputStream()or getInputStream()");
    Ici je capture l'exception : IOException, qui provient des méthodes openConnection(),getOutputStream() et getInputStream().

    Mes questions sont:

    -Lors du d'un problème, supposons que cette exception est capturé alors comment je peux savoir de quelle méthode provient l'exception?
    Je ne comprend pas comment on peut différencier l'exception de ces 3 méthode car elles peuvent généré toutes les 3 une IOException.
    Comment je peux faire un catch pour chacune de ces méthode?
    -Je sais que IOException a beaucoup de sous-classes donc comment je peux savoir à quelle sous classe correspond l'exception levée par mes 3 méthodes?





    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     URL url;
            URLConnection conn = null;
            PrintStream printStream = null;
            InputStream inputStream = null;
     
            try {
                url = new URL(servicePath);
     
                conn = url.openConnection();
                //this url connection will be use for output
                conn.setDoOutput(true);
                conn.setDoInput(true);
                printStream = new PrintStream(conn.getOutputStream());
                printStream.println(request);
                printStream.flush();
                //get the response from the service
                inputStream = conn.getInputStream();
     
                printStream.close();
                logger.info("Request SES Registration sent  at: " + servicePath);
            } catch (UnknownServiceException use) {
                logger.severe(
                    "The protocol does not support output when calling getOutputStream()");
            } catch (ConnectException ce) {
                logger.severe("Connection refused at " + servicePath +
                    " when calling getOutputStream()");
            } catch (MalformedURLException mue) {
                logger.severe("The URL is malformed when calling URL()");
            } catch (IOException ioe) {
                logger.severe(
                    "An I/O exception occurs when calling openConnection()or getOutputStream()or getInputStream()");
            } catch (IllegalStateException ise) {
                logger.severe(
                    "Already connected when calling setDoOutput()or setDoInput()");
            }

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Tu peux avoir toutes les infos sur l'origine de l'exception via son stacktrace.

    Après j'ai un peu de mal à voir l'intérêt de gérer les exceptions méthode par méthode. Le principal étant de pouvoir détecté les erreurs...

    a++

    PS : Et ne pas oublié les try/finally pour la libération des ressources

  3. #3
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    a noter qu'il faut, bien entendu, passer cette exception au logger si tu veux qu'il affiche le stacktrace

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 187
    Points : 110
    Points
    110
    Par défaut
    Salut,

    Pour catcher les 3 exceptions indépendamment, tu peux toujours faire un try/catch autour de chacune de ces méthodes au lieu de faire un try catch qui englobe les trois, mais ça va alourdir ton code.
    Pour affiner ton message d'erreur et savoir où ton exception a été lancée, utilise les méthodes de ton exception : toString() et getMessage() pour le message d'erreur, et getStacktrace() pour avoir la pile d'appel et du coup savoir exactement où ton exception a été lancée.

    à +

  5. #5
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Avril 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2006
    Messages : 110
    Points : 91
    Points
    91
    Par défaut
    Salut samsam786,

    quand je veux un peu plus d'infos sur mes exceptions, je fais un getCause() sur l'exception.

    et tu peux remonter aussi loin que tu veux ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    try{
         ...
    }
    catch(Exception e){
         e.getCause().getCause().getCause().getMessage();
    }
    Mais certains pensent que ce n'est pas toujours efficace donc j'espère que cela va t'aider dans ton cas !

  6. #6
    Futur Membre du Club
    Inscrit en
    Mars 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Slt!

    Merci pour vos réponses.
    Je suis daccord avec la méthode getMessage() mais dans le cas d'un développement logiciel, toutes les traces sont gardés dans un fichier log et je ne sais pas si le plus approprié serai de faire que des getMessage() ou capturer bien comme il faut les exceptions.

    D'après vous en géneral, les développeurs capturer les exceptions et font des getMessage() ou plutôt se cassent la tête à trouver l'exception la plus spécifique?

  7. #7
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    l'exception globale envoyée vers le système de logging utilisé, c'est rapide à code, on se casse pas la nenette et, le jour où un problème surviendra, on regardera la trace complète pour trouver la cause

  8. #8
    Futur Membre du Club
    Inscrit en
    Mars 2010
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    slt!

    Comment mettre la sortie de printStackTrace() dans un logger avec l'api logging?

  9. #9
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    tu ne le fais pas, ca devrais ressembler à ca ton appel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    catch (UneException e){
       log.error("une erreur s'est produite dans blablabalba",e);
    }

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

Discussions similaires

  1. c# - Capturer les exceptions au connection a un serveur Active Directory
    Par aiglelibre dans le forum Développement Web avec .NET
    Réponses: 0
    Dernier message: 07/12/2010, 17h37
  2. API ANT: capturer les exceptions
    Par pilate dans le forum ANT
    Réponses: 3
    Dernier message: 23/01/2010, 22h18
  3. API ANT: capturer les exceptions
    Par pilate dans le forum API standards et tierces
    Réponses: 0
    Dernier message: 23/12/2009, 11h43
  4. Capturer toutes les exceptions
    Par schneidb dans le forum Interfaces Graphiques en Java
    Réponses: 4
    Dernier message: 13/02/2007, 14h51
  5. Réponses: 3
    Dernier message: 01/11/2002, 14h30

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