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

Oliver Heger commented on CONFIGURATION-323:
--------------------------------------------

Thank you for this detailed bug report.

Did you check this with version 1.5 of Commons Configuration? The 1.5 release 
addresses some problems with list delimiter handling. Especially 
CONFIGURATION-283 seems to be of interest for you.

Please let us know whether this solves your problem.

> DefaultConfigurationBuilder, property-value misinterpreted as list, escaped 
> notation of list-delimiter lost during internal processing
> --------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: CONFIGURATION-323
>                 URL: https://issues.apache.org/jira/browse/CONFIGURATION-323
>             Project: Commons Configuration
>          Issue Type: Bug
>    Affects Versions: 1.4
>         Environment: WinXP
>            Reporter: juergen schad
>
> Shortly we switched from ConfigurationFactory to DefaultConfigurationBuilder 
> for parsing out configuration-files. Unfortunately the resulting 
> Configuration-Objects show different behaviour. The following example 
> illustrates the problem.
> {noformat}
> public class CommonsConfigTest extends TestCase
> {
>     public void testCommonsConfig() 
>     {
>         try
>         {
>             URL oConfigURL = new File("c:\\config.xml").toURL();
>                       
>             //========= ConfigurationFactory ===========
>             final ConfigurationFactory oConfigurationFactory = new 
> ConfigurationFactory();
>             oConfigurationFactory.setConfigurationURL( oConfigURL );
>             printPropertyValue( oConfigurationFactory.getConfiguration() );
>             //========= DefaultConfigurationBuilder 1st attempt ===========
>             final DefaultConfigurationBuilder oBuilder = new 
> DefaultConfigurationBuilder();
>             oBuilder.setURL( oConfigURL );
>             printPropertyValue( oBuilder.getConfiguration() );
>             //========= DefaultConfigurationBuilder 2nd attempt ===========
>             final DefaultConfigurationBuilder oDelimiterBuilder = new 
> DefaultConfigurationBuilder();
>             oDelimiterBuilder.setListDelimiter( ';' );
>             oDelimiterBuilder.setDelimiterParsingDisabled( true );
>             oDelimiterBuilder.setURL( oConfigURL );
>             printPropertyValue( oDelimiterBuilder.getConfiguration() );
>         }
>         catch ( Exception configEx )
>         {
>             configEx.printStackTrace();
>         }
>     }
>     void printPropertyValue(final Configuration a_oConfig) {
>         System.out.println( a_oConfig.getString( "demo.prop" ) );
>     }
> }
> {noformat}
> contents of config.xml
> {noformat}
> <?xml version="1.0" encoding="ISO-8859-1" ?>
> <configuration>
>     <properties optional="true" fileName="/config.properties"/>
> </configuration>
> {noformat}
> contents of config.properties
> {noformat}
> demo.prop=test\, text using \,\, escaped list delimiters
> {noformat}
> the output looks like this
> {noformat}
> test, text using ,, escaped list delimiters
> test
> test
> {noformat}
> The value of demo.prop depends on the mechanism which was used to create the 
> Configuration-objects. 
> Using ConfigurationFactory gives the expected result: the list delimiters are 
> ignored as they are escaped by backslashes.
> Both attempts using a DefaultConfigurationBuilder fail; even changing the 
> List-delimiter and disabling delimiter-processing doesn't give the expected 
> result.
> One reason for the problem is the invocation of ConfigurationUtils.copy() 
> during internel processing. The method copies the value of the property from 
> one configuration into another. During insertion of the property, the value 
> of the property is split (StringUtils.split) a second time. Unfortunately the 
> escape-backslashes have already been removed, as a result of the first 
> invocation of StringUtils.split(), which happended during the initial parsing 
> of the file.  That's why the second split-invocation treats the value as list.
> I see two problems
> * the information about escape-characters is lost, copying a property from 
> one configuration into another gives different results
> * setListDelimiter() and setDelimiterParsingDisabled() don't work as expected

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