bizarre![]()
l'exemple ici : http://eggsylife.co.uk/category/soft...ing_framework/
genere une erreur qui est la suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2Caused by: java.lang.IllegalArgumentException: error at ::0 formal unbound in pointcut
le même soucis avec ça:
j'obtiens :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 @Pointcut("@annotation(com.business.aop.MyAnnotation")
quand j'essaie de mettre une annotation pourrie ou n'existe pas il a l'air de l'interpreter et me dit:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3Caused by: java.lang.IllegalArgumentException: error at ::0 formal unbound in pointcut
donc l'expression est bel et bien interpretée dans tous les cas mais laquelle est la bonne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Caused by: java.lang.IllegalArgumentException: error Type referred to is not an annotation type: com$business$aop$blabla! aucune idée!
si la syntaxe est parallèle à celle des Aspect écrits à la main ("public aspect… ") alors
@annotation est utilisé pour collecter les information de l'annotation utilisée dans le pointcut :
par exemple dans un .aj on écrira quelque chose du genre :
ce qui passera à votre pointcut le paramètre "name" de l'annotation com.business.aop.MyAnnotation et sera appliqué à toutes les fonctions annotées par ladite om.business.aop.MyAnnotation.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 public pointcut myPointcut(String name): execution(@com.business.aop.MyAnnotation * *(..)) && @annotation(com.business.aop.MyAnnotation(name)) ;
Donc à mon avis, quoique je préfère de loin utiliser des .aj à la place des annotations et ne suis donc pas un spécialiste de cette syntaxe, votre déclaration de @Pointcut est très incomplète : AspectJ ne sait pas où aller chercher ce qu'il doit "binder" au @annotation que vous lui donnez.
bonjour,
mais la syntaxe utilisée dans le pointcut semble être la même qye dans le .aj que vous suggérerer! donc je ne comprends pas pourquoi c'est ignoré!
dans votre
où est la partie "call" ou "execution" ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 @Pointcut("@annotation(com.business.aop.MyAnnotation")
je crois que vous avez raté le début!
en effet j'ai aussi essayé ces expressions mais ça ne marche pas ! ai-je loupé un truc dans la syntaxe?
votre aide sera plus que bienvenue franchement!
le call est une primitive pas supporté je pense par Spring AOP la preuve j'ai ce message d'erreur:
ceci pour un pointcut de ce genre:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Caused by: org.aspectj.weaver.tools.UnsupportedPointcutPrimitiveException: Pointcut expression 'anyTaskToPerform()' contains unsupported pointcut primitive 'call'
de même avec el package complet:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 @Pointcut("call(@MyAnnotation* *(..))")
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 @Pointcut("call(@com.business.MyAnnotation* *(..))")
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 @Aspect public class MyAnnotationAspectJava{ @Pointcut("execution(@com.business.aop.MyAnnotation * *(..)) && @annotation(com.business.aop.MyAnnotation()) ") public void onExecutionOfMethodWithMyAnnotation() { } }
Bon!
je viens d'essayer cette expression mais ca n'arrange pas les choses; elle est bien analysée (commme dab) mais nous avons erreur:
pointant sur la fin de la chaine à savoir: MyAnnotation()
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Caused by: java.lang.IllegalArgumentException: Pointcut is not well-formed: expecting 'identifier' at character position 157
j'ai essayé d'ajouter l'argument name comme suit:
et la j'ai ça:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 @Pointcut("execution(@com.business.aop.MyAnnotation * *(..)) && @annotation(com.business.aop.MyAnnotation(name)) ")
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Caused by: java.lang.IllegalArgumentException: error at ::0 When using @annotation(<annotationType>(<annotationField>)), <annotationField> must be bound
comme ça ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 @Pointcut("execution(@com.business.aop.MyAnnotation * *(..)) && @annotation(com.business.aop.MyAnnotation(name)) && arg(name) ")
apparemment c'est "args(name)" avec s
(RTFM: http://static.springsource.org/sprin...rence/aop.html !)
bon je vais essayer !
mais peux tu m'expliquer pourquoi insister sur l'argument dans l'expression dans ce cas précis?
merci
toujours une erreur au niveau de l'expression même en ajoutant args
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Caused by: java.lang.IllegalArgumentException: error at ::0 When using @annotation(<annotationType>(<annotationField>)), <annotationField> must be bound
disons pour le moment j'essaie de faire marcher le pointcut , je viens de supprimer l'attribut name d'ailleurs de mon annotation on peut donc oublier les args .
Cependant je ne comprends pas pourquoi ça ne marche pas!
Partager