【发布时间】:2012-09-18 21:19:48
【问题描述】:
在What JVM-based scripting language support @WebService to create services at runtime? 中,有人建议我使用 Groovy 来提供在运行时读取的脚本中配置的 Web 服务。
为了使这项工作与我们现有的基础设施一起工作,我基本上需要能够向List<Callable<String>> 添加新条目,然后我可以要求执行程序对其进行调用。
基本结构如下:
- 使用
GroovyScriptEngine嵌入 Groovy - 在传入的绑定中作为“l”从 Java 传入的初始列表。
- Groovy 脚本定义并实例化 N 个对象,均实现
Callable<String>并将它们添加到列表中。 - 在 Java 中,列表会被进一步处理,然后传递给执行程序。
我最初的微弱步骤表明我很可能需要使用def c = { ... } as Callable<String>,但随后我得到了 ClassCastException。阅读起来,我发现这似乎有点困难,并且涉及到闭包。
在实现Callable<String> 的 Groovy 中定义和实例化对象的正确方法是什么?
【问题讨论】:
-
您使用的是什么版本的 Groovy? Closure 已经在 Groovy 1.8 及更高版本中实现了 Callable。
-
@IanRoberts 我从 Maven 中提取了 groovy-all-1.0-jsr-05,它似乎是最新的。
org.codehaus.groovy.runtime.InvokerHelper.getVersion()报告“1.0-jsr-05”。我应该使用其他东西吗? -
那是相当古老的 TBH。
org.codehaus.groovy:groovy-all:2.0.2是最新的。 -
我更新了,现在脚本可以工作了。您能否发表一个我可以接受的答案?