This is an automated email from the ASF dual-hosted git repository.
jamesnetherton pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new ffb4eadb6c8 CAMEL-17935: Use ClassLoadingAwareObjectInputStream in
CassandraCamelCodec
ffb4eadb6c8 is described below
commit ffb4eadb6c82c69b311e389ef59ab9bb350401cc
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 476ec0de880..b2bcfbf0b17 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 1edf333e5a5..7f4b1a12c48 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);
}
}