|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Membre habitué
![]() Ingénieur Inscription : janvier 2010 Messages : 230 ![]() |
Bonjour,
Je suis face à un comportement très étrange de l'application sur laquelle je travaille, peut-être que vous pourrez m'éclairer.... J'ai le code suivant, que j'ai simplifié pour les explications (oui, le problème pourrait venir ce que j'ai enlevé, mais je ne peux pas tout poster ici, ça serait illisible) : Une méthode "main" qui traite en boucle des données, avec une gestion d'exception de façon globale: Code :
Et une méthode interne appelant un service externe que je ne maîtrise pas. Ce service peut potentiellement lancer diverses exceptions. Code :
Donc normalement, si la méthode extérieure lance une exception, le traitement dans la boucle continue et passe aux données suivantes. J'espère que c'est assez clair... Mon problème est le suivant : Le traitement tombe en erreur et la boucle s’arrête pour une raison inconnue. J'ai dans les logs les messages suivants : - Info : Traitement en cours - Warning avec stacktrace lancé par la méthode exterieure - Info : Finally Donc visiblement, la méthode extérieure plante, affiche un warning mais pas d'exception. Et le traitement s'arrête là. Je ne comprend absolument pas ce comportement. Je remercie vivement quiconque prendrait la peine se poser sur mon problème et m'éclairer de ses lumières ! |
||||
|
|
00
|
|
|
#2 |
|
Membre expérimenté
![]() ![]() Etienne Ingénieur développement logiciels Inscription : août 2011 Messages : 107 ![]() |
Salut
Le problème, c'est que je n'ai pas l'impression qu'on ait toutes les billes. Avec le code que tu as posté, même si la méthode extérieure soulève une exception, elle devrait être rattrapée par le "catch (final Exception e)" de "maMethode", et ne devrais donc en aucun cas altérer la boucle du main. Est-ce que dans le bloc "catch (final Exception e)" de "maMethode" tu catch une exception ? Autrement dit, est-ce que ta méthode extérieure ne fait que logger l'erreur ou est-ce qu'elle relance l'exception en plus ? J'ai pensé au cas ou la méthode externe force un arret du processus, mais dans ce cas, les instructions du bloc Finally ne devraient pas être exécutées. EDIT : Je pense à un truc : si jamais la méthode externe ne lance pas une exception mais un objet instancié d'une classe directement dérivée de Throwable ou de Error... Dans ce cas, le "catch(Exception)" ne catchera pas l'erreur. Par contre le bloc finally sera exécuté. Ce serait très moche mais ça expliquerait ton bug. Tu peux temporairement essayer de remplacer les "catch (Exception)" par "catch(Throwable)" ? |
|
|
00
|
|
|
#3 |
|
Membre habitué
![]() Ingénieur Inscription : janvier 2010 Messages : 230 ![]() |
Merci pour cette réponse.
Oui, c'est possible qu'en résumant j'ai omis l'élément important qui cause ce problème, mais le code est trop complexe pour que je poste tout ici. (Connections à des bases de données, appel à des webservices... etc.) Je cherchais juste des idées de raisonnement... Non, "catch (final Exception e)" de "maMethode" ne fait rien d'autre que de logger l'erreur. Le but étant juste de passer à la donnée suivante si la courante pose problème. Pour ton EDIT, oui, c'est une bonne idée, qui a au moins le mérite d'être plausible au vu du résultat obtenu. Je vais essayer d'analyser ça! Merci! |
|
|
00
|
|
|
#4 |
|
Membre habitué
![]() Ingénieur Inscription : janvier 2010 Messages : 230 ![]() |
Et ben j'ai trouvé : il y a avait un NoClassDefFoundError sur un logger propre au webservice dans methodeExterieure(), visiblement mal configuré.
Merci de m'avoir mise sur la voie!J'enrage un peu de n'avoir pas vu ça plutôt, m'enfin.. |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com