The commons-configuration team is pleased to announce the Commons 
Configuration 1.3-rc1 release! 

http://jakarta.apache.org/commons/configuration/

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

Changes in this version include:

  New Features:

o A new class PropertiesConfigurationLayout was introduced whose task is to 
  preserve the structure (e.g. comments, blanc lines) of a file loaded by 
  PropertiesConfiguration. Each PropertiesConfiguration object is now 
  associated with such a layout object. A saved properties file will look 
  very similar to its original. Issue: CONFIGURATION-104. 
o 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. Issue: CONFIGURATION-145. 
o The new class DefaultConfigurationBuilder was added as an alternative to 
  ConfigurationFactory. It provides some more features and creates a 
  CombinedConfiguration object 
o The new class CombinedConfiguration was added as a hierarchical alternative 
  to CompositeConfiguration. 
o 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. Issue: CONFIGURATION-143. 
o A new method convertToHierarchical() was added to ConfigurationUtils, which 
  is able to convert an arbitrary configuration object into a hierarchical 
  configuration. 
o Added two new constructors in CompositeConfiguration accepting a collection 
  of configurations as a parameter. Issue: CONFIGURATION-178. 
o (Basic) Support for declaring beans in configuration files was added. Some 
  new classes in the beanutils package allow to create instances from these 
  declarations. Issue: CONFIGURATION-186. 
o 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. 
  Issue: CONFIGURATION-182. 
o 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. 
o 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). Issue: 
  CONFIGURATION-173. 
o 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(). 

  Changes:

o The dependency to servletapi was updated from version 2.3 to version 2.4, 
  but version 2.3 will still work. Issue: CONFIGURATION-217. 
o 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. Issue: CONFIGURATION-216. 
o 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. Issue: CONFIGURATION-214. 
o Loading of file-based configurations no longer throws a 
  NullPointerException in setups where the thread context class loader is not 
  set. Issue: CONFIGURATION-63. 
o The dependency to dom4j was removed; it was only used by two test classes, 
  which have been re-written. 
o 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. Issue: CONFIGURATION-100. 
o 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. 
o 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. 
o 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. Issue: CONFIGURATION-155. Thanks to Jorge Ferrer.  

Have fun!
-The commons-configuration team
      
