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"/>
我正在尝试执行存储在 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"/>