You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2023/03/30 09:14:19 UTC
[camel] 01/02: CAMEL-19223: camel-core - StreamCache to have position method
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 <cl...@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;
+ }
}