Updated Branches:
  refs/heads/camel-2.12.x 4d7e7e187 -> 19c96be7b

CAMEL-6718: Marshal should leverage stream caching if enabled. Thanks to Franz 
Forsthofer for patch.


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/3d1b979c
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/3d1b979c
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/3d1b979c

Branch: refs/heads/camel-2.12.x
Commit: 3d1b979c08d054d67cd53e0a7cb66d7fc0dba374
Parents: 19df5be
Author: Claus Ibsen <davscl...@apache.org>
Authored: Tue Sep 10 10:26:35 2013 +0200
Committer: Claus Ibsen <davscl...@apache.org>
Committed: Tue Sep 10 11:11:18 2013 +0200

----------------------------------------------------------------------
 .../camel/processor/MarshalProcessor.java       | 27 ++++++++++++++++----
 1 file changed, 22 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/3d1b979c/camel-core/src/main/java/org/apache/camel/processor/MarshalProcessor.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/processor/MarshalProcessor.java 
b/camel-core/src/main/java/org/apache/camel/processor/MarshalProcessor.java
index 2c47081..c26d00a 100644
--- a/camel-core/src/main/java/org/apache/camel/processor/MarshalProcessor.java
+++ b/camel-core/src/main/java/org/apache/camel/processor/MarshalProcessor.java
@@ -25,6 +25,7 @@ import org.apache.camel.CamelContextAware;
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
 import org.apache.camel.Traceable;
+import org.apache.camel.converter.stream.CachedOutputStream;
 import org.apache.camel.spi.DataFormat;
 import org.apache.camel.support.ServiceSupport;
 import org.apache.camel.util.AsyncProcessorHelper;
@@ -35,7 +36,7 @@ import org.apache.camel.util.ServiceHelper;
  * Marshals the body of the incoming message using the given
  * <a href="http://camel.apache.org/data-format.html";>data format</a>
  *
- * @version 
+ * @version
  */
 public class MarshalProcessor extends ServiceSupport implements 
AsyncProcessor, Traceable, CamelContextAware {
     private CamelContext camelContext;
@@ -52,7 +53,18 @@ public class MarshalProcessor extends ServiceSupport 
implements AsyncProcessor,
     public boolean process(Exchange exchange, AsyncCallback callback) {
         ObjectHelper.notNull(dataFormat, "dataFormat");
 
-        ByteArrayOutputStream buffer = new ByteArrayOutputStream();
+        // if stream caching is enabled then use that so we can stream 
accordingly
+        // for example to overflow to disk for big streams
+        CachedOutputStream cos;
+        ByteArrayOutputStream os;
+        if (exchange.getContext().getStreamCachingStrategy().isEnabled()) {
+            cos = new CachedOutputStream(exchange);
+            os = null;
+        } else {
+            cos = null;
+            os = new ByteArrayOutputStream();
+        }
+
         Message in = exchange.getIn();
         Object body = in.getBody();
 
@@ -62,9 +74,14 @@ public class MarshalProcessor extends ServiceSupport 
implements AsyncProcessor,
         out.copyFrom(in);
 
         try {
-            dataFormat.marshal(exchange, body, buffer);
-            byte[] data = buffer.toByteArray();
-            out.setBody(data);
+            dataFormat.marshal(exchange, body, os);
+
+            if (cos != null) {
+                out.setBody(cos.newStreamCache());
+            } else {
+                byte[] data = os.toByteArray();
+                out.setBody(data);
+            }
         } catch (Exception e) {
             // remove OUT message, as an exception occurred
             exchange.setOut(null);

Reply via email to