メッセージ内の元のペイロードを復元しようとしたときに、ラバメッセージの範囲に関して混乱するこの問題に遭遇しました。以下のミュール構成を考えると、最初は、test.Name
vmエンドポイントで受信したペイロードがフローの最後に復元されると想定していました(構成の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.
何が問題になる可能性がありますか?
ありがとう