Hi Benedikt,

let's keep the `skip readonly property` behavior ATM, that is
something  BeanUtils users are already used to.
Same for null key, skip them.

Moreover, iterate over properties.entrySet()[1] instead of keySet().

all the best,
-Simo

[1] http://docs.oracle.com/javase/6/docs/api/java/util/Map.html#entrySet()

http://people.apache.org/~simonetripodi/
http://simonetripodi.livejournal.com/
http://twitter.com/simonetripodi
http://www.99soft.org/



On Sun, Feb 5, 2012 at 2:50 PM, Benedikt Ritter
<b...@systemoutprintln.de> wrote:
> Hi,
>
> I'm working on populate and tried to stick to the convention of throwing
> exceptions for illegal inputs:
>
> * passing null will cause NullPointerException
> * passing an empty Map will have no effect
> * passing a Map with null keys will cause NullPointerException
> * passing a Map with null values will set those properties to null
> * passing a Map with null values for primitive properties will cause a
> IllegalArgumentException
>
> But this is in contrast to BeanUtils1. Looking at the implementation of
> BeanUtilsBean.populate() I can see that:
>
> * passing null does nothing
> * passing an empty map does nothing
> * Null keys will be ignored
>
> Now I think, that throwing exceptions is better than just accepting every
> value. Am I right with that?
>
> Also, I'm wondering how populate should behave if a value for a read only
> property is passed. Looking at BeanUtils1 I've seen that
> BeanUtilsBean.populate() just ignores those properties (line 974 in
> BeanUtilsBean).
> Currently I've a pretty straight forward implementation:
>
> public void populate( Map<String, Object> properties ) throws
> IllegalAccessException, IllegalArgumentException, InvocationTargetException,
> NoSuchMethodException, IntrospectionException
> {
>    checkNotNull( properties, "Can not populate null!" );
>    for ( String propertyName : properties.keySet() )
>    {
>        checkNotNull( propertyName, "Null is not an allowed property key!" );
>        setProperty( propertyName ).withValue( properties.get( propertyName )
> );
>    }
> }
>
> Calling setProperty will result in a NoSuchMethodException been thrown, if
> there is no setter method for a given key. I thing that is convenient
> looking at the overall design of BeanUtils2.
>
> To sum this all up: How should populate() behave, if the property for a
> given key is read only?
>
> Regards,
> Benedikt
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
> For additional commands, e-mail: dev-h...@commons.apache.org
>

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

Reply via email to