graaljs icon indicating copy to clipboard operation
graaljs copied to clipboard

"superclass access check failed" when attemting to load JSRuntime

Open bakkot opened this issue 2 years ago • 1 comments

JSRuntime.doubleToString(36893488147419103000.0, 10)

errors out with

Exception in thread "main" java.lang.IllegalAccessError: superclass access check failed: class com.oracle.truffle.js.runtime.GraalJSException (in unnamed module @0x6ce253f1) cannot access class com.oracle.truffle.api.exception.AbstractTruffleException (in module org.graalvm.truffle) because module org.graalvm.truffle does not export com.oracle.truffle.api.exception to unnamed module @0x6ce253f1
	at java.base/java.lang.ClassLoader.defineClass1(Native Method)
	at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1017)
	at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)
	at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:800)
	at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:698)
	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:621)
	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:579)
	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
	at java.base/java.lang.ClassLoader.defineClass1(Native Method)
	at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1017)
	at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)
	at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:800)
	at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:698)
	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:621)
	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:579)
	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
	at com.bakkot.graalissue.Main.main(Main.java:7)

Is JSRuntime not supposed to be public? If it is, is there a way to make this work? Note that the method I'm attempting to call cannot throw a GraalJSException (it can't throw at all, in fact).

If JSRuntime isn't supposed to be public, is there a way I could have known that (given that it's explicitly marked as public)? Is there a documented list of public classes or something?

bakkot avatar Aug 09 '22 00:08 bakkot

If JSRuntime isn't supposed to be public, is there a way I could have known that (given that it's explicitly marked as public)? Is there a documented list of public classes or something?

There is no JavaScript-specific Java API in GraalVM. All the Java classes in graal-js (like com.oracle.truffle.js.*) are implementation details and as such are not supposed to be used by graal-js clients directly. graal-js (like other language implementations in GraalVM) should be accessed using language-agnostic org.graalvm.* APIs, most notably org.graalvm.polyglot.Context/Value.

iamstolis avatar Aug 09 '22 07:08 iamstolis