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 e91b40ae96eef0b6b5a14d7c8406a6cf54f822d8 Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Thu Mar 30 10:51:44 2023 +0200 CAMEL-19223: camel-core - StreamCache to have position method --- .../src/main/java/org/apache/camel/StreamCache.java | 7 +++++++ .../converter/stream/ByteArrayInputStreamCacheTest.java | 13 +++++++++++-- .../test/java/org/apache/camel/util/MessageHelperTest.java | 5 +++++ .../camel/converter/stream/ByteArrayInputStreamCache.java | 7 +++++++ .../apache/camel/converter/stream/FileInputStreamCache.java | 5 +++++ .../org/apache/camel/converter/stream/InputStreamCache.java | 4 ++++ .../java/org/apache/camel/converter/stream/ReaderCache.java | 5 +++++ .../main/java/org/apache/camel/util/xml/SourceCache.java | 5 +++++ .../java/org/apache/camel/util/xml/StreamSourceCache.java | 4 ++++ 9 files changed, 53 insertions(+), 2 deletions(-) diff --git a/core/camel-api/src/main/java/org/apache/camel/StreamCache.java b/core/camel-api/src/main/java/org/apache/camel/StreamCache.java index 622c9bc6e86..515ef286df8 100644 --- a/core/camel-api/src/main/java/org/apache/camel/StreamCache.java +++ b/core/camel-api/src/main/java/org/apache/camel/StreamCache.java @@ -77,4 +77,11 @@ public interface StreamCache { */ long length(); + /** + * Read position + * + * @return position or -1 if not supported in the cached implementation + */ + long position(); + } diff --git a/core/camel-core/src/test/java/org/apache/camel/converter/stream/ByteArrayInputStreamCacheTest.java b/core/camel-core/src/test/java/org/apache/camel/converter/stream/ByteArrayInputStreamCacheTest.java index 890c5704e78..70066f6d58e 100644 --- a/core/camel-core/src/test/java/org/apache/camel/converter/stream/ByteArrayInputStreamCacheTest.java +++ b/core/camel-core/src/test/java/org/apache/camel/converter/stream/ByteArrayInputStreamCacheTest.java @@ -30,12 +30,21 @@ public class ByteArrayInputStreamCacheTest extends ContextTestSupport { @Test public void testByteArrayInputStream() throws Exception { ByteArrayInputStreamCache cache = new ByteArrayInputStreamCache(new ByteArrayInputStream("<foo>bar</foo>".getBytes())); - + assertEquals(0, cache.position()); ByteArrayOutputStream bos = new ByteArrayOutputStream(); cache.writeTo(bos); - String s = context.getTypeConverter().convertTo(String.class, bos); assertEquals("<foo>bar</foo>", s); + assertEquals(14, cache.position()); + + // reset and try again + cache.reset(); + assertEquals(0, cache.position()); + bos = new ByteArrayOutputStream(); + cache.writeTo(bos); + s = context.getTypeConverter().convertTo(String.class, bos); + assertEquals("<foo>bar</foo>", s); + assertEquals(14, cache.position()); IOHelper.close(cache, bos); } diff --git a/core/camel-core/src/test/java/org/apache/camel/util/MessageHelperTest.java b/core/camel-core/src/test/java/org/apache/camel/util/MessageHelperTest.java index ab9947c9220..50bd014673d 100644 --- a/core/camel-core/src/test/java/org/apache/camel/util/MessageHelperTest.java +++ b/core/camel-core/src/test/java/org/apache/camel/util/MessageHelperTest.java @@ -80,6 +80,11 @@ public class MessageHelperTest { public long length() { return 0; } + + @Override + public long position() { + return 0; + } }); MessageHelper.resetStreamCache(message); assertTrue(reset.get(), "Should have reset the stream cache"); diff --git a/core/camel-support/src/main/java/org/apache/camel/converter/stream/ByteArrayInputStreamCache.java b/core/camel-support/src/main/java/org/apache/camel/converter/stream/ByteArrayInputStreamCache.java index 664793c4fa6..dac938d5238 100644 --- a/core/camel-support/src/main/java/org/apache/camel/converter/stream/ByteArrayInputStreamCache.java +++ b/core/camel-support/src/main/java/org/apache/camel/converter/stream/ByteArrayInputStreamCache.java @@ -31,11 +31,13 @@ import org.apache.camel.util.IOHelper; */ public class ByteArrayInputStreamCache extends FilterInputStream implements StreamCache { + private final ByteArrayInputStream bais; private final int length; private byte[] byteArrayForCopy; public ByteArrayInputStreamCache(ByteArrayInputStream in) { super(in); + this.bais = in; this.length = in.available(); } @@ -75,4 +77,9 @@ public class ByteArrayInputStreamCache extends FilterInputStream implements Stre public long length() { return length; } + + @Override + public long position() { + return length - bais.available(); + } } diff --git a/core/camel-support/src/main/java/org/apache/camel/converter/stream/FileInputStreamCache.java b/core/camel-support/src/main/java/org/apache/camel/converter/stream/FileInputStreamCache.java index c44abd8f7a4..2af4f309917 100644 --- a/core/camel-support/src/main/java/org/apache/camel/converter/stream/FileInputStreamCache.java +++ b/core/camel-support/src/main/java/org/apache/camel/converter/stream/FileInputStreamCache.java @@ -116,6 +116,11 @@ public final class FileInputStreamCache extends InputStream implements StreamCac return length; } + @Override + public long position() { + return -1; + } + @Override public int available() throws IOException { return getInputStream().available(); diff --git a/core/camel-support/src/main/java/org/apache/camel/converter/stream/InputStreamCache.java b/core/camel-support/src/main/java/org/apache/camel/converter/stream/InputStreamCache.java index 2413809745c..5c7cf3c54ab 100644 --- a/core/camel-support/src/main/java/org/apache/camel/converter/stream/InputStreamCache.java +++ b/core/camel-support/src/main/java/org/apache/camel/converter/stream/InputStreamCache.java @@ -56,4 +56,8 @@ public final class InputStreamCache extends ByteArrayInputStream implements Stre public long length() { return count; } + + public long position() { + return available() - count; + } } diff --git a/core/camel-support/src/main/java/org/apache/camel/converter/stream/ReaderCache.java b/core/camel-support/src/main/java/org/apache/camel/converter/stream/ReaderCache.java index 70e5dd618e4..03ad1c283df 100644 --- a/core/camel-support/src/main/java/org/apache/camel/converter/stream/ReaderCache.java +++ b/core/camel-support/src/main/java/org/apache/camel/converter/stream/ReaderCache.java @@ -69,6 +69,11 @@ public class ReaderCache extends StringReader implements StreamCache { return data.length(); } + @Override + public long position() { + return -1; + } + String getData() { return data; } diff --git a/core/camel-xml-jaxp/src/main/java/org/apache/camel/util/xml/SourceCache.java b/core/camel-xml-jaxp/src/main/java/org/apache/camel/util/xml/SourceCache.java index 4dc9b0f6d3e..f101997aff2 100644 --- a/core/camel-xml-jaxp/src/main/java/org/apache/camel/util/xml/SourceCache.java +++ b/core/camel-xml-jaxp/src/main/java/org/apache/camel/util/xml/SourceCache.java @@ -60,4 +60,9 @@ public final class SourceCache extends StringSource implements StreamCache { public long length() { return length; } + + @Override + public long position() { + return -1; + } } diff --git a/core/camel-xml-jaxp/src/main/java/org/apache/camel/util/xml/StreamSourceCache.java b/core/camel-xml-jaxp/src/main/java/org/apache/camel/util/xml/StreamSourceCache.java index 6d61187f1fb..e800ee82c91 100644 --- a/core/camel-xml-jaxp/src/main/java/org/apache/camel/util/xml/StreamSourceCache.java +++ b/core/camel-xml-jaxp/src/main/java/org/apache/camel/util/xml/StreamSourceCache.java @@ -123,4 +123,8 @@ public final class StreamSourceCache extends StreamSource implements StreamCache } } + @Override + public long position() { + return -1; + } }