1

編集:簡略化された質問。

いったいなぜ、Groovy コンポーネントに設定されたペイロードではなく、書き込まれたファイルがガベージ (バイナリ シリアライズされたデータ) になるのでしょうか。これは、「すべて」のフロー コンポーネントがある場合にのみ発生します。

フロー:

ここに画像の説明を入力

XML:

<file:connector name="OutputFile" autoDelete="true" streaming="true" validateConnections="true" doc:name="File" writeToDirectory="#{systemProperties['user.home']}"/>
<flow name="AllProblemFlow1" doc:name="AllProblemFlow1">
    <vm:inbound-endpoint exchange-pattern="one-way" path="in" doc:name="VM"/>
    <all doc:name="All">
        <processor-chain>
            <scripting:component doc:name="Groovy">
                <scripting:script engine="Groovy">
                    <scripting:text><![CDATA[return payload + 1]]></scripting:text>
                </scripting:script>
            </scripting:component>
        </processor-chain>
        <processor-chain>
            <scripting:component doc:name="Groovy">
                <scripting:script engine="Groovy">
                    <scripting:text><![CDATA[return payload + 2]]></scripting:text>
                </scripting:script>
            </scripting:component>
        </processor-chain>
    </all>
    <logger message="All payload: #[payload]" level="INFO" doc:name="Logger"/>
    <scripting:component doc:name="Groovy">
        <scripting:script engine="Groovy">
            <scripting:text><![CDATA[return "new payload"]]></scripting:text>
        </scripting:script>
    </scripting:component>
    <file:outbound-endpoint responseTimeout="10000" connector-ref="OutputFile" doc:name="File" outputPattern="output.txt" path="#{systemProperties['user.home']}"/>
</flow>
4

1 に答える 1

2

これは非常に注意が必要です。allメッセージプロセッサは、処理中のMuleメッセージの性質そのものをaMuleMessageからに変更しMuleMessageCollectionます。のペイロードを変更することMuleMessageCollectionは基本的に効果がありません。

MuleMessageCollection現在の電流を新しいものに強制的に置き換える必要がありますMuleMessage。最後のGroovyコンポーネントには、次のコードを使用します。

<scripting:text><![CDATA[
    return new org.mule.DefaultMuleMessage("new payload", muleContext)
]]></scripting:text>
于 2012-10-12T01:26:09.500 に答える