[ 
https://issues.apache.org/jira/browse/CONFIGURATION-404?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12800546#action_12800546
 ] 

Rob Walker commented on CONFIGURATION-404:
------------------------------------------

The bug reported above was raised under JIRA-336, and closed as having ways to 
workaround - which is correct.

On Vista and Win7 this  issue now crops up a lot because of the usage of 
ProgramFiles(x86) as a standard directory name.

The workaround proposal under the original issue requires every user to 
implement their own workaround, and it's non trivial because many of the member 
fields and methods of tree classes are private and so a simple subclass based 
solution can't be used.

An alternative approach is to simple catch the exception  and handle it, 
reporting the item as "not an index".. TBH I'd say an unhandled of this nature 
is less than ideal in library code anyway, so my view is that this also 
strengthens the codebase.

We have locally implemented this patch and it's working very well, so would 
like to see it in the codebase.



> Revisit - Brackets in property key causes NumberFormatException
> ---------------------------------------------------------------
>
>                 Key: CONFIGURATION-404
>                 URL: https://issues.apache.org/jira/browse/CONFIGURATION-404
>             Project: Commons Configuration
>          Issue Type: Bug
>    Affects Versions: 1.5
>            Reporter: Rob Walker
>            Assignee: Oliver Heger
>             Fix For: 1.6
>
>
> 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.

Reply via email to