[ 
https://issues.apache.org/jira/browse/BEANUTILS-61?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Niall Pemberton updated BEANUTILS-61:
-------------------------------------

    Assignee: Niall Pemberton
     Summary: PropertyUtilsBean isReadable() and isWriteable() methods do not 
work correctly for WrapDynaBean  (was: [beanutils] PropertyUtilsBean does not 
work correctly for WrapDynaBean)

> PropertyUtilsBean isReadable() and isWriteable() methods do not work 
> correctly for WrapDynaBean
> -----------------------------------------------------------------------------------------------
>
>                 Key: BEANUTILS-61
>                 URL: https://issues.apache.org/jira/browse/BEANUTILS-61
>             Project: Commons BeanUtils
>          Issue Type: Bug
>          Components: DynaBean
>    Affects Versions: Nightly Builds
>         Environment: Operating System: other
> Platform: All
>            Reporter: Brian Ewins
>            Assignee: Niall Pemberton
>            Priority: Minor
>             Fix For: 1.8.0
>
>
> Try this: given any pojo class MyBean.java,
> MyBean orig = new MyBean();
> MyBean dest = new MyBean();
> DynaBean db = new WrapDynaBean(dest);
> PropertyUtils.copyProperties(db, orig);
> You'll see an exception like:
> java.lang.IllegalArgumentException: Property 'class' has no write method
>         at 
> org.apache.commons.beanutils.WrapDynaBean.set(WrapDynaBean.java:266)
> This surprised me because 'copyProperties()' does an 'isWritable()' check 
> before
> it sets properties. However, what PropertyUtilsBean.isWritable actually does 
> is
> this:
> if (bean instanceof DynaBean) {
>             // All DynaBean properties are writeable
>             return (((DynaBean) bean).getDynaClass().getDynaProperty(name) != 
> null);
> } ...
> That's plainly wrong for a WrapDynaBean, since pretty much every wrapped 
> object
> has a non-writable 'class' property. 
> A workaround for the immediate problem:
> if (db instanceof WrapDynaBean) {
>   PropertyUtils.copyProperties(((WrapDynaBean) db).getInstance(), src);
> } else {
>   PropertyUtils.copyProperties(dest, src);
> }
> ... the problem affects isReadable and isWritable, and hence copyProperties; 
> to
> fix it for all cases would (I think) require unwrapping any WrapDynaBeans 
> passed
> into those calls.
> I guess having a situation where you'd use PropertyUtils /and/ WrapDynaBeans 
> is
> fairly unusual so this is just a minor bug.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


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

Reply via email to