<?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.7" date="2019-MM-DD"
             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">
        com.puppycrawl.tools:checkstyle 8.24 -> 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.5.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>
    </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>
