$Id: RELEASE-NOTES.txt 687228 2008-08-20 03:38:24Z niallp $ Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. Commons BeanUtils Package Version 1.8.0 Release Notes INTRODUCTION: ============ This document contains the release notes for this version of the Commons BeanUtils package, and highlights changes since the previous version. For more information on Commons BeanUtils, see o http://commons.apache.org/beanutils/ Compatibility with 1.7.0 ======================== BeanUtils 1.8.0 is binary compatible release with Beanutils 1.7.0, containing a number of bug fixes and enhancements. Compatibility with 1.8.0-BETA ============================= There are a number of incompatible changes with the BeanUtils 1.8.0-BETA release: - AbstractConverter - constructor signatures are different and getDefaultType() method is now abstract - DateTimeConverter - now an abstract class and constructor signatures are different - NumberConverter - now an abstract class and constructor signatures are different ENHANCEMENTS: ============= Expression Resolver ------------------- Prior versions of BeanUtils duplicated the logic required to "resolve" expressions and suffered from inconsistency as a result. A new plugable Resolver has been introduced in BeanUtils 1.8.0 which removes that duplication, makes all expression resolution consistent and allows different expression syntax flavours to be plugged in. As well as this BeanUtils now has improved support for nested Map and indexed properties. Conversion ---------- The converter implementations have been significantly improved in this release: 1) Arrays: A new "generic" ArrayConverter has been introduced which delegates the individual component conversion to an appropriate Converter for the component type. 2) Numbers: All numeric Converters now handle conversion between numeric types and have improved conversion facilities to and from Strings based on formats and/or a specified Locale. 3) Dates: Improvements to the existing SQL Date, Time and Timestamp converters now handle conversion between Date/Calendar types and have improved conversion facilities to and from Strings based on formats and/or a specified Locale. New java.util.Date and Calendar converter implementations have been added. Prior versions of BeanUtils delegated all conversion to String to the registered String Converter. All Converter implementations provided by BeanUtils can now handle conversion to String (as well as from) for their type. New ConvertUtils lookup/convert methods have been added which delegate conversion to String appropriately. However existing convert methods work as before to retain compatibility, but can be switched to the new behaviour by configuring the BeanUtilsBean2 / ConvertUtilsBean2 implementations. Errors ------ Exception messages have been improved, providing more information relating to where the failure occured. For JDK 1.4+ where BeanUtils catches exceptions and throws new ones - the cause is now being intialized. The following is a list of the enhancements in this release, with their Jira issue number: * [BEANUTILS-259] - Plugable Property Name Expression Resolver * [BEANUTILS-258] - Improve Converter Implementations * [BEANUTILS-242] - Add general array type conversion * [BEANUTILS-255] - Date and Calendar Converter implementations * [BEANUTILS-239] - Better implementation of SqlDateConverter * [BEANUTILS-286] - New Facade converter implementation - hides non-Converter public APIs * [BEANUTILS-229] - Add "t/f" to BooleanConverter * [BEANUTILS-43] - Support Mapped property inside a mapped property * [BEANUTILS-113] - Support Indexed property inside a mapped property * [BEANUTILS-247] - Support Arrays with multiple dimensions * [BEANUTILS-207] - Include bean class in the message of PropertyUtilsBean exceptions. * [BEANUTILS-224] - Provide better error message for "argument type mismatch". * [BEANUTILS-30] - Improve message for "Unknown property" * [BEANUTILS-193] - MethodUtils.invoke for static methods * [BEANUTILS-266] - Log or throw exception in PropertyUtilsBean. Added mechanism to initialize the "cause" on an Exception using reflection for JDK 1.4+ * [BEANUTILS-185] - Map decorator for DynaBeans to allow BeanUtils to operate with technologies such as JSTL * [BEANUTILS-233] - Implement equals() and hashCode() methods for DynaProperty * [BEANUTILS-310] - Provide facility to configure and clear MethodUtils cache BUG REPORTS ADDRESSED: ===================== The following is a list of the bugs fixed since the 1.8.0-BETA release, with their Jira issue number: * [BEANUTILS-265] - Allow access to non public class's public methods from a public sub-classes * [BEANUTILS-291] - Circular Reference on WeakHashMap * [BEANUTILS-294] - BeanUtilsBean.setProperty() does not support nested map * [BEANUTILS-295] - Unnecessary Garbage Objects in Class PropertyUtilsBean * [BEANUTILS-297] - ConvertingWrapDynaBean hides cause exceptions * [BEANUTILS-298] - MethodUtils.getAccessibleMethod(Method method) could not find right public method * [BEANUTILS-302] - NPE in ArrayConverter when converting a non-quoted string with underscores to a string array * [BEANUTILS-306] - LocaleConvertUtilsBean.convert throws NPE on null Locale when debug logging is enabled * [BEANUTILS-318] - Fix WeakHashMap is not thread safe in MethodUtils using new FastWeakHashMap * [BEANUTILS-319] - PropertyUtils.getPropertyType fails for DynaBeans contained within a normal bean * [BEANUTILS-326] - Iterating by a Map' key/value pairs in BeanUtilsBean and PropertyUtilsBean The following is a list of the bugs fixed since the 1.7.0 release, with their Jira issue number: * [BEANUTILS-243] - BeanUtils fails to compile under 1.6 * [BEANUTILS-49] - Lock in BeanUtilsBean.getInstance * [BEANUTILS-157] - Beanutils's describe() method cannot determine reader methods for anonymous class * [BEANUTILS-158] - Beanutils's - added warning about describe behaviour to the javadocs * [BEANUTILS-249] - Beanutils's setProperty() does not convert objects using custom converters properly * [BEANUTILS-274] - BeanUtils cannot set property of type Long with value of Double * [BEANUTILS-168] - BeanUtils's copyProperties(List, List) does not work - add warning about this * [BEANUTILS-17] - BeanUtils's copyProperties - IllegalArgumentException when property types don't match * [BEANUTILS-199] - BeanUtils's setProperty is over-zealous at converting types * [BEANUTILS-68] - BeanUtils's setProperty - mapped property requires a setter for a map, but never uses it * [BEANUTILS-110] - BeanUtils's getArrayProperty does not use ConvertUtils * [BEANUTILS-6] - MappedPropertyDescriptor - replace copied code * [BEANUTILS-69] - MappedPropertyDescriptor doesn't recognize boolean property accessor * [BEANUTILS-140] - LocaleBeanUtils setProperty does not work on nested property * [BEANUTILS-59] - Memory leak on webapp undeploy in WrapDynaClass * [BEANUTILS-156] - Memory leak on webapp undeploy in MappedPropertyDescriptor * [BEANUTILS-87] - Package scope implementation of a public interface for mapped property fails (fixed by changes to MappedPropertyDescriptor associated with BEANUTILS-6) * [BEANUTILS-33] - PropertyUtils incosistency - can't use "dot" in mapped properties for setProperty or getPropertyDescriptor (fixed by the changes for BEANUTILS-259 Plugable Property Name Expression Resolver). * [BEANUTILS-273] - PropertyUtils doesn't recognize public methods overriden in anonymous or private subclasses. * [BEANUTILS-88] - PropertyUtils's isReadable() and isWriteable() methods always return false for mapped properties. * [BEANUTILS-61] - PropertyUtils's isReadable() and isWriteable() methods do not work correctly for WrapDynaBean * [BEANUTILS-18] - PropertyUtils's isReadable() and PropertyUtils.getProperty() not consistent * [BEANUTILS-92] - PropertyUtils's copyProperties() does not catch NoSuchMethodException * [BEANUTILS-256] - PropertyUtils's getIndexedProperty() javadoc should indicate IndexOutOufBoundsException can be thrown rather than just ArrayIndexOutOufBoundsException * [BEANUTILS-162] - PropertyUtils's getNestedProperty() doesn't allow getXxxx on Map-Instances any longer * [BEANUTILS-262] - Correct getPropertyDescriptor() and setNestedProperty() methods to throw a NestedNullException rather than just IllegalArgumentException (consistent with the getNestedProperty() method). * [BEANUTILS-97] - Problems on indexed property with JDK 1.4 * [BEANUTILS-78] - DecimalLocaleConverter and subClasses never throw a ConversionException * [BEANUTILS-44] - FloatLocaleConverter cannot parse negative values * [BEANUTILS-263] - Improve ClassConverter robustness * [BEANUTILS-271] - DateLocaleConverter does not always throw an Exception for invalid dates * [BEANUTILS-288] - Don't try parsing values that are already Dates/Numbers in Date/Number locale Converters * [BEANUTILS-23] - Misleading error message in ConvertingWrapDynaBean * [BEANUTILS-36] - WrapDynaBeanTestCase failing with jikes/kaffe because of static List in TestBean * [BEANUTILS-24] - LazyDynaBean - don't try and instantiate properties of type Object.class. * [BEANUTILS-133] - LazyDynabean JavaDoc corrections * [BEANUTILS-250] - LazyDynaClass can create a DynaProperty with a "null" type * [BEANUTILS-289] - JDBCDynaClass "lowerCase" option causes problems in RowSetDynaClass and ResultSetIterator * [BEANUTILS-142] - RowSetDynaClass fails to copy ResultSet to DynaBean with Oracle 10g JDBC driver * [BEANUTILS-241] - BeanComparator throws wrong exception and hides cause * [BEANUTILS-112] - Deprecate the public static defaultTransformers HashMap and make it unmodifiable. * [BEANUTILS-267] - BeanComparator(String, Comparator) should check the comparator for null and default to ComparableComparator.getInstance() * [COLLECTIONS-22] - BeanMap: Fix internal variable to not include non-existant write methods. TASKS: ===== The following is a list of the tasks completed in this release, with their Jira issue number: * [BEANUTILS-290] - Merge Bean-Collections back into core BeanUtils and remove Bean-Collections sub-project * [BEANUTILS-287] - Missing unit tests using ant and unit test errors using maven * [BEANUTILS-217] - Improvements to maven build * [BEANUTILS-54] - Add Implementation-Vendor-Id entry to jar's manifest. * [BEANUTILS-254] - Run Checkstyle/PMD on the source and fixe highlighted issues up * [BEANUTILS-280] - Check binary compatibility with version 1.7.0 * [BEANUTILS-22] - Larger warning fixes. * [BEANUTILS-55] - Warning fixes. * [BEANUTILS-121] - Easy warning fixes.