Coverage Report - org.mule.routing.MessageChunkSplitter
 
Classes in this File Line Coverage Branch Coverage Complexity
MessageChunkSplitter
0%
0/30
0%
0/8
0
 
 1  
 /*
 2  
  * $Id$
 3  
  * --------------------------------------------------------------------------------------
 4  
  * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
 5  
  *
 6  
  * The software in this package is published under the terms of the CPAL v1.0
 7  
  * license, a copy of which has been included with this distribution in the
 8  
  * LICENSE.txt file.
 9  
  */
 10  
 
 11  
 package org.mule.routing;
 12  
 
 13  
 import org.mule.DefaultMuleMessage;
 14  
 import org.mule.api.MuleEvent;
 15  
 import org.mule.api.MuleMessage;
 16  
 import org.mule.api.routing.RoutingException;
 17  
 import org.mule.config.i18n.CoreMessages;
 18  
 
 19  
 import java.util.ArrayList;
 20  
 import java.util.List;
 21  
 
 22  
 /**
 23  
  * A router that breaks up the current message onto smaller parts and sends them to
 24  
  * the same destination. The Destination service needs to have a
 25  
  * MessageChunkingAggregator inbound router in order to rebuild the message at the
 26  
  * other end.
 27  
  * <p>
 28  
  * <b>EIP Reference:</b> <a href="http://www.eaipatterns.com/Sequencer.html">http://www.eaipatterns.com/Sequencer.html</a>
 29  
  */
 30  0
 public class MessageChunkSplitter extends AbstractSplitter
 31  
 {
 32  
 
 33  0
     protected int messageSize = 0;
 34  
 
 35  
     public int getMessageSize()
 36  
     {
 37  0
         return messageSize;
 38  
     }
 39  
 
 40  
     public void setMessageSize(int messageSize)
 41  
     {
 42  0
         this.messageSize = messageSize;
 43  0
     }
 44  
 
 45  
     @Override
 46  
     protected boolean isSplitRequired(MuleEvent event)
 47  
     {
 48  0
         return messageSize != 0;
 49  
     }
 50  
 
 51  
     protected List<MuleMessage> splitMessage(MuleEvent event) throws RoutingException
 52  
     {
 53  0
         MuleMessage message = event.getMessage();
 54  0
         List<MuleMessage> messageParts = new ArrayList<MuleMessage>();
 55  
         byte[] data;
 56  
         try
 57  
         {
 58  0
             data = message.getPayloadAsBytes();
 59  
         }
 60  0
         catch (Exception e)
 61  
         {
 62  0
             throw new RoutingException(CoreMessages.failedToReadPayload(), event, next, e);
 63  0
         }
 64  
 
 65  0
         int parts = data.length / messageSize;
 66  0
         if ((parts * messageSize) < data.length)
 67  
         {
 68  0
             parts++;
 69  
         }
 70  0
         int len = messageSize;
 71  0
         int count = 0;
 72  0
         int pos = 0;
 73  
         byte[] buffer;
 74  0
         for (; count < parts; count++)
 75  
         {
 76  0
             if ((pos + len) > data.length)
 77  
             {
 78  0
                 len = data.length - pos;
 79  
             }
 80  0
             buffer = new byte[len];
 81  0
             System.arraycopy(data, pos, buffer, 0, buffer.length);
 82  0
             pos += len;
 83  0
             MuleMessage part = new DefaultMuleMessage(buffer, message, muleContext);
 84  0
             part.setCorrelationId(message.getUniqueId());
 85  0
             part.setCorrelationGroupSize(parts);
 86  0
             part.setCorrelationSequence(count);
 87  0
             messageParts.add(part);
 88  
         }
 89  0
         return messageParts;
 90  
     }
 91  
 
 92  
 }