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

davsclaus 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 12c4b427841c CAMEL-23374: camel-core - Remove IOConverter for Java 
serialized objects (#22868)
12c4b427841c is described below

commit 12c4b427841c805ef4d143c3afba1730ff356fa8
Author: Claus Ibsen <[email protected]>
AuthorDate: Thu Apr 30 15:46:11 2026 +0200

    CAMEL-23374: camel-core - Remove IOConverter for Java serialized objects 
(#22868)
    
    * CAMEL-23374: camel-core - Remove IOConverter for Java serialized objects
---
 .../converter/CamelBaseBulkConverterLoader.java    | 32 +++---------
 .../org/apache/camel/converter/IOConverter.java    | 61 ++++------------------
 .../ROOT/pages/camel-4x-upgrade-guide-4_21.adoc    |  5 ++
 3 files changed, 22 insertions(+), 76 deletions(-)

diff --git 
a/core/camel-base/src/generated/java/org/apache/camel/converter/CamelBaseBulkConverterLoader.java
 
b/core/camel-base/src/generated/java/org/apache/camel/converter/CamelBaseBulkConverterLoader.java
index 84ac3ebdac41..5fd9e96156ac 100644
--- 
a/core/camel-base/src/generated/java/org/apache/camel/converter/CamelBaseBulkConverterLoader.java
+++ 
b/core/camel-base/src/generated/java/org/apache/camel/converter/CamelBaseBulkConverterLoader.java
@@ -41,7 +41,7 @@ public final class CamelBaseBulkConverterLoader implements 
TypeConverterLoader,
 
     @Override
     public int size() {
-        return 131;
+        return 129;
     }
 
     @Override
@@ -171,14 +171,6 @@ public final class CamelBaseBulkConverterLoader implements 
TypeConverterLoader,
             if (value instanceof java.io.ByteArrayOutputStream) {
                 return 
org.apache.camel.converter.IOConverter.toInputStream((java.io.ByteArrayOutputStream)
 value);
             }
-        } else if (to == java.io.ObjectInput.class) {
-            if (value instanceof java.io.InputStream) {
-                return 
org.apache.camel.converter.IOConverter.toObjectInput((java.io.InputStream) 
value, exchange);
-            }
-        } else if (to == java.io.ObjectOutput.class) {
-            if (value instanceof java.io.OutputStream) {
-                return 
org.apache.camel.converter.IOConverter.toObjectOutput((java.io.OutputStream) 
value);
-            }
         } else if (to == java.io.OutputStream.class) {
             if (value instanceof java.io.File) {
                 return 
org.apache.camel.converter.IOConverter.toOutputStream((java.io.File) value);
@@ -373,12 +365,12 @@ public final class CamelBaseBulkConverterLoader 
implements TypeConverterLoader,
             if (value instanceof java.lang.StringBuffer) {
                 return 
org.apache.camel.converter.ObjectConverter.toString((java.lang.StringBuffer) 
value);
             }
-            if (value instanceof java.lang.StringBuilder) {
-                return 
org.apache.camel.converter.ObjectConverter.toString((java.lang.StringBuilder) 
value);
-            }
             if (value instanceof java.io.ByteArrayOutputStream) {
                 return 
org.apache.camel.converter.IOConverter.toString((java.io.ByteArrayOutputStream) 
value, exchange);
             }
+            if (value instanceof java.lang.StringBuilder) {
+                return 
org.apache.camel.converter.ObjectConverter.toString((java.lang.StringBuilder) 
value);
+            }
         } else if (to == java.math.BigInteger.class) {
             if (value instanceof java.lang.Object) {
                 Object obj = 
org.apache.camel.converter.ObjectConverter.toBigInteger(value);
@@ -565,8 +557,6 @@ public final class CamelBaseBulkConverterLoader implements 
TypeConverterLoader,
         registry.addConverter(new TypeConvertible<>(java.io.Reader.class, 
java.io.InputStream.class), this);
         registry.addConverter(new TypeConvertible<>(byte[].class, 
java.io.InputStream.class), this);
         registry.addConverter(new 
TypeConvertible<>(java.io.ByteArrayOutputStream.class, 
java.io.InputStream.class), this);
-        registry.addConverter(new TypeConvertible<>(java.io.InputStream.class, 
java.io.ObjectInput.class), this);
-        registry.addConverter(new 
TypeConvertible<>(java.io.OutputStream.class, java.io.ObjectOutput.class), 
this);
         registry.addConverter(new TypeConvertible<>(java.io.File.class, 
java.io.OutputStream.class), this);
         registry.addConverter(new TypeConvertible<>(java.nio.file.Path.class, 
java.io.OutputStream.class), this);
         registry.addConverter(new 
TypeConvertible<>(org.apache.camel.spi.Resource.class, java.io.Reader.class), 
this);
@@ -620,8 +610,8 @@ public final class CamelBaseBulkConverterLoader implements 
TypeConverterLoader,
         registry.addConverter(new TypeConvertible<>(java.lang.Long.class, 
java.lang.String.class), this);
         registry.addConverter(new TypeConvertible<>(java.lang.Boolean.class, 
java.lang.String.class), this);
         registry.addConverter(new 
TypeConvertible<>(java.lang.StringBuffer.class, java.lang.String.class), this);
-        registry.addConverter(new 
TypeConvertible<>(java.lang.StringBuilder.class, java.lang.String.class), this);
         registry.addConverter(new 
TypeConvertible<>(java.io.ByteArrayOutputStream.class, java.lang.String.class), 
this);
+        registry.addConverter(new 
TypeConvertible<>(java.lang.StringBuilder.class, java.lang.String.class), this);
         registry.addConverter(new TypeConvertible<>(java.lang.Object.class, 
java.math.BigInteger.class), this);
         registry.addConverter(new 
TypeConvertible<>(java.lang.CharSequence.class, java.net.URI.class), this);
         registry.addConverter(new TypeConvertible<>(byte[].class, 
java.nio.ByteBuffer.class), this);
@@ -774,14 +764,6 @@ public final class CamelBaseBulkConverterLoader implements 
TypeConverterLoader,
             if (from == java.io.ByteArrayOutputStream.class) {
                 return this;
             }
-        } else if (to == java.io.ObjectInput.class) {
-            if (from == java.io.InputStream.class) {
-                return this;
-            }
-        } else if (to == java.io.ObjectOutput.class) {
-            if (from == java.io.OutputStream.class) {
-                return this;
-            }
         } else if (to == java.io.OutputStream.class) {
             if (from == java.io.File.class) {
                 return this;
@@ -956,10 +938,10 @@ public final class CamelBaseBulkConverterLoader 
implements TypeConverterLoader,
             if (from == java.lang.StringBuffer.class) {
                 return this;
             }
-            if (from == java.lang.StringBuilder.class) {
+            if (from == java.io.ByteArrayOutputStream.class) {
                 return this;
             }
-            if (from == java.io.ByteArrayOutputStream.class) {
+            if (from == java.lang.StringBuilder.class) {
                 return this;
             }
         } else if (to == java.math.BigInteger.class) {
diff --git 
a/core/camel-base/src/main/java/org/apache/camel/converter/IOConverter.java 
b/core/camel-base/src/main/java/org/apache/camel/converter/IOConverter.java
index 2ed01407f492..9c924c2e2b3e 100644
--- a/core/camel-base/src/main/java/org/apache/camel/converter/IOConverter.java
+++ b/core/camel-base/src/main/java/org/apache/camel/converter/IOConverter.java
@@ -27,11 +27,6 @@ import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
-import java.io.ObjectInput;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutput;
-import java.io.ObjectOutputStream;
-import java.io.ObjectStreamClass;
 import java.io.OutputStream;
 import java.io.OutputStreamWriter;
 import java.io.Reader;
@@ -250,42 +245,6 @@ public final class IOConverter {
     }
 
     @Converter(order = 33)
-    public static ObjectOutput toObjectOutput(OutputStream stream) throws 
IOException {
-        if (stream instanceof ObjectOutput out) {
-            return out;
-        } else {
-            return new ObjectOutputStream(IOHelper.buffered(stream));
-        }
-    }
-
-    @Converter(order = 34)
-    public static ObjectInput toObjectInput(final InputStream stream, final 
Exchange exchange) throws IOException {
-        if (stream instanceof ObjectInput objectInput) {
-            return objectInput;
-        } else {
-            return new ObjectInputStream(IOHelper.buffered(stream)) {
-                @Override
-                protected Class<?> resolveClass(ObjectStreamClass 
objectStreamClass)
-                        throws IOException, ClassNotFoundException {
-                    // need to let Camel be able to resolve class using 
ClassResolver SPI, to let class loading
-                    // work in OSGi and other containers
-                    Class<?> answer = null;
-                    String name = objectStreamClass.getName();
-                    if (exchange != null) {
-                        LOG.trace("Loading class {} using Camel 
ClassResolver", name);
-                        answer = 
exchange.getContext().getClassResolver().resolveClass(name);
-                    }
-                    if (answer == null) {
-                        LOG.trace("Loading class {} using JDK default 
implementation", name);
-                        answer = super.resolveClass(objectStreamClass);
-                    }
-                    return answer;
-                }
-            };
-        }
-    }
-
-    @Converter(order = 35)
     public static byte[] toBytes(InputStream stream) throws IOException {
         ByteArrayOutputStream bos = new ByteArrayOutputStream();
         IOHelper.copyAndCloseInput(IOHelper.buffered(stream), bos);
@@ -295,36 +254,36 @@ public final class IOConverter {
         return bos.toByteArray();
     }
 
-    @Converter(order = 36)
+    @Converter(order = 34)
     public static byte[] toByteArray(ByteArrayOutputStream os) {
         return os.toByteArray();
     }
 
-    @Converter(order = 37)
+    @Converter(order = 35)
     public static ByteBuffer covertToByteBuffer(InputStream is) throws 
IOException {
         ByteArrayOutputStream os = new ByteArrayOutputStream();
         IOHelper.copyAndCloseInput(is, os);
         return ByteBuffer.wrap(os.toByteArray());
     }
 
-    @Converter(order = 38)
+    @Converter(order = 36)
     public static String toString(ByteArrayOutputStream os, Exchange exchange) 
throws IOException {
         return os.toString(ExchangeHelper.getCharset(exchange));
     }
 
-    @Converter(order = 39)
+    @Converter(order = 37)
     public static InputStream toInputStream(ByteArrayOutputStream os) {
         // no buffering required as the complete byte array input is already
         // passed over as a whole
         return new ByteArrayInputStream(os.toByteArray());
     }
 
-    @Converter(order = 40)
+    @Converter(order = 38)
     public static Properties toProperties(File file) throws IOException {
         return toProperties(new FileInputStream(file));
     }
 
-    @Converter(order = 41)
+    @Converter(order = 39)
     public static Properties toProperties(InputStream is) throws IOException {
         Properties prop = new Properties();
         try {
@@ -335,7 +294,7 @@ public final class IOConverter {
         return prop;
     }
 
-    @Converter(order = 42)
+    @Converter(order = 40)
     public static Properties toProperties(Reader reader) throws IOException {
         Properties prop = new Properties();
         try {
@@ -346,17 +305,17 @@ public final class IOConverter {
         return prop;
     }
 
-    @Converter(order = 43)
+    @Converter(order = 41)
     public static Path toPath(File file) {
         return file.toPath();
     }
 
-    @Converter(order = 44)
+    @Converter(order = 42)
     public static File toFile(Path path) {
         return path.toFile();
     }
 
-    @Converter(order = 45)
+    @Converter(order = 43)
     public static Charset toCharset(String name) {
         return Charset.forName(name);
     }
diff --git 
a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_21.adoc 
b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_21.adoc
index f62ee4049145..c9536d9da7be 100644
--- a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_21.adoc
+++ b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_21.adoc
@@ -17,6 +17,11 @@ See the xref:camel-upgrade-recipes-tool.adoc[documentation] 
page for details.
 
 The `org.apache.camel.support.DefaultHeaderFilterStrategy` changed default 
setting for lowercase from `false` to `true`.
 
+The type converters for Java serialized objects with types 
`java.io.ObjectInput` and `java.io.ObjectOutput` has been removed.
+Java object serialization is a recurring source of security issues and 
therefore these converters has been removed.
+These converters are not used at all by Camel itself. To restore compatibility 
then end users can add these type converters back as custom converters in their 
own Camel applications.
+However, using Java serialization is discouraged and highly recommend to use 
other means.
+
 === camel-yaml-dsl
 
 A new canonical JSON Schema variant (`camelYamlDsl-canonical.json`) has been 
added alongside the existing classic

Reply via email to