Updated Branches: refs/heads/camel-2.12.x 954c068b9 -> 66cbc0d36 refs/heads/master 96a991760 -> 15e1077d2
CAMEL-7056: Use streaming support in base64. Thanks to Stephan Siano for the patch. Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/dc081927 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/dc081927 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/dc081927 Branch: refs/heads/master Commit: dc081927c8c2b56ad00dba67e639a675ab44c446 Parents: 96a9917 Author: Claus Ibsen <davscl...@apache.org> Authored: Sat Dec 14 10:21:08 2013 +0100 Committer: Claus Ibsen <davscl...@apache.org> Committed: Sat Dec 14 10:21:08 2013 +0100 ---------------------------------------------------------------------- .../dataformat/base64/Base64DataFormat.java | 39 ++++++++++++-------- 1 file changed, 24 insertions(+), 15 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/dc081927/components/camel-base64/src/main/java/org/apache/camel/dataformat/base64/Base64DataFormat.java ---------------------------------------------------------------------- diff --git a/components/camel-base64/src/main/java/org/apache/camel/dataformat/base64/Base64DataFormat.java b/components/camel-base64/src/main/java/org/apache/camel/dataformat/base64/Base64DataFormat.java index 70282b3..fc30303 100644 --- a/components/camel-base64/src/main/java/org/apache/camel/dataformat/base64/Base64DataFormat.java +++ b/components/camel-base64/src/main/java/org/apache/camel/dataformat/base64/Base64DataFormat.java @@ -16,7 +16,6 @@ */ package org.apache.camel.dataformat.base64; -import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.io.OutputStream; @@ -25,6 +24,8 @@ import org.apache.camel.spi.DataFormat; import org.apache.camel.util.ExchangeHelper; import org.apache.camel.util.IOHelper; import org.apache.commons.codec.binary.Base64; +import org.apache.commons.codec.binary.Base64InputStream; +import org.apache.commons.codec.binary.Base64OutputStream; public class Base64DataFormat implements DataFormat { @@ -34,29 +35,37 @@ public class Base64DataFormat implements DataFormat { @Override public void marshal(Exchange exchange, Object graph, OutputStream stream) throws Exception { + if (urlSafe) { + marshalUrlSafe(exchange, graph, stream); + } else { + marshalStreaming(exchange, graph, stream); + } + } + + private void marshalStreaming(Exchange exchange, Object graph, OutputStream stream) throws Exception { + InputStream decoded = ExchangeHelper.convertToMandatoryType(exchange, InputStream.class, graph); + + Base64OutputStream base64Output = new Base64OutputStream(stream, true, lineLength, lineSeparator); + try { + IOHelper.copy(decoded, base64Output); + } finally { + IOHelper.close(decoded, base64Output); + } + } + + private void marshalUrlSafe(Exchange exchange, Object graph, OutputStream stream) throws Exception { byte[] decoded = ExchangeHelper.convertToMandatoryType(exchange, byte[].class, graph); - Base64 codec = createCodec(); + Base64 codec = new Base64(lineLength, lineSeparator, true); byte[] encoded = codec.encode(decoded); stream.write(encoded); + stream.flush(); } @Override public Object unmarshal(Exchange exchange, InputStream input) throws Exception { - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - IOHelper.copyAndCloseInput(input, baos); - byte[] encoded = baos.toByteArray(); - baos.close(); - - Base64 codec = createCodec(); - byte[] decoded = codec.decode(encoded); - - return decoded; - } - - private Base64 createCodec() { - return new Base64(lineLength, lineSeparator, urlSafe); + return new Base64InputStream(input, false, lineLength, lineSeparator); } public int getLineLength() {