commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Oliver Heger (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (CONFIGURATION-546) ClassCastException in BeanHelper constructing beans with a list of child beans
Date Mon, 10 Jun 2013 19:32:20 GMT

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

Oliver Heger commented on CONFIGURATION-546:
--------------------------------------------

Thank you for this contribution!

Is there any chance you can provide the new functionality as patches (see http://commons.apache.org/patches.html)?
This makes it easier to detect the actual changes.
                
> ClassCastException in BeanHelper constructing beans with a list of child beans
> ------------------------------------------------------------------------------
>
>                 Key: CONFIGURATION-546
>                 URL: https://issues.apache.org/jira/browse/CONFIGURATION-546
>             Project: Commons Configuration
>          Issue Type: Bug
>          Components: Type conversion
>    Affects Versions: 1.8, 1.9
>            Reporter: Justin Couch
>            Priority: Minor
>         Attachments: BeanCreationTestBeanWithListChild.java, BeanCreationTestBeanWithListChild.java,
BeanHelper.java, TestBeanHelper.java, TestBeanHelper.java
>
>
> If you wish to create a bean that has a collection as a property where that collection
contains multiple beans, the code crashes as it assumes that you can only ever have single
bean declarations as children. 
> For example the following brief construct is not possible to build
> class A {
>    String name;
> }
> class B {
>    List<A> children;
> }
> The result is the following stack trace 
> Caused by: java.lang.ClassCastException: java.util.ArrayList cannot be cast to org.apache.commons.configuration.beanutils.BeanDeclaration
> 	at org.apache.commons.configuration.beanutils.BeanHelper.initBean(BeanHelper.java:212)
> 	at org.apache.commons.configuration.beanutils.TestBeanHelper$TestBeanFactory.createBean(TestBeanHelper.java:579)
> 	at org.apache.commons.configuration.beanutils.BeanHelper.createBean(BeanHelper.java:342)
> 	... 33 more
> It's pretty easy to see why when you look at the code beginning line 208:
>   for (Map.Entry<String, Object> e : nestedBeans.entrySet())
>   {
>      String propName = e.getKey();
>      Class<?> defaultClass = getDefaultClass(bean, propName);
>      initProperty(bean, propName, createBean(
>  	   (BeanDeclaration) e.getValue(), defaultClass));
>   }
>  
> Note the silly assumption that e.getValue() only ever has BeanDeclaration instances,
where it could be BeanDeclaration[], or Collection<BeanDeclaration> as other possible
options - which is what the above example show. 
> Extended version of the existing unit test to follow that illustrates the problem.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Mime
View raw message