<?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 xmlns="http://maven.apache.org/changes/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/changes/1.0.0 http://maven.apache.org/xsd/changes-1.0.0.xsd">
  <properties>
    <title>Apache Commons Configuration Release Notes</title>
    <author email="dev@commons.apache.org">Apache Commons Community</author>
  </properties>
  <body>
    <release version="2.10.2" date="YYYY-MM-DD" description="Minor release with new features and updated dependencies; requires Java 8 or above.">
      <!-- FIX -->
      <action type="fix" dev="ggregory" due-to="Gary Gregory">Fail-fast with a NullPointerException if DataConfiguration.DataConfiguration(Configuration) is called with null.</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">Fail-fast with a NullPointerException if XMLPropertiesConfiguration.XMLPropertiesConfiguration(Element) is called with null.</action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">Fail-fast with a NullPointerException if a SubsetConfiguration constructor is called with a null Configuration.</action>
      <action type="fix" issue="CONFIGURATION-843" dev="ggregory" due-to="Gary Gregory">Methods should not be empty #393.</action>
      <!-- UPDATE -->
      <action type="update" dev="ggregory" due-to="Dependabot">Bump commons-logging:commons-logging from 1.3.0 to 1.3.1 #390.</action>
      <action type="update" dev="ggregory" due-to="Dependabot">Bump commons-io:commons-io from 2.15.1 to 2.16.1 #394, #400.</action>
      <action type="update" dev="ggregory" due-to="Dependabot">Bump org.apache.commons:commons-parent from 67 to 69 #396.</action>
      <action type="update" dev="ggregory" due-to="Dependabot">Bump slf4j.version from 2.0.12 to 2.0.13 #403.</action>
      <action type="update" dev="ggregory" due-to="Dependabot">Bump org.apache.commons:commons-text from 1.11.0 to 1.12.0 #404.</action>
      <action type="update" dev="ggregory" due-to="Gary Gregory">Bump spring.version from 5.3.33 to 5.3.34.</action>
    </release>
    <release version="2.10.1" date="2024-03-17" description="Minor release with new features and updated dependencies; requires Java 8 or above.">
      <!-- FIX -->
      <action type="fix" issue="CONFIGURATION-839" dev="ggregory" due-to="Bob Marinier, Gary Gregory">java.lang.module.FindException: Module servlet.api not found.</action>
      <action type="fix" issue="CONFIGURATION-840" dev="ggregory" due-to="Bob Marinier, Gary Gregory">StackOverflowError adding property in AbstractListDelimiterHandler.flattenIterator().</action>
      <action type="fix" issue="CONFIGURATION-841" dev="ggregory" due-to="Gary Gregory">StackOverflowError calling ListDelimiterHandler.flatten(Object, int) with a cyclical object tree.</action>
      <!-- UPDATE -->
      <action type="update" dev="ggregory" due-to="Dependabot">Bump jackson-databind from 2.16.1 to 2.17.0 #378.</action>
      <action type="update" dev="ggregory" due-to="Dependabot">Bump log4j.version from 2.23.0 to 2.23.1 #379.</action>
      <action type="update" dev="ggregory" due-to="Dependabot, Gary Gregory">Bump spring.version from 5.3.32 to 5.3.33 #380.</action>
    </release>
    <release version="2.10.0" date="2024-03-06" description="Minor release with new features and updated dependencies; requires Java 8 or above.">
      <!-- FIX -->
      <action dev="ggregory" type="fix" due-to="step-security-bot, Gary Gregory">[StepSecurity] ci: Harden GitHub Actions #307.</action>
      <action dev="ggregory" type="fix" issue="CONFIGURATION-834" due-to="Keith Barlow, Gary Gregory">ConfirgurationPropertySource doesn't supply resolved values #309.</action>
      <action dev="ggregory" type="fix" due-to="KeijoB, Gary Gregory">Take prefix delimiter into account when SubsetConfiguration.getKeysInternal() is called #300.</action>
      <action dev="ggregory" type="fix" due-to="Heewon Lee, Gary Gregory">Guard ConfigurationMap against null configuration #355.</action>
      <action dev="ggregory" type="fix" issue="CONFIGURATION-838" due-to="Ian Lynagh">Properties parser stack overflows on large single-key inputs #369.</action>
      <action dev="ggregory" type="fix" due-to="Heewon Lee, Gary Gregory">DatabaseConfiguration.AbstractJdbcOperation.execute() throws NullPointerException when no data source is set #368.</action>
      <!-- ADD -->
      <action dev="ggregory" type="add" due-to="KeijoB, Gary Gregory">Add AbstractConfiguration.getKeysInternal(String, String) #300.</action>
      <action dev="ggregory" type="add" due-to="KeijoB, Gary Gregory">Add ImmutableConfiguration.getKeys(String, String) #300.</action>
      <action dev="ggregory" type="add" due-to="KeijoB, Gary Gregory">Add PrefixedKeysIterator.PrefixedKeysIterator(Iterator&lt;String%gt;, String, String) #300.</action>
      <action dev="ggregory" type="add" due-to="Gary Gregory">Add Maven property project.build.outputTimestamp for build reproducibility.</action>
      <action dev="ggregory" type="add" due-to="Heewon Lee">Guard PatternSubtreeConfigurationWrapper constructor against null #365.</action>
      <!-- UPDATE -->
      <action type="update" dev="ggregory" due-to="Dependabot">Bump jackson-databind from 2.14.2 to 2.16.1 #297, #303, #326, #331, #340.</action>
      <action type="update" dev="ggregory" due-to="Gary Gregory">Bump commons-io:commons-io from 2.11.0 to 2.15.1.</action>
      <action type="update" dev="ggregory" due-to="Gary Gregory">Bump spring-* from 5.3.26 to 5.3.32.</action>
      <action type="update" dev="ggregory" due-to="Gary Gregory">Bump commons-parent from 57 to 67.</action>
      <action type="update" dev="ggregory" due-to="Gary Gregory">Bump commons-codec:commons-codec from 1.15 to 1.16.1.</action>
      <action type="update" dev="ggregory" due-to="Gary Gregory">Bump commons-lang3 from 3.11 to 3.14.0.</action>
      <action type="update" dev="ggregory" due-to="Dependabot">Bump org.yaml:snakeyaml from 2.0 to 2.2 #312, #315.</action>
      <action type="update" dev="ggregory" due-to="Dependabot">Bump slf4j.version from 2.0.7 to 2.0.12 #358.</action>
      <action type="update" dev="ggregory" due-to="Gary Gregory">Bump org.apache.commons:commons-dbcp2 from 2.9.0 to 2.12.0.</action>
      <action type="update" dev="ggregory" due-to="Gary Gregory">Bump org.apache.commons:commons-pool2 from 2.11.1 to 2.12.0.</action>
      <action type="update" dev="ggregory" due-to="Gary Gregory, Dependabot">Bump org.apache.logging.log4j:log4j-1.2-* from 2.20.0 to 2.23.0 #334, #339, #367.</action>
      <action type="update" dev="ggregory" due-to="Gary Gregory">Bump org.apache.commons:commons-text from 1.10.0 to 1.11.0.</action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">Bump commons-logging:commons-logging from 1.2 to 1.3.0.</action>
    </release>
    <release version="2.9.0" date="2023-03-25" description="Minor release with new features and updated dependencies; requires Java 8 or above.">
      <!-- FIX -->
      <action issue="CONFIGURATION-799" type="fix" dev="ggregory" due-to="Jarek Sacha, Gary Gregory">
        CombinedConfiguration#getKeys() can throw NoSuchElementException.
      </action>
      <action issue="CONFIGURATION-822" type="fix" dev="ggregory" due-to="Branislav Beňo, Gary Gregory, Bruno P. Kinoshita">
        Fix ambiguity on the section determining #229.
      </action>
      <action type="fix" dev="ggregory" due-to="Arturo Bernal">
        Use Java style array decelerations #244.
      </action>
      <!-- ADD -->
      <action issue="CONFIGURATION-799" type="add" dev="ggregory" due-to="Xinshiyou, Gary Gregory">
        Add DefaultConversionHandler#setListDelimiterHandler(ListDelimiterHandler).
      </action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">
        Add ImmutableNode.stream().
      </action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">
        Avoid NullPointerException in org.apache.commons.configuration2.web.AppletConfiguration.getKeysInternal().
      </action>
      <action type="fix" dev="ggregory" due-to="Gary Gregory">
        Fix JDBC prepared statements leak in org.apache.commons.configuration2.DatabaseConfiguration.clearPropertyDirect(String).
      </action>
      <!-- UPDATE -->
      <action type="update" dev="kinow" due-to="Dependabot">
        Bump actions/cache from 3.0.8 to 3.0.10 #223, #225.
      </action>
      <action type="update" dev="ggregory" due-to="Gary Gregory, Dependabot">
        Bump actions/checkout from 3 to 3.1.0 #224.
      </action>
      <action type="update" dev="ggregory" due-to="Gary Gregory">
        Bump actions/setup-java from 3 to 3.5.1.
      </action>
      <action issue="CONFIGURATION-815" type="update" dev="ggregory" due-to="Gary Gregory">
        Bump optional Apache Log4j 1.2.17 with 2.20.0.
      </action>
      <action type="update" dev="ggregory" due-to="Dependabot, Gary Gregory">
        Bump spotbugs-maven-plugin from 4.7.0.0 to 4.7.3.0 #193, #195, #228, #237.
      </action>
      <action type="update" dev="ggregory" due-to="Gary Gregory">
        Bump spotbugs from 4.7.0 to 4.7.3.
      </action>
      <action type="update" dev="ggregory" due-to="Dependabot, Gary Gregory">
        Bump org.springframework:spring-* from 5.3.21 to 5.3.26.
      </action>
      <action type="update" dev="kinow" due-to="Dependabot">
        Bump junit-jupiter from 5.8.2 to 5.9.1 #197, #217.
      </action>
      <action type="update" dev="kinow" due-to="Dependabot, Gary Gregory">
        Bump mockito-core from 4.6.1 to 4.11.0 #200, #235, #249, #257, #259.
      </action>
      <action type="update" dev="kinow" due-to="Dependabot">
        Bump slf4j.version from 1.7.36 to 2.0.7 #202, #210, #215, #238, #241, #291.
      </action>
      <action type="update" dev="kinow" due-to="Dependabot">
        Bump maven-checkstyle-plugin from 3.1.2 to 3.2.0 #201.
      </action>
      <action type="update" dev="ggregory" due-to="Gary Gregory">
        Bump maven-javadoc-plugin from 3.4.0 to 3.4.1.
      </action>
      <action type="update" dev="ggregory" due-to="Gary Gregory">
        Bump maven-pmd-plugin 3.17.0 to 3.19.0.
      </action>
      <action type="update" dev="ggregory" due-to="Gary Gregory">
        Bump pmd from 6.47.0 to 6.53.0.
      </action>
      <action type="update" dev="kinow" due-to="Dependabot, strangelookingnerd">
        Bump snakeyaml from 1.30 to 2.0 #203, #212, #219, #282, #283.
      </action>
      <action type="update" dev="kinow" due-to="Gary Gregory">
        Bump jackson-databind from 2.13.3 to 2.14.2 #227, #246, #274.
      </action>
      <action type="update" dev="kinow" due-to="Dependabot">
        Bump spring.version from 5.3.22 to 5.3.23 #211.
      </action>
      <action type="update" dev="kinow" due-to="Dependabot, Gary Gregory">
        Bump commons-parent from 53 to 57 #216, #253, #299.
      </action>
      <action type="update" dev="kinow" due-to="Dependabot">
        Bump log4j.version from 2.18.0 to 2.20.0 #213, #281.
      </action>
      <action type="update" dev="ggregory" due-to="Gary Gregory">
        Bump japicmp-maven-plugin from 0.15.7 to 0.17.1.
      </action>
      <action type="update" dev="kinow" due-to="Dependabot">
        Bump commons-text from 1.9 to 1.10.0 #221.
      </action>
    </release>
    <release version="2.8.0" date="2022-07-05"
             description="Minor release with new features and updated dependencies; requires Java 8 or above.">
       <!-- FIX -->
       <action issue="CONFIGURATION-753" type="fix" dev="mattjuntunen">
         Make interpolation of collections and arrays in ConfigurationInterpolator consistent with
         behavior of DefaultConversionHandler. Add ConfigurationInterpolator.setStringConverter to
         allow customized string conversion behavior.
       </action>
       <action issue="CONFIGURATION-795" type="fix" dev="ggregory" due-to="dpeger">
         Computation of blank lines after header comment #82.
       </action>
       <action issue="CONFIGURATION-801" type="fix" dev="ggregory" due-to="Arturo Bernal">
         Remove redundant initializer #110.
       </action>
       <action issue="CONFIGURATION-802" type="fix" dev="ggregory" due-to="Arturo Bernal">
         Use final #111.
       </action>
       <action issue="CONFIGURATION-803" type="fix" dev="ggregory" due-to="Arturo Bernal">
         Java 8 lambda improvements and more #112.
       </action>
       <action issue="CONFIGURATION-804" type="fix" dev="ggregory" due-to="Arturo Bernal">
         Redundant local variable #113.
       </action>
       <action issue="CONFIGURATION-805" type="fix" dev="ggregory" due-to="Arturo Bernal">
         Use try with resource #114.
       </action>
       <action issue="CONFIGURATION-805" type="fix" dev="ggregory" due-to="Roman Zaynetdinov">
         [Javadoc] Specify that typed getList returns null for missing key #100.
       </action>
       <action type="fix" dev="ggregory" due-to="Oliver B. Fischer">
         Mention EnvironmentConfiguration in the list of configuration sources #45.
       </action>
       <action issue="CONFIGURATION-808" type="fix" dev="ggregory" due-to="cigaly">
         DefaultListDelimiterHandler.escapeList working only for List&gt;String&lt; #137.
       </action>
       <action type="fix" dev="ggregory" due-to="Arturo Bernal">
         Use final #141.
       </action>
       <action type="fix" dev="ggregory" due-to="Arturo Bernal">
         Replace test asserts by simpler but equivalent calls. #139
       </action>
       <action issue="CONFIGURATION-764" type="fix" dev="ggregory" due-to="Ning Zhang, Matt Juntunen, Bruno P. Kinoshita, Gary Gregory">
         Single Variable Interpolation #182.
       </action>
       <action type="fix" dev="ggregory" due-to="Gary Gregory">
         Implement proper concurrency in ConstantLookup.
       </action>
       <action issue="CONFIGURATION-813" type="fix" dev="kinow" due-to="Dependabot">
         Support new namespace jakarta.mail.* used by javamail 2.0+ (first release October 2020) #186.
       </action>
       <!-- ADD -->
       <action type="add" dev="ggregory" due-to="SethiPandi">
         Implement Iterable in ImmutableNode #74.
       </action>
       <action issue="CONFIGURATION-794" type="update" dev="ggregory" due-to="Robin Jansohn, Gary Gregory, Rob Spoor">
         Unclosed file handle when reading config from JAR file URL.
         Add and use FileBasedBuilderProperties.setURL(URL, URLConnectionOptions).
       </action>
       <action type="add" dev="ggregory" due-to="Gary Gregory">
         Add PropertiesConfigurationLayout.getBlankLinesBefore() and deprecate getBlancLinesBefore(). 
       </action>
       <action type="add" dev="ggregory" due-to="Gary Gregory">
         Add PropertiesConfigurationLayout.setBlankLinesBefore() and deprecate setBlancLinesBefore(). 
       </action>
       <action type="add" dev="ggregory" due-to="Gary Gregory">
         Add PropertiesConfigurationLayout.PropertyLayoutData.getBlankLines() and deprecate getBlancLines().  
       </action>
       <action type="add" dev="ggregory" due-to="Gary Gregory">
         Add PropertiesConfigurationLayout.PropertyLayoutData.setBlankLines() and deprecate setBlancLines().  
       </action>
       <action type="add" dev="ggregory" issue="CONFIGURATION-789" due-to="Gary Gregory">
         Add ImmutableConfiguration.getEnum() methods.
       </action>
       <action type="add" dev="ggregory" issue="CONFIGURATION-789" due-to="Gary Gregory">
         Add ImmutableConfiguration.getDuration() methods.
       </action>       
       <!-- UPDATES -->
       <action type="update" dev="mattjuntunen">
        Make default interpolation prefix lookups configurable via system property. Remove dns, url, and script 
        lookups from defaults. If these lookups are required for use in AbstractConfiguration subclasses, they must 
        be enabled via system property. See ConfigurationInterpolator.getDefaultPrefixLookups() for details.
       </action>
       <action type="update" dev="ggregory" due-to="Dependabot, Gary Gregory">
         Bump actions/cache from 2 to 3.0.4 #99, #151, #169.
       </action>
       <action type="update" dev="ggregory" due-to="Dependabot">
         Bump actions/checkout from 1 to 3 #47, #62, #70, #85, #150, #163.
       </action>
       <action type="update" dev="ggregory" due-to="Dependabot, Gary Gregory">
         Bump actions/setup-java from 1.4.0 to 3 #63, #65, #73, #174.
       </action>
       <action type="update" dev="mattjuntunen" due-to="Dependabot, Matt Juntunen">
         Bump codeql-action from v1 to v2.
       </action>
       <action type="update" dev="mattjuntunen" due-to="Dependabot, Matt Juntunen, kinow, Gary Gregory">
         Bump Spring dependency versions:
         org.springframework:spring-beans 4.3.26.RELEASE -> 5.3.21
         org.springframework:spring-context 4.3.26.RELEASE -> 5.3.21
         org.springframework:spring-core 4.3.26.RELEASE -> 5.3.21
         org.springframework:spring-test 4.3.26.RELEASE -> 5.3.21
         #165, #172
       </action>
       <action type="update" dev="mattjuntunen" due-to="Dependabot, Matt Juntunen">
         Bump commons-parent from 52 to 53.
       </action>
       <action type="update" dev="ggregory" issue="CONFIGURATION-787" due-to="Gary Gregory">
         Bump Apache Commons Lang from 3.9 to 3.12.0.
       </action>
       <action type="update" dev="ggregory" issue="CONFIGURATION-790" due-to="Gary Gregory, Dependabot">
         Bump com.fasterxml.jackson.core:jackson-databind from 2.10.3 to 2.13.3, #60.
       </action>
       <action type="update" dev="ggregory" due-to="Gary Gregory">
         Bump Slf4j test dependencies:
         org.slf4j:slf4j-api 1.7.26 -> 1.7.33,
         org.slf4j:slf4j-ext 1.7.26 -> 1.7.33,
         org.slf4j:slf4j-log4j12 1.7.26 -> 1.7.33,
         org.slf4j:slf4j-nop 1.7.26 -> 1.7.33.
       </action>
       <action type="update" dev="ggregory" due-to="Dependabot">
         Bump commons-parent from 50 to 52.
       </action>
       <action type="update" dev="ggregory" due-to="Dependabot, Gary Gregory">
         Bump mailapi from 1.6.4 to 1.6.7 #48.
       </action>
       <action type="update" dev="ggregory" due-to="Dependabot, Gary Gregory">
         Bump spotbugs-maven-plugin from 3.1.12.2 to 4.7.0.0, #55, #75, #79, #93, #116, #183.
       </action>
       <action type="update" dev="ggregory" due-to="Dependabot">
         Bump hsqldb from 2.5.0 to 2.5.2 #54, #128.
       </action>
       <action type="update" dev="ggregory" due-to="Gary Gregory">
         Bump commons-text from 1.8 to 1.9.
       </action>
       <action type="update" dev="ggregory" due-to="Gary Gregory">
         Bump servlet-api from 2.4 to 2.5 #58.
       </action>
       <action type="update" dev="ggregory" due-to="Gary Gregory">
         Bump maven-checkstyle-plugin from 3.1.0 to 3.1.2, #57, #97.
       </action>
       <action type="update" dev="ggregory" due-to="Dependabot, Gary Gregory">
         Bump commons-pool2 from 2.8.0 to 2.10.0, #61, #124.
       </action>
       <action type="update" dev="ggregory" due-to="Gary Gregory">
         Bump optional commons-codec from 1.14 to 1.15.
       </action>
       <action type="update" dev="ggregory" due-to="Dependabot, Gary Gregory">
         Bump checkstyle from 8.26 to 9.3, #66, #71, #90, #101, #118, #121, #132, #155.
       </action>
       <action dev="ggregory" type="update" due-to="Gary Gregory">
         Bump commons.jacoco.version 0.8.5 to 0.8.8 (Fixes Java 15 builds).
       </action>
       <action type="update" dev="ggregory" due-to="Gary Gregory">
         Bump tests from commons-pool2 2.10.0 to 2.11.1.
       </action>
       <action type="update" dev="ggregory" due-to="Gary Gregory">
         Bump tests from commons-dbcp2 2.7.0 to 2.9.0.
       </action>
       <action type="update" dev="ggregory" due-to="Dependabot, Gary Gregory">
         Bump snakeyaml from 1.26 to 1.30 #68, #126, #137.
       </action>
       <action type="update" dev="ggregory" due-to="Gary Gregory">
         Bump commons.japicmp.version from 0.14.1 to 0.15.7.
       </action>
       <action type="update" dev="ggregory" due-to="Dependabot, Gary Gregory">
         Bump junit from 4.13 to 4.13.2 #78.
       </action>
       <action type="update" dev="ggregory" due-to="Gary Gregory">
         Bump Apache Commons VFS 2.6.0 -> 2.9.0.
       </action>
       <action type="update" dev="ggregory" due-to="Dependabot">
         Bump jackson-databind from 2.11.3 to 2.13.2.2 ,#88, #94, #127, #159, #168, #173.
       </action>
       <action type="update" dev="ggregory" due-to="Gary Gregory">
         Bump commons.animal-sniffer.version 1.19 -> 1.20.
       </action>
       <action type="update" dev="ggregory" due-to="Gary Gregory">
         Bump commons.javadoc.version from 3.1.1 to 3.4.0.
       </action>
       <action type="update" dev="ggregory" due-to="Gary Gregory, Dependabot">
         Bump org.dbunit:dbunit from 2.7.0 to 2.7.3, #167.
       </action>
       <action type="update" dev="ggregory" due-to="John Patrick">
         Bump tests to hamcrest v2.2 #143.
       </action>
       <action type="update" dev="ggregory" due-to="Dependabot">
         Bump slf4j.version from 1.7.33 to 1.7.36 #166.
       </action>
       <action type="update" dev="kinow" due-to="Dependabot">
          Bump mailapi from 1.6.6 to 2.0.1 #186.
       </action>
       <action type="update" dev="kinow" due-to="sullis">
          Use GitHub Actions setup-java Maven cache property #190.
       </action>
    </release>
    <release version="2.7" date="2020-03-07"
             description="Minor release with new features and updated dependencies; requires Java 8 or above.">
      <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">
        Bump com.puppycrawl.tools:checkstyle from 8.24 to  8.25.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-763" due-to="Gary Gregory">
        Bump 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">
        Bump 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">
        Bump Apache Commons VFS from 2.4.1 to 2.5.0.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-777" due-to="Gary Gregory">
        Bump Apache Commons VFS from 2.5.0 to 2.6.0.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-778" due-to="Gary Gregory">
        Bump optional Apache Commons Codec from 1.13 to 1.14.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Bump tests from JUnit 4.12 to 4.13.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-779" due-to="Gary Gregory">
        Bump optional jackson-databind from 2.10.1 to 2.10.2.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-783" due-to="Gary Gregory">
        Bump com.fasterxml.jackson.core:jackson-databind from 2.10.2 to 2.10.3.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-784" due-to="Gary Gregory">
        Update org.yaml:snakeyaml from 1.25 to 1.26 and tweak parser configuration.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-785" due-to="Gary Gregory">
        Bump org.springframework:spring-* from 4.3.25.RELEASE to 4.3.26.RELEASE.
      </action>
      <action dev="chtompki" type="update" due-to="Rob Tompkins">
        Bump org.apache.commons:commons-parent from 48 to 50
      </action>
    </release>
    
    <release version="2.6" date="2019-09-13"
             description="Minor release with new features and updated dependencies; requires Java 8 or above.">
      <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">
        Bump Apache Commons Text from 1.6 to 1.7.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-752" due-to="Gary Gregory">
        Bump Apache Commons VFS from 2.3 to 2.4.1.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-754" due-to="Gary Gregory">
        Bump 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] Bump 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">
        Bump org.yaml:snakeyaml from 1.24 to 1.25.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Bump tests from org.apache.commons:commons-dbcp2 2.6.0 to 2.7.0.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Bump 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">
        Bump commons-codec:commons-codec from 1.12 to 1.13.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Bump tests from org.hsqldb:hsqldb 2.4.1 to 2.5.0.
      </action>
      <action dev="ggregory" type="update" due-to="Gary Gregory">
        Bump 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">
        Bump 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">
        Bump 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; requires Java 8 or above.">
      <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">
        Bump Jackson from 2.9.7 to 2.9.8.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-739" due-to="Gary Gregory">
        Bump Apache Commons Codec from 1.11 to 1.12.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-740" due-to="Gary Gregory">
        Bump Apache Commons VFS from 2.2 to 2.3.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-741" due-to="Gary Gregory">
        Bump Spring from 4.3.19 to 4.3.22.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-743" due-to="Gary Gregory">
        Bump optional library snakeyaml from 1.23 to 1.24.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-747" due-to="Gary Gregory">
        Bump Apache Commons Lang from 3.8.1 to 3.9.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-746" due-to="Gary Gregory">
        Bump Jackson from 2.9.8 to 2.9.9.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-747" due-to="Gary Gregory">
        Bump 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; requires Java 8 or above.">
      <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">
        Bump 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">
        Bump Java requirement from version 7 to 8.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-721">
        Bump Jackson from 2.9.6 to 2.9.7.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-722">
        Bump optional dependency snakeyaml from 1.21 to 1.23.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-723">
        Bump 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">
        Bump 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">
        Bump 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; requires Java 7 or above.">
      <action dev="ggregory" type="update" issue="CONFIGURATION-707">
        Bump Spring from 4.3.14.RELEASE to 4.3.18.RELEASE.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-706">
        Bump optional dependency snakeyaml from 1.20 to 1.21.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-705">
        Bump 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">
        Bump Apache Commons Codec from 1.10 to 1.11.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-679">
        Bump Jackson from 2.8.9 to 2.9.3.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-680">
        Bump Apache Commons Lang from 3.6 to 3.7.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-681">
        Bump Apache Commons VFS from 2.1 to 2.2.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-682">
        Bump Snakeyaml from 1.18 to 1.19.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-696">
        Bump optional dependency snakeyaml from 1.19 to 1.20.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-683">
        Bump Spring from 4.3.9.RELEASE to 4.3.13.RELEASE.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-695">
        Bump optional dependency Jackson from 2.9.3 to 2.9.5.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-697">
        Bump 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">
        Bump optional Spring dependency from 4.2.5.RELEASE to 4.3.9.RELEASE.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-667">
        Bump 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">
        Bump 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">
        Bump Apache Commons VFS from 2.0 to 2.1.
      </action>
      <action dev="ggregory" type="update" issue="CONFIGURATION-635">
        Bump 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, blank 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>
