commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Don Jeba (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (LANG-1310) MethodUtils.invokeMethod throws ArrayStoreException
Date Sun, 12 Mar 2017 16:36:04 GMT

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

Mime
View raw message