10
votes

Proxy dynamique et exceptions vérifiées

Comment puis-je faire mes exceptions vérifies mon proxy dynamique?

J'ai besoin d'une enveloppe transparente pour une interface qui lance parfois des exceptions vérifiées telles que ioException . Est-il possible sans la 3ème partie d'AOP ou d'écrire mon propre proxy? Modification de toutes les 20 méthodes de l'interface à la main n'est pas une option non plus.


0 commentaires

3 Réponses :


11
votes

Vous pouvez utiliser un proxy dynamique. Tant que les exceptions vérifiées font partie de l'interface, vous pouvez lancer les exceptions vérifiées à partir du gestionnaire d'invocation. Sinon, cela est illégal et créera une exception non déclarée qui enveloppe l'exception vérifiée. xxx pré>

sortie: p> xxx pré>

avec une exception vérifiée non déclarée pour Interface A: P>

interface A{
    void x();
}

Exception in thread "main" java.lang.reflect.UndeclaredThrowableException
  at $Proxy0.x(Unknown Source)
  at X.main(X.java:22)
Caused by: java.io.IOException
  at X$1.invoke(X.java:19)
  ... 2 more


1 commentaires

Merci. Une note, méthode.invoke () (souvent utilisée dans InvocationHandler.invoke () enveloppe l'exception originale dans InvocationTargetException , il doit donc être non emballé.



2
votes

Un proxy dynamique peut lancer une exception vérifiée si l'exception est déclarée dans la signature de la méthode de l'interface, elle est proxyable. Du Sun's Référence de proxy dynamique : < / p>

Si une exception est lancée par la méthode Invoke, elle sera également lancée par l'invocation de la méthode sur l'instance proxy.

Le type d'exception doit être assigné à l'une quelconque des types d'exception déclarés dans la signature de la méthode d'interface ou aux types d'exception non cochée java.lang.runtimeException ou java.lang. Erreur .

Si une exception vérifiée est lancée par appel qui n'est attribuible à aucun des types d'exception déclarés dans la clause de lancement de la méthode d'interface, un non recto-édithableException sera lancé par l'invocation de la méthode sur le instance de proxy. Le non reconscepté (code> index / code> sera construit avec l'exception qui a été lancée par la méthode Invoke.


0 commentaires

20
votes

1 commentaires

Le lien vers le blog externe ci-dessus est parti, mais par ex. amittechblog.wordpress.com/2011/07/24/... a aussi un peu de blurb sur pourquoi c'est une bonne idée de le faire