WSO2 ESB 无法 运行 Groovy 脚本存储在注册表中

WSO2 ESB Can't run Groovy script stored in registry

我正在尝试执行存储在 WSO2 ESB 本地注册表中的 Groovy 脚本。当我这样做时,出现以下错误:

错误 {org.apache.synapse.mediators.bsf.ScriptMediator} - 脚本引擎在执行外部 groovy 脚本时返回了 NoSuchMethodException:值 {name ='null',keyValue ='file:Scripts/Groovy/test.groovy'} 函数调解 {org.apache.synapse.mediators.bsf.ScriptMediator}
java.lang.NoSuchMethodException:没有方法签名:com.sun.script.groovy.GroovyScriptEngine.mediate() 适用于参数类型:(org.apache.synapse.mediators.bsf.ScriptMessageContext) 值:[org.apache.synapse.mediators.bsf.ScriptMessageContext@716f8a10]
可能的解决方案:wait()

如果我将代码内联到脚本调解器中,一切都会 运行 正常。 我尝试像这样 <x><![CDATA[...code...]]></x> 包装脚本代码,如使用 Ruby 脚本进行中介示例所示: Sample 353: Using Ruby Scripts for Mediation。我也将 groovy-all-2.4.7.jar 添加到 ESB_HOME\repository\components\lib

如何 运行 将 groovy 脚本存储在注册表中?我究竟做错了什么?

这是我正在测试的 Groovy 脚本和代理:

Groovy 脚本

class Example {
   static def DisplayName() {
      println("This is how methods work in groovy");
      println("This is an example of a simple method");
   } 

   static void main(String[] args) {
      DisplayName();
   } 
}

代理服务

<proxy name="TestScriptProxy" startOnLoad="true" trace="disable"
  transports="http https" xmlns="http://ws.apache.org/ns/synapse">
  <target>
    <inSequence>
      <script language="groovy"><![CDATA[println "This is an in-line script";]]></script>
      <script function="DisplayName"
        key="file:Scripts/Groovy/test.groovy" language="groovy"/>
    </inSequence>
    <outSequence/>
    <faultSequence/>
  </target>
</proxy>

ESB 版本是 5.0.0 运行宁 Windows 10.

如果您在注册表中有 Groovy 脚本,源应该是注册表路径。例如:gov:scripts/Groovy/test.groovy

如果您引用文件,请提供相对于 ESB_HOME 的路径。例如,如果脚本文件夹位于 ESB_HOME 目录中,则 file:scripts/Groovy/test.groovy

首先加载如下脚本文件:

<localEntry key="DisplayNameScript" src="file:scripts/Groovy/test.groovy"/>

现在调用函数

<script language="groovy" key="DisplayNameScript" function="DisplayName"/>