在GraalVM中从Java调用wasm代码时如何使用回调

在GraalVM中从Java调用wasm代码时如何使用回调,java,webassembly,graalvm,Java,Webassembly,Graalvm,跟随 我尝试使用回调返回到Java代码中 编译成示例.wasm: #[无损坏] 酒吧外间fn问候(打印:外间fn(u8)){ 印刷品(42) } 使用GraalVM polyglot API嵌入WASM的Java代码: byte[]binary=readBytes(“example.wasm”); Context.Builder contextBuilder=Context.newBuilder(“wasm”); Source.Builder sourceBuilder=Source.newB

跟随 我尝试使用回调返回到Java代码中

编译成
示例.wasm

#[无损坏]
酒吧外间fn问候(打印:外间fn(u8)){
印刷品(42)
}
使用GraalVM polyglot API嵌入WASM的Java代码:

byte[]binary=readBytes(“example.wasm”);
Context.Builder contextBuilder=Context.newBuilder(“wasm”);
Source.Builder sourceBuilder=Source.newBuilder(“wasm”,ByteSequence.create(二进制),“example”);
Source=sourceBuilder.build();
Context=contextBuilder.build();
context.eval(来源);
消费者打印=(Value val)->System.out.println(“调用的回调:“+val”);
Value greetFunction=context.getBindings(“wasm”).getMember(“main”).getMember(“greet”);
greetFunction.execute(打印);
但是,运行此程序时,我会遇到以下异常:

Exception in thread "main" java.lang.reflect.InvocationTargetException
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49)
    at org.springframework.boot.loader.Launcher.launch(Launcher.java:108)
    at org.springframework.boot.loader.Launcher.launch(Launcher.java:58)
    at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:88)
Caused by: org.graalvm.polyglot.PolyglotException: java.lang.ClassCastException: class com.oracle.truffle.polyglot.HostObject cannot be cast to class java.lang.Integer (com.oracle.truffle.polyglot.HostObject is in module org.graalvm.truffle of loader 'app'; java.lang.Integer is in module java.base of loader 'bootstrap')
    at org.graalvm.wasm.nodes.WasmRootNode.moveArgumentsToLocals(WasmRootNode.java:173)
    at org.graalvm.wasm.nodes.WasmRootNode.executeWithContext(WasmRootNode.java:122)
    at org.graalvm.wasm.nodes.WasmRootNode.execute(WasmRootNode.java:103)
    at <wasm>.greet(Unknown)
    at org.graalvm.sdk/org.graalvm.polyglot.Value.execute(Value.java:834)
    at org.example.wasmhost.WasmHostApplication.main(WasmHostApplication.java:57)
    ... 8 more
$ java -version
openjdk version "11.0.11" 2021-04-20
OpenJDK Runtime Environment GraalVM CE 21.1.0 (build 11.0.11+8-jvmci-21.1-b05)
OpenJDK 64-Bit Server VM GraalVM CE 21.1.0 (build 11.0.11+8-jvmci-21.1-b05, mixed mode, sharing)