[jboss-user] [Javassist] New message: "problem adding annotations at runtime"

suresh inala do-not-reply at jboss.com
Fri Feb 19 04:20:35 EST 2010

User development,

A new message was posted in the thread "problem adding annotations at runtime":


Author  : suresh inala
Profile : http://community.jboss.org/people/inalasuresh

Hi One & All
I have a classfile called HelloWorldService with @WebServiceClient annotation. I want to use this classfile and need to be add one more annotation @HandlerChain using javaassist.
Code Snipped which I am working on.
When I am invoking the below code snipped I am getting only one annotation it is removing all the annotations and adding  the new one.
I am able to add annotation at runtime but it is adding only one annotation. But I want all the annotations? how to add multiple annotations?.
@WebServiceClient(name = "HelloWorldService")
*public* *class* HelloWorldService *extends* Service
Adding annotatins using javaassist
*public* *byte*[] makingAnnotationAtRuntime() *throws* Exception {
            ClassPool pool = ClassPool.+getDefault+();
            CtClass proxyClass = pool.get("HelloWorldService");
//get annotations from class called HelloWorldService
            Object[] all = proxyClass.getAnnotations();
            // get the class file and add the annotation
            ClassFile classFile = proxyClass.getClassFile();
            ConstPool constantPool = classFile.getConstPool();
            AnnotationsAttribute attr = *new* AnnotationsAttribute(constantPool,AnnotationsAttribute.+visibleTag+);
            Annotation annotation = *new* Annotation("javax.jws.HandlerChain", constantPool);
            annotation.addMemberValue("file", *new* StringMemberValue("HelloWorldService.xml",constantPool));
            // transform the classfile into bytecode
            ByteArrayOutputStream bos = *new* ByteArrayOutputStream();
            DataOutputStream os = *new* DataOutputStream(bos);
           //get annotations from Class
            all = proxyClass.getAnnotations();
            int i=0;
            for (Object object : all) {
            *return* bos.toByteArray();
When I run this I am getting the output : @javax.jws.HandlerChain(file="HelloWorldService_handler.xml")
But I want to get the other annotation as well. Original HelloWorldService Classfile contains @WebServiceClient(name = "HelloWorldService")
How can I get all annotations at run. Please suggest me I stuck to achieve this issue.
Please throw your thoughts.
*Thanks in Advance*
*        Suresh*


To reply to this message visit the message page: http://community.jboss.org/message/527195#527195

More information about the jboss-user mailing list