[
https://issues.apache.org/jira/browse/CONFIGURATION-336?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12643769#action_12643769
]
Oliver Heger commented on CONFIGURATION-336:
--------------------------------------------
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.)
> Brackets in property key causes NumberFormatException
> -----------------------------------------------------
>
> Key: CONFIGURATION-336
> URL: https://issues.apache.org/jira/browse/CONFIGURATION-336
> Project: Commons Configuration
> Issue Type: Bug
> Affects Versions: 1.5
> Reporter: Pavel Savara
>
> 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.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.