[ 
https://issues.apache.org/jira/browse/CONFIGURATION-753?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Peter updated CONFIGURATION-753:
--------------------------------
    Description: 
If a key is repeated in a configuration and then used in an interpolation 
elsewhere, the behaviour is inconsistent. There are other tickets/discussions 
about whether it should just pick the first value or not, but I don't think it 
should do both.
{code:java|title=/tmp/test.properties}
abc = hello
abc = world
foo.one = ${abc}
foo.two = prefix ${abc} suffix
{code}
{code:java|title=Demo.java (main)}
Parameters params = new Parameters();
FileBasedConfigurationBuilder<FileBasedConfiguration> builder = new 
FileBasedConfigurationBuilder<FileBasedConfiguration>(PropertiesConfiguration.class)
    .configure(params.fileBased()
        .setFileName("/tmp/test.properties")
      );
try {
    FileBasedConfiguration config = builder.getConfiguration();
    System.out.println(config.getString("foo.one"));
    System.out.println(config.getString("foo.two"));
} catch (ConfigurationException cex) {
    // pass
}
{code}
The output from the above is
{noformat}
hello 
prefix [hello, world] suffix
{noformat}
In the first case, only the first value is being matched, in the second both 
values (and [, ]) are used.

I'd expect the output to either be
{noformat:title=First value only}
hello
prefix hello suffix
{noformat}
or
{noformat:title=Both values used}
[hello, world]
prefix [hello, world] suffix
{noformat}
I can work around whichever style is chosen but think it'd be much more 
intuitive if both cases were handled the same.

  was:
If a key is repeated in a configuration and then used in an interpolation else 
where, the behaviour is inconsistent. There are other tickets/discussions about 
whether it should just pick the first value or not, but I don't think it should 
do both.

{code:title=/tmp/test.properties}
abc = hello
abc = world
foo.one = ${abc}
foo.two = prefix ${abc} suffix
{code}

{code:title=Demo.java (main)}
Parameters params = new Parameters();
FileBasedConfigurationBuilder<FileBasedConfiguration> builder = new 
FileBasedConfigurationBuilder<FileBasedConfiguration>(PropertiesConfiguration.class)
    .configure(params.fileBased()
        .setFileName("/tmp/test.properties")
      );
try {
    FileBasedConfiguration config = builder.getConfiguration();
    System.out.println(config.getString("foo.one"));
    System.out.println(config.getString("foo.two"));
} catch (ConfigurationException cex) {
    // pass
}
{code}

The output from the above is 
{noformat}
hello 
prefix [hello, world] suffix
{noformat}

In the first case, only the first value is being matched, in the second both 
values (and [, ]) are used.

I'd expect the output to either be
{noformat:title=First value only}
hello
prefix hello suffix
{noformat}

or 

{noformat:title=Both values used}
[hello, world]
prefix [hello, world] suffix
{noformat}

I can work around whichever style is chosen but think it'd be much more 
intuitive if both cases were handled the same.


> Handling of interpolation is inconsistant
> -----------------------------------------
>
>                 Key: CONFIGURATION-753
>                 URL: https://issues.apache.org/jira/browse/CONFIGURATION-753
>             Project: Commons Configuration
>          Issue Type: Bug
>          Components: Interpolation
>    Affects Versions: 2.5
>         Environment: Java 8, Configurations2 2.5
>            Reporter: Peter
>            Priority: Major
>         Attachments: test.properties
>
>
> If a key is repeated in a configuration and then used in an interpolation 
> elsewhere, the behaviour is inconsistent. There are other tickets/discussions 
> about whether it should just pick the first value or not, but I don't think 
> it should do both.
> {code:java|title=/tmp/test.properties}
> abc = hello
> abc = world
> foo.one = ${abc}
> foo.two = prefix ${abc} suffix
> {code}
> {code:java|title=Demo.java (main)}
> Parameters params = new Parameters();
> FileBasedConfigurationBuilder<FileBasedConfiguration> builder = new 
> FileBasedConfigurationBuilder<FileBasedConfiguration>(PropertiesConfiguration.class)
>     .configure(params.fileBased()
>         .setFileName("/tmp/test.properties")
>       );
> try {
>     FileBasedConfiguration config = builder.getConfiguration();
>     System.out.println(config.getString("foo.one"));
>     System.out.println(config.getString("foo.two"));
> } catch (ConfigurationException cex) {
>     // pass
> }
> {code}
> The output from the above is
> {noformat}
> hello 
> prefix [hello, world] suffix
> {noformat}
> In the first case, only the first value is being matched, in the second both 
> values (and [, ]) are used.
> I'd expect the output to either be
> {noformat:title=First value only}
> hello
> prefix hello suffix
> {noformat}
> or
> {noformat:title=Both values used}
> [hello, world]
> prefix [hello, world] suffix
> {noformat}
> I can work around whichever style is chosen but think it'd be much more 
> intuitive if both cases were handled the same.



--
This message was sent by Atlassian JIRA
(v7.6.14#76016)

Reply via email to