groovy-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jochen Theodorou <blackd...@gmx.org>
Subject Re: Followup: java.lang.IllegalArgumentException, Groovy 2.4.7, _might_ be caused by Java 8
Date Tue, 01 Aug 2017 13:02:52 GMT


On 30.07.2017 23:26, OC wrote:
> Hi there again,
>
> On 30. 7. 2017, at 21:16, ocs@ocs.cz wrote:
>> I have got the following code (part of a big project):
>> ===
>> class AuctionTable extends SecureComponent {
>>    public AuctionTable(WOContext context) {
>>        super(context)
>>        showClosedAuctions=... some expression ... // the fail line 8, see please
below
>> ... ...
>>    }
>>    boolean showClosedAuctions
>> ... ...
>> ===
>
> it looks like an explicit type-cast, i.e.,

I am not really having enough information to be sure, but I can say what 
it looks like it me (though not why that should be different in 8 and 7)

Your method call was done using Reflection and an invoke method, which 
takes an Object[] for the arguments. Obviously the method we call will 
have typed parameters, so what happens if the argument runtime types and 
the parameter types do not fit together? You get the mentioned 
IllegalArgumentException.

[...]
>> ...
>> Caused by: java.lang.IllegalArgumentException
>> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>> 	at java.lang.reflect.Method.invoke(Method.java:497)
>> 	at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93)
>> 	at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325)
>> 	at groovy.lang.MetaClassImpl.setProperty(MetaClassImpl.java:2705)
>> 	at groovy.lang.ExpandoMetaClass.setProperty(ExpandoMetaClass.java:1185)
>> 	at groovy.lang.MetaClassImpl.setProperty(MetaClassImpl.java:3747)
>> 	at components.sharedcode.OCSComponent.setProperty(OCSComponent.groovy)
>> 	at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.setGroovyObjectProperty(ScriptBytecodeAdapter.java:532)
>> 	at components.sharedparts.AuctionTable.<init>(AuctionTable.groovy:8)

ExpandoMetaClass. setProperty is use┬žd to resolve the assignment you 
mentioned. This most likely calls an existing setter method or some 
other java method, that handles the call (CachedMethod.invoke) and it 
does at least the first such call using Reflection (Method.invoke and 
all the MethodAccessor things)

bye Jochen

Mime
View raw message