$Id: RELEASE-NOTES.txt,v 1.6 2002/08/13 04:42:07 sanders Exp $ Commons BeanUtils Package Version 1.4 Release Notes INTRODUCTION: ============ This document contains the release notes for this version of the Commons BeanUtils package, and highlights changes since the previous version. NEW FEATURES: ============ Initial checkin of a way to wrap DynaBean APIs around the rows in a java.sql.ResultSet, along with associated test cases and docco updates. Please note that this does not support indexed or mapped properties. See org.apache.commons.beanutils.ResultSetDynaClass and ResultSetIterator. Added a new WrapDynaBean derivation, called ConvertingWrapDynaBean which will perform type conversion when the set(name, value) method is called. This is particularly useful when using a DynaBean to wrap a bean and configuring it by passing in Strings Infrastructure Enhancements: ---------------------------- BeanUtils can now be built using Maven. See http://jakarta.apache.org/turbine/maven for more details. DynaBeans Enhancements: ----------------------- Update usage documentation to note the restrictions that are due to the fact that the DynaBeans returned by iterator() are mapped directly to the current row of the result set. If you want to use the data outside the context of what is supported, you need to copy it, so document one way to "clone" the data with standard BasicDynaBean beans. DynaProperty is now serializable. BeanUtils Enhancements: ---------------------- Add BeanUtils.copyProperties() and associated BeanUtils.copyProperty() method, plus associated unit tests. BeanUtils.copyProperties() is similar to PropertyUtils.copyProperties(), but it attempts to perform type conversions needed to adapt to differences between the two beans. For example, it is common (especially in Struts applications) to use String properties in a form bean that receives values from an HTTP form, even though your corresponding model objects have int or boolean properties of the same name. Now, you can call BeanUtils.copyProperties() and have these conversions (or any other conversions for which you have registered a Converter with ConvertUtils.register()) automatically. BeanUtils.describe() now supports DynaBeans. 'NoSuchMethod for read only properties and NullPointer when populating primitives' patch submitted by Tomas Viberg. See http://marc.theaimsgroup.com/?l=jakarta-commons-dev&m=102331002605035&w=2 Made BeanUtils.setProperty() public. This is a useful method for those wishing to set a single property on a bean while still making use of the default conversion mechanism. ConvertUtils Enhancements: ------------------------- Add standard String->Class converter, based on a patch provided by Tomas Viberg. The only tweak I did was to make the class loading attempt to grab from the thread context class loader first (if it exists), and then from the class loader that loaded the ClassConverter class. Add new standard converters (and register them) for String to primitive array conversions (for example, String --> int[]), as well as String --> String[]. The syntax accepted by these converters is similar to that accepted by a Java compiler doing array initializers, with the following adjustments: * Only literal values of the appropriate type are recognized (i.e. no expressions) * Leading and trailing "{" and "}" are allowed, but optional * Commas between elements are considered to be whitespace, so that they are optional. Thus, you can initialize a three-element integer array with values 1, 2, and 3 with any of the following String values. "{ 1, 2, 3}" "1, 2, 3" "{ 1 2 3 }" "1 2 3" Quoted strings embedded in the initial String (delimited with either single or double quotes) are recognized by the rules of the java.io.StreamTokenizer class. This is particularly useful in the String --> String[] converter, where you can initialize array elements to a String that includes a comma or embedded quote character. MethodUtils Enhancements: ------------------------ Enhance BeanUtils.copyProperties() and PropertyUtils.copyProperties() such that, if the "origin bean" is a Map, it will be assumed to have keys that are simple property names and values that are the corresponding property values. BeanUtils.copyProperties() will additionally pass property values through an appropriate Converter. Enhance standard array Converter implementations to deal with String arrays as the input value. They now create an output array of the same size, and perform the appropriate String->primitive conversion for each element. Add unit tests for copyProperties() when the origin bean is a Map. New test cases for calling static methods. Improved primitive type checking, including the ability to call methods containing primitive parameters by passing the apropriate wrapping class (eg Integer for int). See: http://marc.theaimsgroup.com/?l=jakarta-commons-dev&m=102822664727735&w=2 and http://marc.theaimsgroup.com/?l=jakarta-commons-dev&m=102796703724338&w=2 PropertyUtils Enhancements: -------------------------- Support mapped keys that have periods in them, so that things like this will work correctly: PropertyUtils.getProperty("mapped_property(key.with.a.dot).blah"); Support an extension to the property expression syntax that is similar to the way the EL in JSTL and JSP 2.0 works: If property "a" is a Map, interpret "a.b" the same as "a(b)". This is similar to what the JSP/JSTL expression does when interpreting "a.b" as "a['b']" if "a" is a Map. Make PropertyUtils.copyProperties() support a DynaBean as the "orig" argument (it already worked as a "dest" argument). PropertyUtils.describe() now supports DynaBeans. BUG REPORTS ADDRESSED: ===================== 9868 BeanUtils.populate() throws IllegalArgumentException when setting indexed property as array. 10478 Can't use . (dot) in mapped properties 10655 Add ClassConverter to standard converters 10535 DynaActionForm, BeanUtils.populate, Unknown property 'multipartRequestHandler' 9582 Add "y/n" to BooleanConverter 8868 ConvertUtils.convert does not support zero-length arrays 8810 PropertyUtil.getPropertyType() should support MappedPropertyDecriptors