7
votes

Déterminer le service cible / la méthode de CXF Interceptor

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.

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?

Merci!


0 commentaires

4 Réponses :


11
votes

Si l'intercepteur fonctionne assez tard dans la chaîne (comme l'user_logical Phase), vous devriez être capable de faire quelque chose comme: xxx

qui devrait vous donner la méthode qui était liée pour que vous puissiez obtenir le déclarer classe ou annotations, etc ...


2 commentaires

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



5
votes

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.

Je suis tombé sur la source du [JAXRSInterceptor] de CXF [1] et j'ai vu dans ce code que cet intercepteur met les informations méthodes dans l'objet Exchange :

message.getexchange (). Mettez (opérationResourceInfo.class, ori);

... pendant le lamarshal phase, qui selon le CXF Intercepteur Docs arrive avant la * _ logique phase. Donc, en écrivant un intercepteur qui gère le user_logical phase i peut faire:

message.getexchange (). Obtenez (OperationResourceInfo.class)

... pour obtenir un accès à la méthode et class du service manipulation de l'appel!


3 commentaires

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 ();


Et si vous avez besoin de l'utilisation de la classe OperationResInfo.getMethodtoInvoke (). GetDecLaringClass ()



1
votes

Cela a été assez quelque temps depuis la réponse acceptée. Mais il y a quelques abstractions de support fournies dans le xxx

One présenté est fourni est org.apache.cxf.interceptor.security.abstracttauthorizinterceptor

Cet exemple d'extrait de la source peut être une bonne référence: xxx


0 commentaires

1
votes

Construire la réponse de l'interrogateur d'origine, j'ai proposé ce xxx


0 commentaires