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更改为 a MuleMessageCollection。更改 a 上的有效负载MuleMessageCollection基本上是无效的。

您需要MuleMessageCollection用全新的MuleMessage. 为您的最后一个 Groovy 组件使用以下代码:

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