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

Bruno P. Kinoshita commented on CONFIGURATION-684:
--------------------------------------------------

Hi Fabien,

I believe the YAML parsing is handled by SnakeYAML. I confirmed I can use your 
`file.yml` with SnakeYAML with no issues.

Actually, debugging your example (thank you a lot for including code sample) it 
looks like the issue happens here 
https://github.com/apache/commons-configuration/blob/a56ce4f20db01c3de9faabc5ee10db19113e83cd/src/main/java/org/apache/commons/configuration2/tree/DefaultConfigurationKey.java#L530

When we enter that method, the value of the `key` argument is still 
`some.key.with.dots`. But the default list of symbols to be escaped has a `.` 
(dot). So it gets escaped by a `..` (two dots).

I could not find any note about it in the [2.x 
documentation|http://commons.apache.org/proper/commons-configuration/userguide/howto_properties.html#Special_Characters_and_Escaping],
 but the [1.x 
documentation|https://commons.apache.org/proper/commons-configuration/userguide_v1.10/howto_xml.html]
 contains some useful information.

{quote}
# From the Escaping special characters section
Per default the dot character is used as delimiter by most configuration 
classes (we will learn how to change this for hierarchical configurations in a 
later section). In some configuration formats however, dots can be contained in 
the names of properties. For instance, in XML the dot is a legal character that 
can occur in any tag. The same is true for the names of properties in windows 
ini files
{quote}

I think it is sensible to use this default behaviour for most configuration 
types, and it is good to have that documented. However, I think it is possible 
to have a configuration key for YAML, that allows keys to use dot without 
escaping it.

So IMO we leave the ticket open until someone can work on a new configuration 
key. How does that sound Fabien?

Cheers
Bruno

> YAMLConfiguration keys with double dots
> ---------------------------------------
>
>                 Key: CONFIGURATION-684
>                 URL: https://issues.apache.org/jira/browse/CONFIGURATION-684
>             Project: Commons Configuration
>          Issue Type: Bug
>            Reporter: Fabien Renaud
>
> h2. Issue
> Loading a YAML configuration with dotted keys causes dots to be duplicated in 
> the keys of the YAMLConfiguration object.
> h2. Repro
> 100% repro:
> file.yml:
> {code}some.key.with.dots: 123{code}
> {code}
> package foo;
> import org.apache.commons.configuration2.YAMLConfiguration;
> import 
> org.apache.commons.configuration2.builder.FileBasedConfigurationBuilder;
> import org.apache.commons.configuration2.builder.fluent.Parameters;
> import org.apache.commons.configuration2.ex.ConfigurationException;
> public class App {
>     public static void main(String[] args) throws ConfigurationException {
>         Parameters params = new Parameters();
>         FileBasedConfigurationBuilder<YAMLConfiguration> builder1 =
>                 new FileBasedConfigurationBuilder<>(YAMLConfiguration.class)
>                         
> .configure(params.fileBased().setFileName("file.yml"));
>         
>         YAMLConfiguration conf = builder1.getConfiguration();
>         conf.getKeys().forEachRemaining(System.out::println);
>         System.out.println("---");
>         YAMLConfiguration yaml = new YAMLConfiguration();
>         yaml.read(new 
> InputStreamReader(ClassLoader.getSystemResourceAsStream("file.yml")));
>         yaml.getKeys().forEachRemaining(System.out::println);
>     }
> }
> {code}
> prints
> {code}some..key..with..dots
> ---
> some..key..with..dots
> {code}
> That is a serious bug for a configuration system. The issue may easily go 
> untested for some keys and only reveal itself on production.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to