[ http://issues.apache.org/jira/browse/EL-13?page=comments#action_12429971 
] 
            
Joe Littlejohn commented on EL-13:
----------------------------------

I've updated the fix as per your case observation.

I don't think the fix is too expensive for three reasons: -

1. It happens during initialize, which only occurs once for any given bean type.

2. Although there is nested iteration, the second iteration *only* occurs when 
there is a Boolean property with no getter found. It's not like this is going 
to be doing nested iteration for every bean type, slowing down all EL parsing.

3. With the advent of auto-boxing, many more developers are supposed to be able 
to throw off the shackles of primitive types. This is a major obstruction to 
this. Yes, the Java Bean Spec indicates that only the boolean type has the 
option of an "is" method, however this was written long before auto-boxing was 
conceived. The new paradigm for primitive types in Java 5.0 would clearly imply 
that a Boolean return type would warrant an "is" prefix.

As an alternative solution, some simple decoupling would allow the BeanInfo 
object to be returned from a configured factory. The default implementation of 
this factory would look like: -

class DefaultBeanInfoFactory implements BeanInfoFactory {
    public BeanInfo getBeanInfo(Class clazz) throws IntrospectionException {
        return Introspector.getBeanInfo (mBeanClass);
    }
}

But this would allow users to create their own factory. In my case I could 
create a factory that used the Introspector (but also did my 
AdditionalIntrospection step). 

For me this (arguable) bug is compounded by the fact that Tomcat, Commons EL 
and java.beans.Introspector are so tightly coupled.

> Boolean bean property not found due to Introspector limitation
> --------------------------------------------------------------
>
>                 Key: EL-13
>                 URL: http://issues.apache.org/jira/browse/EL-13
>             Project: Commons EL
>          Issue Type: Bug
>    Affects Versions: 1.0 Final
>         Environment: Windows XP, Java 1.5.0_07-b03, Tomcat 5.5.17
>            Reporter: Joe Littlejohn
>         Attachments: AdditionalIntrospection.java, 
> AdditionalIntrospection.java, el_exception.txt
>
>
> There is a bug in the java.beans.Introspector which means that it cannot find
> the read method for a property of Boolean type (because it looks for the "get"
> prefix, not the "is" prefix). This is arguably the expected behaviour of the
> Introspector, however since the java.beans.PropertyDescriptor acts differently
> (it can identify the property read method), this inconsistency hints it's a 
> bug.
> Also, with the advent of autoboxing, developers are supposed to be able to 
> free
> themselves from primitive types.
> The commons EL library is affected by this bug, so using an interface like: -
> public interface Bean {
>     Boolean isEnabled();
> }
> and an expression like: -
> ${bean.enabled}
> fails with an ELException saying that the property could not be found (see
> attached log snippet).
> WebLogic does not suffer from this problem, presumably because they implement
> their own EL parser (don't use commons.el) which doesn't use the 
> Introspector. I
> have written a suggested workaround for this problem which would allow the
> commons.el library to continue its use of the Introspector, but deal with this
> flaw (see attached). The AdditionalIntrospection could be used in the
> BeanInfoManager.initialise() method, like so: -
> PropertyDescriptor [] pds = mBeanInfo.getPropertyDescriptors ();
> pds = AdditionalIntrospection.findMissingMethods(mBeanClass, pds); // new step

-- 
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

        

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to