0

在尝试恢复消息中的原始有效负载时,我遇到了这个问题,这让我对 mule 消息的范围感到困惑。鉴于下面的 mule 配置,我最初假设在test.Namevm 端点收到的有效负载将在流程结束时恢复(请参阅配置中的 1. 和 2.):

<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"作为有效载荷离开。

mule 消息的范围是什么?

顺便说一句,脚本参考文档表明originalPayload在 groovy 脚本中有一个绑定。但是,如果将 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.

可能是什么问题?

谢谢

4

1 回答 1

1

除非通过浓缩器执行,否则任何出站交互都会影响当前的飞行消息。这就是对 replacePayloadWithFoo 的调用将原始消息替换为出站交互结果的原因。

这就是说,我无法解释以下之间的差异:

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

和:

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

因为他们都依赖:

event.getMessage().getPayload()
于 2012-05-03T15:46:40.723 回答