commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Tom Schindl <lis...@bestsolution.at>
Subject Re: [BeanUtils] Why does needs the method declaring a class to be public
Date Thu, 23 Nov 2006 09:27:22 GMT
Thanks Henri,

maybe we could make this configurable somehow. I can't read somewhere in
the spec of JavaBeans that you can't use inheritance.

Tom

Henri Yandell schrieb:
> JIRA reports are good - we've a big backlog in BeanUtils but it's
> starting to go down.
> 
> There are a couple of other similar issues (BEANUTILS-157 + BEANUTILS-87).
> 
> I don't know why the API is designed to only work with public methods;
> whether that's an aspect of adherence to the spec, by design or
> legacy. Seems that if we're going to use setAccessible, that we could
> just open it to package and private too.
> 
> Anyone know why MethodUtils intentionally limits itself?
> 
> Hen
> 
> On 11/22/06, Tom Schindl <listom@bestsolution.at> wrote:
>> Hi,
>>
>> Nobody any comments should I file a bug report against JIRA?
>>
>> Tom
>>
>> Tom Schindl schrieb:
>> > Hi,
>> >
>> > I have an issue the current implementation of
>> >
>> > MethodUtils#getAccessibleMethod(Method) where it reads:
>> >
>> > ------------8<------------
>> > if( Modifier.isPublic(clazz.getModifiers()) ) {
>> >
>> > }
>> >
>> > // Check the implemented interfaces and subinterfaces
>> > ------------8<------------
>> >
>> > With this check setting attributes on a class Hierarchy like the one
>> > below doesn't work:
>> >
>> > ------------8<------------
>> > class HiddenBean {
>> >       private String a;
>> >
>> >       protected HiddenBean() {
>> >
>> >       }
>> >
>> >       public void setA(String a) {
>> >               this.a = a;
>> >       }
>> >
>> >       public String getA() {
>> >               return this.a;
>> >       }
>> > }
>> >
>> > public class PublicBean extends HiddenBean {
>> >
>> > }
>> > ------------8<------------
>> >
>> > The problem is that big framework like e.g. Eclipse often use
>> > package-visible classes to not expose too much API to the user and you
>> > can't use BeanUtils currently to set values.
>> >
>> > I came across this problem when trying to provide an enhanced
>> version of
>> > XSWT which is not working in Eclipse 3.2 but not in 3.3 any more
>> because
>> > of this.
>> >
>> > What would be the problem to change the check to the following:
>> >
>> > MethodUtils#getAccessibleMethod(Method):
>> > ------------8<------------
>> > if( ! Modifier.isPrivate(clazz.getModifiers()) && !
>> > Modifier.isPackage(clazz.getModifiers()) ) {
>> >
>> > }
>> > ------------8<------------
>> >
>> > PropertyUtilsBean#invokeMethod(...):
>> > ------------8<------------
>> > method.setAccessible(true);
>> > return method.invoke(bean,values);
>> > ------------8<------------
>> >
>> > I first wanted to discuss this here and not creating an bug
>> immediately.
>> >
>> > Tom
>> >
>> > ---------------------------------------------------------------------
>> > To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
>> > For additional commands, e-mail: commons-dev-help@jakarta.apache.org
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
>> For additional commands, e-mail: commons-dev-help@jakarta.apache.org
>>
>>
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: commons-dev-help@jakarta.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org


Mime
View raw message