J'aimerais écrire un intercepteur pour la mise en œuvre Apache CXF JAX-RS qui inspecte le service / méthode cible d'une annotation particulière et fait un traitement spécial pour cette annotation. P>
Je n'arrive pas à trouver quoi que ce soit dans la documentation de l'intercepteur qui décrit comment faire cela. Est-ce que quelqu'un a des idées? P>
Merci! P>
4 Réponses :
Si l'intercepteur fonctionne assez tard dans la chaîne (comme l'user_logical
Phase), vous devriez être capable de faire quelque chose comme: qui devrait vous donner la méthode qui était liée pour que vous puissiez obtenir le déclarer
classe ou annotations, etc ... p> p>
Aha, c'est le genre de chose que je cherchais, mais je suppose que je ne connaissais pas la terminologie de CXF pour traverser les classes. :) Je vais donner ça un coup de feu, merci!
MéthodétiqueDisperced est obsolète. Pouvez-vous s'il vous plaît suggérer une autre alternative? J'utilise des phases Pre_stream & Recevoir
ah. Je n'ai pas précisé que j'utilisais la partie Jax-RS de CXF; Je ne sais pas si cela impacte la réponse de Daniel Kulp, mais sa solution n'a pas réellement travaillé pour moi. Je crois que c'est parce que CXF fait des choses différemment lors de la manipulation de Jax-Rs. P>
Je suis tombé sur la source du ... pendant le ... pour obtenir un accès à la méthode code> code> et [JAXRSInterceptor] de CXF [1] code> et j'ai vu dans ce code que cet intercepteur met les informations méthodes dans l'objet Exchange Code> : p>
message.getexchange (). Mettez (opérationResourceInfo.class, ori); code> p>
lamarshal code> phase, qui selon le CXF Intercepteur Docs arrive avant la
* _ logique code> phase. Donc, en écrivant un
intercepteur code> qui gère le
user_logical code> phase i peut faire: p>
message.getexchange (). Obtenez (OperationResourceInfo.class) CODE> P>
class > code> du service
code> manipulation de l'appel! p >
Cela rendra de mauvais résultats si vous utilisez des sous-ressources! L'ORI renvoyé sera celui utilisé pour sélectionner la méthode du localisateur de la sous-ressource, mais pas la méthode du gestionnaire acutal
Fonctionne parfaitement si vous avez besoin du nom de la méthode, il suffit d'utiliser OperationResInfo.getMethodtoInvoke (). GetName (); code>
Et si vous avez besoin de l'utilisation de la classe OperationResInfo.getMethodtoInvoke (). GetDecLaringClass () Code>
Cela a été assez quelque temps depuis la réponse acceptée. Mais il y a quelques abstractions de support fournies dans le One présenté est fourni est Cet exemple d'extrait de la source peut être une bonne référence: p> org.apache.cxf.interceptor.security.abstracttauthorizinterceptor code> p>
Construire la réponse de l'interrogateur d'origine, j'ai proposé ce