BeanUtils.populate throws an exception (INoSuchMethodException -> 
nvocationTargetException)  in case the bean is a nested class
-------------------------------------------------------------------------------------------------------------------------------

                 Key: BEANUTILS-341
                 URL: https://issues.apache.org/jira/browse/BEANUTILS-341
             Project: Commons BeanUtils
          Issue Type: Bug
          Components: Bean / Property Utils
    Affects Versions: 1.8.0
         Environment: jdk1.6
            Reporter: Ivan.Huang


BeanUtils.populate throws an exception (INoSuchMethodException -> 
nvocationTargetException) in case the bean is a nested class:

public class BeanUtilsTest extends TestCase {
        TestBean bean = null;
        Map<String, Object> params = null;

        @Override
        public void setUp() {
                bean = new TestBean();
                params = new HashMap<String, Object>();
        }
        
        public void testPopulate() {
                params.put("name", "Ivan");
                params.put("authentication", false);
                params.put("age", 24);
                try {
                        BeanUtils.populate(bean, params);
                } catch (Exception e) {
                        e.printStackTrace();
                }
                
                System.out.println(bean);
        }
        
        @Override
        public void tearDown() {
                this.bean = null;
                this.params = null;
        }
}

class TestBean {
        
        private String name;
        
        private int age;
        
        private boolean authenticated;
        
        public String getName() {
                return name;
        }
        
        public void setName(String name) {
                this.name = name;
        }
        
        public int getAge() {
                return age;
        }

        public void setAge(int age) {
                this.age = age;
        }

        public boolean isAuthenticated() {
                return authenticated;
        }
        
        public void setAuthenticated(boolean authenticated) {
                this.authenticated = authenticated;
        }
        
        @Override
        public String toString() {
                return ToStringBuilder.reflectionToString(this);
        }
}

java.lang.reflect.InvocationTargetException: Cannot set age
        at 
org.apache.commons.beanutils.BeanUtilsBean.setProperty(BeanUtilsBean.java:1017)
        at 
org.apache.commons.beanutils.BeanUtilsBean.populate(BeanUtilsBean.java:830)
        at org.apache.commons.beanutils.BeanUtils.populate(BeanUtils.java:433)
        at 
com.alibaba.apache.BeanUtils.BeanUtilsTest.testPopulate(BeanUtilsTest.java:32)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at junit.framework.TestCase.runTest(TestCase.java:168)
        at junit.framework.TestCase.runBare(TestCase.java:134)
        at junit.framework.TestResult$1.protect(TestResult.java:110)
        at junit.framework.TestResult.runProtected(TestResult.java:128)
        at junit.framework.TestResult.run(TestResult.java:113)
        at junit.framework.TestCase.run(TestCase.java:124)
        at junit.framework.TestSuite.runTest(TestSuite.java:232)
        at junit.framework.TestSuite.run(TestSuite.java:227)
        at 
org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:79)
        at 
org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:45)
        at 
org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
        at 
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
        at 
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
        at 
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
        at 
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
Caused by: java.lang.NoSuchMethodException: Property 'age' has no setter method 
in class 'class com.alibaba.apache.BeanUtils.TestBean'
        at 
org.apache.commons.beanutils.PropertyUtilsBean.setSimpleProperty(PropertyUtilsBean.java:2128)
        at 
org.apache.commons.beanutils.PropertyUtilsBean.setNestedProperty(PropertyUtilsBean.java:1948)
        at 
org.apache.commons.beanutils.PropertyUtilsBean.setProperty(PropertyUtilsBean.java:2054)
        at 
org.apache.commons.beanutils.BeanUtilsBean.setProperty(BeanUtilsBean.java:1015)
        ... 22 more
cn.edu.ccnu.ivan.apache.beanutils.testb...@17590db[name=<null>,age=0,authenticated=false]

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