                        Apache Commons Configuration
                        Version 2.6
                        Release Notes
                        2019-09-13


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.

Tools to assist in the reading of configuration/preferences files in
various formats

Minor release with new features and updated dependencies.

Changes in this version include:

New features:
o                     Document "includeOptional" on the site. Thanks to Gary Gregory.
o CONFIGURATION-756:  Allow for custom behavior to handle errors loading included properties files. Thanks to Gary Gregory.

Fixed Bugs:
o CONFIGURATION-750:  XMLPropertyListConfiguration cannot set arrays in the correct plist form. Thanks to Jason Pickens, Gary Gregory, Emmanuel Bourg.
o                     Fix Javadoc for org.apache.commons.configuration2.PropertiesConfiguration.getIncludeOptional(). Thanks to Gary Gregory.
o CONFIGURATION-760:  Properties file using cyclical includes cause a StackOverflowError instead of detecting the misconfiguration. Thanks to Gary Gregory.

Changes:
o CONFIGURATION-751:  Update Apache Commons Text from 1.6 to 1.7. Thanks to Gary Gregory.
o CONFIGURATION-752:  Update Apache Commons VFS from 2.3 to 2.4.1. Thanks to Gary Gregory.
o CONFIGURATION-754:  Update Apache Commons Text from 1.7 to 1.8. Thanks to Gary Gregory.
o CONFIGURATION-755:  [CVE-2014-0114] Update Apache Commons BeanUtils from 1.9.3 to 1.9.4. Thanks to Gary Gregory.
o                     Fix syntax in user guide documentation #33. Thanks to Kevin Wang.
o CONFIGURATION-757:  Update org.yaml:snakeyaml from 1.24 to 1.25. Thanks to Gary Gregory.
o                     Update tests from org.apache.commons:commons-dbcp2 2.6.0 to 2.7.0. Thanks to Gary Gregory.
o                     Update tests from org.apache.commons:commons-pool2 2.6.2 to 2.7.0. Thanks to Gary Gregory.
o CONFIGURATION-758:  Update commons-codec:commons-codec from 1.12 to 1.13. Thanks to Gary Gregory.
o                     Update tests from org.hsqldb:hsqldb 2.4.1 to 2.5.0. Thanks to Gary Gregory.
o                     Update tests from com.sun.mail:mailapi 1.6.3 to 1.6.4. Thanks to Gary Gregory.
o CONFIGURATION-759:  Update Spring from 4.3.24.RELEASE to 4.3.25.RELEASE. Thanks to Gary Gregory.
o                     Update maven-checkstyle-plugin from 3.0.0 to 3.1.0. Thanks to Gary Gregory.
o                     Use current version of Checkstyle: 6.18 to 8.24. 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/

Download it from https://commons.apache.org/proper/commons-configuration/download_configuration.cgi

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

                        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/
