                        Apache Commons Configuration
                        Version 2.5
                        Release Notes


INTRODUCTION:
=============

This document contains the release notes for this version of the Commons
Configuration component. It describes the changes since the previous version.
The Commons Configuration software library provides a generic configuration
interface which enables an application to read configuration data from a variety
of sources.

Minor release with new features and updated dependencies.

Changes in this version include:


Fixed Bugs:
o CONFIGURATION-731:  Allow user to specify the comments and separator chars. Thanks to Shuai Zhang, Gary Gregory.

Changes:
o CONFIGURATION-738:  Update Jackson from 2.9.7 to 2.9.8. Thanks to Gary Gregory.
o CONFIGURATION-739:  Update Apache Commons Codec from 1.11 to 1.12. Thanks to Gary Gregory.
o CONFIGURATION-740:  Update Apache Commons VFS from 2.2 to 2.3. Thanks to Gary Gregory.
o CONFIGURATION-741:  Update Spring from 4.3.19 to 4.3.22. Thanks to Gary Gregory.
o CONFIGURATION-743:  Update optional library snakeyaml from 1.23 to 1.24. Thanks to Gary Gregory.
o CONFIGURATION-747:  Update Apache Commons Lang from 3.8.1 to 3.9. Thanks to Gary Gregory.
o CONFIGURATION-746:  Update Jackson from 2.9.8 to 2.9.9. Thanks to Gary Gregory.
o CONFIGURATION-747:  Update Spring from 4.3.22 to 4.3.24. Thanks to Gary Gregory.
o CONFIGURATION-745:  Add the special key "includeoptional" for properties files. Thanks to Gary Gregory.


Historical list of changes: https://commons.apache.org/proper/commons-configuration/changes-report.html

For complete information on Apache Commons Configuration, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Apache Commons Configuration website:

https://commons.apache.org/proper/commons-configuration/

=============================================================================

                        Apache Commons Configuration
                        Version 2.4
                        Release Notes


INTRODUCTION:
=============

This document contains the release notes for this version of the Commons
Configuration component. It describes the changes since the previous version.
The Commons Configuration software library provides a generic configuration
interface which enables an application to read configuration data from a variety
of sources.

Minor release with new features and updated dependencies.

Changes in this version include:

NEW FEATURES
============

o CONFIGURATION-712:  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. Thanks to Rolland Hobbie.
o CONFIGURATION-713:  Configuration properties can now be converted to regular expressions. Thanks to Lars W.
o CONFIGURATION-715:  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. Thanks to Patrick Schmidt.
o CONFIGURATION-716:  JupIOFactory (introduced for CONFIGURATION-715) also implements
                      handling of escape sequences in a way closer to java.util.Properties. Thanks to Patrick Schmidt.
o CONFIGURATION-724:  Add support for Commons Text 1.4 localhost string lookup as a default lookup.
o CONFIGURATION-726:  Add support for Commons Text 1.5 new string lookups as default lookups.

FIXED BUGS
==========

o CONFIGURATION-710:  Fixed numerous typos in user guides. Thanks to thc202.
o CONFIGURATION-711:  Update Apache Commons Lang from 3.7 to 3.8.1.
o CONFIGURATION-727:  org.apache.commons.configuration2.DatabaseConfiguration never closes result sets and statements.

CHANGES
=======

o CONFIGURATION-720:  Replace use of deprecated Commons Lang string substitution code for Commons Text.
o CONFIGURATION-694:  Update Java requirement from version 7 to 8.
o CONFIGURATION-721:  Update Jackson from 2.9.6 to 2.9.7.
o CONFIGURATION-722:  Update optional dependency snakeyaml from 1.21 to 1.23.
o CONFIGURATION-723:  Update optional Spring dependencies from 4.3.18.RELEASE to 4.3.19.RELEASE.
o CONFIGURATION-725:  Update Apache Commons Text from 1.4 to 1.5.
o CONFIGURATION-728:  Update Apache Commons Text from 1.5 to 1.6.


Historical list of changes: https://commons.apache.org/proper/commons-configuration/changes-report.html

For complete information on Apache Commons Configuration, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Apache Commons Configuration website:

https://commons.apache.org/proper/commons-configuration/


=============================================================================

                        Apache Commons Configuration
                        Version 2.3
                        Release Notes


INTRODUCTION:
=============

This document contains the release notes for this version of the Commons
Configuration component. It describes the changes since the previous version.
The Commons Configuration software library provides a generic configuration
interface which enables an application to read configuration data from a
variety of sources.

Version 2.3 is another maintenance release for the Configuration 2.x series. It
contains bug fixes and also a few new features like support for File and Path
as data types. The release is fully source and binary compatible with version
2.2.

Commons Configuration 2.3 requires Java 1.7 or higher.

New features
============
o CONFIGURATION-692
  ConversionExceptions thrown when accessing the properties of a configuration
  now contain the original cause of the exception.

o CONFIGURATION-693
  Configuration properties can now be converted to the data types File and
  Path.

o CONFIGURATION-698
  Add org.apache.commons.configuration2.MapConfiguration.toString().

o CONFIGURATION-698
  Add toString() methods here and there to help debugging.

o CONFIGURATION-701
  CompositeConfiguration now supports an addConfigurationFirst() method to add
  child configurations with a higher priority.

Fixed Bugs
==========
o CONFIGURATION-652
  Root node attributes are now updated correctly when loading XML configuration
  files.

o CONFIGURATION-686
  JSONConfiguration can now handle list structures with complex objects as
  elements.

o 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.

o CONFIGURATION-688
  Fixed a bug related to the handling of multiple include files in
  PropertiesConfiguration.

o CONFIGURATION-690
  ExprLookup.getVariables() no longer returns null, but a copy of the current
  variables of this lookup object.

o CONFIGURATION-691
  ExprLookup now handles expressions that do not return a string result by
  converting them to string.

o CONFIGURATION-703
  XMLConfiguration now handles elements correctly whose value consists only of
  whitespace if the xml:space attribute is set to preserve.

Other changes
=============
o CONFIGURATION-675
  Added a .gitignore file to the project.

o Some dependencies have been updated to their most recent versions. However,
  as no new features of these dependencies are used, the older versions should
  still work. The following dependencies are affected:
  o Update Apache Commons Lang dependency from 3.6 to 3.7.
  o Update Apache Commons VFS from 2.1 to 2.2.
  o Update Apache Commons Codec from 1.10 to 1.11.
  o Update Spring from 4.3.9.RELEASE to 4.3.18.RELEASE
  o Update optional dependency snakeyaml from 1.18 to 1.21.
  o Update optional dependency Jackson from 2.8.9 to 2.9.6.


Historical list of changes: https://commons.apache.org/proper/commons-configuration/changes-report.html

For complete information on Apache Commons Configuration, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Apache Commons Configuration website:

https://commons.apache.org/proper/commons-configuration/

=============================================================================

                        Apache Commons Configuration
                        Version 2.2
                        Release Notes


INTRODUCTION:
=============

This document contains the release notes for this version of the Commons
Configuration component. It describes the changes since the previous version.
The Commons Configuration software library provides a generic configuration
interface which enables an application to read configuration data from a
variety of sources.

Version 2.2 is another maintenance release for the Configuration 2.x series. It
contains a number of bug fixes and also some new features. Among the highlights
is the new support for JSON and YAML configurations. The release is fully
source and binary compatible with version 2.1.1.

Commons Configuration 2.2 requires Java 1.7 or higher.

New features
============
o CONFIGURATION-666
  Add convenience ctor ConfigurationRuntimeException(String, Object...).

o CONFIGURATION-665
  Add org.apache.commons.configuration2.AbstractHierarchicalConfiguration.toString().

o CONFIGURATION-664
  Add API org.apache.commons.configuration2.tree.ImmutableNode.getChildren(String).

o CONFIGURATION-660
  Add toString() methods here and there to help debugging.

o CONFIGURATION-658
  Add API org.apache.commons.configuration2.DataConfiguration.getURI(String)
  methods.

o CONFIGURATION-656
  Added new YAMLConfiguration class to support configuration files in YAML
  format.

o CONFIGURATION-653
  ConfigurationUtils and ConfigurationConverter now offer better support for
  immutable configurations.

o CONFIGURATION-647
  INIConfiguration can now be configured to use a custom separator between
  properties and values when writing an ini file.

o CONFIGURATION-258
  Added new JSONConfiguration class to support configuration files in JSON
  format.

Fixed Bugs
==========
o CONFIGURATION-671
  Fixed a NPE in INIConfiguration when saving a configuration with an empty
  section.

o CONFIGURATION-669
  The node model returned by SubnodeConfiguration.getNodeModel() has now the
  correct root node set.

Other changes
=============
o CONFIGURATION-673
  Added an Automatic-Module-Name header to the manifest for compatibility with
  the Java 9 module system.

o CONFIGURATION-669
  Update optional Spring dependency from 4.2.5.RELEASE to 4.3.9.RELEASE.

o CONFIGURATION-667
  Update Apache Commons Lang dependency from 3.3.2 to 3.6.

o CONFIGURATION-663
  Fixed a typo in the upgrade to 2.0 guide.

o CONFIGURATION-661
  Update platform requirement from Java 6 to 7.


Historical list of changes: https://commons.apache.org/proper/commons-configuration/changes-report.html

For complete information on Apache Commons Configuration, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Apache Commons Configuration website:

https://commons.apache.org/proper/commons-configuration/

=============================================================================

                        Apache Commons Configuration
                        Version 2.1.1
                        Release Notes


INTRODUCTION:
=============

This document contains the release notes for this version of the Commons
Configuration component. It describes the changes since the previous version.
The Commons Configuration software library provides a generic configuration
interface which enables an application to read configuration data from a
variety of sources.

The release is fully source and binary compatible with version 2.1.

Commons Configuration 2.1 requires Java 1.6 or higher.

Fixed Bugs
==========
o 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.

o 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.

o CONFIGURATION-646
  PropertiesConfiguration now works correctly with the auto-save mode.

o CONFIGURATION-644
  PropertiesConfigurationLayout no longer duplicates a header comment if a file
  with another comment is loaded. Thanks to Andrew DeMaria.

o CONFIGURATION-643
  Documentation improvements for the user's guide.

o 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.

o CONFIGURATION-640
  PropertiesConfiguration now correctly unescapes some special characters that
  are always escaped in Java properties files.

Other changes
=============
o CONFIGURATION-639
  In the OSGi bundle manifest of the Commons Configuration bundle the package
  imports for Spring packages are now marked as optional.
  Thanks to Rico Neubauer.

o CONFIGURATION-638
  Improved handling of temporary files and folders in unit tests.
  Thanks to Ahmet Celik.

o 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.


Historical list of changes: https://commons.apache.org/proper/commons-configuration/changes-report.html

For complete information on Apache Commons Configuration, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Apache Commons Configuration website:

https://commons.apache.org/proper/commons-configuration/

=============================================================================

                        Commons Configuration Package
                        Version 2.1
                        Release Notes

INTRODUCTION
============

This document contains the release notes for this version of the Commons
Configuration component. It describes the changes since the previous version.
The Commons Configuration software library provides a generic configuration
interface which enables an application to read configuration data from a variety
of sources.

Version 2.1 is a first bug-fix release for the Configuration 2.x series and
also adds a new feature related to the integration with the Spring framework.
A list of all changes can be found below.

The release is fully source and binary compatible with version 2.0.

Commons Configuration 2.1 requires Java 1.6 or higher.

New Features
============
o CONFIGURATION-636
  PropertiesConfigurationLayout now allows manipulating the order of keys when
  the properties file is written.

o CONFIGURATION-624
  Support Commons Configuration as PropertySource in Spring.

Fixed Bugs
==========
o CONFIGURATION-634
  HomeDirectoryLocationStrategy now works correctly in the mode that evaluates
  the FileLocator's base path.

o CONFIGURATION-633
  Interpolation was improved to better support properties with multiple values.

o CONFIGURATION-632
  The methods getStringArray() and getList() of CompositeConfiguration now
  support the interpolation of variables that reference properties with
  multiple values.

o 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.

Other changes
=============
o CONFIGURATION-628
  Support for the ant build was dropped.

o CONFIGURATION-626
  ImmutableConfiguration.getArray() has been deprecated. Arrays can now be
  queried using the generic get() method in a type-safe way.

o CONFIGURATION-631
  Updated optional dependency to Apache Commons VFS from 2.0 to 2.1. (The older
  version still works.)

o CONFIGURATION-635
  Updated optional dependency to Apache Commons Codec from 1.9 to 1.10. (The
  older version still works.)


Historical list of changes: https://commons.apache.org/proper/commons-configuration/changes-report.html

For complete information on Apache Commons Configuration, including instructions
on how to submit bug reports, patches, or suggestions for improvement, see the
Apache Commons Configuration website:
https://commons.apache.org/proper/commons-configuration/

=============================================================================

                        Apache Commons Configuration
                        Version 2.0
                        Release Notes

INTRODUCTION
============

After a series of alpha and beta releases (please consult the corresponding
release notes below), this is the first final release for Apache Commons
Configuration 2.0.

Version 2.0 is a complete redesign of the Configuration 1.x API with the aim to
fix some limitations in the original design and make the library more flexible
and powerful. Therefore, this release is not a drop-in replacement for Commons
Configuration 1.x; there have been incompatible changes in many areas that
require adaptations on client code. A migration guide is available at

https://commons.apache.org/configuration/userguide/upgradeto2_0.html

that describes all breaking changes and helps when upgrading to the new
version. One obvious breaking change is the renaming of the main package
(all classes are now located under org.apache.commons.configuration2) and the
Maven coordinates (groupId: org.apache.commons, artifactId:
commons-configuration2). This was necessary to allow both versions to coexist
on the classpath without conflicts.

The user's guide has been completely reworked to describe all features of the
new version. It can be found at

https://commons.apache.org/configuration/userguide/user_guide.html

Changes:
========
o CONFIGURATION-621:
  Moved ConfigurationLogger class to io package to avoid cyclic dependencies
  between packages.
o CONFIGURATION-619:
  CombinedConfigurationBuilder now supports inheritance of its parameters to
  child configuration sources. This is enabled by default.
o 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.

Fixed Bugs:
===========
o CONFIGURATION-620:
  Fixed two invalid examples in the user's guide for file-based configurations.
o 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.

Commons Configuration 2.0 requires Java 1.6 or higher.

=============================================================================

                        Apache Commons Configuration
                        Version 2.0-beta2
                        Release Notes

After the first beta release in June 2015 there has been some feedback from the
community resulting in (minor) adaptations of the API. In most cases, the
return values of methods have been changed to be more generic. There has also
been a change in the support for logging. Therefore, this second beta release
is provided to make these changes more "official".

This release also includes some bug fixes. The bugs addressed here have partly
existed already in the Configuration 1.0 code base; so these fixes are not all
related to changes introduced in the 2.0 version.

Below is a list of all changes in this version. Please refer to the clirr
report at https://commons.apache.org/proper/commons-configuration/clirr-report.html
for information about changes which break binary compatibility.

Changes:
========
o 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.
o CONFIGURATION-612:
  The return type of ConfigurationBuilder.getConfiguration() was changed from
  Configuration to ImmutableConfiguration because this is the base interface
  for all configuration objects. Thanks to Jon Weygand.
o CONFIGURATION-608:
  Adapted the return type of ReloadingFileBasedConfigurationBuilder.configure().

Fixed Bugs:
===========
o CONFIGURATION-609:
  Fixed a bug in PropertiesConfiguration related to the loading of include
  files. The FileHandler used for this purpose was not fully initialized.
o CONFIGURATION-605:
  XMLConfiguration no longer drops keys when list delimiter characters occur
  in element values.
o 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.

Commons Configuration 2.0-beta2 requires Java 1.6 or higher.

Historical list of changes: https://commons.apache.org/proper/commons-configuration/changes-report.html

For complete information on Apache Commons Configuration, including instructions
on how to submit bug reports, patches, or suggestions for improvement, see the
Apache Commons Configuration website:
https://commons.apache.org/proper/commons-configuration/

=============================================================================

                        Apache Commons Configuration
                        Version 2.0-beta1
                        Release Notes

This is the first beta release of Commons Configuration 2.0 after two alpha
versions. There has not been much feedback so far and no requests for API
changes. Therefore, we move forwards to a beta release indicating that the API
can be considered more stable. However, at this stage, changes of the API can
still not be fully excluded.

Below is a list of all changes in this version. Compared to version 2.0-alpha2,
there has only be a single change: an obsolete interface (which had been
overlooked during a major refactoring) was removed. So applications that are
using 2.0-alpha2 should be able to migrate to 2.0-beta1 without problems.

Changes:
========
o CONFIGURATION-598: Removed obsolete ConfigurationBuilder interface in the
                     base package.

=============================================================================

                        Apache Commons Configuration
                        Version 2.0-alpha2
                        Release Notes


After version 2.0-alpha1 has been out for a while (the corresponding release
notes can be found below), this second alpha release contains a few number of
improvements and new features whose implementation required some changes on
existing interfaces. In most cases, new methods were added offering enhanced
functionality. Because these are typically interfaces implemented by the
library itself client code using the previous alpha version should hardly be
affected.

Below is a list of all changes in this version:

New features:
=============
o 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.
o CONFIGURATION-565:  Added support for querying encoded properties.
o CONFIGURATION-200:  A size() method was added to the ImmutableConfiguration interface.

Fixed Bugs:
===========
o 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.
o CONFIGURATION-427:  XMLPropertyListConfiguration can now save arrays in the correct form.

Historical list of changes: https://commons.apache.org/proper/commons-configuration/changes-report.html

For complete information on Apache Commons Configuration, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Commons Configuration website:

https://commons.apache.org/proper/commons-configuration/

=============================================================================

                        Apache Commons Configuration
                        Version 2.0-alpha1
                        Release Notes

This is the first alpha release for version 2.0 of Commons Configuration.
Version 2 is a major redesign of the Configuration API. It breaks compatibility
in many areas and, therefore, is not a drop-in replacement for Commons
Configuration 1.x. To allow collaboration with an older version of the library
(and to prevent jar and dependency hell), the top-level package and the Maven
coordinates have been changed. There is an upgrade guide available at

https://commons.apache.org/configuration/userguide/upgradeto2_0.html

describing the most important breaking changes. Be sure to read this
document if you want to switch from a 1.x version to this new version. The
user's guide which can be found at

https://commons.apache.org/configuration/userguide/user_guide.html

has been reworked to cover all the new and changed features.

The main purpose of this alpha release is to gather feedback from the
community about the reworked API. IT IS NOT YET PRODUCTION READY. It is
expected that there will still be some changes on the public API.

Below is a list of all changes in this version:

New features:
=============
o CONFIGURATION-579:  A migration guide has been created which supports when upgrading from
                      version 1.x to 2.0.
o CONFIGURATION-559:  It is now possible to define default values for initialization
                      properties of configurations.
o 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.
o CONFIGURATION-550:  Conversion to Character is now supported.
o CONFIGURATION-541:  Multi-file configurations are no longer restricted to XML configuration
                      files. Arbitrary file-based configurations are now supported.
o CONFIGURATION-535:  DatabaseConfiguration now provides get methods for querying its
                      properties defining the underlying database structures.
o CONFIGURATION-533:  DatabaseConfiguration now automatically converts CLOBs to strings if
                      they appear in property values.
o 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.
o CONFIGURATION-519:  Configuration objects are now created via configuration builders. A new
                      API for configuration builders has been added.
o CONFIGURATION-517:  Hierarchical configurations now provide methods to obtain sub
                      configurations for all child elements of a given key.
o CONFIGURATION-514:  Bean declarations now support constructor invocations.
o 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.
o 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.
o CONFIGURATION-204:  With the new reloading mechanism automatic and periodic reloading checks
                      can be performed.
o CONFIGURATION-202:  Reloading checks can now be performed in a background thread.

Fixed Bugs:
===========
o CONFIGURATION-582:  Fixed a StringIndexOutOfBoundsException in PropertiesConfigurationLayout
                      which was caused by lines containing only whitespace.
o CONFIGURATION-572:  When a CombinedConfiguration is cleared it removes itself as change
                      listener from all child configurations. This fixes a possible memory
                      leak.
o CONFIGURATION-570:  Fixed a possible ConcurrentModificationException when a SystemConfiguration
                      instance is passed to the append() or copy() methods.
o CONFIGURATION-567:  XMLBeanDeclaration now escapes node names before they are used to
                      determine nested properties. Thanks to Shen liang.

Changes:
o CONFIGURATION-591:  Removed methods from ConfigurationConverter related to ExtendedProperties.
                      This class is no longer supported by recent versions of Commons
                      Collections.
o CONFIGURATION-590:  Removed Serializable interface from all configuration implementations.
                      Some configuration classes declared this interface without being
                      actually serializable.
o 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.
o 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.
o CONFIGURATION-578:  The user's guide has been fully reworked to cover all new and enhanced
                      features of version 2.0.
o CONFIGURATION-577:  The dependency to Commons Collections is no longer needed.
o 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.
o 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.
o CONFIGURATION-573:  XPathExpressionEngine can now deal with namespace prefixes in node and
                      attribute names.
o CONFIGURATION-563:  The DefaultExpressionEngine class is now immutable. An instance can be
                      shared between multiple configuration objects.
o CONFIGURATION-562:  Improved the API of ExprLookup.
o 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.
o 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.
o CONFIGURATION-553:  The code for accessing configuration files has 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.
o CONFIGURATION-546:  BeanHelper can now process BeanDefinitions initializing properties of
                      collection types of their target beans. Thanks to Justin Couch.
o CONFIGURATION-544:  Added missing dependencies to build.xml. Thanks to Oliver Kopp.
o 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.
o 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.
o CONFIGURATION-539:  The deprecated INIConfiguration class was removed.
                      HierarchicalINIConfiguration was renamed to INIConfiguration.
o CONFIGURATION-537:  The deprecated ConfigurationFactory class was removed.
o 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.
o CONFIGURATION-534:  The includesAllowed property of PropertyConfiguration is now independent
                      from the existence of a base path.
o 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.
o CONFIGURATION-527:  AbstractConfiguration.clearPropertyDirect() is now abstract. Thanks to Matthias Richter.
o CONFIGURATION-526:  XMLPropertiesConfiguration now supports loading from and saving to DOM
                      nodes. Thanks to Oliver Kopp.
o CONFIGURATION-524:  Interpolation now works correctly after a configuration was cloned.
                      The ConfigurationInterpolator instance is now cloned, too.
o CONFIGURATION-521:  ConfigurationUtils.fileFromUrl() now correctly handles URL containing
                      encoded percent characters. Thanks to Oliver Kopp.
o CONFIGURATION-520:  Support for reloading of configuration data has been reworked.
o 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.
o CONFIGURATION-516:  PropertiesConfiguration no longer escapes double quotes on saving.
o 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.
o CONFIGURATION-513:  HierarchicalConfiguration is now an interface. The base implementation
                      class is named BaseHierarchicalConfiguration.
o CONFIGURATION-506:  Removed obsolete nested classes Node and NodeVisitor of
                      HierarchicalConfiguration. The related deprecated class
                      ConfigurationKey was removed, too.
o 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.
o 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.
o CONFIGURATION-500:  XMLConfiguration now adds attributes of elements defining a list to
                      all list nodes.
o CONFIGURATION-496:  Concurrent access to configurations and reloading have been completely
                      redesigned. This should reduce the amount of synchronization.
o 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.
o CONFIGURATION-462:  Updated dependency to Commons Lang from version 2.6 to 3.1.
o CONFIGURATION-419:  EventSource is now an interface. With BaseEventSource there is a
                      default implementation.
o 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.
o CONFIGURATION-330:  Concurrent access to configurations has been reworked.
o CONFIGURATION-153:  It is now possible to define the strategy used for locating
                      configuration files.
o 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.
o 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.


Historical list of changes: https://commons.apache.org/proper/commons-configuration/changes-report.html

For complete information on Apache Commons Configuration, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Commons Configuration website:

https://commons.apache.org/proper/commons-configuration/
