[ 
https://issues.apache.org/jira/browse/BEANUTILS-408?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Benedikt Ritter updated BEANUTILS-408:
--------------------------------------

    Description: 
When you invoke MethodUtils.invokeExactMethod(object, methodName, args) with 
args==null you get a NullPointerException: 

java.lang.NullPointerException 
at 
org.apache.commons.beanutils.MethodUtils.invokeExactMethod(MethodUtils.java:352)
at 
org.apache.commons.beanutils.MethodUtils.invokeExactMethod(MethodUtils.java:315)
... 


Reason is: public static Object invokeExactMethod(Object object, String 
methodName, Object arg) gets invoked (see r. 305 below) and the null wrapped 
into an array before invoking public static Object invokeExactMethod(Object 
object, String methodName, Object[] args); 



286 /** 
287 * <p>Invoke a method whose parameter type matches exactly the object 
288 * type.</p> 
289 * 
290 * <p> This is a convenient wrapper for 
291 * {@link #invokeExactMethod(Object object,String methodName,Object [] 
args)}. 
292 * </p> 
293 * 
294 * @param object invoke method on this object 
295 * @param methodName get method with this name 
296 * @param arg use this argument 
297 * @return The value returned by the invoked method 
298 * 
299 * @throws NoSuchMethodException if there is no such accessible method 
300 * @throws InvocationTargetException wraps an exception thrown by the 
301 * method invoked 
302 * @throws IllegalAccessException if the requested method is not accessible 
303 * via reflection 
304 */ 
305 public static Object invokeExactMethod( 
306 Object object, 
307 String methodName, 
308 Object arg) 
309 throws 
310 NoSuchMethodException, 
311 IllegalAccessException, 
312 InvocationTargetException { 
313 
314 Object[] args = {arg}; 
315 return invokeExactMethod(object, methodName, args); 
316 
317 } 
318 
319 
320 /** 
321 * <p>Invoke a method whose parameter types match exactly the object 
322 * types.</p> 
323 * 
324 * <p> This uses reflection to invoke the method obtained from a call to 
325 * <code>getAccessibleMethod()</code>.</p> 
326 * 
327 * @param object invoke method on this object 
328 * @param methodName get method with this name 
329 * @param args use these arguments - treat null as empty array 
330 * @return The value returned by the invoked method 
331 * 
332 * @throws NoSuchMethodException if there is no such accessible method 
333 * @throws InvocationTargetException wraps an exception thrown by the 
334 * method invoked 
335 * @throws IllegalAccessException if the requested method is not accessible 
336 * via reflection 
337 */ 
338 public static Object invokeExactMethod( 
339 Object object, 
340 String methodName, 
341 Object[] args) 
342 throws 
343 NoSuchMethodException, 
344 IllegalAccessException, 
345 InvocationTargetException { 
346 if (args == null) { 
347 args = EMPTY_OBJECT_ARRAY; 
348 } 
349 int arguments = args.length; 
350 Class[] parameterTypes = new Class[arguments]; 
351 for (int i = 0; i < arguments; i++) { 
352 parameterTypes[i] = args[i].getClass(); 
353 } 
354 return invokeExactMethod(object, methodName, args, parameterTypes); 
355 
356 }

  was:ConstructorUtils.invokeConstructor(Class klass, Object arg) can not 
handle null passed as arg. It should check if arg is null and then simply pass 
null to ConstructorUtils.invokeConstructor(Class klass, Object[] args) which 
will result in calling the default constructor.

    
> MethodUtils.invokeSetterMethods() throws NullPointerException when args==null
> -----------------------------------------------------------------------------
>
>                 Key: BEANUTILS-408
>                 URL: https://issues.apache.org/jira/browse/BEANUTILS-408
>             Project: Commons BeanUtils
>          Issue Type: Bug
>          Components: Bean / Property Utils
>    Affects Versions: 1.8.3
>         Environment: Using Beanutils 1.8.3
>            Reporter: Federico Carbonetti
>             Fix For: 1.8.4
>
>
> When you invoke MethodUtils.invokeExactMethod(object, methodName, args) with 
> args==null you get a NullPointerException: 
> java.lang.NullPointerException 
> at 
> org.apache.commons.beanutils.MethodUtils.invokeExactMethod(MethodUtils.java:352)
> at 
> org.apache.commons.beanutils.MethodUtils.invokeExactMethod(MethodUtils.java:315)
> ... 
> Reason is: public static Object invokeExactMethod(Object object, String 
> methodName, Object arg) gets invoked (see r. 305 below) and the null wrapped 
> into an array before invoking public static Object invokeExactMethod(Object 
> object, String methodName, Object[] args); 
> 286 /** 
> 287 * <p>Invoke a method whose parameter type matches exactly the object 
> 288 * type.</p> 
> 289 * 
> 290 * <p> This is a convenient wrapper for 
> 291 * {@link #invokeExactMethod(Object object,String methodName,Object [] 
> args)}. 
> 292 * </p> 
> 293 * 
> 294 * @param object invoke method on this object 
> 295 * @param methodName get method with this name 
> 296 * @param arg use this argument 
> 297 * @return The value returned by the invoked method 
> 298 * 
> 299 * @throws NoSuchMethodException if there is no such accessible method 
> 300 * @throws InvocationTargetException wraps an exception thrown by the 
> 301 * method invoked 
> 302 * @throws IllegalAccessException if the requested method is not 
> accessible 
> 303 * via reflection 
> 304 */ 
> 305 public static Object invokeExactMethod( 
> 306 Object object, 
> 307 String methodName, 
> 308 Object arg) 
> 309 throws 
> 310 NoSuchMethodException, 
> 311 IllegalAccessException, 
> 312 InvocationTargetException { 
> 313 
> 314 Object[] args = {arg}; 
> 315 return invokeExactMethod(object, methodName, args); 
> 316 
> 317 } 
> 318 
> 319 
> 320 /** 
> 321 * <p>Invoke a method whose parameter types match exactly the object 
> 322 * types.</p> 
> 323 * 
> 324 * <p> This uses reflection to invoke the method obtained from a call to 
> 325 * <code>getAccessibleMethod()</code>.</p> 
> 326 * 
> 327 * @param object invoke method on this object 
> 328 * @param methodName get method with this name 
> 329 * @param args use these arguments - treat null as empty array 
> 330 * @return The value returned by the invoked method 
> 331 * 
> 332 * @throws NoSuchMethodException if there is no such accessible method 
> 333 * @throws InvocationTargetException wraps an exception thrown by the 
> 334 * method invoked 
> 335 * @throws IllegalAccessException if the requested method is not 
> accessible 
> 336 * via reflection 
> 337 */ 
> 338 public static Object invokeExactMethod( 
> 339 Object object, 
> 340 String methodName, 
> 341 Object[] args) 
> 342 throws 
> 343 NoSuchMethodException, 
> 344 IllegalAccessException, 
> 345 InvocationTargetException { 
> 346 if (args == null) { 
> 347 args = EMPTY_OBJECT_ARRAY; 
> 348 } 
> 349 int arguments = args.length; 
> 350 Class[] parameterTypes = new Class[arguments]; 
> 351 for (int i = 0; i < arguments; i++) { 
> 352 parameterTypes[i] = args[i].getClass(); 
> 353 } 
> 354 return invokeExactMethod(object, methodName, args, parameterTypes); 
> 355 
> 356 }

--
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