The commons-configuration team is pleased to announce the Commons Configuration 1.5 release! http://commons.apache.org/configuration/ Tools to assist in the reading of configuration/preferences files in various formats Changes in this version include: New Features: o 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. Issue: CONFIGURATION-273. o There is a new configuration implementation EnvironmentConfiguration, which provides access to (OS) environment variables. On Java >= 1.5 this class can be directly used; on earlier versions a dependency to ant is required. Issue: CONFIGURATION-284. Thanks to Nicolas De Loof. o 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. Issue: CONFIGURATION-290. o DefaultConfigurationBuilder will now notify registered error listeners about optional configuration sources that could not be created. Before exceptions thrown by optional configurations were swallowed Issue: CONFIGURATION-285. o The base implementation of clear() in AbstractConfiguration now checks for a potential UnsupportedOperationException when iterating over the existing properties. Issue: CONFIGURATION-277. o A new getSource() method was added to CompositeConfiguration and CombinedConfiguration, which returns the child configuration, in which a given property is defined. Issue: CONFIGURATION-215. o 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. Issue: CONFIGURATION-264. o 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. o Generic get methods have been added to DataConfiguration (get(), getArray() and getList()) o File configurations can now be saved to FTP URLs, or any other URL protocol supporting data output. Issue: CONFIGURATION-249. o Date objects are now supported in ASCII plist files. Issue: CONFIGURATION-261. Fixed bugs: o 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. Issue: CONFIGURATION-299. o A bug in XMLConfiguration caused that attributes of the root element could not be changed. This has been fixed. Issue: CONFIGURATION-296. o The subset() method of HierarchicalConfiguration now takes the value of the subset's root node into account if it is not ambigous. Issue: CONFIGURATION-295. o Nodes added to a XMLConfiguration using the addNodes() method could lose their value when the configuration was saved. This is now fixed. Issue: CONFIGURATION-294. o 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. Issue: CONFIGURATION-272. o The addNodes() method of hierarchical file-based configurations now correctly triggers an auto save. Issue: CONFIGURATION-291. o 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. Issue: CONFIGURATION-287. o 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. Issue: CONFIGURATION-283. o AbstractConfiguration.addProperty() now correctly deals with list and array properties if delimiter parsing is disabled. Issue: CONFIGURATION-275. o The default expression engine used by HierarchicalConfiguration instances is now lazily initialized. This avoids NullPointerExceptions in certain server environments after a redeploy. Issue: CONFIGURATION-282. o Cycles in the JNDI tree no longer cause a stack overflow in JNDIConfiguration. Issue: CONFIGURATION-281. o Using file-based configurations in auto-save mode together with a reloading strategy could cause data loss. This has been fixed. Issue: CONFIGURATION-280. Thanks to Roman Kurmanowytsch. o A PropertiesConfiguration that was created from a non existing file lost its content when it was saved. This problem has been solved. Issue: CONFIGURATION-279. o PropertiesConfiguration now supports escaping the escape character for list delimiters. Issue: CONFIGURATION-274. o PropertiesConfiguration no longer escapes the list delimiter on saving if the list delimiter has been disabled. Issue: CONFIGURATION-269. o List properties and properties containing interpolated variables are now properly saved by INIConfiguration. Issue: CONFIGURATION-270. o INIConfiguration flushes the output at the end of a save operation. Issue: CONFIGURATION-267. o byte[] properties are properly saved as data fields in the plist configurations (PropertyListConfiguration and XMLPropertyListConfiguration). o The object getters in DataConfiguration with no default value (i.e getURL(key)) now throw a NoSuchElementException if the flag throwExceptionOnMissing is set. o XMLConfiguration used to drop attributes when an element's value was a list. This has been fixed. Issue: CONFIGURATION-263. o Fixed a potential issue in DatabaseConfiguration where an error on closing a statement would prevent the connection from being closed. Issue: CONFIGURATION-180. Changes: o Some of the dependencies in the m2 pom have been updated to be more consistent. Thanks to Jörg Schaible. o The dependency to commons-logging was updated to the current version 1.1. Older versions of commons-logging will still work. Thanks to Jörg Schaible. o The dependencies to commons-codec and commons-jxpath have been marked as optional. They are not required by the core classes. Thanks to Nicolas De Loof. o 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. Issue: CONFIGURATION-268. o The return value of FileConfiguration.getFile() is now always consistent with the result of getURL(). Issue: CONFIGURATION-253. o INIConfiguration uses the platform's specific line separator instead of the Windows line separator. o 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. Issue: CONFIGURATION-265. o ConfigurationInterpolator now also invokes the default lookup object for variables with a prefix that could not be resolved by their associated lookup object. Issue: CONFIGURATION-266. Thanks to Tobias Noebel. o XMLPropertyListConfiguration no longer requires commons-digester and commons-beanutils to work. o Fixed INIConfiguration to handle the quoted values and the lines containing a value and a comment. Have fun! -The commons-configuration team