You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ac...@apache.org on 2019/02/06 08:56:33 UTC

[camel] branch master updated: CAMEL-13146: Allow JdbcCamelCodec to be used without requiring byte arrays

This is an automated email from the ASF dual-hosted git repository.

acosentino pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/master by this push:
     new f7b3db9  CAMEL-13146: Allow JdbcCamelCodec to be used without requiring byte arrays
f7b3db9 is described below

commit f7b3db9cf4634ca7cb8bb1384d5cfe1eeb72d610
Author: Marc Carter <dr...@fastmail.fm>
AuthorDate: Thu Jan 31 00:26:59 2019 +0000

    CAMEL-13146: Allow JdbcCamelCodec to be used without requiring byte arrays
---
 .../processor/aggregate/jdbc/JdbcCamelCodec.java   | 31 +++++++++++++---------
 1 file changed, 19 insertions(+), 12 deletions(-)

diff --git a/components/camel-sql/src/main/java/org/apache/camel/processor/aggregate/jdbc/JdbcCamelCodec.java b/components/camel-sql/src/main/java/org/apache/camel/processor/aggregate/jdbc/JdbcCamelCodec.java
index a134055..31785a0 100644
--- a/components/camel-sql/src/main/java/org/apache/camel/processor/aggregate/jdbc/JdbcCamelCodec.java
+++ b/components/camel-sql/src/main/java/org/apache/camel/processor/aggregate/jdbc/JdbcCamelCodec.java
@@ -19,8 +19,10 @@ package org.apache.camel.processor.aggregate.jdbc;
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
+import java.io.InputStream;
 import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
+import java.io.OutputStream;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
@@ -35,6 +37,12 @@ import org.apache.camel.util.IOHelper;
 public class JdbcCamelCodec {
 
     public byte[] marshallExchange(CamelContext camelContext, Exchange exchange, boolean allowSerializedHeaders) throws IOException {
+        ByteArrayOutputStream bytesOut = new ByteArrayOutputStream();
+        marshallExchange(camelContext, exchange, allowSerializedHeaders, bytesOut);
+        return bytesOut.toByteArray();
+    }
+
+    public void marshallExchange(CamelContext camelContext, Exchange exchange, boolean allowSerializedHeaders, OutputStream outputStream) throws IOException {
         // use DefaultExchangeHolder to marshal to a serialized object
         DefaultExchangeHolder pe = DefaultExchangeHolder.marshal(exchange, false, allowSerializedHeaders);
         // add the aggregated size and timeout property as the only properties we want to retain
@@ -51,11 +59,15 @@ public class JdbcCamelCodec {
         if (exchange.getFromEndpoint() != null) {
             DefaultExchangeHolder.addProperty(pe, "CamelAggregatedFromEndpoint", exchange.getFromEndpoint().getEndpointUri());
         }
-        return encode(pe);
+        encode(pe, outputStream);
     }
 
     public Exchange unmarshallExchange(CamelContext camelContext, byte[] buffer) throws IOException, ClassNotFoundException {
-        DefaultExchangeHolder pe = decode(camelContext, buffer);
+        return unmarshallExchange(camelContext, new ByteArrayInputStream(buffer));
+    }
+
+    public Exchange unmarshallExchange(CamelContext camelContext, InputStream inputStream) throws IOException, ClassNotFoundException {
+        DefaultExchangeHolder pe = decode(camelContext, inputStream);
         Exchange answer = new DefaultExchange(camelContext);
         DefaultExchangeHolder.unmarshal(answer, pe);
         // restore the from endpoint
@@ -69,18 +81,13 @@ public class JdbcCamelCodec {
         return answer;
     }
 
-    private byte[] encode(Object object) throws IOException {
-        ByteArrayOutputStream bytesOut = new ByteArrayOutputStream();
-        ObjectOutputStream objectOut = new ObjectOutputStream(bytesOut);
-        objectOut.writeObject(object);
-        objectOut.close();
-        byte[] data = bytesOut.toByteArray();
-        return data;
+    private void encode(Object object, OutputStream bytesOut) throws IOException {
+        try (ObjectOutputStream objectOut = new ObjectOutputStream(bytesOut)) {
+            objectOut.writeObject(object);
+        }
     }
 
-    private DefaultExchangeHolder decode(CamelContext camelContext, byte[] dataIn) throws IOException, ClassNotFoundException {
-        ByteArrayInputStream bytesIn = new ByteArrayInputStream(dataIn);
-
+    private DefaultExchangeHolder decode(CamelContext camelContext, InputStream bytesIn) throws IOException, ClassNotFoundException {
         ObjectInputStream objectIn = null;
         Object obj = null;
         try {