[ 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