You'll get java.dyn.NoAccessException in more generic cases too, i.e. if. 
MethodHandles.findStatic/Virtual/Special fails to find a method of the expected 
signature etc.

Attila.

On 2010.03.25., at 16:23, [email protected] wrote:

> Dear list,
> 
> I have just started playing with classes from the "java.dyn" package and am
> a bit puzzled about the exact causes of a "java.dyn.NoAccessException" 
> exception.
> 
> At some point, a "java.dyn.MethodHandle" is built from a 
> "java.lang.reflect.Method"
> instance, and later "invokeGeneric(-)" is called on this very handle. This 
> works as
> expected on the tiny sample code reproduced at the end of this mail, but 
> fails in
> the whole application. The thing that puzzles me is that before the changes I 
> used
> the classical reflection and "invoke(-)" on the "java.lang.reflect.Method" 
> instance
> with no problem. This would lead me to the conclusion that there should be no
> access problem.
> 
> Thus, at the end of day, my question is the following: is there any 
> difference between
> "java.lang.reflect.Method" and "java.dyn.MethodHandle" concerning access 
> checks
> for an invocation ? The only bit of information about access checks I was 
> able to find
> just states that checks are done at creation time rather than at invocation 
> time.
> This reinforces my difficulties to understand how a properly created handle 
> could
> actually raise an access exception at invocation.
> 
> For the record, I should state that I use the build labeled 
> "java-1.7.0-internal-2010_03_07"
> for MacOS X under Snow Leopard.
> 
> 
> Thanks for any hint,
> 
> Xavier Clerc
> 
> ---
> package p;
> 
> import java.dyn.*;
> import java.lang.reflect.*;
> 
> public class T {
> 
>       public static void greet(String s) { System.out.printf("hello %s.\n", 
> s); }
> 
>       public static void main(String[] args) throws Throwable {
>               Method m = T.class.getMethod("greet", String.class);
>               MethodHandle h = MethodHandles.lookup().unreflect(m);
>               h.invokeGeneric("first");
>       }
> 
> }

-- 
You received this message because you are subscribed to the Google Groups "JVM 
Languages" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/jvm-languages?hl=en.

Reply via email to