<?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.
-->
<document>
  <properties>
    <title>Apache Commons Configuration Release Notes</title>
    <author email="dev@commons.apache.org">Apache Commons Community</author>
  </properties>

  <body>
    <release version="2.8" date="2020-MM-DD"
             description="Minor release with new features and updated dependencies.">
       <action type="update" dev="ggregory" issue="CONFIGURATION-787" due-to="Gary Gregory">
         Update from Apache Commons Lang 3.9 to 3.11.
       </action>
       <action type="add" dev="ggregory" issue="CONFIGURATION-789" due-to="Gary Gregory">
         Add ImmutableConfiguration.getEnum() methods.
       </action>
       <action type="update" dev="ggregory" issue="CONFIGURATION-790" due-to="Gary Gregory, Dependabot">
         Update optional com.fasterxml.jackson.core:jackson-databind from 2.10.3 to 2.11.2, #60.
       </action>
       <action type="update" dev="ggregory" due-to="Oliver B. Fischer">
         Mention EnvironmentConfiguration in the list of configuration sources #45.
       </action>
       <action type="update" dev="ggregory" due-to="Gary Gregory">
         Update Slf4j test dependencies:
         org.slf4j:slf4j-api 1.7.26 -> 1.7.30,
         org.slf4j:slf4j-ext 1.7.26 -> 1.7.30,
         org.slf4j:slf4j-log4j12 1.7.26 -> 1.7.30,
         org.slf4j:slf4j-nop 1.7.26 -> 1.7.30.
       </action>
       <action type="update" dev="ggregory" due-to="Gary Gregory">
         Update optional org.springframework from 4.3.26.RELEASE to 4.3.27.RELEASE:
         org.springframework:spring-beans 4.3.26.RELEASE -> 4.3.27.RELEASE,
         org.springframework:spring-context 4.3.26.RELEASE -> 4.3.27.RELEASE,
         org.springframework:spring-core 4.3.26.RELEASE -> 4.3.27.RELEASE,
         org.springframework:spring-test 4.3.26.RELEASE -> 4.3.27.RELEASE.
       </action>
       <action type="update" dev="ggregory" due-to="Dependabot">
         Update GitHub actions/checkout from v1 to v2.3.2 #47, #62.
       </action>
       <action type="update" dev="ggregory" due-to="Dependabot">
         Update commons-parent from 50 to 51.
       </action>
       <action type="update" dev="ggregory" due-to="Dependabot">
         Update mailapi from 1.6.4 to 1.6.5 #48.
       </action>
       <action type="update" dev="ggregory" due-to="Dependabot">
         Update spotbugs-maven-plugin from 3.1.12.2 to 4.0.4 #55.
       </action>
       <action type="update" dev="ggregory" due-to="Dependabot">
         Update tests from hsqldb from 2.5.0 to 2.5.1 #54.
       </action>
       <action type="update" dev="ggregory" due-to="Gary Gregory">
         Update commons-text from 1.8 to 1.9.
       </action>
       <action type="update" dev="ggregory" due-to="Gary Gregory">
         Update servlet-api from 2.4 to 2.5 #58.
       </action>
       <action type="update" dev="ggregory" due-to="Gary Gregory">
         Update maven-checkstyle-plugin from 3.1.0 to 3.1.1 #57.
       </action>
       <action type="update" dev="ggregory" due-to="Dependabot">
         Update commons-pool2 from 2.8.0 to 2.8.1 #61.
       </action>
       <action type="update" dev="ggregory" due-to="Dependabot">
         Update actions/setup-java from v1.4.0 to v1.4.2 #63, #65.
       </action>
       <action type="update" dev="ggregory" due-to="Gary Gregory">
         Update optional commons-codec from 1.14 to 1.15.
       </action>
       <action type="update" dev="ggregory" due-to="Dependabot">
         Update checkstyle from 8.26 to 8.36 #66.
       </action>
       <action dev="ggregory" type="update" due-to="Gary Gregory">
         Update commons.jacoco.version 0.8.5 to 0.8.6 (Fixes Java 15 builds).
       </action>
    </release>
    <release version="2.7" date="2020-03-07"
             description="Minor release with new features and updated dependencies.">
      <action dev="ggregory" type="fix" issue="CONFIGURATION-761" due-to="Gary Gregory">
        Single argument DataConfiguration APIs always create empty arrays.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-762" due-to="Gary Gregory">
        Use variable arguments.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Update com.puppycrawl.tools:checkstyle from 8.24 to  8.25.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-763" due-to="Gary Gregory">
        Update com.fasterxml.jackson.core:jackson-databind from 2.9.9 to 2.10.0.
      </action>
      <action dev="ggregory" type="add" issue="CONFIGURATION-765" due-to="Gary Gregory">
        Refactor XMLConfiguration.write(Writer) to add XMLConfiguration.write(Writer, Transformer).
      </action>
      <action dev="ggregory" type="fix" issue="CONFIGURATION-767" due-to="Gary Gregory">
        NullPointerException in XMLConfiguration#createTransformer() when no FileLocator is set.
      </action>
      <action dev="ggregory" type="fix" issue="CONFIGURATION-768" due-to="Gary Gregory">
        XMLConfiguration#write does not indent XML elements.
      </action>
      <action dev="ggregory" type="fix" issue="CONFIGURATION-771" due-to="Gary Gregory">
        Update com.fasterxml.jackson.core:jackson-databind 2.10.0 -> 2.10.1.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        [test] org.easymock:easymock 4.0.2 -> 4.1.
      </action>
      <action dev="ggregory" type="fix" issue="CONFIGURATION-773" due-to="Dan Dragut">
        User's Guide &gt; Properties files &gt; Saving - small documentation bugs #41.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-775" due-to="Gary Gregory">
        Update Apache Commons VFS from 2.4.1 to 2.5.0.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-777" due-to="Gary Gregory">
        Update Apache Commons VFS from 2.5.0 to 2.6.0.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-778" due-to="Gary Gregory">
        Update optional Apache Commons Codec from 1.13 to 1.14.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Update tests from JUnit 4.12 to 4.13.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-779" due-to="Gary Gregory">
        Update optional jackson-databind from 2.10.1 to 2.10.2.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-783" due-to="Gary Gregory">
        Update com.fasterxml.jackson.core:jackson-databind from 2.10.2 to 2.10.3.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-784" due-to="Gary Gregory">
        Update org.yaml:snakeyaml from 1.25 to 1.26 and tweak parser configuration.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-785" due-to="Gary Gregory">
        Update org.springframework:spring-* from 4.3.25.RELEASE to 4.3.26.RELEASE.
      </action>
      <action dev="chtompki" type="update" due-to="Rob Tompkins">
        Update org.apache.commons:commons-parent from 48 to 50
      </action>
    </release>
    
    <release version="2.6" date="2019-09-13"
             description="Minor release with new features and updated dependencies.">
      <action dev="ggregory" type="fix" issue="CONFIGURATION-750" due-to="Jason Pickens, Gary Gregory, Emmanuel Bourg">
        XMLPropertyListConfiguration cannot set arrays in the correct plist form.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-751" due-to="Gary Gregory">
        Update Apache Commons Text from 1.6 to 1.7.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-752" due-to="Gary Gregory">
        Update Apache Commons VFS from 2.3 to 2.4.1.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-754" due-to="Gary Gregory">
        Update Apache Commons Text from 1.7 to 1.8.
      </action>
      <action dev="ggregory" type="fix" due-to="Gary Gregory">
        Fix Javadoc for org.apache.commons.configuration2.PropertiesConfiguration.getIncludeOptional().
      </action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">
        Document "includeOptional" on the site.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-755" due-to="Gary Gregory">
        [CVE-2014-0114] Update Apache Commons BeanUtils from 1.9.3 to 1.9.4.
      </action>
      <action dev="ggregory" type="update" due-to="Kevin Wang">
        Fix syntax in user guide documentation #33.
      </action>
      <action dev="ggregory" type="add" issue="CONFIGURATION-756" due-to="Gary Gregory">
        Allow for custom behavior to handle errors loading included properties files.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-757" due-to="Gary Gregory">
        Update org.yaml:snakeyaml from 1.24 to 1.25.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Update tests from org.apache.commons:commons-dbcp2 2.6.0 to 2.7.0.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Update tests from org.apache.commons:commons-pool2 2.6.2 to 2.7.0.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-758" due-to="Gary Gregory">
        Update commons-codec:commons-codec from 1.12 to 1.13.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Update tests from org.hsqldb:hsqldb 2.4.1 to 2.5.0.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Update tests from com.sun.mail:mailapi 1.6.3 to 1.6.4.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-759" due-to="Gary Gregory">
        Update Spring from 4.3.24.RELEASE to 4.3.25.RELEASE.
      </action>
      <action dev="ggregory" type="fix" issue="CONFIGURATION-760" due-to="Gary Gregory">
        Properties file using cyclical includes cause a StackOverflowError instead of detecting the misconfiguration.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Update maven-checkstyle-plugin from 3.0.0 to 3.1.0. 
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Use current version of Checkstyle: 6.18 to 8.24.
      </action>
    </release>
    <release version="2.5" date="2019-05-23"
             description="Minor release with new features and updated dependencies.">
      <action dev="ggregory" type="fix" issue="CONFIGURATION-731" due-to="Shuai Zhang, Gary Gregory">
        Allow user to specify the comments and separator chars.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-738" due-to="Gary Gregory">
        Update Jackson from 2.9.7 to 2.9.8.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-739" due-to="Gary Gregory">
        Update Apache Commons Codec from 1.11 to 1.12.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-740" due-to="Gary Gregory">
        Update Apache Commons VFS from 2.2 to 2.3.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-741" due-to="Gary Gregory">
        Update Spring from 4.3.19 to 4.3.22.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-743" due-to="Gary Gregory">
        Update optional library snakeyaml from 1.23 to 1.24.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-747" due-to="Gary Gregory">
        Update Apache Commons Lang from 3.8.1 to 3.9.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-746" due-to="Gary Gregory">
        Update Jackson from 2.9.8 to 2.9.9.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-747" due-to="Gary Gregory">
        Update Spring from 4.3.22 to 4.3.24.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-745" due-to="Gary Gregory">
        Add the special key "includeoptional" for properties files.
      </action>
    </release>
    <release version="2.4" date="2018-10-23"
             description="Minor release with new features and updated dependencies.">
      <action dev="oheger" type="fix" issue="CONFIGURATION-710" due-to="thc202">
        Fixed numerous typos in user guides.
      </action>
      <action dev="ggregory" type="fix" issue="CONFIGURATION-711">
        Update Apache Commons Lang from 3.7 to 3.8.1.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-712" due-to="Rolland Hobbie">
        FileHandlerReloadingDetector now has a new refresh() method to
        initialize the reloading state from the underlying file. This new
        method is called by DefaultReloadingDetectorFactory when a new detector
        instance is created. This makes sure that a changed configuration file
        is directly detected on the first invocation of the
        isReloadingRequired() method.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-713" due-to="Lars W">
        Configuration properties can now be converted to regular expressions.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-715" due-to="Patrick Schmidt">
        With JupIOFactory a new IOFactory implementation is now available that
        implements handling of whitespace in a way closer to java.util.Properties.
        This class can be used when stricter compatibility with Java standard
        methods for reading and writing properties files is needed.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-716" due-to="Patrick Schmidt">
        JupIOFactory (introduced for CONFIGURATION-715) also implements
        handling of escape sequences in a way closer to java.util.Properties.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-720">
        Replace use of deprecated Commons Lang string substitution code for Commons Text.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-694">
        Update Java requirement from version 7 to 8.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-721">
        Update Jackson from 2.9.6 to 2.9.7.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-722">
        Update optional dependency snakeyaml from 1.21 to 1.23.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-723">
        Update optional Spring dependencies from 4.3.18.RELEASE to 4.3.19.RELEASE.
      </action>
      <action dev="ggregory" type="add" issue="CONFIGURATION-724">
        Add support for Commons Text 1.4 localhost string lookup as a default lookup.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-725">
        Update Apache Commons Text from 1.4 to 1.5.
      </action>
      <action dev="ggregory" type="add" issue="CONFIGURATION-726">
        Add support for Commons Text 1.5 new string lookups as default lookups.
      </action>
      <action dev="ggregory" type="fix" issue="CONFIGURATION-727">
        org.apache.commons.configuration2.DatabaseConfiguration never closes result sets and statements.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-728">
        Update Apache Commons Text from 1.5 to 1.6.
      </action>
    </release>

    <release version="2.3" date="2018-08-04"
             description="Minor release with new features and updated dependencies.">
      <action dev="ggregory" type="update" issue="CONFIGURATION-707">
        Update Spring from 4.3.14.RELEASE to 4.3.18.RELEASE.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-706">
        Update optional dependency snakeyaml from 1.20 to 1.21.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-705">
        Update Jackson from 2.9.5 to 2.9.6.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-652" due-to="Claude Warren">
        Root node attributes are now updated correctly when loading XML
        configuration files.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-675">
        Added a .gitignore file to the project.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-678">
        Update Apache Commons Codec from 1.10 to 1.11.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-679">
        Update Jackson from 2.8.9 to 2.9.3.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-680">
        Update Apache Commons Lang from 3.6 to 3.7.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-681">
        Update Apache Commons VFS from 2.1 to 2.2.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-682">
        Update Snakeyaml from 1.18 to 1.19.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-696">
        Update optional dependency snakeyaml from 1.19 to 1.20.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-683">
        Update Spring from 4.3.9.RELEASE to 4.3.13.RELEASE.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-695">
        Update optional dependency Jackson from 2.9.3 to 2.9.5.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-697">
        Update optional dependency Spring from 4.3.13.RELEASE to 4.3.14.RELEASE.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-686">
        JSONConfiguration can now handle list structures with complex objects
        as elements.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-687">
        Fixed a memory leak in CombinedConfigurationBuilder. Builder for the
        child sources were created each time a new result configuration was
        requested; thus the list with child builders got longer and longer.
        This also had an impact on reloading because unnecessary reloading
        operations could be triggered. Now it is guaranteed that child builders
        are created only once.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-688">
        Fixed a bug related to the handling of multiple include files in
        PropertiesConfiguration.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-690">
        ExprLookup.getVariables() no longer returns null, but a copy of the
        current variables of this lookup object.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-691">
        ExprLookup now handles expressions that do not return a string result
        by converting them to string.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-692">
        ConversionExceptions thrown when accessing the properties of a
        configuration now contain the original cause of the exception.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-693" due-to="Lars W">
        Configuration properties can now be converted to the data types File
        and Path.
      </action>
      <action dev="ggregory" type="add" issue="CONFIGURATION-698">
        Add org.apache.commons.configuration2.MapConfiguration.toString().
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-701" due-to="Nicholas Verbeck">
        CompositeConfiguration now supports an addConfigurationFirst() method
        to add child configurations with a higher priority.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-703" due-to="Pascal Essiembre">
        XMLConfiguration now handles elements correctly whose value consists
        only of whitespace if the xml:space attribute is set to preserve.
      </action>
    </release>

    <release version="2.2" date="2017-10-12"
             description="Minor release with new APIs and bug fixes.">
      <action dev="oheger" type="add" issue="CONFIGURATION-673" due-to="Andreas Kuhtz ">
        Added an Automatic-Module-Name header to the manifest for compatibility
        with the Java 9 module system.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-671">
        Fixed a NPE in INIConfiguration when saving a configuration with an
        empty section.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-670">
        The node model returned by SubnodeConfiguration.getNodeModel() has now
        the correct root node set.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-669">
        Update optional Spring dependency from 4.2.5.RELEASE to 4.3.9.RELEASE.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-667">
        Update Apache Commons Lang from 3.3.2 to 3.6.
      </action>
      <action dev="ggregory" type="add" issue="CONFIGURATION-666">
        Add convenience ctor ConfigurationRuntimeException(String, Object...).
      </action>
      <action dev="ggregory" type="add" issue="CONFIGURATION-665">
        Add org.apache.commons.configuration2.AbstractHierarchicalConfiguration.toString().
      </action>
      <action dev="ggregory" type="add" issue="CONFIGURATION-664">
        Add API org.apache.commons.configuration2.tree.ImmutableNode.getChildren(String).
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-663">
        Fixed a typo in the upgrade to 2.0 guide.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-661">
        Update platform requirement from Java 6 to 7.
      </action>
      <action dev="ggregory" type="add" issue="CONFIGURATION-660">
        Add toString() methods here and there to help debugging.
      </action>
      <action dev="ggregory" type="add" issue="CONFIGURATION-658">
        Add API org.apache.commons.configuration2.DataConfiguration.getURI(String) methods.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-656" due-to="The Alchemist">
        Added new YAMLConfiguration class to support configuration files in
        YAML format.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-653" due-to="Vincent Maurin">
        ConfigurationUtils and ConfigurationConverter now offer better support
        for immutable configurations.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-647" due-to="Vladimir Martinek">
        INIConfiguration can now be configured to use a custom separator
        between properties and values when writing an ini file.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-258" due-to="The Alchemist">
        Added new JSONConfiguration class to support configuration files in
        JSON format.
      </action>
    </release>

    <release version="2.1.1" date="2017-02-05"
      description="Bugfix release for 2.1">
      <action dev="oheger" type="fix" issue="CONFIGURATION-649">
        Improved the handling of lists defined by a string with delimiter
        characters in XMLConfiguration. Such lists now retain their original
        format when the configuration is saved.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-648">
        Made the IOFactory property of PropertiesBuilderParameter compatible
        with the most recent version of Commons BeanUtils. This version
        changed the handling of properties starting with multiple uppercase
        letters.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-646">
        PropertiesConfiguration now works correctly with the auto-save mode.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-644" due-to="Andrew DeMaria">
        PropertiesConfigurationLayout no longer duplicates a header comment
        if a file with another comment is loaded.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-643">
        Documentation improvements for the user's guide.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-641">
        Improved documentation of FileBased interface. The Javadocs now state
        explicitly that the methods should not be called by client code.
        Exception handling in configuration classes implementing
        FileLocatorAware has been improved.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-640">
        PropertiesConfiguration now correctly unescapes some special characters
        that are always escaped in Java properties files.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-639"  due-to="Rico Neubauer">
        In the OSGi bundle manifest of the Commons Configuration bundle the
        package imports for Spring packages are now marked as optional.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-638"  due-to="Ahmet Celik">
        Improved handling of temporary files and folders in unit tests.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-627">
        Updated dependency to Commons BeanUtils to version 1.9.3. This fixes an
        issue with an exception stacktrace that was logged when a
        ConfigurationBuilder was used.
      </action>
    </release>

    <release version="2.1" date="2016-08-20"
      description="First maintenance release for Configuration 2.x.">
      <action dev="oheger" type="fix" issue="CONFIGURATION-636"  due-to="Tim Lark">
        PropertiesConfigurationLayout now allows manipulating the order of keys
        when the properties file is written.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-634"  due-to="Raviteja Lokineni">
        HomeDirectoryLocationStrategy now works correctly in the mode that
        evaluates the FileLocator's base path.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-633">
        Interpolation was improved to better support properties with multiple
        values.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-632">
        The methods getStringArray() and getList() of CompositeConfiguration
        now support the interpolation of variables that reference properties
        with multiple values.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-628">
        Support for the ant build was dropped.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-626">
        ImmutableConfiguration.getArray() has been deprecated. Arrays can now
        be queried using the generic get() method in a type-safe way.
      </action>
      <action dev="deki" type="add" issue="CONFIGURATION-624">
        Support Commons Configuration as PropertySource in Spring.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-622">
        Fixed a problem in INIConfiguration.write() with keys containing a
        separator character. This separator had been duplicated. Such keys
        are now handled correctly when the configuration is saved.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-631">
        Update Apache Commons VFS from 2.0 to 2.1.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-635">
        Update optional dependency Apache Commons Codec from 1.9 to 1.10.
      </action>
    </release>

    <release version="2.0" date="2016-03-24"
      description="Major redesign of the Configuration 1.x API">
      <action dev="oheger" type="update" issue="CONFIGURATION-621">
        Moved ConfigurationLogger class to io package to avoid cyclic
        dependencies between packages.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-620" due-to="Mark Vedder">
        Fixed two invalid examples in the user's guide for file-based
        configurations.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-619">
        CombinedConfigurationBuilder now supports inheritance of its parameters
        to child configuration sources. This is enabled by default.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-618">
        When using immutable configurations exceptions thrown by the wrapped
        configuration came out as UndeclaredThrowableException. This has been
        fixed; now the correct original exception is thrown.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-615">
        Changed generic types in the signatures of a MapConfiguration
        constructor and AbstractConfiguration.getList(String, List). These
        changes were made in version 1.10 as fixes for CONFIGURATION-557 and
        CONFIGURATION-558. But it had been missed to merge them to trunk.
      </action>
    </release>

    <release version="2.0-beta2" date="2015-12-05"
      description="Second beta release, some minor API changes.">
      <action dev="oheger" type="update" issue="CONFIGURATION-614">
        References to Commons Logging have been removed from the Configuration
        API. It is still possible to influence logging by making use of the new
        ConfigurationLogger abstraction.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-612" due-to="Jon Weygand">
        The return type of ConfigurationBuilder.getConfiguration() was changed
        from Configuration to ImmutableConfiguration because this is the base
        interface for all configuration objects.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-609">
        Fixed a bug in PropertiesConfiguration related to the loading of include
        files. The FileHandler used for this purpose was not fully initialized.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-608">
        Adapted the return type of ReloadingFileBasedConfigurationBuilder.configure().
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-605">
        XMLConfiguration no longer drops keys when list delimiter characters
        occur in element values.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-604">
        Fixed a problem in the conversion of a flat configuration to a
        hierarchical one that could cause the loss of properties in a
        combined configuration constructed by an override combiner.
      </action>
    </release>

    <release version="2.0-beta1" date="2015-06-19"
      description="First beta release, getting closer to final.">
      <action dev="oheger" type="update" issue="CONFIGURATION-598" due-to="Bjarne Bostr&#xF6;m">
        Removed obsolete ConfigurationBuilder interface in the base package.
      </action>
    </release>

    <release version="2.0-alpha2" date="2014-12-20"
      description="Some more API fine-tuning.">
      <action dev="oheger" type="add" issue="CONFIGURATION-574">
        DefaultExpressionEngine can now be customized to match configuration
        keys in a case-insensitive manner. This is useful for instance for
        dealing with Windows INI files.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-565">
        Added support for querying encoded properties.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-564">
        PropertiesConfiguration now supports again properties without a value
        and a separator character. The keys of such properties are added to
        the configuration with an empty String as value.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-427">
        XMLPropertyListConfiguration can now save arrays in the correct form.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-200">
        A size() method was added to the ImmutableConfiguration interface.
      </action>
    </release>

    <release version="2.0-alpha1" date="2014-09-23"
      description="First alpha release after a major redesign.">
      <action dev="oheger" type="update" issue="CONFIGURATION-591">
        Removed methods from ConfigurationConverter related to ExtendedProperties.
        This class is no longer supported by recent versions of Commons
        Collections.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-590">
        Removed Serializable interface from all configuration implementations.
        Some configuration classes declared this interface without being
        actually serializable.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-588">
        The name of the top-level package and the maven coordinates have been
        changed to allow a coexistence of Commons Configuration 1.x with 2.0.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-584">
        The event mechanism has been reworked. There is now a generic event
        listener interface which can be used to receive notifications from
        multiple types of event sources.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-582">
        Fixed a StringIndexOutOfBoundsException in PropertiesConfigurationLayout
        which was caused by lines containing only whitespace.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-579">
        A migration guide has been created which supports when upgrading from
        version 1.x to 2.0.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-578">
        The user's guide has been fully reworked to cover all new and enhanced
        features of version 2.0.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-577">
        The dependency to Commons Collections is no longer needed.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-576">
        A new abstract base class for hierarchical configurations was introduced
        which supports arbitrary hierarchical data structures. The type of the
        nodes used by the configuration can now be specified as a generic type
        argument. This makes the integration of other hierarchical structures
        easier.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-575">
        Hierarchical configurations now operate on immutable structures.
        Data is no longer represented by ConfigurationNode objects. The
        ImmutableNode class now serves as data container.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-573">
        XPathExpressionEngine can now deal with namespace prefixes in node and
        attribute names.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-572">
        When a CombinedConfiguration is cleared it removes itself as change
        listener from all child configurations. This fixes a possible memory
        leak.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-570">
        Fixed a possible ConcurrentModificationException when a SystemConfiguration
        instance is passed to the append() or copy() methods.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-567" due-to="Shen liang">
        XMLBeanDeclaration now escapes node names before they are used to
        determine nested properties.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-563">
        The DefaultExpressionEngine class is now immutable. An instance can be
        shared between multiple configuration objects.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-562">
        Improved the API of ExprLookup.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-559">
        It is now possible to define default values for initialization
        properties of configurations.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-555">
        Fixed a bug in the handling of the xml:space attribute in
        XMLConfiguration. The attribute is now also applied to the current
        element, not only to sub elements.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-554">
        BeanHelper is no longer a static utility class. Instances can be
        created with a specific configuration of bean factories. There is still
        a default instance which can be obtained via the BeanHelper.INSTANCE
        field.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-553">
        The code for accessing configuration files hs been reworked. Methods
        related to locating configuration files have been moved from
        ConfigurationUtils to a new FileLocatorUtils class. Customizable
        strategy classes (implementing the new FileLocationStrategy) can be
        used for searching for configuration files.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-551">
        The data type conversion mechanism has been made extensible. There is a
        new interface ConversionHandler which controls the data type conversions
        available for a configuration object. By setting a custom implementation,
        conversions can be adapted or extended.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-550">
        Conversion to Character is now supported.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-546" due-to="Justin Couch">
        BeanHelper can now process BeanDefinitions initializing properties of
        collection types of their target beans.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-544" due-to="Oliver Kopp">
        Added missing dependencies to build.xml.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-542">
        The mechanism for synchronizing configurations has been completely
        redesigned. It is now based on Synchronizer objects which can be
        configured by client code. A new chapter was added to the user's guide
        regarding thread-safety of configurations.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-540">
        MapConfiguration now directly uses a Properties object passed to its
        constructor as data store rather than copying it. This allows
        SystemConfiguration to be connected to system properties; i.e.
        changing a property through SystemConfiguration immediately affects
        the corresponding system property.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-541">
        Multi-file configurations are no longer restricted to XML configuration
        files. Arbitrary file-based configurations are now supported.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-539">
        The deprecated INIConfiguration class was removed.
        HierarchicalINIConfiguration was renamed to INIConfiguration.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-537">
        The deprecated ConfigurationFactory class was removed.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-536">
        File-based configurations are now implemented in a different way.
        The interfaces FileConfiguration and ReloadingStrategy have been
        removed, also the base classes AbstractFileConfiguration and
        AbstractHierarchicalFileConfiguration. They are replaced by the
        FileBased interface and the FileHandler class which implements
        central I/O functionality. Reloading is now in the responsibility of
        configuration builders.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-535">
        DatabaseConfiguration now provides get methods for querying its
        properties defining the underlying database structures.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-534">
        The includesAllowed property of PropertyConfiguration is now independent
        from the existence of a base path.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-533">
        DatabaseConfiguration now automatically converts CLOBs to strings if
        they appear in property values.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-530">
        Concurrent access to configurations and reloading have been completely
        redesigned. Because reloading is now handled by configuration builders
        there is no need to acquire a lock in order to protected against a
        reload operations.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-527" due-to="Matthias Richter">
        AbstractConfiguration.clearPropertyDirect() is now abstract.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-526" due-to="Oliver Kopp">
        XMLPropertiesConfiguration now supports loading from and saving to DOM
        nodes.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-525">
        PropertiesConfiguration now keeps a comment at the bottom of a
        properties file. A new footer property was added for reading and
        writing this footer comment.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-524">
        Interpolation now works correctly after a configuration was cloned.
        The ConfigurationInterpolator instance is now cloned, too.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-521" due-to="Oliver Kopp">
        ConfigurationUtils.fileFromUrl() now correctly handles URL containing
        encoded percent characters.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-520">
        Support for reloading of configuration data has been reworked.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-519">
        Configuration objects are now created via configuration builders. A new
        API for configuration builders has been added.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-518">
        Classes and interfaces related to interpolation have been slightly
        reworked. ConfigurationInterpolator is now thread-safe. There are
        multiple ways to define the ConfigurationInterpolator object to be
        used by an AbstractConfiguration instance.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-517">
        Hierarchical configurations now provide methods to obtain sub
        configurations for all child elements of a given key.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-516">
        PropertiesConfiguration no longer escapes double quotes on saving.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-515">
        The visibility of some internal methods of PropertiesConfiguration.PropertiesWriter
        has been increased to protected. This simplifies the implementation of
        a custom escaping strategy.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-514">
        Bean declarations now support constructor invocations.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-513">
        HierarchicalConfiguration is now an interface. The base implementation
        class is named BaseHierarchicalConfiguration.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-512">
        It is now possible to obtain an immutable view on a Configuration or
        HierarchicalConfiguration object. New interfaces,
        ImmutableConfiguration, and ImmutableHierarchicalConfiguration have
        been introduced.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-508">
        Generic get() methods have been added to the Configuration interface.
        These methods expect a target class and try to convert the value of
        the specified property to this target class.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-506">
        Removed obsolete nested classes Node and NodeVisitor of
        HierarchicalConfiguration. The related deprecated class
        ConfigurationKey was removed, too.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-505">
        XMLConfiguration no longer supports attributes with multiple values or
        list delimiter parsing in attributes. This feature was complex and
        error prone and brought little value to the user.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-504">
        SubnodeConfiguration now provides a new method for clearing it and
        removing its root node from the parent configuration. The method
        HierarchicalConfiguration.configurationsAt() now returns a list
        of SubnodeConfiguration so that it is easier to make direct use of
        this feature.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-500">
        XMLConfiguration now adds attributes of elements defining a list to
        all list nodes.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-496">
        Concurrent access to configurations and reloading have been completely
        redesigned. This should reduce the amount of synchronization.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-486">
        Removed some static fields for specifying global default values.
        Using static fields in this way is thread-hostile. There are now
        alternatives for setting default values.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-462">
        Updated dependency to Commons Lang from version 2.6 to 3.1.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-419">
        EventSource is now an interface. With BaseEventSource there is a
        default implementation.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-418">
        The handling of list delimiters and their escape characters has been
        reworked. A new ListDelimiterHandler interface was introduced allowing
        applications to customize the treatment of list delimiters.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-330">
        Concurrent access to configurations has been reworked.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-204">
        With the new reloading mechanism automatic and periodic reloading checks
        can be performed.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-202">
        Reloading checks can now be performed in a background thread.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-153">
        It is now possible to define the strategy used for locating
        configuration files.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-136">
        Reloading can no longer corrupt a configuration instance. This is now
        handled by a configuration builder; the original configuration instance
        is not modified.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-26">
        It is now possible to influence the conversion from a container object
        (a collection or an array) to a single value (e.g. what is returned by
        getString() if the current property has multiple values). Per default,
        the first value is returned. By overriding methods of the
        configuration's ConversionHandler, this behavior can be changed.
      </action>
    </release>

    <release version="1.10" date="2013-10-27"
      description="Minor bug fixes and improvements">
      <action dev="oheger" type="update" issue="CONFIGURATION-500">
        XMLConfiguration now adds attributes of elements defining a list to
        all list nodes.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-525">
        PropertiesConfiguration now keeps a comment at the bottom of a
        properties file. A new footer property was added for reading and
        writing this footer comment.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-526" due-to="Oliver Kopp">
        XMLPropertiesConfiguration now supports loading from and saving to DOM
        nodes.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-534">
        The includesAllowed property of PropertyConfiguration is now independent
        from the existence of a base path.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-546" due-to="Justin Couch">
        BeanHelper can now process BeanDefinitions initializing properties of
        collection types of their target beans.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-550">
        Conversion to Character is now supported.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-555">
        Fixed a bug in the handling of the xml:space attribute in
        XMLConfiguration. The attribute is now also applied to the current
        element, not only to sub elements.
      </action>
      <action dev="henning" type="fix" issue="CONFIGURATION-556">
        In 1.7 and before, any change to the system properties was
        immediately reflected in a SystemConfiguration object. This
        behavior broke in 1.8 and 1.9. This has been fixed for 1.10.
      </action>
      <action dev="henning" type="fix" issue="CONFIGURATION-557">
        In 1.7 and before, it was possible to pass an arbitrary Map
        into the constructor of MapConfiguration. With the
        generification in 1.8, this actually broke and it was no
        longer possible to pass in e.g. a Map&lt;String, String&gt;
        because the signature now required a Map&lt;String,
        Object&gt;. Changing the constructor to accept a
        Map&lt;String, ?&gt; restores this.
      </action>
      <action dev="henning" type="fix" issue="CONFIGURATION-558">
        Similar to CONFIGURATION-557, the getList(String, List) method
        was generified to be getList(String, List&lt;Object&gt;) but
        needs to be getList(String, List&lt;?&gt;) so that code that
        used a more specific list (such as a List&lt;String&gt;) still
        compiles against the new API.
      </action>
    </release>

    <release version="1.9" date="2012-08-22"
      description="Minor bug fixes and improvements">
      <action dev="oheger" type="update" issue="CONFIGURATION-503" due-to="Tino Sino">
        Small changes in user guide documentation.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-502" due-to="Tino Sino">
        Improvements of basic features and AbstractConfiguration documentation.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-501">
        XMLPropertyListConfiguration no longer swallows exception caused by
        invalid date properties. Now a warning message is logged.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-495">
        List properties can now be set correctly on a HierarchicalConfiguration
        if delimiter parsing is disabled.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-488">
        Made static DateFormat fields in XMLPropertyListConfiguration.PListNode
        final and added a note about proper synchronization.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-487">
        DataConfiguration.get() now also works with String properties and if no
        data type conversion is required.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-483">
        DatabaseConfiguration now always closes the result set.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-482" due-to="Chris Seieroe">
        The Import-Package section in the OSGi manifest now uses the
        resolution:=optional directive for optional dependencies.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-481">
        Variable substitution in configuration sources declared in a definition
        file for DefaultConfigurationBuilder now works across multiple sources.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-477">
        PropertyListConfiguration now can deal with C-style comments in plist
        configuration files. Both block and single-line comments are supported.
      </action>
    </release>

    <release version="1.8" date="2012-02-04"
      description="Support for Java 1.5">
      <action dev="oheger" type="fix" issue="CONFIGURATION-476">
        Fixed possible ClassCastExceptions in CompositeConfiguration related to
        special in-memory configurations.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-475">
        Class ConfigurationKey was deprecated in favor of DefaultConfigurationKey.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-474">
        Implemented delimiter parsing in HierarchicalINIConfiguration to be
        consistent with other Configuration implementations. Note that this can
        impact existing code. To switch back to the old behavior, call
        setDelimiterParsingDisabled(true) before loading the configuration.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-471">
        CompositeConfiguration now provides better support for child
        configurations that are used as in-memory configuration.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-470">
        Classes generated by JavaCC are now created dynamically during the
        build process.
      </action>
      <action dev="ebourg" type="add">
        Commons Configuration now requires Java 5 or later.
      </action>
      <action dev="ebourg" type="add" issue="CONFIGURATION-466">
        Binary literals are now supported (i.e Ob11010001).
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-465">
        Updated the dependency to Commons Jexl to version 2.1.1. This version
        provides correct OSGi manifest headers.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-463">
        Improved documentation of AbstractFileConfiguration related to load()
        methods and their impact on the base path.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-461">
        The project now uses standard Maven directory layout.
      </action>
    </release>

    <release version="1.7" date="2011-09-07"
      description="Many bugfixes, some new features.">
      <action dev="oheger" type="fix" issue="CONFIGURATION-460">
        Reloading now also works for configuration sources declared in the
        additional section of a configuration definition file for
        DefaultConfigurationBuilder.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-459">
        ConfigurationFactory has been deprecated. The user guide was updated to
        no more mention this class.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-458">
        HierarchicalConfiguration now provides a specific implementation of the
        clear() method. This is more efficient and also solves some other
        problems related to clearing a SubnodeConfiguration.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-456">
        Improved Javadocs of getKeys(String) method for some configuration
        classes.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-455">
        HierarchicalINIConfiguration.getSection() now creates a section if it
        does not exist. The SubnodeConfiguration returned by this method is now
        always connected to the parent ini configuration.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-452">
        XPathExpressionEngine now provides better support for the setProperty()
        method.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-448">
        The parsing of ini files has been improved for property definitions
        containing multiple separator characters.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-447">
        DefaultConfigurationBuilder now supports including environment properties
        using the "env" tag.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-446">
        XMLConfiguration now handles attributes correctly whose value is an
        empty string.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-445">
        Transforming a CombinedConfiguration with ViewNodes to an
        XMLConfiguration could cause problems with attributes. This has been
        fixed.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-439">
        Child configuration builders created for a &lt;configuration&gt; element
        in a configuration definition file now inherit the configuration and
        error listeners from the original DefaultConfigurationBuilder. This
        makes it possible to suppress log output created for optional
        configurations.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-438" due-to="Mike Noordermeer">
        JNDIConfiguration.getKeys() no more logs an exception if the prefix does
        not exist.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-437">
        Child configuration builders created for a &lt;configuration&gt; element
        in a configuration definition file now inherit some of their properties
        from the builder object which processed the file.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-436">
        The optional dependency to Apache Ant has been changed to the new
        groupId org.apache.ant. The version was updated to the most recent
        version 1.8.2 (older versions should still work).
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-434">
        HierarchicalINIConfiguration now recognizes comment characters in
        property definitions only if they are preceded by whitespace. Thus
        comment characters can now be part of the property value. This is for
        instance required for the definition of file paths which use the
        semicolon as path separator.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-433">
        Minor improvements of the support for indexed properties in
        ConfigurationDynaBean.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-432">
        The methods getList() and getStringArray() of AbstractConfiguration can
        now handle single-valued properties of primitive types.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-428">
        XMLConfiguration no longer escapes backslashs in the values of
        XML elements.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-424">
        HierarchicalINIConfiguration now works correctly with configurations
        that contain only properties in the global section.
      </action>
      <action dev="rgoers" type="fix" issue="CONFIGURATION-423" due-to="William Buckley">
        testFromClassPath() can fail when it should not because of inconsistent escaping of output from
        PropertiesConfiguration.getURL() and FileChangedReloadingStrategy.getFile().toURL().
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-418">
        A bug related to the interpretation of escape sequences for backslashes
        has been fixed. The user guide has also been improved in this area.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-415">
        Files with a plus character in their names are now handled correctly.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-413" due-to="Alexander Prishchepov">
        SubsetConfiguration now produces correct events.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-412">
        DatabaseConfiguration can now be instructed to perform a commit after an
        update of the managed database table. This makes it usable in
        environments where the connections do not use auto-commit mode.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-410">
        Added a refresh() method to AbstractFileConfiguration and
        AbstractHierarchicalFileConfiguration.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-409">
        HierarchicalINIConfiguration now correctly saves sections whose name
        contains delimiter characters.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-408">
        PropertiesConfiguration.save() escaped slashes in properties values.
        This was caused by a bug in commons-lang 2.4. Updating to the new
        version commons-lang 2.5 fixed this problem.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-407">
        Fixed a potential IllegalStateException in HierarchicalINIConfiguration
        that can be thrown when the global section is requested concurrently.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-405">
        XMLPropertyListConfiguration no longer throws a ConfigurationException
        if the file to be loaded does not have an outer dict element.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-404" due-to="Rob Walker">
        The default expression engine used by hierarchical configurations used to
        throw a NumberFormatException if invalid indices were used in property
        keys. This has been fixed. As a side effect brackets can now be used in
        property keys.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-403">
        When an empty XMLConfiguration was saved and reloaded the root element
        was assigned an empty text value. Because of this isEmpty() returned
        false for this configuration. This has been fixed.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-399">
        Default variable interpolation now supports the env: prefix for
        referencing environment variables.
      </action>
      <action dev="rgoers" type="fix" issue="CONFIGURATION-397">
        Schema violation exceptions are now propagated back to the caller.
      </action>
       <action dev="rgoers" type="fix" issue="CONFIGURATION-390">
        XMLConfiguration and CombinedConfiguraton are now synchronized to fix problems
        caused by reloading in a multithreaded environment.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-396">
        HierarchicalConfiguration.NodeVisitor is now passed the correct key to
        its visitAfterChildren() method.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-393">
        BaseConfiguration.clone() now also clones collections stored in the
        internal map. This causes list properties to be handled correctly.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-389">
        DefaultConfigurationBuilder now supports defining ini files in its
        configuration definition file.
      </action>
      <action dev="rgoers" type="fix" issue="CONFIGURATION-388">
        Attribute or element values will not be escaped when attribute or element splitting are disabled.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-363">
        When using Commons Lang 2.6 or higher as dependency nested interpolation
        in variable names is supported.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-362">
        Empty dictionaries in a PropertyList configuration are now preserved when the configuration is saved.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-385">
        DatabaseConfiguration now generates correct events for the clear() and
        clearProperty() methods.
      </action>
      <action dev="rgoers" type="add" issue="CONFIGURATION-380">
        Add ExprLookup to allow expressions to be evaluated in configurations. When
        used, this requires that Apache Commons Jexl be added as a dependency to
        projects using Commons Configuration.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-374">
        MapConfiguration now provides a way of controlling the trimming
        behavior.
      </action>
      <action dev="rgoers" type="add" issue="CONFIGURATION-378">
        Added MergeCombiner to allow elements in two configurations to be merged when the
        element and attributes in the first file match those in the second file.
      </action>
      <action dev="rgoers" type="add" issue="CONFIGURATION-340">
        File system access has been abstracted to a FileSystem interface. Two implementations
        are provided, DefaultFileSystem that behaves in a backward compatible manner and
        VFSFileSystem which uses Commons VFS to retreive and store files.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-314">
        PropertiesConfigurationLayout now allows setting the line separator to
        be used when writing the properties file.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-371">
        PropertiesConfigurationLayout now also stores the property separators used for
        the single properties. It is also possible to change them for specific
        properties or set a global properties separator. In earlier versions
        the separator was hard-coded to &quot; = &quot;.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-370">
        PropertiesConfiguration now defines a nested interface IOFactory. Using
        this interface it is possible to inject custom PropertiesReader and
        PropertiesWriter implementations.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-368">
        SubnodeConfiguration now fires an event of type EVENT_SUBNODE_CHANGED
        if a structural change of the parent configuration was detected. If the
        SubnodeConfiguration is contained in a CombinedConfiguration, the
        CombinedConfiguration receives this event and can update itself.
      </action>
      <action dev="rgoers" type="fix" issue="CONFIGURATION-361">
        MultiFileHierarchicalConfiguration was not using basepath to
        construct the file url. It also threw an exception if the
        file pattern resolved to a non-existent file. This is now
        configurable.
      </action>
      <action dev="joehni" type="update" issue="CONFIGURATION-375">
        Align interpolation functionality of SubnodeConfiguration and
        SubsetConfiguration. SubsetConfiguration will now also interpolate
        keys of the parent configuration or use the local lookups of its
        parent. SubnodeConfiguration is in turn now able to lookup local
        keys as well.
      </action>
      <action dev="joehni" type="update" issue="CONFIGURATION-376">
        Align interpolation functionality of SubnodeConfiguration and
        SubsetConfiguration.
      </action>
      <action dev="joehni" type="update" issue="CONFIGURATION-377">
        Align interpolation functionality of SubnodeConfiguration and
        SubsetConfiguration.
      </action>
      <action dev="joehni" type="fix" issue="CONFIGURATION-369">
        SubsetConfiguration did not use locally registered lookups of its
        interpolator.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-359">
        Fixed broken links to the API documentation in the user's guide.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-358">
        Improvements of the user's guide for hierarchical configurations.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-357">
        The message of the ConversionException thrown by
        AbstractConfiguration.getBigInteger() is now correct.
      </action>
      <action dev="rgoers" type="add" issue="CONFIGURATION-356">
        Added getConfigurations and getConfigurationNameList.
      </action>
      <action dev="rgoers" type="add" issue="CONFIGURATION-257">
        Allow configurations to be validated using XML Schemas.
      </action>
      <action dev="rgoers" type="add" issue="CONFIGURATION-355">
        Allow configurations to be validated using XML Schemas.
      </action>
    </release>

    <release version="1.6" date="2008-12-25"
      description="Another set of smaller bug fixes">
      <action dev="oheger" type="update">
        Some dependencies to other Commons components have been updated to the
        recent versions. Affected are Commons Lang, Commons Collections,
        Commons Logging, Commons BeanUtils, and Commons JXPath. The older
        versions should still work.
      </action>
      <action dev="rgoers" type="add" issue="CONFIGURATION-353">
        Allow system properties to be set from a configuration file.
      </action>
      <action dev="rgoers" type="add" issue="CONFIGURATION-351">
        Allow variable resolvers to be defined configured in
        DefaultConfigurationBuilder.
      </action>
      <action dev="rgoers" type="add" issue="CONFIGURATION-350">
        Added MultiFileHierarchicalConfiguration, DynamicCombinedConfiguration
        and PatternSubtreeConfigurationWrapper.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-349" due-to="Ralph Goers">
        The visibility of DefaultConfigurationBuilder.XMLConfigurationProvider
        was changed from package local to public. This makes it easier to
        implement providers that create configuration classes derived from
        XMLConfiguration.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-348">
        AbstractHierarchicalFileConfiguration.getKeys() now also checks whether
        a reload is required.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-347">
        AbstractFileConfiguration.getKeys() now returns an iterator that points
        to a snapshot of the keys of the configuration. This prevents
        ConcurrentModificationExceptions during iteration when a reload is
        performed.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-346">
        ConfigurationUtils.convertToHierarchical() now creates multiple
        configuration nodes for properties with multiple values. This
        improves compatibility with queries.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-345">
        PropertiesConfiguration now per default uses the encoding "ISO-8859-1"
        for loading properties files.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-344">
        CombinedConfiguration could cause a deadlock when it was accessed while
        concurrently a reload of one of its child configuration happened. This
        was fixed by reducing synchronization where it is not strictly
        necessary.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-341">
        The "force reload check" mechanism of CombinedConfiguration now also
        works with sub configurations created by configurationAt().
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-339">
        When performing interpolation the methods getList() and getStringArray()
        of CompositeConfiguration did not take the order of child configurations
        into account. This could lead to wrong interpolated values when the key
        was contained in multiple child configuration. Interpolation is now
        always done in the correct order.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-338" due-to="David Donn">
        PropertiesConfiguration now also performs interpolation when searching
        for include files. This means that the name of a file to include can be
        determined by another property.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-337" due-to="Ralph Goers">
        DefaultConfigurationBuilder now supports defining new configuration
        providers in the configuration definition file.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-336">
        When converting a flat configuration to a hierarchical one it is now
        possible to specify the expression engine to be used for this purpose.
        This may be necessary if the flat configuration contains keys with
        special characters interpreted by the expression engine.
        CombinedConfiguration defines the new setConversionExpressionEngine()
        method. The expression engine passed to this method will be used when
        converting flat child configurations to hierarchical ones.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-335">
        XMLConfiguration now allows disabling the attribute splitting mechanism
        introduced in the 1.5 release (as part of the fix for CONFIGURATION-268).
        This may be necessary for correctly processing attributes containing
        both the list delimiter and the attribute delimiter character. The new
        property &quot;disableAttributeSplitting&quot; was added for this
        purpose.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-334">
        Made handling of parent nodes more consistent when setRoot() or
        setRootNode() of HierarchicalConfiguration are involved.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-332">
        Properties written through a DataConfiguration to a wrapped
        PropertiesConfiguration got lost when the PropertiesConfiguration was
        saved. This has been fixed.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-331">
        XMLBeanDeclaration now defines a factory method createBeanDeclaration()
        for creating the declarations for complex nested properties. This
        method can be overridden by derived classes for injecting custom
        BeanDeclaration implementations.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-328">
        A bug in XMLConfiguration.addNodes() made it impossible to add
        attribute nodes using this method. This has been fixed.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-327">
        INIConfiguration misinterpreted variables in the global section with
        a dot in their name as section names. HierarchicalINIConfiguration fixes
        this problem.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-326">
        INIConfiguration does not support obtaining a subset for the global
        section. HierarchicalINIConfiguration provides the getSection() method
        that returns the content of the global section if null is passed in as
        section name.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-325">
        INIConfiguration does not return the global section in its getSections()
        method. HierarchicalINIConfiguration fixes this problem.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-324">
        HierarchicalINIConfiguration adds support for line continuation.
      </action>
      <action dev="oheger" type="update">
        INIConfiguration has been deprecated. Its functionality is now available
        through the new HierarchicalINIConfiguration class.
      </action>
      <action dev="oheger" type="add">
        With HierarchicalINIConfiguration a complete new Configuration
        implementation for parsing Windows INI files is available. This new
        class is a full replacement of INIConfiguration and addresses some of its
        shortcomings. Being derived from HierarchicalConfiguration it offers
        the enhanced functionality of hierarchical configurations.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-322">
        ConfigurationDynaBean now works properly with indexed properties
        stored internally in the underlying configuration as arrays.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-321">
        The iterator returned by HierarchicalConfiguration.getKeys(String prefix)
        now also contains the prefix if this key is contained in the
        configuration.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-320">
        XMLPropertyListConfiguration is no longer limited to 32 bits integers.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-318">
        When an XMLConfiguration is created using the copy constructor, the name
        of the root element is now preserved.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-316">
        Changing the text of the root element of an XMLConfiguration had no
        effect when the configuration was saved. This has been fixed.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-315">
        CombinedConfiguration used to send two EVENT_COMBINED_INVALIDATE events
        for each modified child configuration. Now this event is sent only
        once after the affected child configuration was updated.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-307">
        XMLConfiguration now supports the xml:space attribute. This attribute
        can be used to preserve whitespace in the content of XML elements.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-306">
        INIConfiguration now preserves whitespace in quoted values.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-302">
        If a change has been detected by FileChangedReloadingStrategy, the
        reloadingRequired() method will now return true until
        reloadingPerformed() has been called.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-301">
        Fixed a NullPointerException that could be thrown under certain
        circumstances when saving an XMLConfiguration that was created using
        the constructor that takes a HierarchicalConfiguration.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-309">
        Instantiating an XMLPropertyListConfiguration no longer fails
        if the DTD is missing from the classpath.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-300">
        It's now possible to read a configuration file containing
        a '#' in its name (requires Java 1.4 or above).
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-260">
        Fixed the date format for XMLPropertyListConfiguration.
      </action>
    </release>

    <release version="1.5" date="2007-11-24" description="Many smaller bugfixes">
      <action dev="oheger" type="update" due-to="J&#xF6;rg Schaible">
        Some of the dependencies in the m2 pom have been updated to be more
        consistent.
      </action>
      <action dev="oheger" type="update" due-to="J&#xF6;rg Schaible">
        The dependency to commons-logging was updated to the current version
        1.1. Older versions of commons-logging will still work.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-273">
        A new method interpolatedConfiguration() was added to AbstractConfiguration.
        This method returns a configuration with the same type and
        content as the original configuration, however all variables have been
        resolved.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-299">
        Resolving of variables with the prefix const (constant fields) caused
        a ClassCastException under certain circumstances if non-String fields
        were involved. This has been fixed.
      </action>
      <action dev="oheger" type="update" due-to="Nicolas De Loof">
        The dependencies to commons-codec and commons-jxpath have been marked
        as optional. They are not required by the core classes.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-284" due-to="Nicolas De Loof">
        There is a new configuration implementation EnvironmentConfiguration,
        which provides access to (OS) environment variables. On Java &gt;= 1.5
        this class can be directly used; on earlier versions a dependency to ant
        is required.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-296">
        A bug in XMLConfiguration caused that attributes of the root element
        could not be changed. This has been fixed.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-290">
        A new method registerEntityId() was added to XMLConfiguration, which
        allows to register URLs for entities. A new default implementation of
        the EntityResolver interface handles these entities automatically.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-295">
        The subset() method of HierarchicalConfiguration now takes the value of
        the subset's root node into account if it is not ambigous.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-294">
        Nodes added to a XMLConfiguration using the addNodes() method could
        lose their value when the configuration was saved. This is now fixed.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-272">
        New copy() and append() methods have been added to AbstractConfiguration.
        They replace the methods with the same names in ConfigurationUtils,
        which do not handle all features of AbstractConfiguration properly (e.g.
        list delimiters in property values are incorrectly treated). To avoid
        such problems, the new methods should be used.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-291">
        The addNodes() method of hierarchical file-based configurations now
        correctly triggers an auto save.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-287">
        HierarchicalConfiguration.addNodes() now resets the reference property
        of all nodes to be added. This fixes a problem with XMLConfiguration,
        which now detects the added nodes as new and treats them correctly when
        the configuration is saved.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-285">
        DefaultConfigurationBuilder will now notify registered error listeners
        about optional configuration sources that could not be created. Before
        exceptions thrown by optional configurations were swallowed
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-283">
        ConfigurationUtils.convertToHierarchical() now correctly deals with
        property values containing escaped list delimiters. This also affects
        CombinedConfiguration when sub configurations with such property values
        are contained.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-275">
        AbstractConfiguration.addProperty() now correctly deals with list and
        array properties if delimiter parsing is disabled.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-282">
        The default expression engine used by HierarchicalConfiguration
        instances is now lazily initialized. This avoids NullPointerExceptions
        in certain server environments after a redeploy.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-281">
        Cycles in the JNDI tree no longer cause a stack overflow in
        JNDIConfiguration.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-277">
        The base implementation of clear() in AbstractConfiguration now checks
        for a potential UnsupportedOperationException when iterating over the
        existing properties.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-280"
        due-to="Roman Kurmanowytsch">
        Using file-based configurations in auto-save mode together with a
        reloading strategy could cause data loss. This has been fixed.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-279">
        A PropertiesConfiguration that was created from a non existing file
        lost its content when it was saved. This problem has been solved.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-215">
        A new getSource() method was added to CompositeConfiguration and
        CombinedConfiguration, which returns the child configuration, in which
        a given property is defined.
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-274">
        PropertiesConfiguration now supports escaping the escape character for
        list delimiters.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-269">
        PropertiesConfiguration no longer escapes the list delimiter on saving
        if the list delimiter has been disabled.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-270">
        List properties and properties containing interpolated variables
        are now properly saved by INIConfiguration.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-268">
        When delimiter parsing was disabled for XMLConfiguration, saving and
        loading the configuration accidently added escape characters to properties
        containing the list delimiter character. This has been fixed. It is now
        also possible to escape the escape character itself.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-253">
        The return value of FileConfiguration.getFile() is now always
        consistent with the result of getURL().
      </action>
      <action dev="ebourg" type="update">
        INIConfiguration uses the platform's specific line separator instead
        of the Windows line separator.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-267">
        INIConfiguration flushes the output at the end of a save operation.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-265">
        For hierarchical file-based configurations the auto-save mechanism is
        now also triggered if a subnode configuration is changed. In such a case
        the new event type EVENT_SUBNODE_CHANGED will be sent to registered
        listeners.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-266" due-to="Tobias Noebel">
        ConfigurationInterpolator now also invokes the default lookup object for
        variables with a prefix that could not be resolved by their associated
        lookup object.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-264">
        A SubnodeConfiguration per default does not see certain changes of its
        parent configuration (e.g. reloads). With a new boolean parameter of
        HierarchicalConfiguration's configurationAt() method a mode can be
        enabled, in which the subnode configuration checks for such changes and
        reconstructs itself if necessary.
      </action>
      <action dev="ebourg" type="fix">
        byte[] properties are properly saved as data fields in the plist
        configurations (PropertyListConfiguration and XMLPropertyListConfiguration).
      </action>
      <action dev="ebourg" type="add">
        DataConfiguration now supports java.net.InetAddress,
        javax.mail.internet.InternetAddress, and Java 5 enumeration types.
        Properties are converted to these types using the new generic getters.
      </action>
      <action dev="ebourg" type="fix">
        The object getters in DataConfiguration with no default value
        (i.e getURL(key)) now throw a NoSuchElementException if the flag
        throwExceptionOnMissing is set.
      </action>
      <action dev="ebourg" type="add">
        Generic get methods have been added to DataConfiguration (get(),
        getArray() and getList())
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-263">
        XMLConfiguration used to drop attributes when an element's value was a
        list. This has been fixed.
      </action>
      <action dev="ebourg" type="add" issue="CONFIGURATION-249">
        File configurations can now be saved to FTP URLs, or any other URL
        protocol supporting data output.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-180">
        Fixed a potential issue in DatabaseConfiguration where an error on
        closing a statement would prevent the connection from being closed.
      </action>
      <action dev="ebourg" type="add" issue="CONFIGURATION-261">
        Date objects are now supported in ASCII plist files.
      </action>
      <action dev="ebourg" type="update">
        XMLPropertyListConfiguration no longer requires commons-digester and
        commons-beanutils to work.
      </action>
      <action dev="ebourg" type="update">
        Fixed INIConfiguration to handle the quoted values and the lines
        containing a value and a comment.
      </action>
    </release>

    <release version="1.4" date="2007-04-08" description="Improved interpolation, configuration for INI files, reloading strategy triggered with JMX, bug fixes.">
      <action dev="oheger" type="update" issue="CONFIGURATION-256">
        MapConfiguration and the web-based configurations now treat strings
        that contain an escaped list delimiter correctly: The escape character
        will be removed, so that for instance "foo\,bar" becomes "foo,bar".
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-255">
        DatabaseConfiguration now handles list delimiters in property values
        correctly.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-254" due-to="Carsten Kaiser">
        After cloning a XMLConfiguration there was still a connection to the
        original configuration. So when the clone was modified and then saved
        the content of the original configuration was written. This has now
        been fixed.
      </action>
      <action dev="oheger" type="update">
        Class loading in BeanHelper is now done using ClassUtils of Commons
        Lang.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-237" due-to="Nicolas de Loof">
        With ManagedReloadingStrategy a new reloading strategy for file-based
        configurations was added that can be triggered through JMX.
      </action>
      <action dev="oheger" type="update">
        The dependencies to Commons Lang, Commons Collections, and Commons Digester
        are updated to use the recent available version. However older versions
        will still work.
      </action>
      <action dev="oheger" type="add">
        A pom for maven 2 was added.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-252">
        ConfigurationUtils.getFile() now always checks first whether the passed
        in file name is absolute. If it is, this file will be returned. This
        prevents that on Unix under certain circumstances absolute file names
        are interpreted as relative ones.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-251">
        The dependency to xml-apis was changed to the version 1.0.b2. The so
        far used version 2.0.2 is reported to be bogus.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-245">
        In addition to configuration event listeners now so-called configuration
        error listeners are supported. These listeners are notified about
        internal errors that had been logged and swallowed by privious versions.
        The new enableRuntimeExceptions() method of ConfigurationUtils
        registers a special error listener at the passed in configuration that
        generates a runtime exception when an error event is received.
      </action>
      <action dev="oheger" type="add">
        AbstractConfiguration now allows to set an instance specific logger
        using the setLogger() method. This gives clients more control over a
        configuration's logging behavior.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-155">
        SubsetConfiguration and CompositeConfiguration were updated to fully
        support an instance specific list delimiter. Concerning splitting of
        string properties that contain a list delimiter character, these
        classes now behave like a "normal" configuration.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-192">
        Variable interpolation features have been improved. A variable can now
        have the form ${prefix:variableName} where the prefix
        defines the type of the variable. The standard types sys for
        system properties and const for constants are supported.
        Variables without a prefix are treated as references to other
        configuration properties (which is compatible to earlier versions).
      </action>
      <action dev="oheger" type="update">
        Commons Configuration now depends on Commons Lang 2.2. Some features
        of Lang's new text package are used.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-244">
        The number of dependencies needed for DefaultConfigurationBuilder was
        reduced by letting some of the default configuration providers resolve
        their classes per reflection.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-240">
        File-based configurations with a reloading strategy did not work well
        together with CombinedConfiguration because the reloading strategy is
        only checked when its associated configuration is accessed (which does
        not happen when only the combined configuration is queried).
        As a workaround CombinedConfiguration now provides the boolean
        forceReloadCheck property. If this is set to true, all contained
        configurations will be triggered when a property is queried. This will
        cause a reload if necessary.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-243">
        Configuration declarations in the configuration definition file for
        DefaultConfigurationBuilder that are marked as optional now support a
        new attribute config-forceCreate. If this attribute is set
        to true and the initialization of the configuration fails,
        DefaultConfigurationBuilder tries to add an empty configuration of the
        correct type to the resulting combined configuration. Before this
        change optional configurations that caused errors were never added to
        the combined configuration.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-241">
        CompositeConfiguration.clearProperty() now generates the correct
        update events.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-242">
        The configuration returned by HierarchicalConfiguration.subset()
        performed variable interpolation only in the keys that belong to the
        subset. Now the parent configuration is searched, too, to resolve the
        value of the referenced property. This is consistent with the way
        SubnodeConfiguration works.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-234">
        DefaultConfigurationBuilder now internally uses the standard expression
        engine for hierarchical configurations. So the dependency to Commons
        JXPath is no more needed when this class is used. Note that this change
        has some impact on existing code that manually sets properties before
        the combined configuration is created; this code must now be adapted to
        the changed syntax of property keys.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-236">
        HierarchicalConfiguration and some of its sub classes now define a
        copy constructor.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-197" due-to="Trevor Charles Miller">
        A new configuration class for windows ini files was added.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-229">
        For file-based configurations loaded by ConfigurationFactory the load()
        method was called before all of the properties specified by attributes
        of the XML element have been initialized. Now load() is called after
        property initialization.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-235">
        Interpolation of non string values did not work when SubsetConfiguration
        was involved. This has now been fixed.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-227">
        The compatibility of ConfigurationDynaBean with other configuration types
        than those that inherit from BaseConfiguration was improved.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-233" due-to="Rainer Jung">
        The getList() method of CompositeConfiguration does now fully support
        variable interpolation. So it is possible to refer to a variable in
        one (sub) configuration that is defined in another configuration.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-230">
        XPathExpressionEngine used to create wrong keys for attribute nodes.
        This caused some operations on XMLConfiguration to fail when such an
        expression engine was set (e.g. reloading). Now correct keys for
        attributes are constructed.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-228">
        Some of the methods of file-based hierarchical configurations (e.g.
        subset() or configurationAt()) did not take an eventually set reloading
        strategy into account. This is now fixed by overriding the internal
        fetchNodeList() method in AbstractHierarchicalFileConfiguration and
        letting it always check for a reload.
      </action>
    </release>

    <release version="1.3" date="2006-09-24">
    </release>

    <release version="1.3-rc2" date="2006-09-03">
      <action dev="oheger" type="update" issue="CONFIGURATION-223" due-to="Gabriele Garuglieri">
        AbstractFileConfiguration now overrides addProperty() and setProperty()
        instead of addPropertyDirect() to implement the auto save feature.
        This was necessary to properly integrate PropertiesConfigurationLayout.
        It has also the advantage that an auto save is triggered only once if
        multi-valued properties are involved (before a save operation was
        performed for each property value).
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-222" due-to="Gabriele Garuglieri">
        The new PropertiesConfigurationLayout class broke the save() operation
        of PropertiesConfiguration when an instance was newly created and
        populated in memory. This is fixed now by ensuring that a layout object
        is immediately created and registered as event listener at the
        configuration.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-221" due-to="Rainer Jung">
        ConfigurationFactory now supports variables in its configuration
        definition files. These variables are resolved using system properties
        and have the typical ${} syntax.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-216" due-to="Gabriele Garuglieri">
        There were still some problems with resolving relative paths when
        configuration files are loaded from classpath. This fix addresses these
        issues.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-220">
        DataConfiguration.getDateArray() used to ignore the format argument.
        This was fixed.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-219">
        PropertiesConfiguration now defines its own clone() method to handle
        the associated PropertiesConfigurationLayout object correctly.
      </action>
    </release>

    <release version="1.3-rc1" date="2006-07-30">
      <action dev="oheger" type="update" issue="CONFIGURATION-217">
        The dependency to servletapi was updated from version 2.3 to version
        2.4, but version 2.3 will still work.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-104">
        A new class PropertiesConfigurationLayout was introduced whose task is
        to preserve the structure (e.g. comments, blanc lines) of a file
        loaded by PropertiesConfiguration. Each PropertiesConfiguration
        object is now associated with such a layout object. A saved properties
        file will look very similar to its original.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-145">
        clone() methods have been added to BaseConfiguration, AbstractFileConfiguration,
        MapConfiguration, CompositeConfiguration, and CombinedConfiguration.
        So the most important Configuration implementations now support
        cloning. To ConfigurationUtils an utility method cloneConfiguration()
        was added that allows to conveniently clone a configuration.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-216">
        If a configuration file was to be loaded from classpath, the
        constructor of AbstractFileConfiguration dropped the file's path. The
        path is now taken into account.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-214">
        The getter methods for numeric data types in AbstractConfiguration now
        support conversions between different Number types, e.g. you can now
        call getLong(key) when key points to an Integer value.
      </action>
      <action dev="oheger" type="add">
        The new class DefaultConfigurationBuilder was added as an alternative to
        ConfigurationFactory. It provides some more features and creates a
        CombinedConfiguration object
      </action>
      <action dev="oheger" type="add">
        The new class CombinedConfiguration was added as a hierarchical
        alternative to CompositeConfiguration.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-143">
        Support for low-level configuration events was added to all classes
        derived from AbstractConfiguration. The major part of this is handled
        by the new super class EventSource of AbstractConfiguration.
      </action>
      <action dev="oheger" type="add">
        A new method convertToHierarchical() was added to ConfigurationUtils,
        which is able to convert an arbitrary configuration object into a
        hierarchical configuration.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-63">
        Loading of file-based configurations no longer throws a NullPointerException
        in setups where the thread context class loader is not set.
      </action>
      <action dev="oheger" type="update">
        The dependency to dom4j was removed; it was only used by two test classes,
        which have been re-written.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-100">
        XMLConfiguration used to drop the DOCTYPE declaration when saving the
        configuration. It is now able to extract the DTD's public and system ID
        and write them back (more complex DOCTYPE declarations are still not supported).
        With the new methods setSystemID() and setPublicID(), the DOCTYPE
        declaration can be configured.
      </action>
      <action dev="ebourg" type="add" issue="CONFIGURATION-178">
        Added two new constructors in CompositeConfiguration accepting a
        collection of configurations as a parameter.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-186">
        (Basic) Support for declaring beans in configuration files was added.
        Some new classes in the beanutils package allow to create instances from
        these declarations.
      </action>
      <action dev="oheger" type="update">
        The implementation of the interpolation features have been extracted out
        off AbstractConfiguration and moved to PropertyConverter. The
        interpolateHelper() method of AbstractConfiguration is now deprectated
        and will not be called any more during interpolation.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-182">
        A new method configurationsAt() was added to HierarchicalConfiguration
        that provides a convenient way of iterating over complex list-like
        structures without the need of manually constructing configuration keys
        with indices.
      </action>
      <action dev="oheger" type="add">
        A new class SubnodeConfiguration was introduced that wraps a configuration
        node of a HierarchicalConfiguration. All operations performed on this
        configuration use this wrapped node as root. The new configurationAt()
        method of HierarchicalConfiguration returns such a SubnodeConfiguration
        for a specified sub node.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-173">
        With XPathExpressionEngine an expression engine for hierarchical
        configurations is now available that can evaluate XPATH expressions in
        property keys. This expression engine implementation is based on
        Commons JXPath, which is now declared as a new dependency (but at
        runtime it is only needed if the XPathExpressionEngine class is used).
      </action>
      <action dev="oheger" type="add">
        The code for interpreting property keys was refactored out off
        HierarchicalConfiguration. Instead this class now supports pluggable
        expression engines (using the setExpressionEngine() method). So it is
        possible to plug in different expression languages. A default expression
        engine is provided that understands the native expression language used
        by hierarchical configurations in older versions. During the process of
        this refactoring some methods of HierarchicalConfiguration have been
        deprecated; they will not be called any more when searching or adding
        properties. These are the following: createAddPath(), fetchAddNode(),
        findLastPathNode(), findPropertyNodes().
      </action>
      <action dev="oheger" type="update">
        A larger refactoring was performed on the inner Node class of
        HierarchicalConfiguration: A ConfigurationNode interface was extracted
        for which a default implementation (DefaultConfigurationNode) is
        provided. HierarchicalConfiguration.Node now extends this default
        implementation. The new ConfigurationNode interface defines some more
        methods than the Node class did originally for conveniently dealing with
        sub nodes and attributes. HierarchicalConfiguration now uses the new
        type ConfigurationNode whereever possible. Some methods dealing with
        Node objects have been deprecated and replaced by versions operating on
        ConfigurationNode objects instead.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-155" due-to="Jorge Ferrer">
        All configuration classes derived from AbstractConfiguration now allow
        to set an instance specific list delimiter. This can be done through
        the new method setListDelimiter(). As before it is possible to define
        a default list delimiter, which will be used if no instance specific
        delimiter is set. This can be done using the new setDefaultListDelimiter()
        method (the methods get/setDelimiter() have been deprecated). With the
        new setDelimiterParsingDisabled() method parsing of lists can be
        disabled at all.
      </action>
    </release>

    <release version="1.2" date="2005-12-17">
    </release>

    <release version="1.2-rc3" date="2005-12-07">
      <action dev="oheger" type="update">
        Commons Configuration now declares a dependency to Xalan. As with
        Xerces this dependency is only needed for JDK 1.3. It was introduced
        in a process of making Configuration buildable on a JDK 1.3. Documentation
        about the build process was also added.
      </action>
      <action dev="oheger" type="update">
        The dependency to Commons Beanutils Collections was unnecessary and
        thus removed.
      </action>
      <action dev="oheger" type="update">
        Commons Configuration now depends on Commons Digester 1.6 instead of 1.5.
        (This was done only to pick up the latest available release of digester.)
      </action>
    </release>

    <release version="1.2-rc2" date="2005-11-23">
      <action dev="oheger" type="update" issue="CONFIGURATION-2">
        ConfigurationDynaBean now implements the java.util.Map interface (as
        was stated in the javadocs). This was done by deriving the class from
        ConfigurationMap.
      </action>
    </release>

    <release version="1.2-rc1" date="2005-11-11">
      <action dev="oheger" type="update" issue="CONFIGURATION-33">
        The reload() method in AbstractFileConfiguration was updated to prevent
        reentrant invocation, which may be caused by some methods when they
        are called during a reloading operation.
      </action>
      <action dev="ebourg, oheger" type="update">
        AbstractHierarchicalFileConfiguration, a new base class for file based
        hierarchical configurations, was introduced. XMLConfiguration now
        extends this class.
      </action>
      <action dev="oheger" type="update" due-to="Kay Doebl" issue="CONFIGURATION-41">
        XMLConfiguration now prints the used encoding in the xml declaration of
        generated files. In earlier versions always the default encoding was
        written. PropertiesConfiguration now always uses the platform specific
        line separator when saving files.
      </action>
      <action dev="ebourg" type="update" issue="CONFIGURATION-8">
        PropertiesConfiguration now translates properly the escaped unicode
        characters (like \u1234) used in the property keys. This complies with
        the specification of java.util.Properties.
      </action>
      <action dev="ebourg" type="update" issue="CONFIGURATION-123">
        ConfigurationConverter.getProperties() now uses the delimiter of the
        specified configuration to convert the list properties into strings.
      </action>
      <action dev="ebourg" type="update" issue="CONFIGURATION-123">
        The interpolation of variables (${foo}) is now performed in all property
        getters of AbstractConfiguration and DataConfiguration. As a side effect
        the Properties object returned by ConfigurationConverter.getProperties()
        contains only interpolated values.
      </action>
      <action dev="ebourg" type="update" issue="CONFIGURATION-35">
        PropertiesConfiguration now uses the ISO-8859-1 encoding by default
        instead of the system encoding to comply with the specification of
        java.util.Properties.
      </action>
      <action dev="ebourg" type="update" issue="CONFIGURATION-44">
        JNDIConfiguration no longer logs an error when attempting to get
        a property that doesn't exist in the configuration.
      </action>
      <action dev="ebourg" type="update" issue="CONFIGURATION-99">
        Attempting to load a configuration from a directory instead of a file
        will now throw a ConfigurationException.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-28">
        If a multi-valued property was involved in an interpolation operation,
        AbstractConfiguration created a string representation of the list of all
        values. This was changed to only use the first value, which makes more
        sense in this context and is consistent with other getters for single
        valued properties.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-83">
        If an include file with a relative path cannot be found in the base
        path, PropertiesConfiguration now also tries to resolve it based on its
        own location.
      </action>
      <action dev="ebourg" type="update" issue="CONFIGURATION-117" due-to="Steve Bate">
        Fixed MapConfiguration to store the list of values added under a same
        key instead of the last value added.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-80">
        Fixed a bug in the handling of relative file names in ConfigurationFactory:
        In most cases relative file names were not resolved relative to the
        location of the configuration definition file as stated in the documentation.
        This behavior was now changed to always be in sync with the documentation.
        This may have an impact on existing code which uses workarounds for
        the erroneous resolving mechanism.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-6">
        Empty elements or elements whose content consists only of comments or
        whitespace are now taken into account by XMLConfiguration. They are
        added to the configuration; their value is an empty string.
      </action>
      <action dev="oheger" type="add">
        XMLConfiguration now sets a valid system id in the InputSource used for
        loading files. This enables XML parsers to correctly resolve relative
        files, e.g. DTDs.
      </action>
      <action dev="ebourg" type="update" issue="CONFIGURATION-74">
        getKeys() in HierarchicalConfiguration now returns the keys in the same order the properties were inserted.
      </action>
      <action dev="ebourg" type="update">
        Commons Configuration now depends on Commons Collections 3.1 instead of 3.0
      </action>
      <action dev="ebourg" type="add" issue="CONFIGURATION-195">
        New configurations implementing the "property list" format used in
        NeXT/OpenStep and its XML variant used in Mac OS X.
        (PropertyListConfiguration and XMLPropertyListConfiguration)
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-97">
        Resolved some issues with XMLConfiguration and properties containing
        the delimiter character. These properties are now correctly treated,
        escaping the delimiter will work, too.
      </action>
      <action dev="ebourg" type="add">
        Added support for XMLPropertiesConfiguration in ConfigurationFactory.
        A &lt;properties> element will generate a XMLPropertiesConfiguration
        if the filename ends with ".xml".
      </action>
      <action dev="ebourg" type="add" issue="CONFIGURATION-184">
        PropertiesConfiguration now supports escaped key/value separators in the keys
        (i.e foo\:key = bar).
      </action>
      <action dev="ebourg" type="add" issue="CONFIGURATION-166">
        PropertiesConfiguration now supports all key/value separators supported by java.util.Properties
        ('=', ':' and white space characters).
      </action>
      <action dev="ebourg" type="update">
        Commons Configuration now depends on Commons Lang 2.1 instead of 2.0
      </action>
      <action dev="ebourg" type="update" issue="CONFIGURATION-207">
        Comment lines for PropertiesConfiguration can start with the '!' char (compatibility with java.util.Properties).
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-84">
        Because ConfigurationUtils.copy() does not fully support hierarchical
        configurations a clone() method was added to HierarchicalConfiguration
        that can be used instead.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-206">
        XMLConfiguration now provides some support for validating XML
        documents. With the setValidating() method DTD validation can be
        enabled. It is also possible to set a custom DocumentBuilder allowing
        a caller to perform enhanced configuration of the XML loading process.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-121">
        AbstractFileConfiguration now always sets a valid base path if the
        configuration file could be located. This allows PropertiesConfiguration
        to resolve include files even when loaded from class path.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-85">
        Updated XMLConfiguration to correctly deal with properties containing
        dots in their names. Such properties could not be accessed before.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-9">
        PropertiesConfiguration's handling of backslash characters at the end
        of line was incorrect when there was an even number of trailing
        backslashes. This is now fixed.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-130">
        Fixed a problem related to file based configurations that are loaded
        from a URL which is application/x-www-form-urlencoded: the save() method
        would store such files at a wrong location.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-50">
        Updated FileChangedReloadingStrategy to use the file based configuration's
        source URL to find the file to watch. Before that it was possible that
        the strategy checked the wrong file. For configuration files loaded
        from a jar FileChangedReloadingStrategy now checks the jar file itself
        for changes. Finally a bug was fixed which caused the strategy to
        check the watched file's last change date on every invocation of its
        reloadingRequired() method ignoring its refresh delay. Thanks to Jorge
        Ferrer.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-62">
        Fixed a bug in the collaboration between XMLConfiguration and its
        reloading strategy: The configuration did not check its reloading
        strategy, so no reload was performed.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-119">
        Disabled auto save mode during PropertiesConfiguration.load(). Prior
        it was possible that the properties file to be loaded was immideately
        overwritten.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-89">
        Under certain circumstances it was possible that a reloading strategy
        set for PropertiesConfiguration interferred with the save() method causing
        the configuration file to be erased. This has now been fixed.
      </action>
      <action dev="oheger" type="update" due-to="Jamie M. Guillemette" issue="CONFIGURATION-94">
        AbstractFileConfiguration now stores the URL of the config file in the
        load() methods. This URL is reused by the save() method to ensure that
        the same file is written.
      </action>
      <action dev="ebourg" type="update" due-to="Alistair Young">
        XMLPropertiesConfiguration no longer depends on Digester to parse the
        configuration file, it's now implemented with a pure SAX parser.
      </action>
      <action dev="oheger" type="update" due-to="Mi Zhang" issue="CONFIGURATION-49">
        Fixed a bug which causes XMLConfiguration.save to lose attribute values
        under some circumstances. The clear() method now also ensures that the
        associated DOM document is always cleared.
      </action>
      <action dev="ebourg" type="update" due-to="Kunihara Tetsuya" issue="CONFIGURATION-13">
        XMLConfiguration now parse the configuration using the encoding
        declared in the XML header instead of the OS default encoding.
      </action>
      <action dev="ebourg" type="update" due-to="Zsolt Koppany">
        XMLConfiguration now uses the delimiter set by setDelimiter(char).
      </action>
    </release>

    <release version="1.1" date="2005-04-02">
      <action dev="ebourg" type="update" issue="CONFIGURATION-134">
        Fixed a ConcurrentModificationException thrown when calling clear()
        on a SubsetConfiguration applied to a BaseConfiguration.
      </action>
      <action dev="ebourg" type="update" issue="CONFIGURATION-81">
        The resolveContainerStore() method in AbstractConfiguration now works
        properly with arrays of objects and arrays of primitives. This means
        it is possible to store an array of value in the configuration and
        retrieve the first element with the getString(), getInt()... methods.
      </action>
    </release>

    <release version="1.1-rc2" date="2005-03-06">
      <action dev="oheger" type="update" issue="CONFIGURATION-118">
        Updated documentation for FileConfiguration's load() methods. Fixed a
        problem in XMLConfiguration with the output of the save() method when
        multiple files were loaded.
      </action>
      <action dev="ebourg" type="update">
        Fixed a bug in FileChangedReloadingStrategy preventing the detection
        of a file change in some cases.
      </action>
      <action dev="ebourg" type="update">
        Changed getXXXArray() and getXXXList() in DataConfiguration to return
        an empty array/list for empty values.
      </action>
      <action dev="ebourg" type="update" issue="CONFIGURATION-58">
        Fixed getLongArray(), getFloatArray() and getDoubleArray() in DataConfiguration,
        the values were cast into integers.
      </action>
    </release>

    <release version="1.1-rc1" date="2005-02-13">
      <action dev="oheger" type="add" issue="CONFIGURATION-88">
        ConfigurationFactory now always configures digester to use the context
        classloader. This avoids problems in application server environments,
        which use their own version of digester. Thanks to Mike Colbert for the
        patch!
      </action>
      <action dev="ebourg" type="add" issue="CONFIGURATION-148">
        Added a new configuration, XMLPropertiesConfiguration, supporting the
        new XML format for java.util.Properties introduced in Java 1.5.
        A 1.5 runtime is not required to use this class.
      </action>
      <action dev="ebourg" type="add" issue="CONFIGURATION-190">
        Added a comment header to PropertiesConfiguration. The header is not
        parsed when the file is loaded yet.
      </action>
      <action dev="ebourg" type="add">
        Added the setEncoding(String) and the getEncoding() methods to the
        FileConfiguration interface to control the encoding of the
        configuration file.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-210">
        Access to the top level element of the XML document is now provided. For
        newly created configurations this element can be changed before the
        document is written.
      </action>
      <action dev="oheger" type="update" issue="CONFIGURATION-168">
        Merged the two XML related configuration classes into one new class
        XMLConfiguration. This new class should provide the best of its
        ancestors.
      </action>
      <action dev="ebourg" type="update">
        Replaced the PropertyTokenizer inner class in AbstractConfiguration
        with the split method in PropertyConverter. Also moved the method
        building an iterator on the elements of a composite value in
        PropertyConverter as toIterator().
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-15">
        Some cleanup of the handling of the base path in file based configurations.
        The base path is now always taken into account.
      </action>
      <action dev="ebourg" type="fix">
        Calling getProperties on a JNDIConfiguration no longer throws an
        UnsupportedOperationException.
      </action>
      <action dev="ebourg" type="remove">
        Removed the getPropertyDirect method from AbstractConfiguration,
        concrete configurations now implement directly the getProperty method
        from the Configuration interface.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-187">
        Added implementation of a save() method for HierarchicalXMLConfiguration.
      </action>
      <action dev="ebourg" type="update">
        Constructing a file based configuration with a File no longer throws
        an exception when the file doesn't exist.
      </action>
      <action dev="ebourg" type="add">
        Saving a configuration now creates the path to the file if it doesn't exist.
      </action>
      <action dev="ebourg" type="update" issue="CONFIGURATION-45">
        AbstractFileConfiguration.save(File) no longer fails silently when
        an error occurs, a ConfigurationException is thrown instead.
      </action>
      <action dev="ebourg" type="fix">
        ConfigurationUtils.locate() now checks if the URL based resources exist.
        This fixes a bug preventing configuration files from being found if
        the configuration descriptor is in a JAR file (reported by Grant Ingersoll).
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-96">
        Fixed NPE that were caused in the constructors of file based
        configurations if an invalid file name was specified.
      </action>
      <action dev="oheger" type="add" issue="CONFIGURATION-162">
        Added support for optional configuration sources in definition files for
        ConfigurationFactory. A new optional attribute allows to specify whether a
        configuration source is mandatory or optional.
      </action>
      <action dev="ebourg" type="fix">
        JNDIConfiguration.getKeys() now returns an empty iterator instead of
        throwing a ConfigurationRuntimeException when a NamingException occurs.
        The NamingExceptions are now logged.
      </action>
      <action dev="ebourg" type="fix">
        DatabaseConfiguration.isEmpty() now returns true if an SQLException occurs.
      </action>
      <action dev="ebourg" type="add">
        Added two methods copy(Configuration, Configuration) and
        append(Configuration, Configuration) in ConfigurationUtils to copy
        properties between configurations.
      </action>
      <action dev="ebourg" type="update">
        Moved the constructors implementations from PropertiesConfiguration and
        XMLConfiguration to AbstractFileConfiguration.
      </action>
      <action dev="epugh" type="remove">
        Remove deprecated getVector() implementations.
      </action>
      <action dev="ebourg" type="add" issue="CONFIGURATION-147">
        File based configurations can now be automatically reloaded when the
        underlying file is modified.
      </action>
      <action dev="ebourg" type="add" issue="CONFIGURATION-156">
        Added a clear() method to the Configuration interface to remove
        all properties.
      </action>
      <action dev="ebourg" type="add" issue="CONFIGURATION-208">
        Added a SystemConfiguration wrapping the system properties.
        ConfigurationFactory recognizes the corresponding &lt;system/&gt;
        element.
      </action>
      <action dev="ebourg" type="add">
        Added a MapConfiguration to turn any Map into a Configuration. The
        getConfiguration() methods in ConfigurationConverter now use
        MapConfiguration, as a result the Configuration returned is always
        synchronized with the underlying Properties or ExtendedProperties,
        changes made to the Configuration are available in the Properties,
        and reciprocally.
      </action>
      <action dev="ebourg" type="add" issue="CONFIGURATION-146">
        The "autoSave" feature of XMLConfiguration has been generalized
        to all file based configurations.
      </action>
      <action dev="ebourg" type="add" issue="CONFIGURATION-191">
        Numeric properties can now be specified in hexadecimal format,
        for example "number = 0xC5F0".
      </action>
      <action dev="oheger" type="fix" issue="CONFIGURATION-36">
        Fixed HierarchicalConfiguration.getKeys(String), it returned an empty
        iterator if the prefix string contained indices.
      </action>
      <action dev="ebourg" type="add">
        Added a DataConfiguration decorator providing getters for all useful
        types found in a configuration (URL, Locale, Date, Calendar, Color,
        lists and arrays)
      </action>
      <action dev="ebourg" type="add">
        Added 5 new configurations to be used in a web environment:
        AppletConfiguration, ServletConfiguration, ServletContextConfiguration,
        ServletRequestConfiguration, ServletFilterConfiguration.
      </action>
    </release>

    <release version="1.0" date="2004-10-11" description="First official release">
      <action dev="ebourg" type="fix" issue="CONFIGURATION-66">
        The getStringArray() method in CompositeConfiguration now interpolates
        the strings.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-23">
        SubsetConfiguration now shares the "throwExceptionOnMissing" property
        with its parent.
      </action>
      <action dev="ebourg" type="fix">
        Removed "file:" at the beginning of the base path when calling
        setFile() on a FileConfiguration. This prevented auto saving an
        XMLConfiguration loaded from a File (issue reported by Mark Roth).
      </action>
      <action dev="ebourg" type="update">
        All NamingEnumerations in JNDIConfiguraiton are now properly closed (Suggested
        by Eric Jung).
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-90">
        Properties added to an XMLConfiguration are no longer duplicated in the
        resulting XML file.
      </action>
    </release>

    <release version="1.0-rc2" date="2004-09-24">
      <action dev="ebourg" type="update">
        Unified the mechanisms for loading and saving file based configurations.
        PropertiesConfiguration, XMLConfiguration and HierarchicalXMLConfiguration
        now implement the same FileConfiguration interface. BasePathLoader,
        BasePathConfiguration, ClassPropertiesConfiguration and
        BasePropertiesConfiguration have been removed.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-22">
        Replaced the calls to Boolean.booleanValue(boolean) in
        AbstractConfiguration and ConfigurationDynaBean to be Java 1.3
        compatible.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-112">
        Changing the prefix of a JNDIConfiguration will now reset the base context used.
      </action>
      <action dev="ebourg" type="add" due-to="Eric Jung">
        The context used by JNDIConfiguration can be specified in its
        constructor or through the setContext() method. The context can be
        accessed with the getContext() method which is now public.
      </action>
      <action dev="henning" type="add">
        Make the behavior on missing properties for the get methods that
        return objects configurable. A property throwExceptionOnMissing
        can be set and then the getters throw an NoSuchElementException.
        The old default behavior of returning a null value has
        been restored.
      </action>
      <action dev="epugh" type="add" issue="CONFIGURATION-151">
        Allow configurations extending AbstractConfiguration to change the
        delimiter used from "," to something else.
      </action>
      <action dev="epugh" type="fix">
        PropertiesConfiguration.save() method has issues with preserving the filename
      </action>
      <action dev="epugh" type="fix" issue="CONFIGURATION-132" due-to="Mark Woodman">
        Test cases for HierarchicalConfigurationXMLReader stores comments as text nodes.
      </action>
      <action dev="epugh" type="fix" issue="CONFIGURATION-183" due-to="Ricardo Gladwell">
        Clarify for ConfigurationDynaBean that the get method should throw an
        illegalArgumentException if there is no property specified.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-25">
        Fixed a ClassCastException when adding a non String property to an XMLConfiguration.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-138" due-to="Oliver Heger">
        Fixed the handling of attribute properties by HierarchicalConfigurationConverter.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-125">
        Fixed a ClassCastException thrown on adding a non string property
        in a DatabaseConfiguration.
      </action>
      <action dev="henning" type="add">
        Bring back the getVector() methods in the Configuration interface.
        These methods are needed for &quot;drop-on&quot; replacement of the
        various pre-1.0 commons-configuration snapshots and are already
        deprecated. These methods will be removed for 1.1.
      </action>
    </release>

    <release version="1.0-rc1" date="2004-08-14">
      <action dev="epugh" type="add" issue="CONFIGURATION-132" due-to="Oliver Heger">
        HierarchicalConfigurationXMLReader stores comments as text nodes.
      </action>
      <action dev="epugh" type="add" issue="CONFIGURATION-122" due-to="Ricardo Gladwell">
        project.xml contains bad dependencies.
      </action>
      <action dev="epugh" type="add" issue="CONFIGURATION-64" due-to="Brent Worden">
        clearXmlProperty doesn't remove list properties completely.
      </action>
      <action dev="epugh" type="add" issue="CONFIGURATION-183" due-to="Ricardo Gladwell">
        new ConfigurationDynaBean.
      </action>
      <action dev="epugh" type="add" issue="CONFIGURATION-185" due-to="Ricardo Gladwell">
        new ConfigurationMap and ConfigurationSet.
      </action>
      <action dev="epugh" type="fix" issue="CONFIGURATION-91" due-to="Ricardo Gladwell">
        Problem adding property XMLConfiguration.
      </action>
      <action dev="epugh" type="remove">
        ConfigurationXMLDocument removed until post 1.0.
      </action>
      <action dev="epugh" type="fix" issue="CONFIGURATION-18">
        DatabaseConfiguration doesn't support List properties.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-137">
        Fixed a bug related to XMLConfiguration. Can't add a new property as an
        attribute in XMLConfiguration.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-116">
        Fixed a bug related to XMLConfiguration. XMLConfiguration doesn't
        support attribute names with a dot.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-4">
        Fixed a bug related to XMLConfiguration. XMLConfiguration doesn't ignore
        comments.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-32">
        Fixed a bug related to XMLConfiguration. XMLConfiguration.save() doesn't
        escape reserved characters.
      </action>
      <action dev="ebourg" type="add" issue="CONFIGURATION-114">
        Added save methods in XMLConfiguration similar to PropertiesConfiguration
        to save the configuration to another file.
      </action>
      <action dev="ebourg" type="update">
        Removed the DOM4J implementations in favor of the DOM ones.
        DOMConfiguration has been renamed to XMLConfiguration, and
        HierarchicalDOMConfiguration to HierarchicalXMLConfiguration. The
        elements parsed by the ConfigurationFactory have been changed
        accordingly.
      </action>
      <action dev="ebourg" type="add">
        Added a save() method to PropertiesConfiguration and save(Writer out),
        save(OutputStream out), save(OutputStream out, String encoding) to
        BasePropertiesConfiguration.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-98">
        List values are now properly stored as comma separated values in the
        Properties object returned by ConfigurationConverter.getProperties()
      </action>
      <action dev="ebourg" type="update">
        Introduced a ConversionException thrown when the value of a property is
        not compatible the type requested. It replaces the ClassCastException
        and the NumberFormatException thrown previously.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-174">
        Tokens like ${ref} in a PropertyConfiguration are now properly saved.
      </action>
      <action dev="ebourg" type="fix" issue="CONFIGURATION-127">
        The getList() method of a CompositeConfiguration now returns the list
        composed of the elements in the first matching configuration and the
        additional elements found in the in memory configuration.
      </action>
      <action dev="epugh" type="fix">
        SubsetConfiguration returns a List on getList(). AbstractConfiguration
        wouldn't properly deal with a List, only with a Container for getList()!
        Thanks to jschaible for the unit test.
      </action>
      <action dev="jschaible" type="add">
        Direct support of XML via DOM. New classes DOMConfiguration and HierarchicalDOMConfiguration.
      </action>
      <action dev="jschaible" type="update">
        Update build to not include test configuration files in resulting jar.
      </action>
      <action dev="ebourg" type="update">
        Refactored JNDIConfiguration to use AbstractConfiguration.
      </action>
      <action dev="ebourg" type="update" issue="CONFIGURATION-76">
        Fixed invalid subsets by refactoring out the subset logic into a SubsetConfiguration.
      </action>
      <action dev="oheger" type="fix">
        Reapply the ConfigurationXMLDocument that went missing during migration out of sandbox.
      </action>
      <action dev="epugh" type="update">
        Apply ASL 2.0 license.  Thanks to Jeff Painter for scripting the conversion!
      </action>
      <action dev="epugh" type="add">
        Changed CompositeConfiguration to extend from AbstractConfiuration. This means that the behavior of
        CompositeConfiguration is much similar to others like PropertiesConfiguration in handling of missing
        keys, interpolation, etc.. Previously CompositeConfiguration had quite a few differences.
      </action>
      <action dev="epugh" type="update">
        Removed "defaults" from BaseConfiguration. Defaults are now done via using a CompositeConfiguration, either
        directly or via a ConfigurationFactory. if you want to save changes made to a Configuration, then you use
        a CompositeConfiguration and get back the inMemoryConfiguration that has the delta of changes. Added a
        bit of documentation on this.
      </action>
      <action dev="epugh" type="update" issue="CONFIGURATION-154">
        Enhancement: Configuration Comparator.
      </action>
      <action dev="epugh" type="update" issue="CONFIGURATION-54">
        BaseConfiguration: containsKey ignores default properties.
        I have changed it so that now the defaults are paid attention to.
      </action>
      <action dev="ebourg" type="add">
        The Configuration interface now supports BigDecimal and BigInteger numbers.
      </action>
      <action dev="epugh" type="add">
        ConfigurationException is now thrown by public methods instead of Exception or
        IOException or whatnot.
      </action>
      <action dev="ebourg" type="add">
        For configuration based on properties files, allow characters like \n etc
        to be escaped and unescaped.
      </action>
      <action dev="ebourg" type="add">
        New DatabaseConfiguration that uses a database to store the properties.
        It supports 2 table structures: one table per configuration (2 colums
        key/value), one table for multiple configurations (2 columns key/value +
        1 column for the name of the configuration).
      </action>
      <action dev="oheger" type="add">
        ConfigurationFactory now supports the hierarchicalDom4j element in configuration
        definition file
      </action>
      <action dev="ebourg" type="update">
        Change all Vector objects to List objects.
      </action>
      <action dev="oheger" type="add">
        ConfigurationFactory now supports two types of properties files, additional and
        override.  Additional properties add each other together.  Override override each
        other.  This allows you to have a single property that is either aggregated from a
        number of sources, or have a property that is overridden according to a specific
        order of sources.
      </action>
      <action dev="oheger" type="update">
        AbstractConfiguration addProperty now delegates to an abstract addPropertyDirect
        implemented by BaseConfiguration.
      </action>
      <action dev="kshaposhnikov" type="update">
        Changed getString() method to throw a NoSuchElementException instead of "" if the
        configuration property doesn't exist.
      </action>
      <action dev="kshaposhnikov" type="add">
        Added AbstractConfiguration to make it easier to create subclasses by only
        having to implement the methods required.
      </action>
      <action dev="bdunbar" type="fix">
        ClassPropertiesConfiguration Additions:
        Use the classloader of class that is provided by the constructor.
        Add a constructor that indicates whether to use relative or absolute.
        Change getPropertyStream to utilize the relative or absolute flag.
        Add a test case that checks that absolute paths work.
      </action>
      <action dev="epugh" type="fix">
        JNDIConfiguration.getKeys() Addition:
        The JNDIConfiguration.getKeys() method was returning an unsupported
        operation error.  However, this is an important method to have
        supported.
      </action>
      <action dev="epugh" type="fix">
        CompositeConfiguration.getKeys() Fix
        The CompositeConfiguration.getKeys() method was returning an
        unordered list of configuration values.  However, many apps
        expect the order that keys are returned to be the order they
        are added into the properties file.
      </action>
    </release>
  </body>
</document>
