You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Oliver Heger (JIRA)" <ji...@apache.org> on 2011/02/07 22:07:57 UTC

[jira] Resolved: (CONFIGURATION-432) ConfugrationConverter treats properties different by type

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

Oliver Heger resolved CONFIGURATION-432.
----------------------------------------

       Resolution: Fixed
    Fix Version/s: 1.7

A fix was applied in subversion, revision 1068130.

AbstractConfiguration now has a protected method {{isScalarValue()}} which is called by {{getList()}} and {{getStringArray()}}. If this method returns *true*, a list (or an array) with a single element is created with the value transformed to a string. {{isScalarValue()}} currently accepts the wrapper types for the primitive data types (e.g. Integer, Double, etc.). If other objects should be treated in the same way, the method can be overridden in a subclass.

A test case was added for {{ConfigurationConverter}} to verify that the changes on {{getList()}} solve the problem reported in this issue.

> ConfugrationConverter treats properties different by type
> ---------------------------------------------------------
>
>                 Key: CONFIGURATION-432
>                 URL: https://issues.apache.org/jira/browse/CONFIGURATION-432
>             Project: Commons Configuration
>          Issue Type: Bug
>          Components: Type conversion
>    Affects Versions: 1.6
>         Environment: Linux Ubuntu
>            Reporter: Mike Power
>            Assignee: Oliver Heger
>             Fix For: 1.7
>
>
> The ConfigurationConverter is behaving differently depending on if I added an int or a string to a configuration object.
> Consider the following code:
> 01       Configuration confInt = new BaseConfiguration();
> 02       Configuration confString = new BaseConfiguration();
> 03       confInt.setProperty("port", 80);
> 04       confString.setProperty("port", "80");
> 05       assertEquals(80, confInt.getInt("port"));
> 06       assertEquals(80, confString.getInt("port"));
> 07
> 08       Properties propString = ConfigurationConverter.getProperties(confString);
> 09       assertEquals("80", propString.getProperty("port"));
> 10
> 11       Properties propInt = ConfigurationConverter.getProperties(confInt);
> 12
> 13       assertEquals("80", propInt.getProperty("port"));
> As you can see the code is basically duplicated one set uses an int the other set uses a String.  However an exception blows out of line 11.
> 'port' doesn't map to a List object: 80, a java.lang.Integer
> org.apache.commons.configuration.ConversionException: 'port' doesn't map to a List object: 80, a java.lang.Integer
>         at org.apache.commons.configuration.AbstractConfiguration.getList(AbstractConfiguration.java:1144)
>         at org.apache.commons.configuration.AbstractConfiguration.getList(AbstractConfiguration.java:1109)
>         at org.apache.commons.configuration.ConfigurationConverter.getProperties(ConfigurationConverter.java:116) 
> I interpreted the interface to mean that everything up to and include line 13 would pass.

-- 
This message is automatically generated by JIRA.
-
For more information on JIRA, see: http://www.atlassian.com/software/jira