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

commit 86be33a15d9520128aacc15172ff1f072808c743
Author: Claus Ibsen <[email protected]>
AuthorDate: Wed May 11 13:44:19 2022 +0200

    CAMEL-18087: camel-core - Enable stream caching by default. (#7586)
---
 ...1DataFormatWithStreamIteratorByteArrayTest.java |  6 ++---
 .../ASN1DataFormatWithStreamIteratorClassTest.java |  1 -
 .../asn1/ASN1DataFormatWithStreamTest.java         |  1 -
 .../s3/integration/S3CopyObjectCustomerKeyIT.java  | 27 ++++------------------
 .../storage/blob/integration/BlobConsumerIT.java   | 27 +++++-----------------
 .../dataformat/barcode/BarcodeUnmarshalTest.java   |  4 ++--
 .../component/cxf/transport/CamelConduitTest.java  | 14 ++++-------
 .../cxf/transport/CamelDestinationTest.java        | 11 ++++-----
 .../FtpSimpleConsumeStreamingPartialReadIT.java    |  7 +++---
 .../FtpSimpleConsumeStreamingStepwiseFalseIT.java  |  7 +++---
 .../FtpSimpleConsumeStreamingStepwiseIT.java       |  8 +++----
 ...pSimpleConsumeStreamingWithMultipleFilesIT.java | 11 ++++-----
 .../remote/integration/FtpStreamingMoveIT.java     |  6 ++---
 .../integration/SftpSimpleConsumeStreamingIT.java  |  8 +++----
 .../SftpSimpleConsumeStreamingPartialReadIT.java   |  7 +++---
 ...pSimpleConsumeStreamingWithMultipleFilesIT.java | 11 ++++-----
 .../camel/component/hl7/HL7MLLPNettyEncoder.java   | 11 ++++++++-
 .../camel/component/hl7/HL7DataFormatTest.java     |  9 ++++----
 .../avro/JacksonAvroLookupResolverTest.java        |  1 -
 .../JacksonAvroMarshalUnmarshalJsonNodeTest.java   |  2 --
 .../JacksonAvroMarshalUnmarshalPojoListTest.java   |  1 -
 .../avro/JacksonAvroMarshalUnmarshalPojoTest.java  |  1 -
 .../JacksonProtobufLookupResolverTest.java         |  3 ++-
 ...acksonProtobufMarshalUnmarshalJsonNodeTest.java |  1 -
 .../JacksonProtobufMarshalUnmarshalPojoTest.java   |  1 -
 ...> JmsStreamMessageTypeNoStreamCachingTest.java} | 12 +++++-----
 .../component/jms/JmsStreamMessageTypeTest.java    | 11 +++------
 .../camel/dataformat/lzf/LZFDataFormatTest.java    |  2 +-
 .../camel/component/mina/MinaConverterLoader.java  |  2 ++
 .../apache/camel/component/mina/MinaConverter.java | 10 ++++++++
 .../apache/camel/component/mina/MinaHelper.java    | 15 ++++++++++++
 .../dataformat/soap/SoapToSoapDontIgnoreTest.java  |  2 +-
 .../dataformat/soap/SoapToSoapIgnoreTest.java      |  2 +-
 .../soap/SoapToSoapSingleDataFormatterTest.java    |  2 +-
 .../tarfile/TarElementInputStreamWrapper.java      | 17 ++++++++++++++
 .../tarfile/SpringTarFileDataFormatTest.java       |  6 ++---
 .../dataformat/tarfile/TarFileDataFormatTest.java  | 10 ++++----
 .../dataformat/deflater/GzipDataFormatTest.java    |  2 +-
 .../deflater/ZipDeflaterDataFormatTest.java        |  3 ++-
 .../dataformat/zipfile/ZipFileDataFormatTest.java  |  4 ++--
 .../jaxp/CamelXmlJaxpBulkConverterLoader.java      | 14 ++++++++++-
 .../apache/camel/converter/jaxp/XmlConverter.java  | 14 +++++++++++
 42 files changed, 172 insertions(+), 142 deletions(-)

diff --git 
a/components/camel-asn1/src/test/java/org/apache/camel/dataformat/asn1/ASN1DataFormatWithStreamIteratorByteArrayTest.java
 
b/components/camel-asn1/src/test/java/org/apache/camel/dataformat/asn1/ASN1DataFormatWithStreamIteratorByteArrayTest.java
index 32a60560a29..de700bbab88 100644
--- 
a/components/camel-asn1/src/test/java/org/apache/camel/dataformat/asn1/ASN1DataFormatWithStreamIteratorByteArrayTest.java
+++ 
b/components/camel-asn1/src/test/java/org/apache/camel/dataformat/asn1/ASN1DataFormatWithStreamIteratorByteArrayTest.java
@@ -50,9 +50,9 @@ public class ASN1DataFormatWithStreamIteratorByteArrayTest 
extends CamelTestSupp
 
         assertEquals(1, exchanges.size());
         for (Exchange exchange : exchanges) {
-            assertTrue(exchange.getIn().getBody() instanceof byte[]);
-            assertTrue(Arrays.equals(FileUtils.readFileToByteArray(testFile), 
exchange.getIn().getBody(byte[].class)));
-            
assertTrue(ASN1Primitive.fromByteArray(exchange.getIn().getBody(byte[].class)) 
instanceof ASN1Primitive);
+            byte[] arr = exchange.getIn().getBody(byte[].class);
+            assertTrue(Arrays.equals(FileUtils.readFileToByteArray(testFile), 
arr));
+            assertTrue(ASN1Primitive.fromByteArray(arr) instanceof 
ASN1Primitive);
         }
 
         assertMockEndpointsSatisfied();
diff --git 
a/components/camel-asn1/src/test/java/org/apache/camel/dataformat/asn1/ASN1DataFormatWithStreamIteratorClassTest.java
 
b/components/camel-asn1/src/test/java/org/apache/camel/dataformat/asn1/ASN1DataFormatWithStreamIteratorClassTest.java
index c7e4eb2cfe9..f8df0a29afa 100644
--- 
a/components/camel-asn1/src/test/java/org/apache/camel/dataformat/asn1/ASN1DataFormatWithStreamIteratorClassTest.java
+++ 
b/components/camel-asn1/src/test/java/org/apache/camel/dataformat/asn1/ASN1DataFormatWithStreamIteratorClassTest.java
@@ -77,7 +77,6 @@ public class ASN1DataFormatWithStreamIteratorClassTest 
extends CamelTestSupport
 
         assertEquals(1, exchanges.size());
         for (Exchange exchange : exchanges) {
-            assertTrue(exchange.getIn().getBody() instanceof byte[]);
             // 
assertTrue(Arrays.equals(FileUtils.readFileToByteArray(testFile),
             // exchange.getIn().getBody(byte[].class)));
 
diff --git 
a/components/camel-asn1/src/test/java/org/apache/camel/dataformat/asn1/ASN1DataFormatWithStreamTest.java
 
b/components/camel-asn1/src/test/java/org/apache/camel/dataformat/asn1/ASN1DataFormatWithStreamTest.java
index 8f66982bce7..183662d7a5e 100644
--- 
a/components/camel-asn1/src/test/java/org/apache/camel/dataformat/asn1/ASN1DataFormatWithStreamTest.java
+++ 
b/components/camel-asn1/src/test/java/org/apache/camel/dataformat/asn1/ASN1DataFormatWithStreamTest.java
@@ -47,7 +47,6 @@ public class ASN1DataFormatWithStreamTest extends 
CamelTestSupport {
 
         assertEquals(1, exchanges.size());
         for (Exchange exchange : exchanges) {
-            assertTrue(exchange.getIn().getBody() instanceof byte[]);
             assertTrue(Arrays.equals(FileUtils.readFileToByteArray(testFile), 
exchange.getIn().getBody(byte[].class)));
         }
 
diff --git 
a/components/camel-aws/camel-aws2-s3/src/test/java/org/apache/camel/component/aws2/s3/integration/S3CopyObjectCustomerKeyIT.java
 
b/components/camel-aws/camel-aws2-s3/src/test/java/org/apache/camel/component/aws2/s3/integration/S3CopyObjectCustomerKeyIT.java
index 7424a8368e0..d5140e4826a 100644
--- 
a/components/camel-aws/camel-aws2-s3/src/test/java/org/apache/camel/component/aws2/s3/integration/S3CopyObjectCustomerKeyIT.java
+++ 
b/components/camel-aws/camel-aws2-s3/src/test/java/org/apache/camel/component/aws2/s3/integration/S3CopyObjectCustomerKeyIT.java
@@ -16,12 +16,7 @@
  */
 package org.apache.camel.component.aws2.s3.integration;
 
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.Reader;
-import java.nio.charset.Charset;
-import java.nio.charset.StandardCharsets;
+import java.io.InputStream;
 import java.security.SecureRandom;
 import java.util.Base64;
 import java.util.List;
@@ -37,10 +32,9 @@ import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.aws2.s3.AWS2S3Constants;
 import org.apache.camel.component.aws2.s3.AWS2S3Operations;
 import org.apache.camel.component.mock.MockEndpoint;
+import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
-import software.amazon.awssdk.core.ResponseInputStream;
 import software.amazon.awssdk.services.s3.model.GetObjectRequest;
-import software.amazon.awssdk.services.s3.model.GetObjectResponse;
 import software.amazon.awssdk.utils.Md5Utils;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -100,9 +94,9 @@ public class S3CopyObjectCustomerKeyIT extends Aws2S3Base {
             }
         });
 
-        ResponseInputStream<GetObjectResponse> s3 = 
res.getIn().getBody(ResponseInputStream.class);
-
-        assertEquals("Test", readInputStream(s3));
+        InputStream is = res.getIn().getBody(InputStream.class);
+        Assertions.assertNotNull(is);
+        assertEquals("Test", 
context.getTypeConverter().convertTo(String.class, is));
 
         Exchange res1 = template.request("direct:listObject", new Processor() {
 
@@ -153,15 +147,4 @@ public class S3CopyObjectCustomerKeyIT extends Aws2S3Base {
         }
     }
 
-    private String readInputStream(ResponseInputStream<GetObjectResponse> 
s3Object) throws IOException {
-        StringBuilder textBuilder = new StringBuilder();
-        try (Reader reader
-                = new BufferedReader(new InputStreamReader(s3Object, 
Charset.forName(StandardCharsets.UTF_8.name())))) {
-            int c = 0;
-            while ((c = reader.read()) != -1) {
-                textBuilder.append((char) c);
-            }
-        }
-        return textBuilder.toString();
-    }
 }
diff --git 
a/components/camel-azure/camel-azure-storage-blob/src/test/java/org/apache/camel/component/azure/storage/blob/integration/BlobConsumerIT.java
 
b/components/camel-azure/camel-azure-storage-blob/src/test/java/org/apache/camel/component/azure/storage/blob/integration/BlobConsumerIT.java
index 17b74f84d35..9fc9e8c1b85 100644
--- 
a/components/camel-azure/camel-azure-storage-blob/src/test/java/org/apache/camel/component/azure/storage/blob/integration/BlobConsumerIT.java
+++ 
b/components/camel-azure/camel-azure-storage-blob/src/test/java/org/apache/camel/component/azure/storage/blob/integration/BlobConsumerIT.java
@@ -16,9 +16,7 @@
  */
 package org.apache.camel.component.azure.storage.blob.integration;
 
-import java.io.BufferedReader;
 import java.io.File;
-import java.io.InputStreamReader;
 import java.nio.file.Path;
 import java.util.regex.Pattern;
 
@@ -100,12 +98,8 @@ class BlobConsumerIT extends Base {
         mockEndpoint.expectedMessageCount(1);
         mockEndpoint.assertIsSatisfied();
 
-        final BlobInputStream blobInputStream = 
mockEndpoint.getExchanges().get(0).getIn().getBody(BlobInputStream.class);
-        assertNotNull(blobInputStream, "BlobInputStream must be set");
-
-        final String bufferedText = new BufferedReader(new 
InputStreamReader(blobInputStream)).readLine();
-
-        assertEquals("Block Blob", bufferedText);
+        String text = 
mockEndpoint.getExchanges().get(0).getIn().getBody(String.class);
+        assertEquals("Block Blob", text);
     }
 
     @Test
@@ -132,24 +126,15 @@ class BlobConsumerIT extends Base {
 
         MockEndpoint.assertIsSatisfied(context());
 
-        final BlobInputStream blobInputStream = 
mockEndpoint.getExchanges().get(0).getIn().getBody(BlobInputStream.class);
-        final BlobInputStream blobInputStream2 = 
mockEndpoint.getExchanges().get(1).getIn().getBody(BlobInputStream.class);
-
-        assertNotNull(blobInputStream, "BlobInputStream must be set");
-        assertNotNull(blobInputStream2, "BlobInputStream must be set");
-
-        final String bufferedText = 
context().getTypeConverter().convertTo(String.class, blobInputStream);
-        final String bufferedText2 = 
context().getTypeConverter().convertTo(String.class, blobInputStream2);
-
-        assertEquals("Block Batch Blob 1", bufferedText);
-        assertEquals("Block Batch Blob 2", bufferedText2);
+        String text = 
mockEndpoint.getExchanges().get(0).getIn().getBody(String.class);
+        String text2 = 
mockEndpoint.getExchanges().get(1).getIn().getBody(String.class);
+        assertEquals("Block Batch Blob 1", text);
+        assertEquals("Block Batch Blob 2", text2);
 
         final File file = 
mockEndpointFile.getExchanges().get(0).getIn().getBody(File.class);
         final File file2 = 
mockEndpointFile.getExchanges().get(1).getIn().getBody(File.class);
-
         assertNotNull(file, "File must be set");
         assertNotNull(file2, "File must be set");
-
         assertEquals("Block Batch Blob 1", 
context().getTypeConverter().convertTo(String.class, file));
         assertEquals("Block Batch Blob 2", 
context().getTypeConverter().convertTo(String.class, file2));
     }
diff --git 
a/components/camel-barcode/src/test/java/org/apache/camel/dataformat/barcode/BarcodeUnmarshalTest.java
 
b/components/camel-barcode/src/test/java/org/apache/camel/dataformat/barcode/BarcodeUnmarshalTest.java
index 6a6f204957f..fec6d63c5c1 100644
--- 
a/components/camel-barcode/src/test/java/org/apache/camel/dataformat/barcode/BarcodeUnmarshalTest.java
+++ 
b/components/camel-barcode/src/test/java/org/apache/camel/dataformat/barcode/BarcodeUnmarshalTest.java
@@ -46,7 +46,7 @@ public class BarcodeUnmarshalTest extends BarcodeTestBase {
             }
         });
 
-        assertEquals(180, exchange.getOut().getHeader("ORIENTATION"));
+        assertEquals(180, exchange.getMessage().getHeader("ORIENTATION"));
 
     }
 
@@ -63,7 +63,7 @@ public class BarcodeUnmarshalTest extends BarcodeTestBase {
                         .process(new Processor() {
                             @Override
                             public void process(Exchange exchange) throws 
Exception {
-                                ByteArrayInputStream bis = new 
ByteArrayInputStream((byte[]) exchange.getIn().getBody());
+                                InputStream bis = 
exchange.getIn().getBody(InputStream.class);
                                 BinaryBitmap bitmap = new BinaryBitmap(
                                         new HybridBinarizer(new 
BufferedImageLuminanceSource(ImageIO.read(bis))));
                                 BitMatrix blackMatrix = 
bitmap.getBlackMatrix();
diff --git 
a/components/camel-cxf-transport/src/test/java/org/apache/camel/component/cxf/transport/CamelConduitTest.java
 
b/components/camel-cxf-transport/src/test/java/org/apache/camel/component/cxf/transport/CamelConduitTest.java
index bdcab1cd6b2..30e67b90ac6 100644
--- 
a/components/camel-cxf-transport/src/test/java/org/apache/camel/component/cxf/transport/CamelConduitTest.java
+++ 
b/components/camel-cxf-transport/src/test/java/org/apache/camel/component/cxf/transport/CamelConduitTest.java
@@ -28,6 +28,7 @@ import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.impl.DefaultCamelContext;
+import org.apache.camel.util.IOHelper;
 import org.apache.cxf.Bus;
 import org.apache.cxf.BusFactory;
 import org.apache.cxf.bus.spring.SpringBusFactory;
@@ -154,15 +155,10 @@ public class CamelConduitTest extends 
CamelTransportTestSupport {
     }
 
     public void verifyReceivedMessage(String content) {
-        ByteArrayInputStream bis = (ByteArrayInputStream) 
inMessage.getContent(InputStream.class);
-        byte bytes[] = new byte[bis.available()];
-        try {
-            bis.read(bytes);
-        } catch (IOException ex) {
-            LOG.warn("I/O error receiving messages: {}", ex.getMessage(), ex);
-        }
-        String reponse = new String(bytes);
-        assertEquals(content, reponse, "The reponse date should be equals");
+        InputStream is = inMessage.getContent(InputStream.class);
+        byte[] bytes = context().getTypeConverter().convertTo(byte[].class, 
is);
+        String response = new String(bytes);
+        assertEquals(content, response, "The response date should be equals");
 
     }
 }
diff --git 
a/components/camel-cxf-transport/src/test/java/org/apache/camel/component/cxf/transport/CamelDestinationTest.java
 
b/components/camel-cxf-transport/src/test/java/org/apache/camel/component/cxf/transport/CamelDestinationTest.java
index a5428e0cdb7..85c88ebbb33 100644
--- 
a/components/camel-cxf-transport/src/test/java/org/apache/camel/component/cxf/transport/CamelDestinationTest.java
+++ 
b/components/camel-cxf-transport/src/test/java/org/apache/camel/component/cxf/transport/CamelDestinationTest.java
@@ -151,12 +151,11 @@ public class CamelDestinationTest extends 
CamelTransportTestSupport {
         destination.shutdown();
     }
 
-    private void verifyReceivedMessage(Message inMessage, String content) 
throws IOException {
-        ByteArrayInputStream bis = (ByteArrayInputStream) 
inMessage.getContent(InputStream.class);
-        byte bytes[] = new byte[bis.available()];
-        bis.read(bytes);
-        String reponse = new String(bytes);
-        assertEquals(content, reponse, "The reponse date should be equals");
+    private void verifyReceivedMessage(Message inMessage, String content) {
+        InputStream is = inMessage.getContent(InputStream.class);
+        byte[] bytes = context().getTypeConverter().convertTo(byte[].class, 
is);
+        String response = new String(bytes);
+        assertEquals(content, response, "The response date should be equals");
     }
 
     @Test
diff --git 
a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/integration/FtpSimpleConsumeStreamingPartialReadIT.java
 
b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/integration/FtpSimpleConsumeStreamingPartialReadIT.java
index 435f8c3e165..d82a5d7db02 100644
--- 
a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/integration/FtpSimpleConsumeStreamingPartialReadIT.java
+++ 
b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/integration/FtpSimpleConsumeStreamingPartialReadIT.java
@@ -23,12 +23,12 @@ import java.util.concurrent.TimeUnit;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.file.GenericFile;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.junit.jupiter.api.Test;
 
 import static org.awaitility.Awaitility.await;
 import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 public class FtpSimpleConsumeStreamingPartialReadIT extends 
FtpServerTestSupport {
@@ -50,8 +50,9 @@ public class FtpSimpleConsumeStreamingPartialReadIT extends 
FtpServerTestSupport
         context.getRouteController().startRoute("foo");
 
         assertMockEndpointsSatisfied();
-        GenericFile<?> remoteFile1 = (GenericFile<?>) 
mock.getExchanges().get(0).getIn().getBody();
-        assertTrue(remoteFile1.getBody() instanceof InputStream);
+
+        InputStream is = 
mock.getExchanges().get(0).getIn().getBody(InputStream.class);
+        assertNotNull(is);
 
         // Wait a little bit for the move to finish.
         File resultFile = new File(path + File.separator + "failed", 
"hello.txt");
diff --git 
a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/integration/FtpSimpleConsumeStreamingStepwiseFalseIT.java
 
b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/integration/FtpSimpleConsumeStreamingStepwiseFalseIT.java
index e7b13a36871..64eb0f47d83 100644
--- 
a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/integration/FtpSimpleConsumeStreamingStepwiseFalseIT.java
+++ 
b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/integration/FtpSimpleConsumeStreamingStepwiseFalseIT.java
@@ -20,11 +20,10 @@ import java.io.InputStream;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.file.GenericFile;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.junit.jupiter.api.Test;
 
-import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 public class FtpSimpleConsumeStreamingStepwiseFalseIT extends 
FtpServerTestSupport {
 
@@ -51,8 +50,8 @@ public class FtpSimpleConsumeStreamingStepwiseFalseIT extends 
FtpServerTestSuppo
     }
 
     void assertMore(MockEndpoint mock) {
-        GenericFile<?> remoteFile = (GenericFile<?>) 
mock.getExchanges().get(0).getIn().getBody();
-        assertTrue(remoteFile.getBody() instanceof InputStream);
+        InputStream is = 
mock.getExchanges().get(0).getIn().getBody(InputStream.class);
+        assertNotNull(is);
     }
 
     MockEndpoint getMockEndpoint() {
diff --git 
a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/integration/FtpSimpleConsumeStreamingStepwiseIT.java
 
b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/integration/FtpSimpleConsumeStreamingStepwiseIT.java
index ca6ae8638b5..cfb56bc4a97 100644
--- 
a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/integration/FtpSimpleConsumeStreamingStepwiseIT.java
+++ 
b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/integration/FtpSimpleConsumeStreamingStepwiseIT.java
@@ -22,13 +22,12 @@ import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 import org.apache.camel.Producer;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.file.GenericFile;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.converter.IOConverter;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
-import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 // README (informative only, to be removed in final version):
 // The filesize at which this test fails is arbitrary, I suppose it depends on 
the FTP we are using and Java
@@ -54,10 +53,11 @@ public class FtpSimpleConsumeStreamingStepwiseIT extends 
FtpServerTestSupport {
     public void testFtpRoute() throws Exception {
         MockEndpoint resultEndpoint = getMockEndpoint("mock:result");
         resultEndpoint.expectedMessageCount(1);
+
         resultEndpoint.assertIsSatisfied();
 
-        GenericFile<?> remoteFile = (GenericFile<?>) 
resultEndpoint.getExchanges().get(0).getIn().getBody();
-        assertTrue(remoteFile.getBody() instanceof InputStream);
+        InputStream is = 
resultEndpoint.getExchanges().get(0).getIn().getBody(InputStream.class);
+        assertNotNull(is);
     }
 
     private void prepareFtpServer() throws Exception {
diff --git 
a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/integration/FtpSimpleConsumeStreamingWithMultipleFilesIT.java
 
b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/integration/FtpSimpleConsumeStreamingWithMultipleFilesIT.java
index 7f2638b347c..635ae0599ee 100644
--- 
a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/integration/FtpSimpleConsumeStreamingWithMultipleFilesIT.java
+++ 
b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/integration/FtpSimpleConsumeStreamingWithMultipleFilesIT.java
@@ -20,11 +20,10 @@ import java.io.InputStream;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.file.GenericFile;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.junit.jupiter.api.Test;
 
-import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 public class FtpSimpleConsumeStreamingWithMultipleFilesIT extends 
FtpServerTestSupport {
 
@@ -48,10 +47,10 @@ public class FtpSimpleConsumeStreamingWithMultipleFilesIT 
extends FtpServerTestS
 
         assertMockEndpointsSatisfied();
 
-        GenericFile<?> remoteFile1 = 
mock.getExchanges().get(0).getIn().getBody(GenericFile.class);
-        GenericFile<?> remoteFile2 = 
mock.getExchanges().get(1).getIn().getBody(GenericFile.class);
-        assertTrue(remoteFile1.getBody() instanceof InputStream);
-        assertTrue(remoteFile2.getBody() instanceof InputStream);
+        InputStream remoteFile1 = 
mock.getExchanges().get(0).getIn().getBody(InputStream.class);
+        assertNotNull(remoteFile1);
+        InputStream remoteFile2 = 
mock.getExchanges().get(1).getIn().getBody(InputStream.class);
+        assertNotNull(remoteFile2);
     }
 
     @Override
diff --git 
a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/integration/FtpStreamingMoveIT.java
 
b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/integration/FtpStreamingMoveIT.java
index 9fe34d2b9e9..5bea940f506 100644
--- 
a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/integration/FtpStreamingMoveIT.java
+++ 
b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/integration/FtpStreamingMoveIT.java
@@ -21,11 +21,11 @@ import java.io.InputStream;
 import java.util.concurrent.TimeUnit;
 
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.file.GenericFile;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.junit.jupiter.api.Test;
 
 import static org.awaitility.Awaitility.await;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 public class FtpStreamingMoveIT extends FtpServerTestSupport {
@@ -46,8 +46,8 @@ public class FtpStreamingMoveIT extends FtpServerTestSupport {
 
         assertMockEndpointsSatisfied();
 
-        GenericFile<?> remoteFile = (GenericFile<?>) 
mock.getExchanges().get(0).getIn().getBody();
-        assertTrue(remoteFile.getBody() instanceof InputStream);
+        InputStream is = 
mock.getExchanges().get(0).getIn().getBody(InputStream.class);
+        assertNotNull(is);
 
         // give time for consumer to rename file
         File file = ftpFile("mymove/done/hello.txt").toFile();
diff --git 
a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/sftp/integration/SftpSimpleConsumeStreamingIT.java
 
b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/sftp/integration/SftpSimpleConsumeStreamingIT.java
index 4ea829dc781..7acbca115dc 100644
--- 
a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/sftp/integration/SftpSimpleConsumeStreamingIT.java
+++ 
b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/sftp/integration/SftpSimpleConsumeStreamingIT.java
@@ -20,12 +20,11 @@ import java.io.InputStream;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.file.GenericFile;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.condition.EnabledIf;
 
-import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 @EnabledIf(value = 
"org.apache.camel.component.file.remote.services.SftpEmbeddedService#hasRequiredAlgorithms")
 public class SftpSimpleConsumeStreamingIT extends SftpServerTestSupport {
@@ -45,8 +44,9 @@ public class SftpSimpleConsumeStreamingIT extends 
SftpServerTestSupport {
         context.getRouteController().startRoute("foo");
 
         assertMockEndpointsSatisfied();
-        GenericFile<?> remoteFile = 
mock.getExchanges().get(0).getIn().getBody(GenericFile.class);
-        assertTrue(remoteFile.getBody() instanceof InputStream);
+
+        InputStream is = 
mock.getExchanges().get(0).getIn().getBody(InputStream.class);
+        assertNotNull(is);
     }
 
     @Override
diff --git 
a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/sftp/integration/SftpSimpleConsumeStreamingPartialReadIT.java
 
b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/sftp/integration/SftpSimpleConsumeStreamingPartialReadIT.java
index f3c66d1cec9..edfb3688539 100644
--- 
a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/sftp/integration/SftpSimpleConsumeStreamingPartialReadIT.java
+++ 
b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/sftp/integration/SftpSimpleConsumeStreamingPartialReadIT.java
@@ -23,13 +23,13 @@ import java.util.concurrent.TimeUnit;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.file.GenericFile;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.condition.EnabledIf;
 
 import static org.awaitility.Awaitility.await;
 import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
@@ -52,8 +52,9 @@ public class SftpSimpleConsumeStreamingPartialReadIT extends 
SftpServerTestSuppo
         context.getRouteController().startRoute("foo");
 
         assertMockEndpointsSatisfied();
-        GenericFile<?> remoteFile1 = (GenericFile<?>) 
mock.getExchanges().get(0).getIn().getBody();
-        assertTrue(remoteFile1.getBody() instanceof InputStream);
+
+        InputStream is = 
mock.getExchanges().get(0).getIn().getBody(InputStream.class);
+        assertNotNull(is);
 
         // Wait a little bit for the move to finish.
         File resultFile = new File(service.getFtpRootDir() + File.separator + 
"failed", "hello.txt");
diff --git 
a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/sftp/integration/SftpSimpleConsumeStreamingWithMultipleFilesIT.java
 
b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/sftp/integration/SftpSimpleConsumeStreamingWithMultipleFilesIT.java
index cc7392505ae..eb5e2480bf6 100644
--- 
a/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/sftp/integration/SftpSimpleConsumeStreamingWithMultipleFilesIT.java
+++ 
b/components/camel-ftp/src/test/java/org/apache/camel/component/file/remote/sftp/integration/SftpSimpleConsumeStreamingWithMultipleFilesIT.java
@@ -20,12 +20,11 @@ import java.io.InputStream;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.component.file.GenericFile;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.condition.EnabledIf;
 
-import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 
 @EnabledIf(value = 
"org.apache.camel.component.file.remote.services.SftpEmbeddedService#hasRequiredAlgorithms")
 public class SftpSimpleConsumeStreamingWithMultipleFilesIT extends 
SftpServerTestSupport {
@@ -47,10 +46,10 @@ public class SftpSimpleConsumeStreamingWithMultipleFilesIT 
extends SftpServerTes
 
         assertMockEndpointsSatisfied();
 
-        GenericFile<?> remoteFile1 = 
mock.getExchanges().get(0).getIn().getBody(GenericFile.class);
-        GenericFile<?> remoteFile2 = 
mock.getExchanges().get(1).getIn().getBody(GenericFile.class);
-        assertTrue(remoteFile1.getBody() instanceof InputStream);
-        assertTrue(remoteFile2.getBody() instanceof InputStream);
+        InputStream is = 
mock.getExchanges().get(0).getIn().getBody(InputStream.class);
+        assertNotNull(is);
+        InputStream is2 = 
mock.getExchanges().get(1).getIn().getBody(InputStream.class);
+        assertNotNull(is2);
     }
 
     @Override
diff --git 
a/components/camel-hl7/src/main/java/org/apache/camel/component/hl7/HL7MLLPNettyEncoder.java
 
b/components/camel-hl7/src/main/java/org/apache/camel/component/hl7/HL7MLLPNettyEncoder.java
index 5fb3b3f4607..231fcf7a3c9 100644
--- 
a/components/camel-hl7/src/main/java/org/apache/camel/component/hl7/HL7MLLPNettyEncoder.java
+++ 
b/components/camel-hl7/src/main/java/org/apache/camel/component/hl7/HL7MLLPNettyEncoder.java
@@ -20,6 +20,9 @@ import ca.uhn.hl7v2.model.Message;
 import io.netty.buffer.ByteBuf;
 import io.netty.channel.ChannelHandlerContext;
 import io.netty.handler.codec.MessageToByteEncoder;
+import org.apache.camel.StreamCache;
+
+import java.io.ByteArrayOutputStream;
 
 /**
  * HL7 MLLP Encoder for Netty
@@ -46,7 +49,13 @@ class HL7MLLPNettyEncoder extends 
MessageToByteEncoder<Object> {
         }
 
         byte[] body;
-        if (message instanceof Message) {
+        if (message instanceof StreamCache) {
+            // need to convert to byte array for the encoder
+            StreamCache sc = (StreamCache) message;
+            ByteArrayOutputStream bos = new ByteArrayOutputStream();
+            sc.writeTo(bos);
+            body = bos.toByteArray();
+        } else if (message instanceof Message) {
             body = ((Message) message).encode().getBytes(config.getCharset());
         } else if (message instanceof String) {
             body = ((String) message).getBytes(config.getCharset());
diff --git 
a/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7DataFormatTest.java
 
b/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7DataFormatTest.java
index 430f09e2153..1e23335e509 100644
--- 
a/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7DataFormatTest.java
+++ 
b/components/camel-hl7/src/test/java/org/apache/camel/component/hl7/HL7DataFormatTest.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.hl7;
 
 import java.io.ByteArrayInputStream;
+import java.io.InputStream;
 import java.nio.charset.Charset;
 
 import ca.uhn.hl7v2.model.Message;
@@ -51,7 +52,7 @@ public class HL7DataFormatTest extends CamelTestSupport {
     public void testMarshal() throws Exception {
         MockEndpoint mock = getMockEndpoint("mock:marshal");
         mock.expectedMessageCount(1);
-        mock.message(0).body().isInstanceOf(byte[].class);
+        mock.message(0).body().isInstanceOf(InputStream.class);
         mock.message(0).body(String.class).contains("MSA|AA|123");
         mock.message(0).body(String.class).contains("QRD|20080805120000");
 
@@ -65,7 +66,7 @@ public class HL7DataFormatTest extends CamelTestSupport {
     public void testMarshalISO8859() throws Exception {
         MockEndpoint mock = getMockEndpoint("mock:marshal");
         mock.expectedMessageCount(1);
-        mock.message(0).body().isInstanceOf(byte[].class);
+        mock.message(0).body().isInstanceOf(InputStream.class);
         mock.message(0).body(String.class).contains("MSA|AA|123");
         mock.message(0).body(String.class).contains("QRD|20080805120000");
         mock.message(0).body(String.class).not().contains(NONE_ISO_8859_1);
@@ -84,7 +85,7 @@ public class HL7DataFormatTest extends CamelTestSupport {
         template.sendBodyAndProperty("direct:marshal", message, 
Exchange.CHARSET_NAME, charsetName);
         assertMockEndpointsSatisfied();
 
-        byte[] body = (byte[]) mock.getExchanges().get(0).getIn().getBody();
+        byte[] body = mock.getExchanges().get(0).getIn().getBody(byte[].class);
         String msg = new String(body, Charset.forName(charsetName));
         assertTrue(msg.contains("MSA|AA|123"));
         assertTrue(msg.contains("QRD|20080805120000"));
@@ -94,7 +95,7 @@ public class HL7DataFormatTest extends CamelTestSupport {
     public void testMarshalUTF8() throws Exception {
         MockEndpoint mock = getMockEndpoint("mock:marshal");
         mock.expectedMessageCount(1);
-        mock.message(0).body().isInstanceOf(byte[].class);
+        mock.message(0).body().isInstanceOf(InputStream.class);
         mock.message(0).body(String.class).contains("MSA|AA|123");
         mock.message(0).body(String.class).contains("QRD|20080805120000");
         mock.message(0).body(String.class).contains(NONE_ISO_8859_1);
diff --git 
a/components/camel-jackson-avro/src/test/java/org/apache/camel/component/jackson/avro/JacksonAvroLookupResolverTest.java
 
b/components/camel-jackson-avro/src/test/java/org/apache/camel/component/jackson/avro/JacksonAvroLookupResolverTest.java
index bfb565a6103..aeebe04da45 100644
--- 
a/components/camel-jackson-avro/src/test/java/org/apache/camel/component/jackson/avro/JacksonAvroLookupResolverTest.java
+++ 
b/components/camel-jackson-avro/src/test/java/org/apache/camel/component/jackson/avro/JacksonAvroLookupResolverTest.java
@@ -36,7 +36,6 @@ public class JacksonAvroLookupResolverTest extends 
CamelTestSupport {
     public void testMarshalUnmarshalPojo() throws Exception {
         MockEndpoint mock1 = getMockEndpoint("mock:serialized");
         mock1.expectedMessageCount(1);
-        mock1.message(0).body().isInstanceOf(byte[].class);
 
         Pojo pojo = new Pojo("Hello");
         template.sendBody("direct:pojo", pojo);
diff --git 
a/components/camel-jackson-avro/src/test/java/org/apache/camel/component/jackson/avro/JacksonAvroMarshalUnmarshalJsonNodeTest.java
 
b/components/camel-jackson-avro/src/test/java/org/apache/camel/component/jackson/avro/JacksonAvroMarshalUnmarshalJsonNodeTest.java
index aaebba0bcb0..e7a231ec2fa 100644
--- 
a/components/camel-jackson-avro/src/test/java/org/apache/camel/component/jackson/avro/JacksonAvroMarshalUnmarshalJsonNodeTest.java
+++ 
b/components/camel-jackson-avro/src/test/java/org/apache/camel/component/jackson/avro/JacksonAvroMarshalUnmarshalJsonNodeTest.java
@@ -40,7 +40,6 @@ public class JacksonAvroMarshalUnmarshalJsonNodeTest extends 
CamelTestSupport {
     public void testMarshalUnmarshalJsonNode() throws Exception {
         MockEndpoint mock1 = getMockEndpoint("mock:serialized");
         mock1.expectedMessageCount(1);
-        mock1.message(0).body().isInstanceOf(byte[].class);
 
         Pojo pojo = new Pojo("Hello");
         template.sendBody("direct:pojo", pojo);
@@ -67,7 +66,6 @@ public class JacksonAvroMarshalUnmarshalJsonNodeTest extends 
CamelTestSupport {
     public void testMarshalUnmarshalJsonNodeList() throws Exception {
         MockEndpoint mock1 = getMockEndpoint("mock:serialized");
         mock1.expectedMessageCount(1);
-        mock1.message(0).body().isInstanceOf(byte[].class);
 
         List<JacksonAvroMarshalUnmarshalPojoListTest.Pojo> pojos = new 
ArrayList<>();
         pojos.add(new JacksonAvroMarshalUnmarshalPojoListTest.Pojo("Hello"));
diff --git 
a/components/camel-jackson-avro/src/test/java/org/apache/camel/component/jackson/avro/JacksonAvroMarshalUnmarshalPojoListTest.java
 
b/components/camel-jackson-avro/src/test/java/org/apache/camel/component/jackson/avro/JacksonAvroMarshalUnmarshalPojoListTest.java
index 7522e6e383f..544005da201 100644
--- 
a/components/camel-jackson-avro/src/test/java/org/apache/camel/component/jackson/avro/JacksonAvroMarshalUnmarshalPojoListTest.java
+++ 
b/components/camel-jackson-avro/src/test/java/org/apache/camel/component/jackson/avro/JacksonAvroMarshalUnmarshalPojoListTest.java
@@ -38,7 +38,6 @@ public class JacksonAvroMarshalUnmarshalPojoListTest extends 
CamelTestSupport {
     public void testMarshalUnmarshalPojoList() throws Exception {
         MockEndpoint mock1 = getMockEndpoint("mock:serialized");
         mock1.expectedMessageCount(1);
-        mock1.message(0).body().isInstanceOf(byte[].class);
 
         List<Pojo> pojos = new ArrayList<>();
         pojos.add(new Pojo("Hello"));
diff --git 
a/components/camel-jackson-avro/src/test/java/org/apache/camel/component/jackson/avro/JacksonAvroMarshalUnmarshalPojoTest.java
 
b/components/camel-jackson-avro/src/test/java/org/apache/camel/component/jackson/avro/JacksonAvroMarshalUnmarshalPojoTest.java
index a45d81d37dd..12e6ea53480 100644
--- 
a/components/camel-jackson-avro/src/test/java/org/apache/camel/component/jackson/avro/JacksonAvroMarshalUnmarshalPojoTest.java
+++ 
b/components/camel-jackson-avro/src/test/java/org/apache/camel/component/jackson/avro/JacksonAvroMarshalUnmarshalPojoTest.java
@@ -35,7 +35,6 @@ public class JacksonAvroMarshalUnmarshalPojoTest extends 
CamelTestSupport {
     public void testMarshalUnmarshalPojo() throws Exception {
         MockEndpoint mock1 = getMockEndpoint("mock:serialized");
         mock1.expectedMessageCount(1);
-        mock1.message(0).body().isInstanceOf(byte[].class);
 
         Pojo pojo = new Pojo("Hello");
         template.sendBody("direct:pojo", pojo);
diff --git 
a/components/camel-jackson-protobuf/src/test/java/org/apache/camel/component/jackson/protobuf/JacksonProtobufLookupResolverTest.java
 
b/components/camel-jackson-protobuf/src/test/java/org/apache/camel/component/jackson/protobuf/JacksonProtobufLookupResolverTest.java
index 3e30db3e2fb..c57504c553b 100644
--- 
a/components/camel-jackson-protobuf/src/test/java/org/apache/camel/component/jackson/protobuf/JacksonProtobufLookupResolverTest.java
+++ 
b/components/camel-jackson-protobuf/src/test/java/org/apache/camel/component/jackson/protobuf/JacksonProtobufLookupResolverTest.java
@@ -27,6 +27,8 @@ import org.apache.camel.spi.Registry;
 import org.apache.camel.test.junit5.CamelTestSupport;
 import org.junit.jupiter.api.Test;
 
+import java.io.InputStream;
+
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 
@@ -36,7 +38,6 @@ public class JacksonProtobufLookupResolverTest extends 
CamelTestSupport {
     public void testMarshalUnmarshalPojo() throws Exception {
         MockEndpoint mock1 = getMockEndpoint("mock:serialized");
         mock1.expectedMessageCount(1);
-        mock1.message(0).body().isInstanceOf(byte[].class);
 
         Pojo pojo = new Pojo("Hello");
         template.sendBody("direct:pojo", pojo);
diff --git 
a/components/camel-jackson-protobuf/src/test/java/org/apache/camel/component/jackson/protobuf/JacksonProtobufMarshalUnmarshalJsonNodeTest.java
 
b/components/camel-jackson-protobuf/src/test/java/org/apache/camel/component/jackson/protobuf/JacksonProtobufMarshalUnmarshalJsonNodeTest.java
index f2089246c1e..9da127a25e1 100644
--- 
a/components/camel-jackson-protobuf/src/test/java/org/apache/camel/component/jackson/protobuf/JacksonProtobufMarshalUnmarshalJsonNodeTest.java
+++ 
b/components/camel-jackson-protobuf/src/test/java/org/apache/camel/component/jackson/protobuf/JacksonProtobufMarshalUnmarshalJsonNodeTest.java
@@ -36,7 +36,6 @@ public class JacksonProtobufMarshalUnmarshalJsonNodeTest 
extends CamelTestSuppor
     public void testMarshalUnmarshalJsonNode() throws Exception {
         MockEndpoint mock1 = getMockEndpoint("mock:serialized");
         mock1.expectedMessageCount(1);
-        mock1.message(0).body().isInstanceOf(byte[].class);
 
         Pojo pojo = new Pojo("Hello");
         template.sendBody("direct:pojo", pojo);
diff --git 
a/components/camel-jackson-protobuf/src/test/java/org/apache/camel/component/jackson/protobuf/JacksonProtobufMarshalUnmarshalPojoTest.java
 
b/components/camel-jackson-protobuf/src/test/java/org/apache/camel/component/jackson/protobuf/JacksonProtobufMarshalUnmarshalPojoTest.java
index d5c7afc1080..8debd701b10 100644
--- 
a/components/camel-jackson-protobuf/src/test/java/org/apache/camel/component/jackson/protobuf/JacksonProtobufMarshalUnmarshalPojoTest.java
+++ 
b/components/camel-jackson-protobuf/src/test/java/org/apache/camel/component/jackson/protobuf/JacksonProtobufMarshalUnmarshalPojoTest.java
@@ -35,7 +35,6 @@ public class JacksonProtobufMarshalUnmarshalPojoTest extends 
CamelTestSupport {
     public void testMarshalUnmarshalPojo() throws Exception {
         MockEndpoint mock1 = getMockEndpoint("mock:serialized");
         mock1.expectedMessageCount(1);
-        mock1.message(0).body().isInstanceOf(byte[].class);
 
         Pojo pojo = new Pojo("Hello");
         template.sendBody("direct:pojo", pojo);
diff --git 
a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsStreamMessageTypeTest.java
 
b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsStreamMessageTypeNoStreamCachingTest.java
similarity index 96%
copy from 
components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsStreamMessageTypeTest.java
copy to 
components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsStreamMessageTypeNoStreamCachingTest.java
index 212ef6c9917..e3690fff555 100644
--- 
a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsStreamMessageTypeTest.java
+++ 
b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsStreamMessageTypeNoStreamCachingTest.java
@@ -16,10 +16,6 @@
  */
 package org.apache.camel.component.jms;
 
-import java.io.File;
-
-import javax.jms.ConnectionFactory;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.test.junit5.CamelTestSupport;
@@ -27,23 +23,27 @@ import org.apache.camel.util.FileUtil;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
+import javax.jms.ConnectionFactory;
+import java.io.File;
+
 import static 
org.apache.camel.component.jms.JmsComponent.jmsComponentAutoAcknowledge;
 import static org.apache.camel.test.junit5.TestSupport.assertIsInstanceOf;
 import static org.apache.camel.test.junit5.TestSupport.deleteDirectory;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
-public class JmsStreamMessageTypeTest extends CamelTestSupport {
+public class JmsStreamMessageTypeNoStreamCachingTest extends CamelTestSupport {
 
     @Override
     @BeforeEach
     public void setUp() throws Exception {
-        deleteDirectory("target/stream");
+        deleteDirectory("target/nostream");
         super.setUp();
     }
 
     @Override
     protected CamelContext createCamelContext() throws Exception {
         CamelContext camelContext = super.createCamelContext();
+        camelContext.setStreamCaching(false);
 
         ConnectionFactory connectionFactory = 
CamelJmsTestHelper.createConnectionFactory();
         JmsComponent jms = jmsComponentAutoAcknowledge(connectionFactory);
diff --git 
a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsStreamMessageTypeTest.java
 
b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsStreamMessageTypeTest.java
index 212ef6c9917..c68d6db8c8d 100644
--- 
a/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsStreamMessageTypeTest.java
+++ 
b/components/camel-jms/src/test/java/org/apache/camel/component/jms/JmsStreamMessageTypeTest.java
@@ -17,6 +17,7 @@
 package org.apache.camel.component.jms;
 
 import java.io.File;
+import java.io.InputStream;
 
 import javax.jms.ConnectionFactory;
 
@@ -62,10 +63,7 @@ public class JmsStreamMessageTypeTest extends 
CamelTestSupport {
         assertMockEndpointsSatisfied();
 
         Object body = 
getMockEndpoint("mock:result").getReceivedExchanges().get(0).getIn().getBody();
-        StreamMessageInputStream is = 
assertIsInstanceOf(StreamMessageInputStream.class, body);
-
-        // no more bytes should be available on the inputstream
-        assertEquals(0, is.available());
+        InputStream is = assertIsInstanceOf(InputStream.class, body);
 
         // assert on the content of input versus output file
         String srcContent = 
context.getTypeConverter().mandatoryConvertTo(String.class, new 
File("src/test/data/message1.xml"));
@@ -84,10 +82,7 @@ public class JmsStreamMessageTypeTest extends 
CamelTestSupport {
         assertMockEndpointsSatisfied();
 
         Object body = 
getMockEndpoint("mock:result").getReceivedExchanges().get(0).getIn().getBody();
-        StreamMessageInputStream is = 
assertIsInstanceOf(StreamMessageInputStream.class, body);
-
-        // no more bytes should be available on the inputstream
-        assertEquals(0, is.available());
+        InputStream is = assertIsInstanceOf(InputStream.class, body);
 
         // assert on the content of input versus output file
         String srcContent = 
context.getTypeConverter().mandatoryConvertTo(String.class, new 
File("src/test/data/message1.txt"));
diff --git 
a/components/camel-lzf/src/test/java/org/apache/camel/dataformat/lzf/LZFDataFormatTest.java
 
b/components/camel-lzf/src/test/java/org/apache/camel/dataformat/lzf/LZFDataFormatTest.java
index a334e1c9c54..41631af898e 100644
--- 
a/components/camel-lzf/src/test/java/org/apache/camel/dataformat/lzf/LZFDataFormatTest.java
+++ 
b/components/camel-lzf/src/test/java/org/apache/camel/dataformat/lzf/LZFDataFormatTest.java
@@ -89,6 +89,6 @@ public class LZFDataFormatTest extends CamelTestSupport {
     }
 
     private byte[] sendText(String destination) throws Exception {
-        return (byte[]) template.requestBody(destination, 
TEXT.getBytes("UTF-8"));
+        return template.requestBody(destination, TEXT.getBytes("UTF-8"), 
byte[].class);
     }
 }
diff --git 
a/components/camel-mina/src/generated/java/org/apache/camel/component/mina/MinaConverterLoader.java
 
b/components/camel-mina/src/generated/java/org/apache/camel/component/mina/MinaConverterLoader.java
index 3e876dbf800..811d109bc65 100644
--- 
a/components/camel-mina/src/generated/java/org/apache/camel/component/mina/MinaConverterLoader.java
+++ 
b/components/camel-mina/src/generated/java/org/apache/camel/component/mina/MinaConverterLoader.java
@@ -51,6 +51,8 @@ public final class MinaConverterLoader implements 
TypeConverterLoader, CamelCont
             (type, exchange, value) -> 
org.apache.camel.component.mina.MinaConverter.toString((org.apache.mina.core.buffer.IoBuffer)
 value, exchange));
         addTypeConverter(registry, org.apache.mina.core.buffer.IoBuffer.class, 
byte[].class, false,
             (type, exchange, value) -> 
org.apache.camel.component.mina.MinaConverter.toIoBuffer((byte[]) value));
+        addTypeConverter(registry, org.apache.mina.core.buffer.IoBuffer.class, 
org.apache.camel.StreamCache.class, false,
+            (type, exchange, value) -> 
org.apache.camel.component.mina.MinaConverter.toIoBuffer((org.apache.camel.StreamCache)
 value, exchange));
     }
 
     private static void addTypeConverter(TypeConverterRegistry registry, 
Class<?> toType, Class<?> fromType, boolean allowNull, 
SimpleTypeConverter.ConversionMethod method) { 
diff --git 
a/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaConverter.java
 
b/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaConverter.java
index 8f7b2735c45..73548c81271 100644
--- 
a/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaConverter.java
+++ 
b/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaConverter.java
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.component.mina;
 
+import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.ObjectInput;
@@ -23,6 +24,9 @@ import java.io.ObjectInputStream;
 
 import org.apache.camel.Converter;
 import org.apache.camel.Exchange;
+import org.apache.camel.StreamCache;
+import org.apache.camel.TypeConverter;
+import org.apache.camel.converter.stream.ByteArrayInputStreamCache;
 import org.apache.mina.core.buffer.IoBuffer;
 
 /**
@@ -67,4 +71,10 @@ public final class MinaConverter {
         buf.put(bytes);
         return buf;
     }
+
+    @Converter
+    public static IoBuffer toIoBuffer(StreamCache cache, Exchange exchange) 
throws Exception {
+        byte[] arr = 
exchange.getContext().getTypeConverter().mandatoryConvertTo(byte[].class, 
exchange, cache);
+        return toIoBuffer(arr);
+    }
 }
diff --git 
a/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaHelper.java
 
b/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaHelper.java
index 683eacddcbc..12d31002121 100644
--- 
a/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaHelper.java
+++ 
b/components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaHelper.java
@@ -18,11 +18,16 @@ package org.apache.camel.component.mina;
 
 import org.apache.camel.CamelExchangeException;
 import org.apache.camel.Exchange;
+import org.apache.camel.NoTypeConversionAvailableException;
+import org.apache.camel.StreamCache;
+import org.apache.mina.core.buffer.IoBuffer;
 import org.apache.mina.core.future.WriteFuture;
 import org.apache.mina.core.session.IoSession;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.io.File;
+
 /**
  * Helper class used internally by camel-mina using Apache MINA.
  */
@@ -47,6 +52,16 @@ public final class MinaHelper {
      */
     public static void writeBody(IoSession session, Object body, Exchange 
exchange, long writeTimeout)
             throws CamelExchangeException {
+
+        // if stream cached then mina needs to use byte array instead
+        if (body instanceof StreamCache) {
+            try {
+                body = 
exchange.getContext().getTypeConverter().mandatoryConvertTo(byte[].class, 
exchange, body);
+            } catch (NoTypeConversionAvailableException e) {
+                throw new CamelExchangeException("Error converting body to 
byte[]", exchange, e);
+            }
+        }
+
         // the write operation is asynchronous. Use WriteFuture to wait until 
the session has been written
         WriteFuture future = session.write(body);
         // must use a timeout as in some very high performance scenarios a 
write can cause thread hanging forever
diff --git 
a/components/camel-soap/src/test/java/org/apache/camel/dataformat/soap/SoapToSoapDontIgnoreTest.java
 
b/components/camel-soap/src/test/java/org/apache/camel/dataformat/soap/SoapToSoapDontIgnoreTest.java
index 74bbfb2ccb6..cd613e4d218 100644
--- 
a/components/camel-soap/src/test/java/org/apache/camel/dataformat/soap/SoapToSoapDontIgnoreTest.java
+++ 
b/components/camel-soap/src/test/java/org/apache/camel/dataformat/soap/SoapToSoapDontIgnoreTest.java
@@ -78,7 +78,7 @@ public class SoapToSoapDontIgnoreTest extends 
CamelTestSupport {
         assertMockEndpointsSatisfied();
         Exchange result = endpoint.assertExchangeReceived(0);
 
-        byte[] body = (byte[]) result.getIn().getBody();
+        byte[] body = result.getIn().getBody(byte[].class);
         InputStream stream = new ByteArrayInputStream(body);
         SOAPMessage request = MessageFactory.newInstance().createMessage(null, 
stream);
         assertTrue(null != request.getSOAPHeader()
diff --git 
a/components/camel-soap/src/test/java/org/apache/camel/dataformat/soap/SoapToSoapIgnoreTest.java
 
b/components/camel-soap/src/test/java/org/apache/camel/dataformat/soap/SoapToSoapIgnoreTest.java
index 89c12fdb80d..6c02360ac76 100644
--- 
a/components/camel-soap/src/test/java/org/apache/camel/dataformat/soap/SoapToSoapIgnoreTest.java
+++ 
b/components/camel-soap/src/test/java/org/apache/camel/dataformat/soap/SoapToSoapIgnoreTest.java
@@ -78,7 +78,7 @@ public class SoapToSoapIgnoreTest extends CamelTestSupport {
         assertMockEndpointsSatisfied();
         Exchange result = endpoint.assertExchangeReceived(0);
 
-        byte[] body = (byte[]) result.getIn().getBody();
+        byte[] body = result.getIn().getBody(byte[].class);
         InputStream stream = new ByteArrayInputStream(body);
         SOAPMessage request = MessageFactory.newInstance().createMessage(null, 
stream);
         assertTrue(null == request.getSOAPHeader()
diff --git 
a/components/camel-soap/src/test/java/org/apache/camel/dataformat/soap/SoapToSoapSingleDataFormatterTest.java
 
b/components/camel-soap/src/test/java/org/apache/camel/dataformat/soap/SoapToSoapSingleDataFormatterTest.java
index 848a367546b..f2bf9bda5a5 100644
--- 
a/components/camel-soap/src/test/java/org/apache/camel/dataformat/soap/SoapToSoapSingleDataFormatterTest.java
+++ 
b/components/camel-soap/src/test/java/org/apache/camel/dataformat/soap/SoapToSoapSingleDataFormatterTest.java
@@ -71,7 +71,7 @@ public class SoapToSoapSingleDataFormatterTest extends 
CamelTestSupport {
         assertMockEndpointsSatisfied();
         Exchange result = endpoint.assertExchangeReceived(0);
 
-        byte[] body = (byte[]) result.getIn().getBody();
+        byte[] body = result.getIn().getBody(byte[].class);
         InputStream stream = new ByteArrayInputStream(body);
         SOAPMessage request = MessageFactory.newInstance().createMessage(null, 
stream);
         assertTrue(null != request.getSOAPHeader()
diff --git 
a/components/camel-tarfile/src/main/java/org/apache/camel/dataformat/tarfile/TarElementInputStreamWrapper.java
 
b/components/camel-tarfile/src/main/java/org/apache/camel/dataformat/tarfile/TarElementInputStreamWrapper.java
index 90a271d45ea..d6a8db2be98 100644
--- 
a/components/camel-tarfile/src/main/java/org/apache/camel/dataformat/tarfile/TarElementInputStreamWrapper.java
+++ 
b/components/camel-tarfile/src/main/java/org/apache/camel/dataformat/tarfile/TarElementInputStreamWrapper.java
@@ -16,6 +16,8 @@
  */
 package org.apache.camel.dataformat.tarfile;
 
+import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;
+
 import java.io.BufferedInputStream;
 import java.io.IOException;
 import java.io.InputStream;
@@ -43,4 +45,19 @@ public class TarElementInputStreamWrapper extends 
BufferedInputStream {
             in = input;
         }
     }
+
+    @Override
+    public synchronized int available() throws IOException {
+        if (in instanceof TarArchiveInputStream) {
+            TarArchiveInputStream tai = (TarArchiveInputStream) in;
+            if (tai.getCurrentEntry() != null) {
+                // avoid NPE in TarArchiveInputStream.available which
+                // only works if there is a current entry
+                return tai.available();
+            } else {
+                return 0;
+            }
+        }
+        return super.available();
+    }
 }
diff --git 
a/components/camel-tarfile/src/test/java/org/apache/camel/dataformat/tarfile/SpringTarFileDataFormatTest.java
 
b/components/camel-tarfile/src/test/java/org/apache/camel/dataformat/tarfile/SpringTarFileDataFormatTest.java
index 261c7e12b0d..3819b9039d9 100644
--- 
a/components/camel-tarfile/src/test/java/org/apache/camel/dataformat/tarfile/SpringTarFileDataFormatTest.java
+++ 
b/components/camel-tarfile/src/test/java/org/apache/camel/dataformat/tarfile/SpringTarFileDataFormatTest.java
@@ -53,7 +53,7 @@ public class SpringTarFileDataFormatTest extends 
CamelSpringTestSupport {
 
         Exchange exchange = mock.getReceivedExchanges().get(0);
         assertEquals(exchange.getIn().getMessageId() + ".tar", 
exchange.getIn().getHeader(FILE_NAME));
-        assertArrayEquals(getTaredText(exchange.getIn().getMessageId()), 
(byte[]) exchange.getIn().getBody());
+        assertArrayEquals(getTaredText(exchange.getIn().getMessageId()), 
exchange.getIn().getBody(byte[].class));
     }
 
     @Test
@@ -67,7 +67,7 @@ public class SpringTarFileDataFormatTest extends 
CamelSpringTestSupport {
         assertMockEndpointsSatisfied();
 
         Exchange exchange = mock.getReceivedExchanges().get(0);
-        assertArrayEquals(getTaredText("poem.txt"), (byte[]) 
exchange.getIn().getBody());
+        assertArrayEquals(getTaredText("poem.txt"), 
exchange.getIn().getBody(byte[].class));
     }
 
     @Test
@@ -91,7 +91,7 @@ public class SpringTarFileDataFormatTest extends 
CamelSpringTestSupport {
 
         Exchange exchange = mock.getReceivedExchanges().get(0);
         assertEquals(exchange.getIn().getMessageId(), 
exchange.getIn().getHeader(FILE_NAME));
-        assertArrayEquals(TEXT.getBytes(UTF_8), (byte[]) 
exchange.getIn().getBody());
+        assertArrayEquals(TEXT.getBytes(UTF_8), 
exchange.getIn().getBody(byte[].class));
     }
 
     @Test
diff --git 
a/components/camel-tarfile/src/test/java/org/apache/camel/dataformat/tarfile/TarFileDataFormatTest.java
 
b/components/camel-tarfile/src/test/java/org/apache/camel/dataformat/tarfile/TarFileDataFormatTest.java
index 2ea3f3b1485..c614277eab3 100644
--- 
a/components/camel-tarfile/src/test/java/org/apache/camel/dataformat/tarfile/TarFileDataFormatTest.java
+++ 
b/components/camel-tarfile/src/test/java/org/apache/camel/dataformat/tarfile/TarFileDataFormatTest.java
@@ -73,7 +73,7 @@ public class TarFileDataFormatTest extends CamelTestSupport {
         Exchange exchange = mock.getReceivedExchanges().get(0);
         assertEquals(exchange.getIn().getMessageId() + ".tar", 
exchange.getIn().getHeader(FILE_NAME));
         
assertTrue(ObjectHelper.equalByteArray(getTaredText(exchange.getIn().getMessageId()),
-                (byte[]) exchange.getIn().getBody()));
+                exchange.getIn().getBody(byte[].class)));
     }
 
     @Test
@@ -87,7 +87,7 @@ public class TarFileDataFormatTest extends CamelTestSupport {
         assertMockEndpointsSatisfied();
 
         Exchange exchange = mock.getReceivedExchanges().get(0);
-        assertTrue(ObjectHelper.equalByteArray(getTaredText("poem.txt"), 
(byte[]) exchange.getIn().getBody()));
+        assertTrue(ObjectHelper.equalByteArray(getTaredText("poem.txt"), 
exchange.getIn().getBody(byte[].class)));
     }
 
     @Test
@@ -101,7 +101,7 @@ public class TarFileDataFormatTest extends CamelTestSupport 
{
         assertMockEndpointsSatisfied();
 
         Exchange exchange = mock.getReceivedExchanges().get(0);
-        assertTrue(ObjectHelper.equalByteArray(getTaredText("poem.txt"), 
(byte[]) exchange.getIn().getBody()));
+        assertTrue(ObjectHelper.equalByteArray(getTaredText("poem.txt"), 
exchange.getIn().getBody(byte[].class)));
     }
 
     @Test
@@ -118,7 +118,7 @@ public class TarFileDataFormatTest extends CamelTestSupport 
{
 
         Exchange exchange = mock.getReceivedExchanges().get(0);
         assertTrue(ObjectHelper.equalByteArray(getTaredTextInFolder("poems/", 
"poems/poem.txt"),
-                (byte[]) exchange.getIn().getBody()));
+                exchange.getIn().getBody(byte[].class)));
     }
 
     @Test
@@ -150,7 +150,7 @@ public class TarFileDataFormatTest extends CamelTestSupport 
{
 
         Exchange exchange = mock.getReceivedExchanges().get(0);
         assertEquals(exchange.getIn().getMessageId(), 
exchange.getIn().getHeader(FILE_NAME));
-        assertEquals(TEXT, new String((byte[]) exchange.getIn().getBody(), 
StandardCharsets.UTF_8));
+        assertEquals(TEXT, new String(exchange.getIn().getBody(byte[].class), 
StandardCharsets.UTF_8));
     }
 
     @Test
diff --git 
a/components/camel-zip-deflater/src/test/java/org/apache/camel/dataformat/deflater/GzipDataFormatTest.java
 
b/components/camel-zip-deflater/src/test/java/org/apache/camel/dataformat/deflater/GzipDataFormatTest.java
index 4cf1118905d..09e5684f07b 100644
--- 
a/components/camel-zip-deflater/src/test/java/org/apache/camel/dataformat/deflater/GzipDataFormatTest.java
+++ 
b/components/camel-zip-deflater/src/test/java/org/apache/camel/dataformat/deflater/GzipDataFormatTest.java
@@ -45,7 +45,7 @@ public class GzipDataFormatTest extends CamelTestSupport {
     }
 
     private byte[] sendText() {
-        return (byte[]) template.requestBody("direct:start", 
TEXT.getBytes(StandardCharsets.UTF_8));
+        return template.requestBody("direct:start", 
TEXT.getBytes(StandardCharsets.UTF_8), byte[].class);
     }
 
     @Test
diff --git 
a/components/camel-zip-deflater/src/test/java/org/apache/camel/dataformat/deflater/ZipDeflaterDataFormatTest.java
 
b/components/camel-zip-deflater/src/test/java/org/apache/camel/dataformat/deflater/ZipDeflaterDataFormatTest.java
index 27098a8bb61..ab14f844c14 100644
--- 
a/components/camel-zip-deflater/src/test/java/org/apache/camel/dataformat/deflater/ZipDeflaterDataFormatTest.java
+++ 
b/components/camel-zip-deflater/src/test/java/org/apache/camel/dataformat/deflater/ZipDeflaterDataFormatTest.java
@@ -33,6 +33,7 @@ import org.apache.camel.test.junit5.CamelTestSupport;
 import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assertions.fail;
 
@@ -131,7 +132,7 @@ public class ZipDeflaterDataFormatTest extends 
CamelTestSupport {
         sendText();
         result.assertIsSatisfied();
         List<Exchange> exchangeList = result.getExchanges();
-        assertTrue(exchangeList.get(0).getIn().getBody() instanceof byte[]);
+        exchangeList.get(0).getIn().getBody(byte[].class);
     }
 
     @Test
diff --git 
a/components/camel-zipfile/src/test/java/org/apache/camel/dataformat/zipfile/ZipFileDataFormatTest.java
 
b/components/camel-zipfile/src/test/java/org/apache/camel/dataformat/zipfile/ZipFileDataFormatTest.java
index a36044f6ab2..635515bae3c 100644
--- 
a/components/camel-zipfile/src/test/java/org/apache/camel/dataformat/zipfile/ZipFileDataFormatTest.java
+++ 
b/components/camel-zipfile/src/test/java/org/apache/camel/dataformat/zipfile/ZipFileDataFormatTest.java
@@ -99,7 +99,7 @@ public class ZipFileDataFormatTest extends CamelTestSupport {
 
         Exchange exchange = mock.getReceivedExchanges().get(0);
         assertEquals(exchange.getIn().getMessageId() + ".zip", 
exchange.getIn().getHeader(FILE_NAME));
-        assertArrayEquals(getZippedText(exchange.getIn().getMessageId()), 
(byte[]) exchange.getIn().getBody());
+        assertArrayEquals(getZippedText(exchange.getIn().getMessageId()), 
exchange.getIn().getBody(byte[].class));
     }
 
     @Test
@@ -183,7 +183,7 @@ public class ZipFileDataFormatTest extends CamelTestSupport 
{
 
         Exchange exchange = mock.getReceivedExchanges().get(0);
         assertEquals(exchange.getIn().getMessageId(), 
exchange.getIn().getHeader(FILE_NAME));
-        assertEquals(TEXT, new String((byte[]) exchange.getIn().getBody(), 
"UTF-8"));
+        assertEquals(TEXT, new String(exchange.getIn().getBody(byte[].class), 
"UTF-8"));
     }
 
     @Test
diff --git 
a/core/camel-xml-jaxp/src/generated/java/org/apache/camel/converter/jaxp/CamelXmlJaxpBulkConverterLoader.java
 
b/core/camel-xml-jaxp/src/generated/java/org/apache/camel/converter/jaxp/CamelXmlJaxpBulkConverterLoader.java
index ed9d0cbc853..16d305f247e 100644
--- 
a/core/camel-xml-jaxp/src/generated/java/org/apache/camel/converter/jaxp/CamelXmlJaxpBulkConverterLoader.java
+++ 
b/core/camel-xml-jaxp/src/generated/java/org/apache/camel/converter/jaxp/CamelXmlJaxpBulkConverterLoader.java
@@ -37,7 +37,7 @@ public final class CamelXmlJaxpBulkConverterLoader implements 
TypeConverterLoade
 
     @Override
     public int size() {
-        return 92;
+        return 94;
     }
 
     @Override
@@ -191,6 +191,9 @@ public final class CamelXmlJaxpBulkConverterLoader 
implements TypeConverterLoade
             if (value instanceof org.w3c.dom.Document) {
                 return getXmlConverter().toSource((org.w3c.dom.Document) 
value);
             }
+            if (value instanceof org.apache.camel.StreamCache) {
+                return 
getXmlConverter().toSource((org.apache.camel.StreamCache) value, exchange);
+            }
         } else if (to == javax.xml.transform.dom.DOMSource.class) {
             if (value instanceof org.w3c.dom.Document) {
                 return getXmlConverter().toDOMSource((org.w3c.dom.Document) 
value);
@@ -342,6 +345,9 @@ public final class CamelXmlJaxpBulkConverterLoader 
implements TypeConverterLoade
                     return obj;
                 }
             }
+            if (value instanceof org.apache.camel.StreamCache) {
+                return 
getXmlConverter().toDOMDocument((org.apache.camel.StreamCache) value, exchange);
+            }
         } else if (to == org.w3c.dom.Element.class) {
             if (value instanceof javax.xml.transform.Source) {
                 return 
getXmlConverter().toDOMElement((javax.xml.transform.Source) value);
@@ -513,6 +519,9 @@ public final class CamelXmlJaxpBulkConverterLoader 
implements TypeConverterLoade
             if (from == org.w3c.dom.Document.class) {
                 return this;
             }
+            if (from == org.apache.camel.StreamCache.class) {
+                return this;
+            }
         } else if (to == javax.xml.transform.dom.DOMSource.class) {
             if (from == org.w3c.dom.Document.class) {
                 return this;
@@ -659,6 +668,9 @@ public final class CamelXmlJaxpBulkConverterLoader 
implements TypeConverterLoade
             if (from == org.w3c.dom.NodeList.class) {
                 return this;
             }
+            if (from == org.apache.camel.StreamCache.class) {
+                return this;
+            }
         } else if (to == org.w3c.dom.Element.class) {
             if (from == javax.xml.transform.Source.class) {
                 return this;
diff --git 
a/core/camel-xml-jaxp/src/main/java/org/apache/camel/converter/jaxp/XmlConverter.java
 
b/core/camel-xml-jaxp/src/main/java/org/apache/camel/converter/jaxp/XmlConverter.java
index 750b4e20e20..6fd77812f48 100644
--- 
a/core/camel-xml-jaxp/src/main/java/org/apache/camel/converter/jaxp/XmlConverter.java
+++ 
b/core/camel-xml-jaxp/src/main/java/org/apache/camel/converter/jaxp/XmlConverter.java
@@ -56,6 +56,7 @@ import javax.xml.transform.stax.StAXSource;
 import javax.xml.transform.stream.StreamResult;
 import javax.xml.transform.stream.StreamSource;
 
+import org.apache.camel.StreamCache;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
@@ -854,6 +855,19 @@ public class XmlConverter {
         return is;
     }
 
+    @Converter(order = 64)
+    public Source toSource(StreamCache cache, Exchange exchange) {
+        byte[] arr = 
exchange.getContext().getTypeConverter().convertTo(byte[].class, exchange, 
cache);
+        return toSource(arr);
+    }
+
+    @Converter(order = 65)
+    public Document toDOMDocument(StreamCache cache, Exchange exchange)
+            throws IOException, SAXException, ParserConfigurationException {
+        byte[] arr = 
exchange.getContext().getTypeConverter().convertTo(byte[].class, exchange, 
cache);
+        return toDOMDocument(arr, exchange);
+    }
+
     /**
      * Converts the given Document to into text
      *

Reply via email to