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

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

commit b7779440d66b98d6d56bb9a1aad84a723ebf53e3
Author: Claus Ibsen <[email protected]>
AuthorDate: Tue Oct 22 13:36:01 2024 +0200

    CAMEL-21371: camel-core - Add converter for Reader to InputStream
---
 .../camel/jsonpath/JsonPathChoiceReaderTest.java   | 69 ++++++++++++++++++++++
 .../converter/CamelBaseBulkConverterLoader.java    |  9 ++-
 .../org/apache/camel/converter/IOConverter.java    | 53 +++++++++--------
 3 files changed, 106 insertions(+), 25 deletions(-)

diff --git 
a/components/camel-jsonpath/src/test/java/org/apache/camel/jsonpath/JsonPathChoiceReaderTest.java
 
b/components/camel-jsonpath/src/test/java/org/apache/camel/jsonpath/JsonPathChoiceReaderTest.java
new file mode 100644
index 00000000000..2e0a0e26c9d
--- /dev/null
+++ 
b/components/camel-jsonpath/src/test/java/org/apache/camel/jsonpath/JsonPathChoiceReaderTest.java
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.jsonpath;
+
+import java.io.StringReader;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.converter.stream.ReaderCache;
+import org.apache.camel.test.junit5.CamelTestSupport;
+import org.junit.jupiter.api.Test;
+
+public class JsonPathChoiceReaderTest extends CamelTestSupport {
+
+    @Override
+    protected RouteBuilder createRouteBuilder() {
+        return new RouteBuilder() {
+            @Override
+            public void configure() {
+                from("direct:start")
+                        .choice()
+                            .when().jsonpath("$[?(@.counter>0)]")
+                                .to("mock:positive")
+                            .otherwise()
+                                .to("mock:zero")
+                        .end();
+            }
+        };
+    }
+
+    @Test
+    public void testCounterStringReader() throws Exception {
+        getMockEndpoint("mock:positive").expectedBodiesReceived("{\"counter\": 
1}", "{\"counter\": 2}");
+        getMockEndpoint("mock:zero").expectedBodiesReceived("{\"counter\": 
0}");
+
+        template.sendBody("direct:start", new StringReader("{\"counter\": 
1}"));
+        template.sendBody("direct:start", new StringReader("{\"counter\": 
0}"));
+        template.sendBody("direct:start", new StringReader("{\"counter\": 
2}"));
+
+        MockEndpoint.assertIsSatisfied(context);
+    }
+
+    @Test
+    public void testCounterReaderCache() throws Exception {
+        getMockEndpoint("mock:positive").expectedBodiesReceived("{\"counter\": 
4}", "{\"counter\": 3}");
+        getMockEndpoint("mock:zero").expectedBodiesReceived("{\"counter\": 
0}");
+
+        template.sendBody("direct:start", new ReaderCache("{\"counter\": 4}"));
+        template.sendBody("direct:start", new ReaderCache("{\"counter\": 0}"));
+        template.sendBody("direct:start", new ReaderCache("{\"counter\": 3}"));
+
+        MockEndpoint.assertIsSatisfied(context);
+    }
+
+}
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 f743963ca6f..23466f74d32 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 129;
+        return 130;
     }
 
     @Override
@@ -166,6 +166,9 @@ public final class CamelBaseBulkConverterLoader implements 
TypeConverterLoader,
             if (value instanceof java.io.BufferedReader) {
                 return 
org.apache.camel.converter.IOConverter.toInputStream((java.io.BufferedReader) 
value, exchange);
             }
+            if (value instanceof java.io.Reader) {
+                return 
org.apache.camel.converter.IOConverter.toInputStream((java.io.Reader) value, 
exchange);
+            }
             if (value instanceof byte[]) {
                 return 
org.apache.camel.converter.IOConverter.toInputStream((byte[]) value);
             }
@@ -559,6 +562,7 @@ public final class CamelBaseBulkConverterLoader implements 
TypeConverterLoader,
         registry.addConverter(new 
TypeConvertible<>(java.lang.StringBuffer.class, java.io.InputStream.class), 
this);
         registry.addConverter(new 
TypeConvertible<>(java.lang.StringBuilder.class, java.io.InputStream.class), 
this);
         registry.addConverter(new 
TypeConvertible<>(java.io.BufferedReader.class, java.io.InputStream.class), 
this);
+        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);
@@ -760,6 +764,9 @@ public final class CamelBaseBulkConverterLoader implements 
TypeConverterLoader,
             if (from == java.io.BufferedReader.class) {
                 return this;
             }
+            if (from == java.io.Reader.class) {
+                return this;
+            }
             if (from == byte[].class) {
                 return this;
             }
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 a83ef509d33..7256877bb7f 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
@@ -161,37 +161,42 @@ public final class IOConverter {
     }
 
     @Converter(order = 19)
+    public static InputStream toInputStream(Reader buffer, Exchange exchange) 
throws IOException {
+        return toInputStream(toString(buffer), exchange);
+    }
+
+    @Converter(order = 20)
     public static String toString(byte[] data, Exchange exchange) throws 
IOException {
         return new String(data, ExchangeHelper.getCharset(exchange));
     }
 
-    @Converter(order = 20)
+    @Converter(order = 21)
     public static String toString(File file, Exchange exchange) throws 
IOException {
         return toString(file.toPath(), exchange);
     }
 
-    @Converter(order = 21)
+    @Converter(order = 22)
     public static String toString(Path file, Exchange exchange) throws 
IOException {
         return Files.readString(file, ExchangeHelper.getCharset(exchange));
     }
 
-    @Converter(order = 22)
+    @Converter(order = 23)
     public static byte[] toByteArray(File file) throws IOException {
         return toByteArray(file.toPath());
     }
 
-    @Converter(order = 23)
+    @Converter(order = 24)
     public static byte[] toByteArray(Path file) throws IOException {
         return Files.readAllBytes(file);
     }
 
-    @Converter(order = 24)
+    @Converter(order = 25)
     public static byte[] toByteArray(BufferedReader reader, Exchange exchange) 
throws IOException {
         String s = toString(reader);
         return toByteArray(s, exchange);
     }
 
-    @Converter(order = 25)
+    @Converter(order = 26)
     public static String toString(URL url, Exchange exchange) throws 
IOException {
         InputStream is = toInputStream(url);
         try {
@@ -201,39 +206,39 @@ public final class IOConverter {
         }
     }
 
-    @Converter(order = 26)
+    @Converter(order = 27)
     public static String toString(BufferedReader reader) throws IOException {
         return IOHelper.toString(reader);
     }
 
-    @Converter(order = 27)
+    @Converter(order = 28)
     public static String toString(Reader reader) throws IOException {
         return IOHelper.toString(reader);
     }
 
-    @Converter(order = 28)
+    @Converter(order = 29)
     public static byte[] toByteArray(Reader reader, Exchange exchange) throws 
IOException {
         return toByteArray(IOHelper.buffered(reader), exchange);
     }
 
-    @Converter(order = 29)
+    @Converter(order = 30)
     public static byte[] toByteArray(String value, Exchange exchange) throws 
IOException {
         return value.getBytes(ExchangeHelper.getCharset(exchange));
     }
 
-    @Converter(order = 30)
+    @Converter(order = 31)
     public static String toString(InputStream in, Exchange exchange) throws 
IOException {
         return toString(toReader(in, exchange));
     }
 
-    @Converter(order = 31)
+    @Converter(order = 32)
     public static InputStream toInputStream(byte[] data) {
         // no buffering required as the complete byte input is already passed
         // over as a whole
         return new ByteArrayInputStream(data);
     }
 
-    @Converter(order = 32)
+    @Converter(order = 33)
     public static ObjectOutput toObjectOutput(OutputStream stream) throws 
IOException {
         if (stream instanceof ObjectOutput out) {
             return out;
@@ -242,7 +247,7 @@ public final class IOConverter {
         }
     }
 
-    @Converter(order = 33)
+    @Converter(order = 34)
     public static ObjectInput toObjectInput(final InputStream stream, final 
Exchange exchange) throws IOException {
         if (stream instanceof ObjectInput objectInput) {
             return objectInput;
@@ -269,7 +274,7 @@ public final class IOConverter {
         }
     }
 
-    @Converter(order = 34)
+    @Converter(order = 35)
     public static byte[] toBytes(InputStream stream) throws IOException {
         ByteArrayOutputStream bos = new ByteArrayOutputStream();
         IOHelper.copyAndCloseInput(IOHelper.buffered(stream), bos);
@@ -279,36 +284,36 @@ public final class IOConverter {
         return bos.toByteArray();
     }
 
-    @Converter(order = 35)
+    @Converter(order = 36)
     public static byte[] toByteArray(ByteArrayOutputStream os) {
         return os.toByteArray();
     }
 
-    @Converter(order = 36)
+    @Converter(order = 37)
     public static ByteBuffer covertToByteBuffer(InputStream is) throws 
IOException {
         ByteArrayOutputStream os = new ByteArrayOutputStream();
         IOHelper.copyAndCloseInput(is, os);
         return ByteBuffer.wrap(os.toByteArray());
     }
 
-    @Converter(order = 37)
+    @Converter(order = 38)
     public static String toString(ByteArrayOutputStream os, Exchange exchange) 
throws IOException {
         return os.toString(ExchangeHelper.getCharset(exchange));
     }
 
-    @Converter(order = 38)
+    @Converter(order = 39)
     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 = 39)
+    @Converter(order = 40)
     public static Properties toProperties(File file) throws IOException {
         return toProperties(new FileInputStream(file));
     }
 
-    @Converter(order = 40)
+    @Converter(order = 41)
     public static Properties toProperties(InputStream is) throws IOException {
         Properties prop = new Properties();
         try {
@@ -319,7 +324,7 @@ public final class IOConverter {
         return prop;
     }
 
-    @Converter(order = 41)
+    @Converter(order = 42)
     public static Properties toProperties(Reader reader) throws IOException {
         Properties prop = new Properties();
         try {
@@ -330,12 +335,12 @@ public final class IOConverter {
         return prop;
     }
 
-    @Converter(order = 42)
+    @Converter(order = 43)
     public static Path toPath(File file) {
         return file.toPath();
     }
 
-    @Converter(order = 43)
+    @Converter(order = 44)
     public static File toFile(Path path) {
         return path.toFile();
     }

Reply via email to