Je suis en train de fouiller dans une application web pour tenter de résoudre certains problèmes. L'application utilise Tomcat, Jersey et Guice. L'un des problèmes se produit dans un MethodInterceptor utilisé à des fins d'autorisation. Voici la méthode, coupée à la partie pertinente :
public Object invoke(MethodInvocation invoc) throws Throwable {
// ...
//Check that the annotation actually exists
if(! invoc.getMethod().getDeclaringClass().isAnnotationPresent(Tool.class))
{
throw new BaseException("...");
}
// ...
}
Le problème est que certaines des méthodes "web-facing" sont héritées d'une classe parent sans être surchargées dans la classe enfant. Si je comprends bien la méthode getDeclaringClass(), elle renvoie la méthode parent dans ce cas, mais ce que nous voulons vraiment ici est la classe enfant. Certains tests semblent le confirmer : si je surcharge la méthode dans la classe enfant, tout va bien, mais si je ne mets pas la surcharge, une exception est levée.
Ainsi, étant donné un objet MethodInvocation, existe-t-il un moyen de remonter à la classe "réelle" instanciée, plutôt qu'à la classe où la méthode a été déclarée ? Ou une autre approche est-elle nécessaire ? Dans le pire des cas, je pourrais juste annoter chaque méthode comme nécessaire plutôt que d'annoter la classe.
Désolé si c'est une question longue pour une réponse facile - mon Java est assez rouillé.