2012-05-03 35 views
0

在試圖恢復郵件中的原始有效內容時,我遇到了這個問題,它使我對關於騾郵件範圍感到困惑。下面給出的騾配置,我最初假定在test.Name VM端點接收所述有效載荷打算在流結束時被恢復(見1和2在config):騾信息的範圍是什麼?

<mule ...>  
    <vm:endpoint name="replacePayloadWithFoo.Name" 
      path="replacePayloadWithFoo.Path" /> 

    <flow name="test"> 
     <vm:inbound-endpoint name="test.Name" path="test.Path" 
      exchange-pattern="request-response" /> 

     <!-- 1. Down below, I wanted to restore the payload at this point --> 

     <expression-transformer evaluator="string" 
      expression="bar" /> 

     <outbound-endpoint ref="replacePayloadWithFoo.Name" 
      exchange-pattern="request-response" /> 

     <!-- 2. The transformer below does not restore the payload at 1. -->    

     <expression-transformer evaluator="groovy" 
       expression="message.originalPayload" /> 
    </flow> 

    <flow name="replacePayloadWithFoo"> 
     <inbound-endpoint ref="replacePayloadWithFoo.Name" 
      exchange-pattern="request-response" /> 

     <expression-transformer evaluator="string" 
      expression="foo" /> 

    </flow> 

</mule> 

然而,似乎進入test流程的消息在出站端點處結束於replacePayloadWithFoo。 2.處的變壓器將"foo"作爲有效負載。

騾訊息的範圍是什麼?

順便提一下,scripting reference documentation表示在groovy腳本中存在對originalPayload的綁定。然而,如果在2變壓器替換

<expression-transformer evaluator="groovy" expression="originalPayload" /> 

我得到一個異常:

org.mule.api.expression.RequiredValueException: Expression Evaluator "groovy" 
with expression "originalPayload" returned null but a value was required. 

可能是什麼問題?

由於

回答

1

任何出站相互作用,除非通過執行富集,會影響當前的飛行中的消息。這就是爲什麼對replacePayloadWithFoo的調用將原始消息替換爲出站交互的結果。

此說,我無法解釋之間的差異:

<expression-transformer evaluator="groovy" expression="message.originalPayload" /> 

和:

<expression-transformer evaluator="groovy" expression="originalPayload" /> 

,因爲它們都依賴於:

event.getMessage().getPayload() 
+0

非常感謝!你搖滾!你能指出一個文檔頁面來詳細說明消息範圍的主題嗎?關於originalPayload的問題,您是否希望我發佈一個示例來幫助重現它? – beluchin

+0

我想不出任何文檔頁面:消息範圍:(是的,請爲'message.originalPayload'和'originalPayload'之間的這種差異打開一個新的問題,這是值得更深入的瞭解。 –