Как получить определение класса Groovy/ Java-класса в виде байта []

Я хотел бы проанализировать отличный DSL, обезвоживать листовое укупорочное средство, отправить его по сети и повторно гидратировать его на принимающей стороне.

Итак, учитывая этот пример фрагмента DSL:

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

Я разбираю сниплет с помощью GroovyShell и извлекаю замыкание, переданное code():

{
  println 'hello ${world}!'
}

Теперь я хочу отправить дегидратированное замыкание по сети и повторно его на принимающей стороне, используя объект, который предоставляет свойство world как владелец. Цель состоит в том, чтобы запустить замыкание и увидеть сообщение, распечатываемое в процессе сервера.

Я дошел до того, что у меня есть byte[] представляющий сериализованный обезвоженный Closure экземпляр в процессе получения, но десериализацию его с помощью ObjectInputStream терпит неудачу с ClassNotFoundException для бетона Closure подкласс (названный как-то script1$_run_closure1$_closure2$_closure11$_closure113$_closure120$_closure128$_closure129).

Таким образом, у меня была идея перенести определение класса замыканий (опять же, как byte[]) и использовать ClassLoaderObjectInputStream из обыкновенных вещей вместе с простыми ClassLoader что кормили с классом byte[] и что использует defineClass() создать Class объект для класса script1$_run_closure1$_closure2$_closure11$_closure113$_closure120$_closure128$_closure129,

К сожалению, я застрял здесь и не могу найти способ получить определение класса подкласса groovy closure (script1$_run_closure1$...) превращается в byte[], Есть ли способ добиться этого? Я копался в Google и GroovyShell источники, но это просто не представляется возможным. Пожалуйста, докажите, что я не прав!

0 ответов

Другие вопросы по тегам