commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Oliver Heger (JIRA)" <>
Subject [jira] Commented: (CONFIGURATION-339) ConfigurationConverter does not handle CompositeConfiguration correctly
Date Wed, 15 Oct 2008 20:24:44 GMT


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

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:
>             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("", "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.

View raw message