[ 
https://issues.apache.org/jira/browse/LANG-1310?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15906584#comment-15906584
 ] 

Don Jeba commented on LANG-1310:
--------------------------------

The issue is because in the below line from method getVarArgs (in MethodUtils 
class)

System.arraycopy(args, methodParameterTypes.length - 1, varArgsArray, 0, 
varArgLength);

for the example shared in the ticket 
args is of type java.lang.Integer and varArgsArray is of type java.lang.Long

and hence the exception ArrayStoreException is thrown.

The reason for args to be of type java.lang.Integer is because at the top of 
the execution of invokeMethod, in the below line, when args is passed (which is 
nothing but 1 a primitive type) is considered as  java.lang.Integer and not 
primitive type int
final Class<?>[] parameterTypes = ClassUtils.toClass(args);

parameterTypes in this case is java.lang.Integer and not primitive type int.

This is the inference made on this so far.

Working on it further, will update the ticket with more details/fix.

> MethodUtils.invokeMethod throws ArrayStoreException
> ---------------------------------------------------
>
>                 Key: LANG-1310
>                 URL: https://issues.apache.org/jira/browse/LANG-1310
>             Project: Commons Lang
>          Issue Type: Bug
>          Components: lang.reflect.*
>    Affects Versions: 3.5
>            Reporter: Eickvonder
>
> Since release 3.5 and due to the changes of LANG-1115 an ArrayStoreException 
> occurs on MethodUtils.invokeMethod if using varargs arguments and smaller 
> types than the method defines (e.g. int vs long).
> {code}
>   @Test
>   public void testMethodUtilsInvokeMethodVarArgs () throws Exception {
>     MyObject object = new MyObject ();
>     MethodUtils.invokeMethod (object, "doSomething", 1);
>   }
>   public static class MyObject {
>     public void doSomething (long... args) {
>       System.out.println ("doSomething");
>     }
>   }
> {code}
> throws 
> {code}
> java.lang.ArrayStoreException
>       at java.lang.System.arraycopy(Native Method)
>       at 
> org.apache.commons.lang3.reflect.MethodUtils.getVarArgs(MethodUtils.java:497)
>       at 
> org.apache.commons.lang3.reflect.MethodUtils.toVarArgs(MethodUtils.java:463)
>       at 
> org.apache.commons.lang3.reflect.MethodUtils.invokeMethod(MethodUtils.java:234)
>       at 
> org.apache.commons.lang3.reflect.MethodUtils.invokeMethod(MethodUtils.java:270)
>       at 
> org.apache.commons.lang3.reflect.MethodUtils.invokeMethod(MethodUtils.java:147)
> {code}
> In 3.4. a NoSuchMethodException had been thrown, but in 3.5 the code now 
> finds the matching method but fails then with above exception.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to