[ https://issues.apache.org/jira/browse/BEANUTILS-411?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13585155#comment-13585155 ]
Benedikt Ritter commented on BEANUTILS-411: ------------------------------------------- Hi Marucus, we can fix this in 1.8.4. Can you create a SVN patch file against trunk containing your test and the proposed fix? TIA! Benedikt > 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.0, 1.8.1, 1.8.2, 1.8.3 > Environment: Apache Struts 1.3.10 (latest) uses commons-beanutils > 1.8.0 > Reporter: Marcus Zander > Labels: beanutil > > 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 For more information on JIRA, see: http://www.atlassian.com/software/jira