Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Invalid
-
1.5
-
None
-
all
Description
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
/** * 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; } }
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.