java - Mule:防止 groovy 组件覆盖 payload

标签 java groovy mule

我刚刚意识到,当我在我的 groovy 脚本组件中定义一个变量时,Mule (3.4) 会用这个变量覆盖消息负载。

def variable = "bar";

在流到达带有此代码的 Groovy 组件后,有效负载更改为“bar”。

如何防止这种行为?

将 Groovy 组件放置在 enricher 中似乎是一个解决方案,但 enricher 是一种“传输障碍”,我必须手动更新我在组件中更改的每个流变量和 session 变量。这很容易出错。

完整流程代码:

<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>

最佳答案

添加return payloadreturn message(取决于您是想让消息还是payload 通过您的Groovy 脚本)作为脚本的最后一行。

您看到的行为是因为赋值结果被作为脚本的返回结果。

关于java - Mule:防止 groovy 组件覆盖 payload,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21286069/

相关文章:

java - 在 java|groovy 中将字符串放入列表的正确方法

XPath _relative_ 到 HTMLUnit/Groovy 中的给定元素?

groovy - 如何在 Spock 中断言列表仅包含某个特定元素?

Mule 表达语言 MEL 与 MVEL - 同样的事情?

java - 如何调用从 Java 获取二维字符串数组的 Clojure 函数?

java - 已删除的实体传递给持久异常

java - 识别指纹时使用Intent

groovy - 如何从 Mule 3.5 中的 Groovy 脚本访问属性文件中的值

hibernate - 出现错误无法在 Mule Studio 中加载 JDBC 驱动程序类 [oracle.jdbc.OracleDriver]

java - 是否可以不安全地访问 JVM 未使用的对象?