Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2837 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  InvocationTargetException doit-on désencapsuler la cause ?

 

 

 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

InvocationTargetException doit-on désencapsuler la cause ?

n°602587
nraynaud
lol
Posté le 05-01-2004 à 12:23:43  profilanswer
 

voiloù le code d'un proxy typique :
 

Code :
  1. class ProxyInutile implements InvocationHandler {
  2.   private Object sujet;
  3.   public ProxyInutile(Object sujet) {
  4.     this.sujet = sujet;
  5.   }
  6.   public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
  7.     method.invoke(sujet, args);
  8.   }
  9. }
  10. ...
  11. ArrayList monObj = new ArrayList();
  12. ArrayList proxy = (ArrayList)Proxy.newProxyInstance(
  13.   ArrayList.class.getClassLoader(),
  14.   new Class[] { ArrayList.class },
  15.   new ProxyInutile(monObj));
  16. monObj.get(-12); // ça va planter chérie !
  17. ...


la dernière ligne de code ne renvoie non pas un IndexOutOfBoundsException comme on pourrait le croire naïvement, mais un InvocationTargetException, avec la cause kivabien, soit le IndexOutOfBoundsException tant attendu, comme marqué dans la doc de invoke().
 
La question est : il est très tentant de modifier le handler comme suit

Code :
  1. public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
  2.     try {
  3.       method.invoke(sujet, args);
  4.     } catch (InvocationTargetException e) {
  5.       throw e.getCause();
  6.     }
  7.   }

C'est une bonne idée ou un piège à con ?
Si c'est un piège à con, où est le problème ?
Si c'est est pas un, pourquoi ça n'a pas été fait dans Method.invoke() directement ? pour ne pas fausser le point d'origine de l'exception ?


---------------
trainoo.com, c'est fini
mood
Publicité
Posté le 05-01-2004 à 12:23:43  profilanswer
 

n°602729
benou
Posté le 05-01-2004 à 14:18:17  profilanswer
 

c'est la bonne chose à faire. D'ailleurs, si tu ne le fais pas, tu n'es plus conforme à la javadoc du InvocationHandler.
 
disons que méthod.invoke() est explicitement de l'invocation dynamique => il est logique qu'en cas d'erreur, l'exception soit une exception d'invocation.  
Par contre, pour le proxy, ce n'est plus vrai : il est plus logique que l'exception source soit retournée puisque l'invocation dynamique intermédiaire doit être transparente.
 
D'ailleur, le fait de faire un e.getCause() est logique puisque InvocationException est explicitement un wrapper :  

Citation :

InvocationTargetException is a checked exception that wraps an exception thrown by an invoked method or constructor.  


Message édité par benou le 05-01-2004 à 14:18:29

---------------
ma vie, mon oeuvre - HomePlayer
n°602791
nraynaud
lol
Posté le 05-01-2004 à 15:28:42  profilanswer
 

ok, merci.


---------------
trainoo.com, c'est fini

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  InvocationTargetException doit-on désencapsuler la cause ?

 

Sujets relatifs
visual paradigm : ça vous cause ?[PHP] probleme refresh cause de requete
assert : ca vous causej'ai une erreur et je n'en trouve pas la cause ...
Copier un fichier avec CopyFile --> erreur à cause du uses Windows[Java] Session à null à cause d'un proxy
[ Php/Oracle/Apache ] Plantage d'apache à cause des librairies oracleIllegalStateException à cause d'une sendRedirect
Plus de sujets relatifs à : InvocationTargetException doit-on désencapsuler la cause ?


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)