You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Benedikt Ritter (JIRA)" <ji...@apache.org> on 2013/03/03 14:17:12 UTC
[jira] [Resolved] (BEANUTILS-411) BeanUtilsBean.setProperty throws
IllegalArgumentException if getter of nested property returns null
[ https://issues.apache.org/jira/browse/BEANUTILS-411?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Benedikt Ritter resolved BEANUTILS-411.
---------------------------------------
Resolution: Fixed
Fixed in r1452036. Thanks for the report!
> 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
> Assignee: Benedikt Ritter
> Labels: beanutil
> Fix For: 1.8.4
>
>
> 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