2014-01-22 28 views
4

我剛剛意識到,當我在我的groovy腳本組件中定義一個變量時,Mule(3.4)會用此變量覆蓋消息負載。Mule:防止groovy組件覆蓋有效載荷

def variable = "bar"; 

使用此代碼到達Groovy組件後,有效負載將更改爲「bar」。

如何防止此行爲?

要將Groovy組件放置在一個richter中似乎是一個解決方案,但是這個richter是一種「傳輸障礙」,我必須手動更新組件中每個流變量和會話變量。這是容易出錯的。

完整流程代碼:

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

回答

8

添加return payloadreturn message(取決於您是否想讓消息或有效載荷通過你的Groovy腳本去)作爲腳本的最後一行。

您看到的行爲是因爲賦值結果作爲腳本的返回結果。