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