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