[
https://issues.jboss.org/browse/WELD-1131?page=com.atlassian.jira.plugin....
]
Marko Lukša commented on WELD-1131:
-----------------------------------
Yes, I've tested the version with
{{Introspector.getBeanInfo(injectField.getClass())}}. If I change the weld version to
2.0.0.Alpha2 it works, and if I change it back to your original version, it doesn't.
I've also stripped your example down to the bare minimum and created an arquillian
test from it (see
https://github.com/luksa/weld-core/commit/b991898647178d5cfebc3a6d237f386... )
The thing is, if you use reflection, you will (probably?) always need to know that there
are proxies involved and handle them appropriately.
Simply copying all the annotations to the proxy probably wouldn't solve all the
problems. Imagine having an annotation on class A and on its subclass B. If we create a
proxy for B, should we only copy annotations from B or also from A? If we copy only those
from B, then you'd still have to know that the class you're dealing with is a
proxy, and to get to annotations declared on A, you'd have to use
bProxy.getSuperClass().getSuperClass().getAnnotations() (instead of simply
b.getSuperClass().getAnnotations()).
Actually, I'm not sure how this is handled in Weld 2.0.
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