我刚刚意识到,当我在我的groovy脚本组件中定义变量时,Mule(3.4)用这个变量覆盖消息有效负载.
def variable = "bar";
Run Code Online (Sandbox Code Playgroud)
在流程到达带有此代码的Groovy组件后,有效负载将更改为"bar".
我该如何防止这种行为?
将Groovy组件放在一个更丰富的程序中似乎是一个解决方案,但是这个扩展器是一种"传输障碍",我必须手动更新每个单独的流变量和我在组件中更改的会话变量.这很容易出错.
完整的流程代码:
<flow name="test-groovyFlow" doc:name="test-groovyFlow">
<http:inbound-endpoint exchange-pattern="request-response" host="0.0.0.0" port="8081" doc:name="HTTP" path="test_groovy"/>
<set-payload value="foo" doc:name="payload = foo"/>
<scripting:component doc:name="do something">
<scripting:script engine="Groovy"><![CDATA[
def variable = "bar";
]]></scripting:script>
</scripting:component>
<scripting:transformer doc:name="Create Response">
<scripting:script engine="Groovy"><![CDATA[
new java.lang.String(
"payload: " + message.payload + "\n"
)
]]></scripting:script>
</scripting:transformer>
</flow>
Run Code Online (Sandbox Code Playgroud)
添加return payload或return message(取决于您是否要让消息或有效负载通过您的Groovy脚本)作为脚本的最后一行.
您看到的行为是因为赋值结果被视为脚本的返回结果.
| 归档时间: |
|
| 查看次数: |
3717 次 |
| 最近记录: |