如何在mule流中拆分ArrayList

时间:2015-02-13 05:47:03

标签: java spring mule

我有一个带有巨大负载的入站org.mule.api.MuleMessage。有效负载需要根据某些逻辑进行拆分。使用拆分有效负载我形成org.mule.api.MuleMessage的列表,其中每个消息中具有相同的头但具有不同的有效负载。我需要将列表中的每条消息作为单独的消息发送到出站队列中 我正在使用< collection-splitter>,但它给了我以下错误:

org.mule.api.transformer.TransformerMessagingException:传递给StreamMessage的类型无效:DefaultMuleMessage。允许的类型是:Boolean Byte Short Character Integer Long Float DoubleString和byte [](javax.jms.MessageFormatException)(org.mule.api.transformer.TransformerException)。消息有效内容的类型为:ArrayList

我使用以下配置:

    <flow name="Inbound flow">
     <inbound-endpoint ref="In" />
     <pooled-component>     
        <spring-object bean="inboundAdapterProcessor" />
        <pooling-profile initialisationPolicy="INITIALISE_ALL" maxActive="${component.maxActive}" />
     </pooled-component>
     <collection-splitter enableCorrelation="IF_NOT_SET" />
     <outbound-endpoint ref="Out"/> 
    </flow>

&#34;在&#34;和&#34; Out&#34;只不过是jms队列端点。

Java代码:

     public Object onCall(MuleEventContext eventContext) throws Exception {
        List<MuleMessage> messages = new ArrayList<MuleMessage>();
        MuleMessage message = eventContext.getMessage();
        String payload = message.getPayloadAsString();
        //split the payload based on some logic
        String[] payloads = getSplitPayload(payload);
        int i= 0;
        while(i<payloads.lenght){
        //create DefaultMuleMessage here
        MuleMessage  splitMessage = new DefaultMuleMessage(/*passing appropriate params here*/);
        //set the same headers
        //set the payload
        splitMessage.setPaylod(payloads[i]);
        messages.add(splitMessage);
        }
        return messages;
     }

请告知。非常感谢您的帮助。谢谢。

1 个答案:

答案 0 :(得分:2)

<object-to-byte-array-transformer />会使任何可序列化的对象都可以通过JMS发送 - 请不要忘记在收到时将其转换回<byte-array-to-object-transformer />