0

メッセージ内の元のペイロードを復元しようとしたときに、ラバメッセージの範囲に関して混乱するこの問題に遭遇しました。以下のミュール構成を考えると、最初は、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"はペイロードとして残ります。

ラバメッセージの範囲は何ですか?

ちなみに、スクリプトリファレンスドキュメントは、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.

何が問題になる可能性がありますか?

ありがとう

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 に答える