You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@beehive.apache.org by "James Song (JIRA)" <be...@incubator.apache.org> on 2005/06/20 21:53:17 UTC
[jira] Closed: (BEEHIVE-149) Bean introspection fails for annotation-valued properties
[ http://issues.apache.org/jira/browse/BEEHIVE-149?page=all ]
James Song closed BEEHIVE-149:
------------------------------
A test is added by r191545 and passes.
> Bean introspection fails for annotation-valued properties
> ---------------------------------------------------------
>
> Key: BEEHIVE-149
> URL: http://issues.apache.org/jira/browse/BEEHIVE-149
> Project: Beehive
> Type: Bug
> Components: Controls
> Versions: V1Alpha
> Reporter: Kyle Marvin
> Assignee: James Song
> Priority: Minor
> Fix For: V1Beta
>
> BeanInfo introspection of a Control type that has a property that is based upon a JSR-175 annotation type will fail w/ an Introspection exception. The following is a sample exception, based upon the org.apache.beehive.controls.test.controls.basic.Hello test control included in the checkin tests:
> Caused by: java.beans.IntrospectionException: Method not found: setGender
> at java.beans.PropertyDescriptor.<init>(PropertyDescriptor.java:93)
> at java.beans.PropertyDescriptor.<init>(PropertyDescriptor.java:53)
> at org.apache.beehive.controls.test.controls.basic.HelloBeanBeanInfo.initPropertyDescriptors(HelloBeanBeanInfo.java:137)
> at org.apache.beehive.controls.test.controls.basic.HelloBeanBeanInfo.getPropertyDescriptors(HelloBeanBeanInfo.java:149)
> at java.beans.Introspector.getTargetPropertyInfo(Introspector.java:475)
> at java.beans.Introspector.getBeanInfo(Introspector.java:385)
> at java.beans.Introspector.getBeanInfo(Introspector.java:155)
> The rub is that the java.beans.PropertyDescriptor class expects to find a method with the following signature:
> public void setGender(Gender gender);
> while bean exposes the following instead:
> public void setGender(PropertyMap genderMap);
> This is because it is impossible to 'new' a JSR-175 annotation type and initialize its values, so the PropertyMap interface (and the corresponsing concrete impl, BeanPropertyMap) exists to abstract a collection of annotation type property values. You can create a BeanPropertyMap, push values into it, and then use it to set the (annotation-typed) property.
> The fix is to modify the BeanInfo codegen to use the java.beans.PropertyDescriptor constructor that takes actual java.lang.reflect.Methods as arguments, to explicitly specify the specific setter method on the bean class instead of allowing PropertyDescriptor to use the default algorithm.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira