Hi, On Tue, Apr 28, 2020 at 7:34 PM Mandy Chung <mandy.ch...@oracle.com> wrote: > endPointClass is in unnamed module and so it's unconditionally exported. The > public lookup should be able to find public members from it. One thing to > double check if endPointClass is publicly accessible?
It is. > Did you get any exception in 14? Is it from findVirtual or from in? >From findVirtual(): Exception in thread "main" java.lang.IllegalAccessException: no such method: org.module1.MyEndPoint.onMessage(MyString)void/invokeVirtual at java.base/java.lang.invoke.MemberName.makeAccessException(MemberName.java:971) at java.base/java.lang.invoke.MemberName$Factory.resolveOrFail(MemberName.java:1114) at java.base/java.lang.invoke.MethodHandles$Lookup.resolveOrFail(MethodHandles.java:2785) at java.base/java.lang.invoke.MethodHandles$Lookup.findVirtual(MethodHandles.java:1883) at org.module2.Main.main(Main.java:28) Caused by: java.lang.LinkageError: loader constraint violation: when resolving method 'void org.module1.MyEndPoint.onMessage(org.module1.MyString)' the class loader 'bootstrap' of the current class, java/lang/Object, and the class loader java.net.URLClassLoader @7291c18f for the method's defining class, org/module1/MyEndPoint, have different Class objects for the type org/module1/MyString used in the signature (java.lang.Object is in module java.base of loader 'bootstrap'; org.module1.MyEndPoint is in unnamed module of loader java.net.URLClassLoader @7291c18f, parent loader 'app') at java.base/java.lang.invoke.MethodHandleNatives.resolve(Native Method) at java.base/java.lang.invoke.MemberName$Factory.resolve(MemberName.java:1084) at java.base/java.lang.invoke.MemberName$Factory.resolveOrFail(MemberName.java:1111) ... 3 more > The current implementation already does that. > > private Class<?> lookupClassOrNull() { > if (allowedModes == TRUSTED) { > return null; > } > if (allowedModes == UNCONDITIONAL) { > // use Object as the caller to pass to VM doing resolution > return Object.class; > } > return lookupClass; > } > > What exactly have you changed? if (allowedModes == UNCONDITIONAL) { return lookupClass; } > Yes, please file a JBS issue and I will look into it. If the requested > target class to be accessed through Lookup::in is exported, it should work > because the set of classes that public lookups can access should not change. https://bugs.openjdk.java.net/browse/JDK-8244090 Thanks! -- Simone Bordet --- Finally, no matter how good the architecture and design are, to deliver bug-free software with optimal performance and reliability, the implementation technique must be flawless. Victoria Livschitz