<?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

       https://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/2.0.0"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://maven.apache.org/changes/2.0.0 https://maven.apache.org/xsd/changes-2.0.0.xsd">
  <properties>
    <title>Apache Commons BeanUtils Release Notes</title>
  </properties>
  <body>
    <release version="2.0.0-M2" date="2025-05-25" description="This is a major release and requires Java 8.">
      <!-- FIX -->
      <action type="fix" dev="ggregory" due-to="Gary Gregory">Javadoc is missing its Overview page.</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">Remove -nouses directive from maven-bundle-plugin. OSGi package imports now state 'uses' definitions for package imports, this doesn't affect JPMS (from org.apache.commons:commons-parent:80).</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">The class org.apache.commons.beanutils2.PropertyUtils is now final (the class only contains static methods).</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">The constructor org.apache.commons.beanutils2.PropertyUtils is now private (the class only contains static methods).</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">The class org.apache.commons.beanutils2.locale.LocaleConvertUtils is now final (the class only contains static methods).</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">The constructor org.apache.commons.beanutils2.locale.LocaleConvertUtils is now private (the class only contains static methods).</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">The class org.apache.commons.beanutils2.locale.LocaleBeanUtils is now final (the class only contains static methods).</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">The constructor org.apache.commons.beanutils2.locale.LocaleBeanUtils is now private (the class only contains static methods).</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">The class org.apache.commons.beanutils2.MethodUtils is now final (the class only contains static methods).</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">The constructor org.apache.commons.beanutils2.MethodUtils is now private (the class only contains static methods).</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">The class org.apache.commons.beanutils2.ConvertUtils is now final (the class only contains static methods).</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">The constructor org.apache.commons.beanutils2.ConvertUtils is now private (the class only contains static methods).</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">The class org.apache.commons.beanutils2.ConstructorUtils is now final (the class only contains static methods).</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">The constructor org.apache.commons.beanutils2.ConstructorUtils is now private (the class only contains static methods).</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">The class LocaleBeanUtils no longer extends BeanUtils (both classes only contains static methods).</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">The class org.apache.commons.beanutils2.BeanUtils is now final (the class only contains static methods).</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">The constructor org.apache.commons.beanutils2.BeanUtils is now private (the class only contains static methods).</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">BeanComparator.compare(T, T) now throws IllegalArgumentException instead of RuntimeException to wrap all cases of ReflectiveOperationException.</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">MappedMethodReference.get() now throws IllegalStateException instead of RuntimeException to wrap cases of NoSuchMethodException.</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">ResultSetIterator.get(String) now throws IllegalArgumentException instead of RuntimeException to wrap cases of SQLException.</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">ResultSetIterator.hasNext() now throws IllegalStateException instead of RuntimeException to wrap cases of SQLException.</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">ResultSetIterator.next() now throws IllegalStateException instead of RuntimeException to wrap cases of SQLException.</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">ResultSetIterator.set(String, Object) now throws IllegalArgumentException instead of RuntimeException to wrap cases of SQLException.</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">ResultSetIterator.set(String, String, Object) now throws IllegalArgumentException instead of RuntimeException to wrap cases of SQLException.</action>
      <!-- ADD -->
      <action type="add" dev="ggregory" due-to="Gary Gregory">Add org.apache.commons.beanutils.SuppressPropertiesBeanIntrospector.SUPPRESS_DECLARING_CLASS.</action>
      <!-- UPDATE -->
      <action type="update" dev="ggregory" due-to="Gary Gregory, Dependabot">Bump org.apache.commons:commons-parent from 78 to 84 #348.</action>
      <action type="update" dev="ggregory" due-to="Gary Gregory">Bump commons-logging:commons-logging from 1.3.4 to 1.3.5.</action>
      <action type="update" dev="ggregory" due-to="Gary Gregory">Bump org.apache.commons:commons-collections4 from 4.5.0-M3 to 4.5.0.</action>
    </release>
    <release version="2.0.0-M1" date="2024-12-27" description="This is a major release and requires Java 8">
      <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-402" dev="melloware" type="fix" due-to="Melloware">
        Double-Checked Locking anti pattern in WeakFastHashMap.
      </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>
      <action issue="BEANUTILS-520" dev="ggregory" type="update" due-to="Melloware">
        BeanUtils2 mitigate CVE-2014-0114.
      </action>
      <action issue="BEANUTILS-527" dev="ggregory" type="update" due-to="Melloware, Matt Sicker, Gary Gregory">
        Convert Collections4 to java.util.function. #8.
      </action>
      <action issue="BEANUTILS-527" dev="ggregory" type="remove" due-to="Melloware, Matt Sicker, Gary Gregory">
        Removed Commons Collections dependency. #8.
      </action>
      <action issue="BEANUTILS-528" dev="ggregory" type="update" due-to="Melloware, Matt Sicker, Gary Gregory">
        New converters for UUID, URI, and Path #10.
      </action>
      <action issue="BEANUTILS-530" dev="ggregory" type="add" due-to="Melloware, Matt Sicker, Gary Gregory">
        New converters for Java 8 Time classes #13.
      </action>
      <action issue="BEANUTILS-529" dev="ggregory" type="update" due-to="Gary Gregory">
        Log at the debug level instead of info.
      </action>
      <action issue="BEANUTILS-537" dev="ggregory" type="update" due-to="XenoAmess, Gary Gregory">
        Fix typos; fix error in Javadoc; performance fix; fix code smells #25.
      </action>
      <action dev="ggregory" type="fix" due-to="Andrei Korzhevskii, Gary Gregory">
        Refactor logger usage #72.
      </action>
      <action dev="ggregory" type="fix" due-to="SethFalco, Steve Bosman, Gary Gregory">
        Migrate to JUnit 5 #93, #283, #284, #285, #287.
      </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
        Fix SpotBugs [ERROR] Medium: org.apache.commons.beanutils2.BasicDynaClass.constructorTypes should be both final and package protected [org.apache.commons.beanutils2.BasicDynaClass] At BasicDynaClass.java:[line 95] MS_FINAL_PKGPROTECT.
      </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
        Fix SpotBugs [ERROR] Medium: Load of known null value in org.apache.commons.beanutils2.converters.AbstractConverter.convert(Class, Object) [org.apache.commons.beanutils2.converters.AbstractConverter] At AbstractConverter.java:[line 163] NP_LOAD_OF_KNOWN_NULL_VALUE.
      </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
        Fix SpotBugs [ERROR] Medium: Unused public or protected field: org.apache.commons.beanutils2.WrapDynaClass.descriptors [org.apache.commons.beanutils2.WrapDynaClass] In WrapDynaClass.java UUF_UNUSED_PUBLIC_OR_PROTECTED_FIELD.
      </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
        Fix SpotBugs [ERROR] Medium: org.apache.commons.beanutils2.converters.ArrayConverter.setAllowedChars(char[]) may expose internal representation by storing an externally mutable object into ArrayConverter.allowedChars [org.apache.commons.beanutils2.converters.ArrayConverter] At ArrayConverter.java:[line 202] EI_EXPOSE_REP2.
      </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
        Fix SpotBugs [ERROR] Medium: org.apache.commons.beanutils2.converters.DateTimeConverter.setPatterns(String[]) may expose internal representation by storing an externally mutable object into DateTimeConverter.patterns [org.apache.commons.beanutils2.converters.DateTimeConverter] At DateTimeConverter.java:[line 204] EI_EXPOSE_REP2.
      </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
        Fix SpotBugs [ERROR] Medium: org.apache.commons.beanutils2.ConversionException.getCause() may expose internal representation by returning ConversionException.cause [org.apache.commons.beanutils2.ConversionException] At ConversionException.java:[line 83] EI_EXPOSE_REP.
      </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
        Fix SpotBugs [ERROR] Medium: new org.apache.commons.beanutils2.ConversionException(String, Throwable) may expose internal representation by storing an externally mutable object into ConversionException.cause [org.apache.commons.beanutils2.ConversionException] At ConversionException.java:[line 53] EI_EXPOSE_REP2.
      </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
        Fix SpotBugs [ERROR] Medium: new org.apache.commons.beanutils2.ConversionException(Throwable) may expose internal representation by storing an externally mutable object into ConversionException.cause [org.apache.commons.beanutils2.ConversionException] At ConversionException.java:[line 65] EI_EXPOSE_REP2.
      </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
        Fix SpotBugs [ERROR] Medium: org.apache.commons.beanutils2.converters.DateTimeConverter.getPatterns() may expose internal representation by returning DateTimeConverter.patterns [org.apache.commons.beanutils2.converters.DateTimeConverter] At DateTimeConverter.java:[line 189] EI_EXPOSE_REP.
      </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
        Fix SpotBugs [ERROR] Medium: org.apache.commons.beanutils2.WrapDynaClass.getDynaProperties() may expose internal representation by returning WrapDynaClass.properties [org.apache.commons.beanutils2.WrapDynaClass] At WrapDynaClass.java:[line 172] EI_EXPOSE_REP.
      </action>
      <action dev="ggregory" type="fix" due-to="Melloware, sebbASF, Gary Gregory, Michal Landsman">
        Replace Commons Collections Test Framework 3.2.2 with 4.5.0-M3 #40.
      </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
        Provide error index in ConversionException message in DateTimeConverter.parse(Class, Class, String, DateFormat).
      </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
        Avoid possible NPE in DateTimeConverter.parse(Class, Class, String).
      </action>
      <action dev="ggregory" type="fix" due-to="Claude Warren, Gary Gregory">
        Annotate Converter with @FunctionalInterface.
      </action>
      <action issue="BEANUTILS-564" dev="ggregory" type="fix" due-to="SingingBush">
        Fix JDK 21 CI failure due to locale changes #201.
      </action>
      <action dev="ggregory" type="fix" due-to="Seth Falco">
        Fix warnings and To-Dos #92.
      </action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">Replace internal use of Locale.ENGLISH with Locale.ROOT.</action>
      <action issue="BEANUTILS-541" dev="ggregory" type="fix" due-to="Sergey Chernov">FluentPropertyBeanIntrospector caches corrupted writeMethod (2.x) #68.</action>
      <!-- ADD -->
      <action issue="BEANUTILS-346" dev="melloware" type="add" due-to="Melloware">New converter for Enum.</action>
      <action dev="ggregory" type="add" due-to="Dependabot, Gary Gregory">
        Add github/codeql-action #118.
      </action>
      <action dev="ggregory" type="add" due-to="Dependabot, Gary Gregory">
        Add and use ConversionException.format(String, Object...).
      </action>
      <action dev="ggregory" type="add" due-to="Seth Falco, Gary Gregory">
        Add Converters for additional types: Color, Dimension, InetAddress, Locale, Pattern, Point #47.
      </action>
      <action dev="ggregory" type="add" due-to="Sergey Chernov, Gary Gregory">
        Make PropertyUtilsBean.getReadMethod(Class, PropertyDescriptor) public #232.
      </action>
      <!--  UPDATES -->
      <action dev="ggregory" type="update" due-to="Dependabot, Gary Gregory">
        Bump actions/cache from 2 to 3.0.11 #77, #89, #103, #111. #137, #141.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot, Gary Gregory">
        Update actions/checkout from 2.3.1 to 3.0.2 #33, #108.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot, Gary Gregory">
        Update actions/setup-java from 1.4.0 to 3.6.0 #35, #114, #144.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Bump actions/upload-artifact from 3.1.0 to 3.1.1 #143.
      </action>
      <action issue="BEANUTILS-522" dev="ggregory" type="update" due-to="Gary Gregory">
        Bump Apache Commons Collections from 4.3 to 4.4.
      </action>
      <action issue="BEANUTILS-504" dev="ggregory" type="update" due-to="Gary Gregory">
        Bump Java from 6 to 7.
      </action>
      <action issue="BEANUTILS-515" dev="ggregory" type="update" due-to="Gary Gregory">
        Bump Java from 7 to 8.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Bump junit-jupiter from 5.7.2 to 5.9.1 #113, #126, #134.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory, Dependabot">
        Bump JUnit from 4 to 5.9.1 vintage, #78, #112, #127, #136.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Bump Jacoco from 0.8.4 to 0.8.8.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory, Dependabot">
        Bump JApiCmp from 0.12.0 to 0.17.1, #46, #110, #130, #146.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory, Dependabot">
        Bump maven-surefire-plugin from 2.22.1 to 3.0.0-M7, #116, #122.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory, Dependabot">
        Bump maven-checkstyle-plugin from 3.0.0 to 3.2.0, #76, #129.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory, Dependabot">
        Bump maven-pmd-plugin from 3.12.0 to 3.19.0, #120, #128, #131.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Bump BC version from 1.9.3 to 1.9.4.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory, Dependabot">
        Bump org.apache.commons:commons-parent from 50 to 74 #229, #245, #254, #264, #274, #279.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Bump biz.aQute.bndlib from 5.1.0 to 6.4.1 #29, #45, #79, #109, #119, #121, #147, #175.
      </action>
      <action dev="ggregory" type="update" due-to="melloware">
        Jacoco 0.8.6 for JDK15 support #55.
      </action>
      <action dev="ggregory" type="update" due-to="SethFalco">
        Updated URLConverterTestCase to run without Internet access #50.
      </action>
      <action dev="ggregory" type="update" due-to="Arturo Bernal">
        Don't initialize variables to defaults #71.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Bump spotbugs-maven-plugin from 4.5.3.0 to 4.6.0.0.
      </action>
      <action dev="ggregory" type="update" due-to="Dependabot">
        Bump spotbugs from 4.5.3 to 4.6.0.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory, Dependabot">
        Bump org.apache.commons:commons-lang3 from 3.12.0 to 3.17.0 #263, #269, #280.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory, Dependabot">
        Bump commons-logging:commons-logging from 1.2 to 1.3.4 #226, #246, #259, #275.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory, Dependabot">
         Bump org.apache.commons:commons-parent from 74 to 78 #291, #295, #299, #306.
      </action> 
      <!-- REMOVE -->
      <action dev="ggregory" type="remove" due-to="Gary Gregory, Niall Pemberton">
        Removed BeanUtilsBean2, use BeanUtilsBean. BeanUtilsBean2 functionality is now in BeanUtilsBean.
        Previous BeanUtilsBean functionality for those methods is no longer supported.
      </action>
      <action dev="ggregory" type="remove" due-to="Gary Gregory, Niall Pemberton">
        Removed ConvertUtilsBean2, use ConvertUtilsBean. ConvertUtilsBean2 functionality is now in ConvertUtilsBean.
        Previous ConvertUtilsBean functionality for those methods is no longer supported.
      </action>
      <action dev="ggregory" type="remove" due-to="Gary Gregory">
        Do not implement Serializable.
      </action>
    </release>
    <release version="1.11.0" date="2025-05-25" description="This is a maintenance release and requires Java 8.">
      <!-- FIX -->
      <action type="fix" dev="ggregory" due-to="Gary Gregory">BeanComparator.compare(T, T) now throws IllegalArgumentException instead of RuntimeException to wrap all cases of ReflectiveOperationException.</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">MappedMethodReference.get() now throws IllegalStateException instead of RuntimeException to wrap cases of NoSuchMethodException.</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">ResultSetIterator.get(String) now throws IllegalArgumentException instead of RuntimeException to wrap cases of SQLException.</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">ResultSetIterator.hasNext() now throws IllegalStateException instead of RuntimeException to wrap cases of SQLException.</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">ResultSetIterator.next() now throws IllegalStateException instead of RuntimeException to wrap cases of SQLException.</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">ResultSetIterator.set(String, Object) now throws IllegalArgumentException instead of RuntimeException to wrap cases of SQLException.</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">ResultSetIterator.set(String, String, Object) now throws IllegalArgumentException instead of RuntimeException to wrap cases of SQLException.</action>
      <!-- ADD -->
      <action type="add" dev="ggregory" due-to="Gary Gregory">Add org.apache.commons.beanutils.SuppressPropertiesBeanIntrospector.SUPPRESS_DECLARING_CLASS.</action>
      <!-- UPDATE -->
      <action dev="ggregory" type="update" due-to="Gary Gregory">Bump org.apache.commons:commons-parent from 81 to 84.</action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">Bump commons-logging:commons-logging from 1.3.4 to 1.3.5.</action>
    </release>
    <release version="1.10.1" date="2025-01-31" description="This is a maintenance release and requires Java 8.">
      <!-- FIX -->
      <action type="fix" issue="BEANUTILS-541" dev="ggregory" due-to="Sergey Chernov">FluentPropertyBeanIntrospector concurrency issue (backport to 1.X) #325.</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">Javadoc is missing its Overview page.</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">Remove -nouses directive from maven-bundle-plugin. OSGi package imports now state 'uses' definitions for package imports, this doesn't affect JPMS (from org.apache.commons:commons-parent:80).</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">Deprecate BeanUtils.BeanUtils().</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">Deprecate ConstructorUtils.ConstructorUtils().</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">Deprecate LocaleBeanUtils.LocaleBeanUtils().</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">Deprecate LocaleConvertUtils.LocaleConvertUtils().</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">Deprecate ConvertUtils.ConvertUtils().</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">Deprecate MethodUtils.MethodUtils().</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">Deprecate PropertyUtils.PropertyUtils().</action>
      <!-- ADD -->
      <!-- UPDATE -->
      <action dev="ggregory" type="update" due-to="Gary Gregory">Bump org.apache.commons:commons-parent from 78 to 81.</action>
    </release>
    <release version="1.10.0" date="2024-12-26" description="This is a maintenance release and requires Java 8.">
      <!-- FIX -->
      <action type="fix" issue="BEANUTILS-541" dev="ggregory" due-to="Sergey Chernov">FluentPropertyBeanIntrospector caches corrupted writeMethod (backport to 1.x) #69.</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">Replace internal use of Locale.ENGLISH with Locale.ROOT.</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">Replace Maven CLIRR plugin with JApiCmp.</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">Port to Java 1.4 Throwable APIs (!).</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">Fix Javadoc generation on Java 8, 17, and 21.</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">AbstractArrayConverter.parseElements(String) now returns a List&lt;String&gt; instead of a raw List.</action>
      <!-- UPDATE -->
      <action dev="ggregory" type="update" due-to="Gary Gregory">Bump org.apache.commons:commons-parent from 47 to 78.</action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">Bump Java requirement from Java 6 to 8.</action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">Bump junit:junit from 4.12 to 4.13.2.</action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">Bump JUnit from 4.x to 5.x "vintage".</action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">Bump commons-logging:commons-logging from 1.2 to 1.3.4.</action>
      <!-- REMOVE -->
      <action dev="ggregory" type="update" due-to="Gary Gregory">Deprecate BeanUtilsBean.initCause(Throwable, Throwable) for removal, use Throwable.initCause(Throwable).</action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">Deprecate BeanUtils.initCause(Throwable, Throwable) for removal, use Throwable.initCause(Throwable).</action>
    </release>
    <release version="1.9.4" date="2019-08-13" description="The primary reason for this release is a bugfix for
CVE-2014-0114. More specifically, our goal with BEANUTILS-520
is to set the default behavior of the BeanUtilsBean
to not allow class level access. The goal in doing this now
is to bring 1.9.X into alignment with the same behavior
of the 2.X version line in regards to security.
If one would like to opt out of the default behavior, one could follow the
example set out in the test class available in
src/test/java/org/apache/commons/beanutils/bugs/Jira520TestCase.java.">
      <action issue="BEANUTILS-520" dev="chtompki" type="fix" due-to="Melloware">
        BeanUtils mitigation of CVE-2014-0114. (CVE-2019-10086 for commons-beanutils).
      </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 behavior 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 overridden 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 customize this behavior of PropertyUtilsBean, eg in order to restore pre-1.5 behavior.
        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="https://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 https://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 https://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 https://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 https://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 https://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 https://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 https://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>
