如何获取groovy / java类的类定义作为byte []

时间:2017-07-20 20:49:34

标签: java groovy jvm-bytecode classloading

我想解析一个时髦的DSL,给叶子脱水脱水,通过网络发送它并在接收端重新水合。

所以给出了这个示例DSL sniplet:

something {
  title 'hello'
  code {
     println 'hello ${world}!'
  }
}

我正在使用GroovyShell解析sniplet并提取传递给code()的闭包:

{
  println 'hello ${world}!'
}

现在我想通过网络发送脱水封闭物,并使用提供属性world作为拥有者的对象在接收端重新水化它。目的是运行闭包,并在服务器进程中查看正在打印的消息。

我得到了byte[]代表接收过程中序列化的脱水Closure实例,但使用ObjectInputStream对其进行反序列化失败并显示ClassNotFoundException对于具体的Closure子类(命名为script1$_run_closure1$_closure2$_closure11$_closure113$_closure120$_closure128$_closure129)。

所以我有想法也转移关闭'类定义(同样,作为byte[])并使用来自commons-io的ClassLoaderObjectInputStream以及使用类ClassLoader并使用{{1}的简单byte[]为类defineClass()创建Class对象。

不幸的是我被困在这里,无法找到一种方法来将groovy闭包子类(script1$_run_closure1$_closure2$_closure11$_closure113$_closure120$_closure128$_closure129)的类定义转换为script1$_run_closure1$...。有没有办法实现这个目标?我已经挖掘了谷歌和byte[]来源,但它似乎不可能。请证明我错了!

0 个答案:

没有答案