[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":
http://community.jboss.org/message/527195#527195
Author : suresh inala
Profile : http://community.jboss.org/people/inalasuresh
Message:
--------------------------------------------------------------
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?.
HelloWorldService.java
@WebServiceClient(name = "HelloWorldService")
*public* *class* HelloWorldService *extends* Service
{
}
Adding annotatins using javaassist
AddAnnotations.java
*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));
attr.setAnnotation(annotation);
proxyClass.getClassFile().addAttribute(attr);
classFile.setVersionToJava5();
// transform the classfile into bytecode
ByteArrayOutputStream bos = *new* ByteArrayOutputStream();
DataOutputStream os = *new* DataOutputStream(bos);
classFile.write(os);
os.close();
//get annotations from Class
all = proxyClass.getAnnotations();
int i=0;
for (Object object : all) {
System.out.println(all[i]);
i++;
}
*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