Bug in Annotation (Take 2) ?
gedl Nov 24, 2005 2:10 PMHello,
First of all I must say that I have little experience with javassist (I begun using it last week).
What I need to to is to process a couple of classes searching for any method containing a specific custom annotation (say pacote.Anotacao).
In the class i declare the method like this (in the Content class):
@pacote.Anotacao public String getDescription() { return description; }
With javassist I do the following:
CtClass cc = cp.get(className); CtMethod[] methods = cc.getDeclaredMethods(); for (int i = 0; i < methods.length; i++) { CtMethod m = methods; Object[] annotations = m.getAnnotations(); }
The problem is that m.getAnnotations() rises a java.lang.ClassNotFoundException when I'm processing the annotated method (see above).
I've inspected javassist's code but I failed to spot what was wrong (I only noticed that the error rises from a Class.forName(...,...,...) as expected given the thrown exception.
The pojnt is that this very same class (pacote.Anotacao) is processed in the same way the class Content is and it loads sucessfully.
Note: I'm lauching the javassist's code from an Ant task, fact that I think its irrelevant for this case.
Below I show you the stack trace hopping that it helps you helping me :)
[mytask] java.lang.ClassNotFoundException: pacote.Anotacao [mytask] at java.net.URLClassLoader$1.run(URLClassLoader.java:200) [mytask] at java.security.AccessController.doPrivileged(Native Method) [mytask] at java.net.URLClassLoader.findClass(URLClassLoader.java:188) [mytask] at java.lang.ClassLoader.loadClass(ClassLoader.java:306) [mytask] at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268) [mytask] at java.lang.ClassLoader.loadClass(ClassLoader.java:251) [mytask] at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319) [mytask] at java.lang.Class.forName0(Native Method) [mytask] at java.lang.Class.forName(Class.java:242) [mytask] at javassist.bytecode.annotation.MemberValue.loadClass(MemberValue.java:51) [mytask] at javassist.bytecode.annotation.Annotation.toAnnotationType(Annotation.java:281) [mytask] at javassist.CtClassType.toAnnotationType(CtClassType.java:404) [mytask] at javassist.CtBehavior.getAnnotations(CtBehavior.java:112) [mytask] at injector.Inject.inject(Inject.java:79) [mytask] at antTask.InjectAccessControl.execute(InjectAccessControl.java:56) [mytask] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275) [mytask] at org.apache.tools.ant.Task.perform(Task.java:364) [mytask] at org.apache.tools.ant.Target.execute(Target.java:341) [mytask] at org.apache.tools.ant.Target.performTasks(Target.java:369) [mytask] at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1216) [mytask] at org.apache.tools.ant.Project.executeTarget(Project.java:1185) [mytask] at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:40) [mytask] at org.eclipse.ant.internal.ui.antsupport.EclipseDefaultExecutor.executeTargets(EclipseDefaultExecutor.java:32) [mytask] at org.apache.tools.ant.Project.executeTargets(Project.java:1068) [mytask] at org.eclipse.ant.internal.ui.antsupport.InternalAntRunner.run(InternalAntRunner.java:423) [mytask] at org.eclipse.ant.internal.ui.antsupport.InternalAntRunner.main(InternalAntRunner.java:137)