如何(Java-)在Vert.x JavaScript中序列化Nashorn的JSObjects

时间:2017-12-20 16:23:11

标签: javascript java serialization vert.x nashorn

Vert.x JavaScript Verticle中,我尝试使用以下代码序列化JavaScript对象:

var o={"foo":"bar"};
var baos=new java.io.ByteArrayOutputStream();
var oos=new java.io.ObjectOutputStream(baos);
oos.writeObject(o);

但是,最后一行抛出以下异常:

java.io.NotSerializableException: jdk.nashorn.api.scripting.ScriptObjectMirror

查看 Nashorn 的API文档,似乎ScriptObjectMirror和已实现的JSObject接口未实现Serializable,因此序列化失败

是否有允许序列化这些对象的技巧或解决方法?

PS:我不想将它们序列化为JSON,因为我打算使用的主函数应该以相同的方式序列化所有Java对象。

其他信息:

  1. 我在Ubuntu 16.04上使用Vert.x 3.5和JVM 1.8.0_151(OpenJDK) 64位。
  2. 使用命令vertx run main.js --conf=cfg.json --redeploy="*.js" --launcher-class=io.vertx.core.Launcher启动JavaScript Verticle。

1 个答案:

答案 0 :(得分:0)

不,nashorn类不是Serializable,这是一个设计决策。您已经使用JSON来序列化nashorn脚本对象。