Hi,
I am using Glassfish 3.1 with included Weld 1.1.0 final and Jersey 1.5. I defined a simple Jersey resource class and a managed bean, both annotated with @Model. I am injecting the managed bean into the Jersey resource class, which works fine. Apart from @Model, the managed bean is also annotated with some custom annotation, retention is RetentionPolicy.RUNTIME.
Here is some simplistic code to demonstrate what I'm doing:
Managed Bean:
@Model @MyAnnotation public class MyManagedBean { public MyManagedBean() { // intentionally left blank } }
Resource class:
@Path("myresource") @Model public class MyResource { @Inject private MyManagedBean myManagedBean; @GET @Path("/display") @Produces(MediaType.TEXT_HTML) public String display() { return Arrays.toString(myManagedBean.getClass().getAnnotations()); } }
Annotation:
@Retention(RetentionPolicy.RUNTIME) public @interface MyAnnotation { }
However, it seems that the generated Weld client proxy for the managed bean does not include the annotations. For example, if I do a
myManagedBean.getClass().getAnnotations()
an empty array is returned. This does not seem to be limited to custom annotations, since also the @Model annotation is missing.
The only way I found to access the annotatons is to cast the managed bean to TargetInstanceProxy, and call getTargetClass() like that:
((org.jboss.interceptor.util.proxy.TargetInstanceProxy)myManagedBean).getTargetClass().getAnnotations()
Obviously this is nothing I want in my code. So, my question is:
Thanks,
Hans