[ 
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

Reply via email to