[weld-issues] [JBoss JIRA] (WELD-1131) Weld Proxies (for instance created by Producer-Method) loose Annotations put ontop of Methods of source class
P Huber (JIRA)
jira-events at lists.jboss.org
Fri May 11 03:38:18 EDT 2012
[ https://issues.jboss.org/browse/WELD-1131?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12692064#comment-12692064 ]
P Huber commented on WELD-1131:
-------------------------------
You're completely right - if copying the annotations from the produced class to the proxy then the "gap" is just put to another place in the inheritance hierarchie.
That would be for a proxied object that annotations of getClass() and getClass().getSuperclass() are equal, what might be source of some suprise, too ;-)
But actually then this should be documented somewhere and hopefully there's some API that I can find out if I handle a proxied object or not (same class can be proxied or not - depends on produce method scope, maybe one time with @RequestScoped and second time with @Singelton) so that I can handle it straightforward, maybe like: Class<T> c = BeanManager.getSourceClass(ofProbablyProxiedObject); Is there such a method?
---
If I start to think about it on larger context - the problem is inherently there with all that on the fly proxying - what if I CDI-produce (proxy level 2) a JPA entity (proxy level 1) which is proxied by JPA-Runtime ;-). Probably there should be some Standard on JEE-level for all those instrumentation/on-the-fly-proxy creating libs that allow a central API to handle getting the "original" Class back...
> Weld Proxies (for instance created by Producer-Method) loose Annotations put ontop of Methods of source class
> -------------------------------------------------------------------------------------------------------------
>
> Key: WELD-1131
> URL: https://issues.jboss.org/browse/WELD-1131
> Project: Weld
> Issue Type: Bug
> Components: Reflection layer
> Affects Versions: 1.1.8.Final
> Environment: glassfish 3.1.2
> Reporter: P Huber
> Assignee: Marko Lukša
> Fix For: 2.0.0.Alpha2
>
> Attachments: weld-forgets-annotation_WELD-1131.7z
>
>
> I have project specific Annotations ontop of public Methods of a class.
> class Customer {
> @MyProjectSpecificAnnotation
> public String getFirstName() {
> return firstName;
> }
> }
> When producing Objects of such an annotated class, like with
> class Example {
> @Produce
> Customer producerField;
> }
> Then at the Injection Side the Annotations "MyProjectSpecificAnnotation" is no longer available, because WELD injects a byte-code created proxy.
> class InjectionSide {
> @Inject
> Customer injectField; // here we get the WELD-Proxy of unpronouncable name...and no Annotations
> }
> I've used BeanIntrospector to reflect the injected Instance of class Customer. I get a set of PropertyDescriptors with a write/read Method each.
> But as allready said, none of them has the "MyProjectSpecificAnnotation".
> Could be due to the fact, that when subclassing a class, the Annotations of the super class are not available at sub class directly - But in Case of a "transparent" WELD proxy I'd expect they should be there. Probably you have to simply copy annotations during on-the-fly byte-code creation of the Proxy. The Problem is btw also true for javas built in Dynamic Proxy: using it you also loose Annotations.
> Hope you can fix that
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.jboss.org/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the weld-issues
mailing list