Hi,
I'm still fighting with the annotation problem. I've made a code clean up, and now
I've got the following piece of code:
| // make a new class
| CtClass newProxyClass = pool.makeClass( subProxyClassName );
| newProxyClass.setSuperclass( baseProxyClass );
|
| // place a default constructor in the new class
| CtConstructor constructor = new CtConstructor(null, newProxyClass );
| constructor.setBody(";");
| newProxyClass.addConstructor(constructor);
|
| // get the class file and add the annotation
| ClassFile classFile = newProxyClass.getClassFile();
| ConstPool constantPool = classFile.getConstPool();
| AnnotationsAttribute attr = new AnnotationsAttribute(constantPool,
AnnotationsAttribute.visibleTag);
| javassist.bytecode.annotation.Annotation a = new
javassist.bytecode.annotation.Annotation(this.annotationClassName, constantPool);
| attr.setAnnotation(a);
| classFile.addAttribute(attr);
| classFile.setVersionToJava5();
|
| // transform the classfile into bytecode
| ByteArrayOutputStream bos = new ByteArrayOutputStream();
| DataOutputStream os = new DataOutputStream( bos );
| classFile.write( os );
| os.close();
|
| // load the class
| return this.defineClass(subProxyClassName, bytecode, 0, bytecode.length);
|
at runtime no exception are thrown, but the new class still has no annotation added!
Then I saved the bytecode to a file in two cases, the above piece of code and the one
without the addAttribute, and I can see they are different, so it seems as the annotation
is added, but it is not visible to the runtime system.
Please, any suggestion is appreciated!!!
Thanks,
Luca
View the original post :
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4135894#...
Reply to the post :
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&a...