Issue Details (XML | Word | Printable)

Key: CONFIGURATION-336
Type: Bug Bug
Status: Closed Closed
Resolution: Fixed
Priority: Major Major
Assignee: Oliver Heger
Reporter: Pavel Savara
Votes: 0
Watchers: 0
Operations

If you were logged in you would be able to see more operations.
Commons Configuration

Brackets in property key causes NumberFormatException

Created: 29/Sep/08 07:49 AM   Updated: 22/Aug/09 07:36 PM
Return to search
Component/s: None
Affects Version/s: 1.5
Fix Version/s: 1.6

Time Tracking:
Not Specified

Resolution Date: 04/Nov/08 09:19 PM


 Description  « Hide
Hi,
When using brackets in property key we get an exception every time.
Escaping brackets with \ doesn't help.

Example
#property in property file
test(ef)=false

causes
java.lang.NumberFormatException: For input string: "ef" at
java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:447)
at java.lang.Integer.parseInt(Integer.java:497)
at org.apache.commons.configuration.tree.DefaultConfigurationKey
$KeyIterator.checkIndex(DefaultConfigurationKey.java:834)
at org.apache.commons.configuration.tree.DefaultConfigurationKey
$KeyIterator.nextKey(DefaultConfigurationKey.java:511) at
org.apache.commons.configuration.tree.DefaultExpressionEngine.findNodesForKey(DefaultExpressionEngine.java:462) at
org.apache.commons.configuration.tree.DefaultExpressionEngine.query(DefaultExpressionEngine.java:286) at
org.apache.commons.configuration.HierarchicalConfiguration.fetchNodeList(HierarchicalConfiguration.java:925 at
org.apache.commons.configuration.HierarchicalConfiguration.setProperty(HierarchicalConfiguration.java:735) at
org.apache.commons.configuration.ConfigurationUtils.copy(ConfigurationUtils.java:143) at
org.apache.commons.configuration.ConfigurationUtils.convertToHierarchical(ConfigurationUtils.java:199) at org.apache.commons.configuration.CombinedConfiguration
$ConfigData.getTransformedRoot(CombinedConfiguration.java:794) at
org.apache.commons.configuration.CombinedConfiguration.constructCombinedNode(CombinedConfiguration.java:653) at
org.apache.commons.configuration.CombinedConfiguration.getRootNode(CombinedConfiguration.java:504) at
org.apache.commons.configuration.HierarchicalConfiguration.fetchNodeList(HierarchicalConfiguration.java:925) at
org.apache.commons.configuration.HierarchicalConfiguration.getProperty(HierarchicalConfiguration.java:327) at
org.apache.commons.configuration.CombinedConfiguration.getProperty(CombinedConfiguration.java:578) at
org.apache.commons.configuration.AbstractConfiguration.resolveContainerStore(AbstractConfiguration.java:1155) at
org.apache.commons.configuration.AbstractConfiguration.getString(AbstractConfiguration.java:1034) at
org.apache.commons.configuration.AbstractConfiguration.getString(AbstractConfiguration.java:1017)

Explanation i got in mailing list from Oliver Heger

I guess you use DefaultConfigurationBuilder for loading a combined
configuration?

The exception is due to the fact that brackets have a special meaning in
the query syntax for hierarchical configurations.
(DefaultConfigurationBuilder transforms all configuration sources into
hierarchical configurations, so also for properties, which are not
hierarchical by default, the same rules apply.)

So far escaping brackets or other specific characters in property keys
is not supported. It seems to be rather unusual to use brackets in
property keys, so you may well be the first one who noticed this problem.

Unfortunately I don't have a working solution for this problem right
now.



 All   Comments   Work Log   Change History   Subversion Commits      Sort Order: Ascending order - Click to sort in descending order
Oliver Heger added a comment - 30/Oct/08 07:24 AM
The problem is basically caused by the conversion of a flat Configuration (e.g. a PropertiesConfiguration) into a hierarchical one. Here all keys of the flat configuration are obtained and inserted into the new hierarchical configuration. The hierarchical configuration is initialized with a default expression engine that parses the property keys for brackets and tries to interpret their contents as index values. This fails in this specific case.

I think, a good solution for this problem would be to support using a specific ExpressionEngine when converting a flat configuration to a hierarchical one. If the property keys contain some critical characters like brackets, an expression engine could be used that is initialized with different index markers, e.g. square brackets.

To implement this solution at least two places have to be changed:

  • ConfigurationUtils needs an overloaded variant of the convertToHierarchical() method, which also expects an ExpressionEngine as parameter.
  • CombinedConfiguration should use its own expression engine when converting flat configurations to hierarchical ones. (This makes sense because this expression will also be used when querying the resulting combined configuration.)

Oliver Heger made changes - 01/Nov/08 08:13 PM
Field Original Value New Value
Assignee Oliver Heger [ oliver.heger@t-online.de ]
Repository Revision Date User Message
ASF #709771 Sat Nov 01 20:15:00 UTC 2008 oheger CONFIGURATION-336: Added a new convertToHierarchical() method to ConfigurationUtils that also takes an expression engine as parameter.
Files Changed
MODIFY /commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestConfigurationUtils.java
MODIFY /commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/ConfigurationUtils.java

Repository Revision Date User Message
ASF #711407 Tue Nov 04 21:11:36 UTC 2008 oheger CONFIGURATION-336: CombinedConfiguration now allows setting a specific expression engine that will be used when converting flat configurations to hierarchical ones.
Files Changed
MODIFY /commons/proper/configuration/trunk/src/java/org/apache/commons/configuration/CombinedConfiguration.java
MODIFY /commons/proper/configuration/trunk/src/test/org/apache/commons/configuration/TestCombinedConfiguration.java

Repository Revision Date User Message
ASF #711408 Tue Nov 04 21:12:45 UTC 2008 oheger CONFIGURATION-336: Updated documentation and changes.xml.
Files Changed
MODIFY /commons/proper/configuration/trunk/xdocs/changes.xml
MODIFY /commons/proper/configuration/trunk/xdocs/userguide/howto_utilities.xml

Oliver Heger added a comment - 04/Nov/08 09:19 PM
It is now possible to specify an expression engine when converting a flat configuration to a hierarchical one. By using a properly configured expression engine you can work around the problem with property keys having a special meaning for the expression engine.

The applied fix contains two major changes:

  • There is an overloaded version of ConfigurationUtils.convertToHierarchical() that also expects an ExpressionEngine as argument.
  • CombinedConfiguration has the new conversionExpressionEngine property. The ExpressionEngine set here is used when the internal node structure is constructed.

In the unit test class for CombinedConfiguration a new test case was added (testConversionExpressionEngine() demonstrating how this new property can be used.


Oliver Heger made changes - 04/Nov/08 09:19 PM
Status Open [ 1 ] Resolved [ 5 ]
Fix Version/s 1.6 [ 12312450 ]
Resolution Fixed [ 1 ]
Oliver Heger made changes - 22/Aug/09 07:36 PM
Status Resolved [ 5 ] Closed [ 6 ]