commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Marcus Zander (Created) (JIRA)" <j...@apache.org>
Subject [jira] [Created] (BEANUTILS-411) BeanUtilsBean.setProperty throws IllegalArgumentException if getter of nested property returns null
Date Tue, 20 Mar 2012 13:31:37 GMT
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

        

Mime
View raw message