BeanUtilsBean.setProperty throws IllegalArgumentException if getter of nested property returns null ---------------------------------------------------------------------------------------------------
Key: BEANUTILS-411 URL: https://issues.apache.org/jira/browse/BEANUTILS-411 Project: Commons BeanUtils Issue Type: Bug Components: Bean / Property Utils Affects Versions: 1.8.3, 1.8.2, 1.8.1, 1.8.0 Environment: Apache Struts 1.3.10 (latest) uses commons-beanutils 1.8.0 Reporter: Marcus Zander The issue is like #BEANUTILS-331, BEANUTILS-339 where BeanUtils.populate() -> BeanUtilsBean.setProperty throws an IllegalArgumentException when it should not. error situation (see attached JUnitTest): BeanUtilsBean.setProperty(bean,"foo.bar", value) with a nested property "foo.bar" where bean.getFoo() returns null. Line 903 (in 1.8.0 -1.8.3) getPropertyUtils().getProperty(target, resolver.next(name)); returns null (because bean.getFoo() returns null) which is not handled correctly. The Exception is thrown in line 963 because target == null. expected: SetProperty should silently return like in the case the property does not exist. background: BeanUtils.populate(), BeanUtilsBean.setProperty are used by Struts to populate HTTP-Request-Parameters to form beans (form backing objects). The request sent by a browser when clicking a <input type="image" name="imgLink"...> contains parameters "imgLink.x" and "imgLink.y". These request parameters should not let to an error when populating to a bean which has the property "imgLink". The application should be able to process these parameters after bean populating, which is not possible now because populate fails. Test case to reproduce: public class BeanUtilsBeanTest extends TestCase { public void testSetProperty() throws Exception { DummyBean testBean = new DummyBean(); // nested==null BeanUtilsBean instance = new BeanUtilsBean(); /* fails with java.lang.IllegalArgumentException: No bean specified * Reason: getPropertyUtils().getProperty(target, resolver.next(name)); returnes null * because DummyBean.getImgLink() returns null */ instance.setProperty(testBean, "imgLink.x", "1"); } public class DummyBean { private String imgLink = null; // stays null public String getImgLink () { return imgLink; } public void setImgLink(String imgLink) { this.imgLink = imgLink; } } } suggestion for a fix: Return after line 903 if getProperty returns null and therefor target becomes null. -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira