May be get the annotation in the advisor implementation using MethodAdviceReceiver#getMethodAnnotation
On Oct 22, 2012, at 3:11 PM, Rural Hunter wrote: > δΊ 2012/10/22 17:02, Taha Siddiqi ει: >> Did you try invocation.getInstance().getAnnotation() ? > What is that for? I read the API and seems it's not what I needed. My > annotation is on methods being advised, not on the class instance. I also > tried invocation.getMethod().getAnnotations() and it returns an empty array. > I just googled and found an old post: > http://tapestry.1045711.n5.nabble.com/Plastic-amp-proxy-annotations-td4453361.html > > Seems annotation is not copied for methods by plastic...If it's still true, > is there anything else I can implement what I needed? My intention is to > audit methods call on my DAO services, including user information from > session, method names(or operation type: update/delete/insert etc.) and some > parameters(to get record id etc.), which I planed to implement by service > advising and annotation. >> >> On Oct 22, 2012, at 1:15 PM, Rural Hunter wrote: >> >>> Hi, >>> >>> I have an annotation: >>> @Documented >>> @Retention(RetentionPolicy.RUNTIME) >>> @Target(ElementType.METHOD) >>> public @interface Audit >>> { >>> String operate() default ""; >>> String desc() default ""; >>> int type(); >>> int idParamIndex() default 0; >>> } >>> >>> I put on some methods of my DAO services and advised them in AppModule: >>> >>> DAOInterface: >>> @Audit(type=1) >>> public void delete(int id) throws Exception; >>> >>> AppModule: >>> for (Method m : receiver.getInterface().getMethods()) >>> { >>> if (m.getAnnotation(Audit.class) != null) >>> { >>> System.out.println("advising "+m.getName()); >>> receiver.adviseMethod(m, advice); >>> } >>> } >>> >>> There is no problem and I can see the methods are advised by the System.out >>> above. But in the advise method, I can not get the Audit annotation: >>> public void advise(MethodInvocation invocation) >>> { >>> String methodName = invocation.getMethod().getName(); >>> Audit audit = invocation.getAnnotation(Audit.class); >>> System.out.println("method="+methodName+", audit="+audit); >>> invocation.proceed(); >>> } >>> >>> The above advise method is called and I can see the system.out is always >>> like this: "method=delete, audit=null". I need some information in the >>> Audit annotation but why I can not get the annotation instance? >>> >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org >>> For additional commands, e-mail: users-h...@tapestry.apache.org >>> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org >> For additional commands, e-mail: users-h...@tapestry.apache.org >> >> > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org > For additional commands, e-mail: users-h...@tapestry.apache.org > --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org