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