<?xml version="1.0"?>
<!--
   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.
-->

<!-- This file is used by the maven-changes-plugin to generate the release notes. Useful ways of finding items to add to
  this file are: 1. Add items when you fix a bug or add a feature (this makes the release process easy :-). 2. Do a Jira search
  for tickets closed since the previous release. 3. Use the report generated by the maven-changelog-plugin to see all SVN commits.
  Set the project.properties' maven.changelog.range property to the number of days since the last release. The <action> type
  attribute can be add,update,fix,remove. -->
<document xmlns="http://maven.apache.org/changes/1.0.0"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://maven.apache.org/changes/1.0.0 http://maven.apache.org/xsd/changes-1.0.0.xsd">
  <properties>
    <title>Release Notes</title>
  </properties>
  <body>

    <release version="2.0.0" date="2018-MM-DD" description="Update from Java 6 to 7, update from Apache Commons Collection 3 to 4.">
      <action issue="BEANUTILS-504" dev="ggregory" type="update" due-to="Gary Gregory">
        Update from Java 6 to 7.
      </action>
      <action issue="BEANUTILS-515" dev="ggregory" type="update" due-to="Gary Gregory">
        Update from Java 7 to 8.
      </action>
      <action issue="BEANUTILS-503" dev="ggregory" type="update" due-to="Gary Gregory">
        Change packaging from org.apache.commons.beanutils to org.apache.commons.beanutils2.
      </action>
      <action issue="BEANUTILS-500" dev="dbrosius" type="update" due-to="Dave Brosius, Gary Gregory">
        Upgrade from Apache Commons Collections 3 to 4.
      </action>
      <action issue="BEANUTILS-505" dev="ggregory" type="update" due-to="Gary Gregory">
        Add missing serialVersionUID to Serializable classes.
      </action>
      <action issue="BEANUTILS-512" dev="ggregory" type="update" due-to="Gary Gregory">
        Add Automatic-Module-Name entry to MANIFEST.MF.
      </action>
      <action issue="BEANUTILS-514" dev="ggregory" type="update" due-to="Gary Gregory">
        Remove deprecated code for 2.0.0.
      </action>
      <action issue="BEANUTILS-509" dev="ggregory" type="update" due-to="sunil, Akshay Gehi">
        WeakHashmap enters into infinite loop in WrapDynaClass.java.
      </action>
    </release>

    <release version="1.9.3" date="2016-09-21" description="Bug fix release, now builds with Java 8">
      <action issue="BEANUTILS-433" dev="ggregory" type="update" due-to="Benedikt Ritter, Gary Gregory">
        Update dependency from JUnit 3.8.1 to 4.12.
      </action>
      <action issue="BEANUTILS-465" dev="oheger" type="fix" due-to="Daniel Atallah">
        Indexed List Setters no longer work
      </action>
      <action issue="BEANUTILS-469" dev="ggregory" type="update" due-to="Gary Gregory">
        Update commons-logging from 1.1.1 to 1.2.
      </action>
      <action issue="BEANUTILS-470" dev="oheger" type="fix" due-to="Tommy Tynj&#228;">
        Precision lost when converting BigDecimal
      </action>
      <action issue="BEANUTILS-474" dev="ggregory" type="update" due-to="Michael Grove">
        FluentPropertyBeanIntrospector does not use the same naming algorithm as DefaultBeanIntrospector.
      </action>
      <action issue="BEANUTILS-477" dev="oheger" type="fix">
        Changed log level of warnings from FluentPropertyBeanIntrospector; exceptions are no longer logged with level WARN.
      </action>
      <action issue="BEANUTILS-482" dev="ggregory" type="update" due-to="Gary Gregory">
        Update commons-collections from 3.2.1 to 3.2.2. (CVE-2015-4852)
      </action>
      <action issue="BEANUTILS-490" dev="ggregory" type="update" due-to="Gary Gregory">
        Update Java requirement from Java 5 to 6.
      </action>
      <action issue="BEANUTILS-492" dev="stain" type="update" due-to="Stian Soiland-Reyes">
        IndexedPropertyDescriptor not supported for List in Java 8
      </action>
      <action issue="BEANUTILS-493" dev="stain" type="fix" due-to="Bernhard Seebass">
        Exception when setting indexed properties: "Default conversion to ArrayList failed"
      </action>
      <action issue="BEANUTILS-495" dev="stain" type="update" due-to="Stian Soiland-Reyes">
        DateConverterTestBase fails on M/d/yy in Java 9
      </action>
      <action issue="BEANUTILS-496" dev="stain" type="update" due-to="Stian Soiland-Reyes">
        testGetDescriptorInvalidBoolean fails on Java 9
      </action>
    </release>

    <release version="1.9.2" date="2014-05-29"
      description="Added a new BeanIntrospector for addressing a potential class loader vulnerability">
      <action dev="oheger" type="add" issue="BEANUTILS-463">
        Class loader vulnerability in DefaultResolver ()
      </action>
      <action dev="oheger" type="fix" issue="BEANUTILS-458" due-to="Manuel Dominguez Sarmiento ">
        BaseLocaleConverter.checkConversionResult() fails with
        ConversionException when result is null when it should not
      </action>
    </release>

    <release version="1.9.1" date="2014-01-11" description="Bug fix for 1.9.0">
      <action dev="oheger" type="fix" issue="BEANUTILS-456">
        Write methods for PropertyDescriptors created during custom introspection are lost
      </action>
    </release>

    <release version="1.9.0" date="2013-12-11" description="Upgrade to Java 5 including generics where possible">
      <action dev="oheger" type="add" issue="BEANUTILS-455">
        WrapDynaBeans always use the default PropertyUtilsBean instance
      </action>
      <action dev="oheger" type="update" issue="BEANUTILS-454">
        BeanUtilsBean.copyProperties() throws conversion exception for null Date
      </action>
      <action dev="oheger" type="update" issue="BEANUTILS-452">
        Add generics
      </action>
      <action dev="oheger" type="update" issue="BEANUTILS-449">
        LocaleConverters do not take the target type into account
      </action>
      <action dev="oheger" type="update" issue="BEANUTILS-448">
        LocaleConverters do not check their default value
      </action>
      <action dev="oheger" type="update" issue="BEANUTILS-447">
        LazyDynaList.toArray() is not conform to the contract defined by the
        Collection interface
      </action>
      <action dev="oheger" type="update" issue="BEANUTILS-446">
        Some of the converters ignore the passed in target type
      </action>
      <action dev="oheger" type="update" issue="BEANUTILS-445">
        Converters can return an invalid result object if a default value is set
      </action>
      <action dev="oheger" type="update" issue="BEANUTILS-441" due-to="Samir Kerroumi">
        Replace UnmodifiableSet.decorate with Collections.unModifiableSet
      </action>
      <action dev="britter" type="update" issue="BEANUTILS-436">
        Replace package.html with package-info.java
      </action>
      <action dev="britter" type="update" issue="BEANUTILS-438">
        Add @Deprecated and @Override Annotations
      </action>
      <action dev="britter" type="update" issue="BEANUTILS-437">
        Replace Date and Revision SVN keywords with Id
      </action>
      <action dev="britter" type="update" issue="BEANUTILS-431">
        Remove @author tags and move missing authors to pom.xml
      </action>
      <action dev="britter" type="update" issue="BEANUTILS-432">
        Switch to Java 1.5
      </action>
      <action dev="oheger" type="add" issue="BEANUTILS-428">
        Provide a BeanIntrospector implementation which supports properties in a fluent API
      </action>
      <action dev="oheger" type="add" issue="BEANUTILS-425">
        Support customization of introspection mechanism
      </action>
      <action dev="britter" type="fix" issue="BEANUTILS-411" due-to="Marcus Zander">
        BeanUtilsBean.setProperty throws IllegalArgumentException if getter of nested property returns null
      </action>
      <action dev="britter" type="update" issue="BEANUTILS-429">
        Delete trailing white spaces and white spaces on empty lines from all files
      </action>
      <action dev="britter" type="update" issue="BEANUTILS-427">
        Configure Checkstyle to check for trailing white spaces and white spaces on empty lines
      </action>
      <action dev="britter" type="fix" issue="BEANUTILS-408">
        MethodUtils.invokeMethod() throws NullPointerException when args==null
      </action>
      <action dev="britter" type="fix" issue="BEANUTILS-426">
        ConstructorUtils.invokeConstructor(Class klass, Object arg) throws
        NullPointerException when arg==null
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-380" due-to="Brendan Nolan">
        BeanMap methods should initialize the root cause of exceptions that are thrown
        when running on JDK 1.4+
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-379">
        Remove copied Collection classes.
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-378" due-to="Christian Schneider">
        BeanMap does not work in osgi (fixed by BEANUTILS-379)
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-381" due-to="Todd Nine">
        MethodUtils getMatchingAccessibleMethod() does not correctly handle inheritance
        and method overloading.
      </action>
    </release>

    <release version="1.8.3" date="2010-03-28" description="Bug fix for 1.8.2">
      <action dev="niallp" type="fix" issue="BEANUTILS-373" due-to="Andrew Sunde">
        MethodUtils is not thread safe because WeakFastHashMap which uses WeakHashMap is not thread-safe
        (duplicate of BEANUTILS-318 which was not fixed properly in BeanUtils 1.8.0).
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-371" due-to="David Tonhofer">
        Add constructors which have useColumnLabel parameter to ResultSetDynaClass and RowSetDynaClass.
      </action>
    </release>

    <release version="1.8.2" date="2009-11-13" description="Bug fix for 1.8.1">
      <action dev="niallp" type="fix" issue="BEANUTILS-368" due-to="Peter Fassev">
        NullPointerException in BeanUtilsBean .setProperty()
      </action>
    </release>

    <release version="1.8.1" date="2009-10-20" description="Bug fixes for 1.8.0">
      <action dev="niallp" type="fix" issue="BEANUTILS-300" due-to="Henri and Sebb">
        NPE in LazyDynaList
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-327" due-to="Sascha Riemann">
        JDBCDynaClass throws class not found exception under java6
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-336" due-to="Sebb">
        MappedPropertyDescriptor#reLoadClass() possible NPE / odd code; also swallows Throwable
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-339" due-to="Alan Escreet">
        BeanUtilsBean.setProperty throws IllegalArgumentException if value is null
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-345" due-to="Simone Riccucci">
        BeanUtilsBean.setProperty does not handle some kind of nested properties
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-347" due-to="Eickvonder">
        MappedPropertyDescriptor throws an exception after method reference has been garbage collected
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-349" due-to="Eivind Tagseth">
        copyProperties throws NullPointerException if an IllegalArgumentException is thrown due to a null value parameter for a primitive
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-351" due-to="Lucian Chirita">
        FloatLocaleConverter cannot parse 0
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-354" due-to="Anders Wallgren">
        Type in BooleanConverter: "Cna't convert value"
      </action>
      <action dev="niallp" type="update" issue="BEANUTILS-333" due-to="Lukasz Lenart">
        Avoid calling setAccessible() if not needed
      </action>
      <action dev="niallp" type="update" issue="BEANUTILS-344" due-to="Viral">
        Method createDynaProperty of JDBCDynaClass should first look for column label instead of column name in ResultSetMetadata
        object..
      </action>
      <action dev="niallp" type="update" issue="BEANUTILS-350" due-to="rodrigo hernandez">
        change visibility of method "evaluateValue" belongs to the class BeanPropertyValueEqualsPredicate to "protected".
      </action>
    </release>

    <release version="1.8.0" date="2008-09-01" description="Converter improvements, Plugable expression Resolver and bug fixes for 1.7.0">
      <action dev="niallp" type="fix" issue="BEANUTILS-265" due-to="Tom Schindl and Romain Muller">
        Allow access to non public class's public methods from a public sub-classes.
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-291" due-to="Clebert Suconic ">
        Circular Reference on WeakHashMap.
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-294" due-to="Stephen Leung">
        BeanUtilsBean.setProperty() does not support nested map.
      </action>
      <action dev="bayard" type="fix" issue="BEANUTILS-295" due-to="Stefan Wohlgemuth">
        Unnecessary Garbage Objects in Class PropertyUtilsBean.
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-297" due-to="Alex Tkachev">
        ConvertingWrapDynaBean hides cause exceptions.
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-298" due-to="Roman Mukhin">
        MethodUtils.getAccessibleMethod(Method method) could not find right public method.
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-302" due-to="Martin Bartlett">
        NPE in ArrayConverter when converting a non-quoted string with underscores to a string array.
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-306" due-to="Lucian Chirita">
        LocaleConvertUtilsBean.convert throws NPE on null Locale when debug logging is enabled.
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-318" due-to="Sylvain Legault">
        Fix WeakHashMap is not thread safe in MethodUtils using new FastWeakHashMap.
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-319" due-to="Erik Erskine">
        PropertyUtils.getPropertyType fails for DynaBeans contained within a normal bean.
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-326" due-to="Vladimir Orlov">
        Iterating by a Map' key/value pairs in BeanUtilsBean and PropertyUtilsBean.
      </action>
    </release>

    <release version="1.8.0-BETA" date="2007-08-04" description="Trial Beta release">
      <action dev="niallp" type="add" issue="BEANUTILS-259">
        Add plugable property name expression Resolver.
      </action>
      <action dev="niallp" type="update" issue="BEANUTILS-258">
        General Converter implementation improvements: New AbstractConverter which provides
        a basic structure for Converter implementations and new NumberConverter implementation.
      </action>
      <action dev="niallp" type="add" issue="BEANUTILS-242">
        Add new generic ArrayConverter implementation.
      </action>
      <action dev="niallp" type="add" issue="BEANUTILS-255">
        Add new generic DateTimeConverter implementation.
      </action>
      <action dev="vgritsenko" type="update" issue="BEANUTILS-239" due-to="Rafael Afonso">
        Better implementation of SqlDateConverter. Modified SqlDateConverter,
        SqlTimeConverter and SqlTimestampConverter to accept java.util.Date
        and Calendar object instances. Added tests.
      </action>
      <action dev="niallp" type="add" issue="BEANUTILS-286">
        New Facade converter implementation - hide non-Converter public APIs.
      </action>
      <action dev="skitching" type="update" issue="BEANUTILS-229">
        Add "t/f" to BooleanConverter.
      </action>
      <action dev="niallp" type="update" issue="BEANUTILS-43" due-to="Firepica and Thomas Jacob">
        Support Mapped property inside a mapped property.
      </action>
      <action dev="niallp" type="update" issue="BEANUTILS-113" due-to="Firepica and Ludwig Wensauer">
        Support Indexed property inside a mapped property.
      </action>
      <action dev="niallp" type="update" issue="BEANUTILS-247" due-to="Christian Poitras, Thomas Jacob and scott sadlo">
        Support Arrays with multiple dimension.
      </action>
      <action dev="bayard" type="update" issue="BEANUTILS-207" due-to="Erik Meade">
        Include bean class in the message of PropertyUtilsBean exceptions.
      </action>
      <action dev="bayard" type="update" issue="BEANUTILS-224" due-to="Ralf Hauser">
        Provide better error message for "argument type mismatch".
      </action>
      <action dev="bayard" type="update" issue="BEANUTILS-30" due-to="Barry Kaplan">
        Improved messages for unknown properties.
      </action>
      <action dev="bayard" type="update" issue="BEANUTILS-193" due-to="Nestor Boscan">
        MethodUtils.invoke for static methods.
      </action>
      <action dev="niallp" type="update" issue="BEANUTILS-266" due-to="Brian Ewins and Commons HttpClient">
        Log or throw exception in PropertyUtilsBean.
        Added mechanism to initialize the "cause" on an Exception using reflection for JDK 1.4+
        (copied from Commons HttpClient).
      </action>
      <action dev="niallp" type="add" due-to="Vic Cekvenich">
        Add lazyDynaList.
      </action>
      <action dev="niallp" type="add" issue="BEANUTILS-185" due-to="Gabriel Belingueres">
        Provide a Map decorator for a DynaBean (enables DynaBean to be used with other teechnologies such as JSTL).
      </action>
      <action dev="niallp" type="update" issue="BEANUTILS-233" due-to="Russell">
        Implement equals() and hashCode() methods for DynaProperty.
      </action>


      <action dev="niallp" type="fix" issue="BEANUTILS-243" due-to="Henri Yandell">
        BeanUtils's tests fail to compile under JDK 1.6
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-49" due-to="Jesper Richter-Reichhelm">
        Lock in BeanUtilsBean.getInstance(
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-157" due-to="Thorbjorn Ravn Andersen">
        Beanutils's describe() method cannot determine reader methods for anonymous class.
      </action>
      <action dev="rdonkin" type="fix" issue="BEANUTILS-158">
        Added warning about describe behaviour to the javadocs.
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-249" due-to="Brad">
        BeanUtilsBean's setProperty() does not convert objects using custom converters properly.
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-17" due-to="Matthew Sgarlata and Corey Scott">
        Fix javadoc - IllegalArgumentException in BeanUtils.copyProperties
        when property types don't match.
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-68" due-to="Dmitry Platonoff">
        Writing to a mapped property requires a setter for a map, but never uses it.
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-110" due-to="Etienne Bernard">
        BeanUtilsBean.getArrayProperty() does not use ConvertUtils.
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-6" due-to="Sam Ruby">
        MappedPropertyDescriptor - replace copied code.
      </action>
      <action dev="skitching" type="fix">
        MappedPropertyDescriptor: Add comments re: * use of static variable safe in shared
        classloader * memory leak possible on webapp undeploy.
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-69" due-to="Chris Audley">
        MappedPropertyDescriptor doesn't recognize boolean property accessor.
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-163">
        Add test for MappedPropertyDescriptor with different types on get/set methods.
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-140" due-to="Marco La Porta">
        LocaleBeanUtils setProperty does not work on nested property.
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-87" due-to="YOKOTA Takehiko">
        Package scope implementation of a public interface for mapped property fails
        (fixed by changes to MappedPropertyDescriptor associated with BEANUTILS-6)
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-33" due-to="Eoin Curran">
        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).
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-273" due-to="Marcelo Liberato">
        Public methods overriden in anonymous or private subclasses are not recognized by PropertyUtils.
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-88" due-to="Chuck Daniels">
        PropertyUtilsBean's isReadable() / isWriteable() always return false for mapped properties.
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-61" due-to="Brian Ewins">
        PropertyUtilsBean isReadable() and isWriteable() methods do not work correctly for WrapDynaBean.
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-18" due-to="Maarten Coene">
        PropertyUtils.isReadable() and PropertyUtils.getProperty() not consistent.
      </action>
      <action dev="bayard" type="fix" issue="BEANUTILS-92" due-to="Will Pugh">
        PropertyUtilsBean.copyProperties does not catch NoSuchMethodException
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-256" due-to="Torsten Feig">
        PropertyUtilsBean.getIndexedProperty()'s javadoc should indicate
        IndexOutOufBoundsException can be thrown rather than just
        ArrayIndexOutOufBoundsException.
      </action>
      <action dev="skitching" type="fix" issue="BEANUTILS-162">
        Create new methods getPropertyOfMapBean and setPropertyOfMapBean that the existing
        setNestedProperty and getNestedProperty methods now call when they discover the bean
        they are accessing implements Map. This makes it much easier for users to subclass
        and customise this behaviour of PropertyUtilsBean, eg in order to restore pre-1.5 behaviour.
        This patch also causes an exception to be thrown when the propertyName passed to
        getPropertyOfMapBean or setPropertyOfMapBean has MAPPED_DELIM or INDEXED_DELIM chars in
        it. This never worked as expected before (the whole string was treated literally as the
        propertyName), so throwing an exception here should not break any existing code. It should
        be of help to future developers who make this mistake though...
      </action>
      <action dev="skitching" type="fix">
        Ignore simple properties on java.util.Map objects -
        Map methods are always used on a Map object. Reverts BEANUTILS-144.
        See BEANUTILS-162 for discussion.
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-262">
        Correct getPropertyDescriptor() and setNestedProperty() methods to throw
        a NestedNullException rather than just IllegalArgumentException (consistent
        with the getNestedProperty() method).
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-97">
        Problems on indexed property with JDK 1.4.
      </action>
      <action dev="skitching" type="update">
        BooleanArrayConverter: Use new AbstractArrayConverter constructors and
        Convert strings to booleans by invoking a BooleanConverter rather than
        hard-wiring the conversion.
      </action>
      <action dev="skitching" type="update" due-to="Eric Rizzo">
        BooleanConverter: Add facility for user to override the default set
        of true and false string definitions and provide ability to pass special
        NO_DEFAULT object as the "defaultValue" constructor parameter.
      </action>
      <action dev="skitching" type="update">
        AbstractArrayConverter: provide ability to pass special NO_DEFAULT object as the
        "defaultValue" constructor parameter.
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-78" due-to="Stefan Lotscher">
        DecimalLocaleConverter and subClasses never throw a ConversionException.
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-44" due-to="Paul Jenkins">
        FloatLocaleConverter cannot parse negative values.
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-263" due-to="Alex Albu">
        Improve ClassConverter robustness.
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-271" due-to="Nico Hoogervorst">
        DateLocaleConverter does not always throw an Exception for invalid dates.
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-288">
        Don't try parsing values that are already Dates/Numbers in Date/Number locale Converters.
      </action>
      <action dev="skitching" type="fix">
        WrapDynaClass: Added comment re potential memory leak, and safety when using
        shared classloader
      </action>
      <action dev="niallp" type="fix">
        Make WrapDynaBean Serializable.
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-36" due-to="Jack">
        WrapDynaBeanTestCase failing with jikes/kaffe because of static List in TestBean.
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-23" due-to="Aslak Hellesoy">
        Misleading error message in ConvertingWrapDynaBean.
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-24" due-to="Roi Ares">
        LazyDynaBean: don't try and instantiate properties of type Object.class.
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-133" due-to="Masoud Omidvar">
        LazyDynabean Javadoc corrections.
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-250">
        LazyDynaClass can create a DynaProperty with a "null" type.
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-289">
        JDBCDynaClass "lowerCase" option causes problems in RowSetDynaClass and ResultSetIterator.
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-142" due-to="Li Zhang">
        RowSetDynaClass fails to copy ResultSet to DynaBean with Oracle 10g JDBC driver.
      </action>
      <action dev="bayard" type="fix" issue="BEANUTILS-241" due-to="Chris Hyzer">
        Fix BeanComparator throws wrong exception and hides cause.
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-112" due-to="Simon Kitching">
        Deprecate the public static defaultTransformers HashMap and make it unmodifiable.
      </action>

      <action dev="niallp" type="update" issue="BEANUTILS-290">
        Merge Bean-Collections back into core BeanUtils and remove Bean-Collections sub-project.
      </action>
      <action dev="bayard" type="fix" issue="BEANUTILS-287">
        Fixi the build to include all the tests and change the build.properties.sample so it's easier
        to use for the default maven user (ie: it looks by default in the .maven repository)
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-217" due-to="Carlos Sanchez">
        Improvements to maven build.
      </action>
      <action dev="niallp" type="fix" issue="BEANUTILS-54" due-to="Pascal Grange">
        Add Implementation-Vendor-Id entry to jar's manifest.
      </action>
      <action dev="bayard" type="fix" issue="BEANUTILS-121" due-to="Chris Tilden">
        Resolve compiler warnings: Unused imports, un-read local variables,
        field hiding, empty block, improperly used statics, uncessary semi
        colons, unnecessary casts.
      </action>
      <action dev="skitching" type="fix">
        Replace use of static Log objects with instance or local variables. It isn't safe
        to use static Log objects in code that might be deployed via a shared classloader
        as they will bind to the Log object from the context classloader in use when the
        first use happens.
      </action>
      <action dev="scolebourne" type="fix" due-to="Dimiter Dimitrov" issue="COLLECTIONS-22">
        BeanMap: Fix internal variable to not include non-existant write methods.
        - ported from Commons Collections.
      </action>
      <action dev="rdonkin" type="update" due-to="Steve Cohen">
        Change MethodUtils to make getMatchingAccessibleMethod() method selection more
        rational.
      </action>
    </release>

    <release version="1.7.0" date="2004-08-02">
      <action type="update">
        See href="http://commons.apache.org/beanutils/commons-beanutils-1.7.0/RELEASE-NOTES.txt
      </action>
    </release>

    <release version="1.6.1" date="2003-02-18">
      <action type="update">
        See http://commons.apache.org/beanutils/commons-beanutils-1.6.1/RELEASE-NOTES.txt
      </action>
    </release>

    <release version="1.6" date="2003-01-21">
      <action type="update">
        See http://commons.apache.org/beanutils/commons-beanutils-1.6/RELEASE-NOTES.txt
      </action>
    </release>

    <release version="1.5" date="2002-10-23">
      <action type="update">
        See http://commons.apache.org/beanutils/commons-beanutils-1.5/RELEASE-NOTES.txt
      </action>
    </release>

    <release version="1.4.1" date="2002-08-28">
      <action type="fix">
        See http://commons.apache.org/beanutils/commons-beanutils-1.4.1/RELEASE-NOTES.txt
      </action>
    </release>

    <release version="1.4" date="2002-08-13">
      <action type="update">
        See http://commons.apache.org/beanutils/commons-beanutils-1.4/RELEASE-NOTES.txt
      </action>
    </release>

    <release version="1.3" date="2002-04-29">
      <action type="update">
        See http://commons.apache.org/beanutils/commons-beanutils-1.3/RELEASE-NOTES.txt
      </action>
    </release>

    <release version="1.2" date="2001-12-24">
      <action type="update">
        See http://commons.apache.org/beanutils/commons-beanutils-1.2/RELEASE-NOTES.txt
      </action>
    </release>

    <release version="1.1" date="2001-09-22">
      <action type="update">Version 1.1</action>
    </release>

    <release version="1.0" date="2001-07-14" description="Initial Release">
      <action type="add">Initial Release</action>
    </release>

  </body>
</document>
