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

Oliver Heger commented on CONFIGURATION-339:
--------------------------------------------

It took a while to figure out what is going on, but I was able to track it down 
to the getList() implementation of CompositeConfiguration. This method performs 
two interpolations on the property values it returns:
* One implicit interpolation by calling getList() on the child configuration. 
This is where the wrong property value comes from.
* One explicit interpolation on the list with property values gathered from the 
child configurations. Here interpolation across multiple child configurations 
can be done.

The first of these interpolations is pointless because the second one will 
produce the desired results.

Because getStringArray() delegates to getList() this method is affected, too. 
In fact getStringArray() does again an interpolation on the values returned by 
getList(). Because getList() should already have substituted all variables for 
which this is possible, this additional interpolation won't add any value.

> ConfigurationConverter does not handle CompositeConfiguration correctly
> -----------------------------------------------------------------------
>
>                 Key: CONFIGURATION-339
>                 URL: https://issues.apache.org/jira/browse/CONFIGURATION-339
>             Project: Commons Configuration
>          Issue Type: Bug
>          Components: Interpolation
>    Affects Versions: 1.5
>         Environment: OS X 10.5.5, java version "1.6.0_07", Java(TM) SE 
> Runtime Environment (build 1.6.0_07-b06-153)
>            Reporter: William DeMoss II
>            Assignee: Oliver Heger
>
> ConfigurationConverter doesn't seem to respect the ordering of a composite 
> configuration. I am having problems describing the behavior, but I thinks the 
> following test case illustrates it best:
>       @Test
>       public void showBug() {
>               PropertiesConfiguration p = new PropertiesConfiguration();
>               p.addProperty("foo", "initial");
>               p.addProperty("bar", "${foo}");
>               p.addProperty("prefix.foo", "override");
>               CompositeConfiguration cfg = new CompositeConfiguration();
>               cfg.addConfiguration(p.subset("prefix"));
>               cfg.addConfiguration(p);
>               // this assertion passes as expected since the subset
>               // was added first to the composite configuration
>               Assert.assertEquals("override", cfg.getString("bar"));
>               // after converting to properties, this assertion fails and
>               // reports that the value is 'initial'
>               Properties properties = 
> ConfigurationConverter.getProperties(cfg);
>               Assert.assertEquals("override", properties.getProperty("bar"));
>       }

-- 
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