SubsetConfiguration does not properly handle interpolation when used on a
HierarchicalConfiguration
---------------------------------------------------------------------------------------------------
Key: CONFIGURATION-444
URL: https://issues.apache.org/jira/browse/CONFIGURATION-444
Project: Commons Configuration
Issue Type: Bug
Components: Interpolation
Affects Versions: 1.6
Environment: all
Reporter: Fabien Nisol
Imaging next text files:
{code:xml}
<properties>
<var>a_value</var>
<prop2>
<prop
attr1="${var}"
attr2="attr2"
/>
</prop2>
</properties>
{code}
{code:java}
...
XMLConfiguration config2 = new XMLConfiguration("test/test2.xml");
Configuration subset2 = config2.subset("prop2");
Configuration subset3 = new SubsetConfiguration(subset2,"prop");
System.err.println(subset3.getString("[@attr1]"))
...
{code}
the result is wrong:
{code}
${var}
{code}
it should be:
{code}
a_value
{code}
I think the problem is related to the _interpolate()_ method in
SubsetConfiguration(), which seems to involve some kind of recursive trick that
seem overcomplicated (and inefficient, since it's creating unnecessary
SubsetConfiguration)..
But maybe I'm missing something.
{code}
protected Object interpolate(Object base)
{
if (delimiter == null && "".equals(prefix))
{
return super.interpolate(base);
}
else
{
SubsetConfiguration config = new SubsetConfiguration(parent, "");
return config.interpolate(base);
}
}
{code}
I think the code below would be more appropriate:
{code}
protected Object interpolate(Object base)
{
if(parent instanceof AbstractConfiguration)
{
return ((AbstractConfiguration)parent).interpolate(base);
} else {
return base;
}
}
{code}
There's no reason to try interpolation if the parent is not implementing
interpolation.
This brings other questions about the whole interpolation thing. I really
wonder why the _Configuration_ interface does not define that method, leaving
or the the option to implementation to actually implement it. But that is
another debate.
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira