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

jamesnetherton pushed a commit to branch camel-3.14.x
in repository https://gitbox.apache.org/repos/asf/camel.git

commit a9398ec2760c12a8203a904eba6e07c82a99453b
Author: James Netherton <[email protected]>
AuthorDate: Fri Apr 8 14:12:32 2022 +0100

    CAMEL-17935: Use ClassLoadingAwareObjectInputStream in CassandraCamelCodec
---
 .../aggregate/cassandra/CassandraCamelCodec.java   |  8 ++--
 .../processor/aggregate/jdbc/JdbcCamelCodec.java   |  3 +-
 .../ClassLoadingAwareObjectInputStreamTest.java    |  4 +-
 .../util}/ClassLoadingAwareObjectInputStream.java  | 13 +++---
 .../ClassLoadingAwareObjectInputStreamTest.java    | 53 +++++-----------------
 5 files changed, 28 insertions(+), 53 deletions(-)

diff --git 
a/components/camel-cassandraql/src/main/java/org/apache/camel/processor/aggregate/cassandra/CassandraCamelCodec.java
 
b/components/camel-cassandraql/src/main/java/org/apache/camel/processor/aggregate/cassandra/CassandraCamelCodec.java
index 464a2de1b2a..ecf05e36d54 100644
--- 
a/components/camel-cassandraql/src/main/java/org/apache/camel/processor/aggregate/cassandra/CassandraCamelCodec.java
+++ 
b/components/camel-cassandraql/src/main/java/org/apache/camel/processor/aggregate/cassandra/CassandraCamelCodec.java
@@ -30,6 +30,7 @@ import org.apache.camel.ExchangePropertyKey;
 import org.apache.camel.ExtendedExchange;
 import org.apache.camel.support.DefaultExchange;
 import org.apache.camel.support.DefaultExchangeHolder;
+import org.apache.camel.util.ClassLoadingAwareObjectInputStream;
 
 /**
  * Marshall/unmarshall Exchange to/from a ByteBuffer. Inspired from 
JdbcCamelCodec.
@@ -64,7 +65,7 @@ public class CassandraCamelCodec {
 
     public Exchange unmarshallExchange(CamelContext camelContext, ByteBuffer 
buffer)
             throws IOException, ClassNotFoundException {
-        DefaultExchangeHolder pe = (DefaultExchangeHolder) deserialize(new 
ByteBufferInputStream(buffer));
+        DefaultExchangeHolder pe = (DefaultExchangeHolder) 
deserialize(camelContext, new ByteBufferInputStream(buffer));
         Exchange answer = new DefaultExchange(camelContext);
         DefaultExchangeHolder.unmarshal(answer, pe);
         // restore the from endpoint
@@ -86,8 +87,9 @@ public class CassandraCamelCodec {
         return bytesOut.toByteArray();
     }
 
-    private Object deserialize(InputStream bytes) throws IOException, 
ClassNotFoundException {
-        ObjectInputStream objectIn = new ObjectInputStream(bytes);
+    private Object deserialize(CamelContext camelContext, InputStream bytes) 
throws IOException, ClassNotFoundException {
+        ClassLoader classLoader = 
camelContext.getApplicationContextClassLoader();
+        ObjectInputStream objectIn = new 
ClassLoadingAwareObjectInputStream(classLoader, bytes);
         Object object = objectIn.readObject();
         objectIn.close();
         return object;
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 3af195b614c..a247591d516 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
@@ -31,6 +31,7 @@ import org.apache.camel.ExchangePropertyKey;
 import org.apache.camel.ExtendedExchange;
 import org.apache.camel.support.DefaultExchange;
 import org.apache.camel.support.DefaultExchangeHolder;
+import org.apache.camel.util.ClassLoadingAwareObjectInputStream;
 import org.apache.camel.util.IOHelper;
 
 /**
@@ -104,7 +105,7 @@ public class JdbcCamelCodec {
         ObjectInputStream objectIn = null;
         Object obj = null;
         try {
-            objectIn = new ClassLoadingAwareObjectInputStream(camelContext, 
bytesIn);
+            objectIn = new 
ClassLoadingAwareObjectInputStream(camelContext.getApplicationContextClassLoader(),
 bytesIn);
             obj = objectIn.readObject();
         } finally {
             IOHelper.close(objectIn);
diff --git 
a/components/camel-sql/src/test/java/org/apache/camel/processor/aggregate/jdbc/ClassLoadingAwareObjectInputStreamTest.java
 
b/components/camel-sql/src/test/java/org/apache/camel/processor/aggregate/jdbc/ClassLoadingAwareObjectInputStreamTest.java
index 289785a19b5..9e24dc1728a 100644
--- 
a/components/camel-sql/src/test/java/org/apache/camel/processor/aggregate/jdbc/ClassLoadingAwareObjectInputStreamTest.java
+++ 
b/components/camel-sql/src/test/java/org/apache/camel/processor/aggregate/jdbc/ClassLoadingAwareObjectInputStreamTest.java
@@ -30,6 +30,7 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.support.DefaultExchange;
 import org.apache.camel.support.DefaultExchangeHolder;
+import org.apache.camel.util.ClassLoadingAwareObjectInputStream;
 import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -55,7 +56,8 @@ public class ClassLoadingAwareObjectInputStreamTest {
         oos.flush();
         final byte[] serialized = baos.toByteArray();
 
-        final ObjectInputStream bis = new 
ClassLoadingAwareObjectInputStream(context, new 
ByteArrayInputStream(serialized));
+        final ObjectInputStream bis = new ClassLoadingAwareObjectInputStream(
+                context.getApplicationContextClassLoader(), new 
ByteArrayInputStream(serialized));
         final DefaultExchangeHolder deserialized = (DefaultExchangeHolder) 
bis.readObject();
 
         final DefaultExchange exchange2 = new DefaultExchange(context);
diff --git 
a/components/camel-sql/src/main/java/org/apache/camel/processor/aggregate/jdbc/ClassLoadingAwareObjectInputStream.java
 
b/core/camel-util/src/main/java/org/apache/camel/util/ClassLoadingAwareObjectInputStream.java
similarity index 92%
rename from 
components/camel-sql/src/main/java/org/apache/camel/processor/aggregate/jdbc/ClassLoadingAwareObjectInputStream.java
rename to 
core/camel-util/src/main/java/org/apache/camel/util/ClassLoadingAwareObjectInputStream.java
index c429fe0a3ba..a9ef057993e 100644
--- 
a/components/camel-sql/src/main/java/org/apache/camel/processor/aggregate/jdbc/ClassLoadingAwareObjectInputStream.java
+++ 
b/core/camel-util/src/main/java/org/apache/camel/util/ClassLoadingAwareObjectInputStream.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.processor.aggregate.jdbc;
+package org.apache.camel.util;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -23,8 +23,6 @@ import java.io.ObjectStreamClass;
 import java.lang.reflect.Proxy;
 import java.util.HashMap;
 
-import org.apache.camel.CamelContext;
-
 /**
  * This class is copied from the Apache ActiveMQ project.
  */
@@ -38,7 +36,6 @@ public class ClassLoadingAwareObjectInputStream extends 
ObjectInputStream {
      */
     private static final HashMap<String, Class> PRIM_CLASSES = new 
HashMap<>(8, 1.0F);
 
-    private CamelContext camelContext;
     private final ClassLoader inLoader;
 
     public ClassLoadingAwareObjectInputStream(InputStream in) throws 
IOException {
@@ -46,9 +43,13 @@ public class ClassLoadingAwareObjectInputStream extends 
ObjectInputStream {
         inLoader = in.getClass().getClassLoader();
     }
 
-    public ClassLoadingAwareObjectInputStream(CamelContext camelContext, 
InputStream in) throws IOException {
+    public ClassLoadingAwareObjectInputStream(ClassLoader classLoader, 
InputStream in) throws IOException {
         super(in);
-        inLoader = camelContext.getApplicationContextClassLoader();
+        if (classLoader != null) {
+            inLoader = classLoader;
+        } else {
+            inLoader = in.getClass().getClassLoader();
+        }
     }
 
     @Override
diff --git 
a/components/camel-sql/src/test/java/org/apache/camel/processor/aggregate/jdbc/ClassLoadingAwareObjectInputStreamTest.java
 
b/core/camel-util/src/test/java/org/apache/camel/util/ClassLoadingAwareObjectInputStreamTest.java
similarity index 53%
copy from 
components/camel-sql/src/test/java/org/apache/camel/processor/aggregate/jdbc/ClassLoadingAwareObjectInputStreamTest.java
copy to 
core/camel-util/src/test/java/org/apache/camel/util/ClassLoadingAwareObjectInputStreamTest.java
index 289785a19b5..536397f445f 100644
--- 
a/components/camel-sql/src/test/java/org/apache/camel/processor/aggregate/jdbc/ClassLoadingAwareObjectInputStreamTest.java
+++ 
b/core/camel-util/src/test/java/org/apache/camel/util/ClassLoadingAwareObjectInputStreamTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.processor.aggregate.jdbc;
+package org.apache.camel.util;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
@@ -22,14 +22,8 @@ import java.io.IOException;
 import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
 import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
+import java.util.Objects;
 
-import org.apache.camel.CamelContext;
-import org.apache.camel.impl.DefaultCamelContext;
-import org.apache.camel.support.DefaultExchange;
-import org.apache.camel.support.DefaultExchangeHolder;
 import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -38,42 +32,24 @@ public class ClassLoadingAwareObjectInputStreamTest {
 
     @Test
     public void deserialize() throws IOException, ClassNotFoundException {
-        CamelContext context = new DefaultCamelContext();
-
-        final DefaultExchange exchange = new DefaultExchange(context);
-
-        final List<MyObject> objects = new ArrayList<>();
-        final MyObject o = new MyObject("leb", "hello".getBytes());
-        objects.add(o);
-
-        exchange.getIn().setBody(objects);
-        final DefaultExchangeHolder deh = 
DefaultExchangeHolder.marshal(exchange);
-
+        final MyObject myObject = new MyObject("Test content");
         final ByteArrayOutputStream baos = new ByteArrayOutputStream();
         final ObjectOutputStream oos = new ObjectOutputStream(baos);
-        oos.writeObject(deh);
+        oos.writeObject(myObject);
         oos.flush();
         final byte[] serialized = baos.toByteArray();
 
-        final ObjectInputStream bis = new 
ClassLoadingAwareObjectInputStream(context, new 
ByteArrayInputStream(serialized));
-        final DefaultExchangeHolder deserialized = (DefaultExchangeHolder) 
bis.readObject();
-
-        final DefaultExchange exchange2 = new DefaultExchange(context);
-        DefaultExchangeHolder.unmarshal(exchange2, deserialized);
+        final ObjectInputStream bis = new 
ClassLoadingAwareObjectInputStream(new ByteArrayInputStream(serialized));
+        final MyObject deserialized = (MyObject) bis.readObject();
 
-        List<MyObject> receivedObjects = exchange2.getIn().getBody(List.class);
-        assertEquals(1, receivedObjects.size());
-        assertEquals(o, receivedObjects.get(0));
+        assertEquals(myObject, deserialized);
     }
-
 }
 
 class MyObject implements Serializable {
-    final String name;
-    final byte[] content;
+    final String content;
 
-    MyObject(String name, byte[] content) {
-        this.name = name;
+    MyObject(String content) {
         this.content = content;
     }
 
@@ -85,19 +61,12 @@ class MyObject implements Serializable {
         if (o == null || getClass() != o.getClass()) {
             return false;
         }
-
         MyObject myObject = (MyObject) o;
-
-        if (name != null ? !name.equals(myObject.name) : myObject.name != 
null) {
-            return false;
-        }
-        return Arrays.equals(content, myObject.content);
+        return Objects.equals(content, myObject.content);
     }
 
     @Override
     public int hashCode() {
-        int result = name != null ? name.hashCode() : 0;
-        result = 31 * result + Arrays.hashCode(content);
-        return result;
+        return Objects.hash(content);
     }
 }

Reply via email to