You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Fabien Nisol (JIRA)" <ji...@apache.org> on 2011/03/31 21:00:05 UTC
[jira] [Commented] (CONFIGURATION-441) CompositeConfiguration does
not resolve referenced properties correctly
[ https://issues.apache.org/jira/browse/CONFIGURATION-441?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13014142#comment-13014142 ]
Fabien Nisol commented on CONFIGURATION-441:
--------------------------------------------
I think overriding the _interpolate(Object)_ and _getProperty(String key)_ on CompositeConfiguration like this should do the trick:
{code}
/**
* Read property from underlying composite
*
* @param key key to use for mapping
*
* @return object associated with the given configuration key.
*/
public Object getProperty(String key)
{
Object value = null;
for (Iterator i = configList.iterator(); i.hasNext();)
{
Configuration config = (Configuration) i.next();
if (config.containsKey(key))
{
value = config.getProperty(key);
}
}
if(value==null)
return null;
else
return interpolate(value);
}
...
/**
* Read property from underlying composite
*
* @param key key to use for mapping
*
* @return object associated with the given configuration key.
*/
public Object getProperty(String key)
{
Object value = null;
for (Iterator i = configList.iterator(); i.hasNext();)
{
Configuration config = (Configuration) i.next();
if (config.containsKey(key))
{
value = config.getProperty(key);
}
}
if(value==null)
return null;
else
return interpolate(value);
}
{code}
> CompositeConfiguration does not resolve referenced properties correctly
> -----------------------------------------------------------------------
>
> Key: CONFIGURATION-441
> URL: https://issues.apache.org/jira/browse/CONFIGURATION-441
> Project: Commons Configuration
> Issue Type: Bug
> Components: Interpolation
> Affects Versions: 1.5
> Environment: all
> Reporter: Fabien Nisol
>
> Imagine a composite configuration consisting of
> config_x : configuration one
> property.one=one
> property.two=two
> config_y : configuration two
> property.one.ref=${property.one}
> When getProperty() is called on a CompositeConfiguration, property interpolation does not work if a property in config_x refers to a property in config_y, in the example, property.one.ref won't translate into "one"
> This seems to be caused by the getProperty() implementation of CompositeConfiguration
> {code:title=CompositeConfiguration.getProperty(String)}
> /**
> * Read property from underlying composite
> *
> * @param key key to use for mapping
> *
> * @return object associated with the given configuration key.
> */
> public Object getProperty(String key)
> {
> Configuration firstMatchingConfiguration = null;
> for (Iterator i = configList.iterator(); i.hasNext();)
> {
> Configuration config = (Configuration) i.next();
> if (config.containsKey(key))
> {
> firstMatchingConfiguration = config;
> break;
> }
> }
> if (firstMatchingConfiguration != null)
> {
> return firstMatchingConfiguration.getProperty(key);
> }
> else
> {
> return null;
> }
> }
> {code}
> The methods finds the first configuration containing the key, and delegates the call to that particular configuration.
> A possible fix would be to try interpolation against every configuration until an interpolation succeed.
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira