Justin Couch created CONFIGURATION-546:
------------------------------------------

             Summary: 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.9, 1.8
            Reporter: Justin Couch
            Priority: Minor


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

Reply via email to