[ 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