2012-05-03 37 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'之间的这种差异打开一个新的问题,这是值得更深入的了解。 –