On Mon, Feb 23, 2009 at 4:52 AM, <ningji...@apache.org> wrote: > Author: ningjiang > Date: Mon Feb 23 03:52:43 2009 > New Revision: 746872 > > URL: http://svn.apache.org/viewvc?rev=746872&view=rev > Log: > CAMEL-1370 caching the StreamSource by caching the inputStream or reader > > Modified: > > camel/trunk/camel-core/src/main/java/org/apache/camel/converter/stream/StreamCacheConverter.java > > camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/StreamCaching.java > > camel/trunk/camel-core/src/test/java/org/apache/camel/converter/stream/StreamCacheConverterTest.java > > camel/trunk/camel-core/src/test/java/org/apache/camel/processor/interceptor/StreamCachingInterceptorTest.java > > Modified: > camel/trunk/camel-core/src/main/java/org/apache/camel/converter/stream/StreamCacheConverter.java > URL: > http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/converter/stream/StreamCacheConverter.java?rev=746872&r1=746871&r2=746872&view=diff > ============================================================================== > --- > camel/trunk/camel-core/src/main/java/org/apache/camel/converter/stream/StreamCacheConverter.java > (original) > +++ > camel/trunk/camel-core/src/main/java/org/apache/camel/converter/stream/StreamCacheConverter.java > Mon Feb 23 03:52:43 2009 > @@ -45,18 +45,18 @@ > private XmlConverter converter = new XmlConverter(); > > @Converter > - public StreamCache convertToStreamCache(StreamSource source) throws > TransformerException { > - return new SourceCache(converter.toString(source)); > + public StreamCache convertToStreamCache(StreamSource source) throws > IOException { > + return new StreamSourceCache(source); > } > > @Converter > - public StreamCache convertToStreamCache(StringSource source) throws > TransformerException { > + public StreamCache convertToStreamCache(StringSource source) { > //no need to do stream caching for a StringSource > return null; > } > > @Converter > - public StreamCache convertToStreamCache(BytesSource source) throws > TransformerException { > + public StreamCache convertToStreamCache(BytesSource source) { > //no need to do stream caching for a BytesSource > return null; > } > @@ -95,6 +95,35 @@ > } > > } > + > + /* > + * {...@link StreamCache} implementation for Cache the StreamSource > {...@link StreamSource}s > + */ > + private class StreamSourceCache extends StreamSource implements > StreamCache { > + InputStreamCache inputStreamCache; > + ReaderCache readCache; > + > + public StreamSourceCache(StreamSource source) throws IOException { > + if (source.getInputStream() != null) { > + inputStreamCache = new > InputStreamCache(IOConverter.toBytes(source.getInputStream())); > + setInputStream(inputStreamCache); > + setSystemId(source.getSystemId()); > + } > + if (source.getReader() != null) { > + readCache = new > ReaderCache(IOConverter.toString(source.getReader())); > + setReader(readCache); > + } > + } > + public void reset() { > + if (inputStreamCache != null) { > + inputStreamCache.reset(); > + } > + if (readCache != null) { > + readCache.reset(); > + } > + } > + > + } > > private class InputStreamCache extends ByteArrayInputStream implements > StreamCache { > > > Modified: > camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/StreamCaching.java > URL: > http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/StreamCaching.java?rev=746872&r1=746871&r2=746872&view=diff > ============================================================================== > --- > camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/StreamCaching.java > (original) > +++ > camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/StreamCaching.java > Mon Feb 23 03:52:43 2009 > @@ -54,4 +54,18 @@ > } > context.addInterceptStrategy(new StreamCaching()); > } > + > + /** > + * Enable stream caching for a RouteContext > + * > + * @param context the route context > + */ > + public static void disable(RouteContext context) { > + for (InterceptStrategy strategy : context.getInterceptStrategies()) { > + if (strategy instanceof StreamCaching) { > + context.getInterceptStrategies().remove(strategy); > + return; > + } > + } > + } > } Shouldnt the javadoc for this one be disable the stream cache?
> > Modified: > camel/trunk/camel-core/src/test/java/org/apache/camel/converter/stream/StreamCacheConverterTest.java > URL: > http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/converter/stream/StreamCacheConverterTest.java?rev=746872&r1=746871&r2=746872&view=diff > ============================================================================== > --- > camel/trunk/camel-core/src/test/java/org/apache/camel/converter/stream/StreamCacheConverterTest.java > (original) > +++ > camel/trunk/camel-core/src/test/java/org/apache/camel/converter/stream/StreamCacheConverterTest.java > Mon Feb 23 03:52:43 2009 > @@ -20,6 +20,7 @@ > import java.io.IOException; > import java.io.InputStream; > > +import javax.xml.transform.Source; > import javax.xml.transform.TransformerException; > import javax.xml.transform.stream.StreamSource; > > @@ -42,13 +43,14 @@ > this.converter = new StreamCacheConverter(); > } > > - public void testConvertToStreamCacheStreamSource() throws > TransformerException, FileNotFoundException { > + public void testConvertToStreamCacheStreamSource() throws IOException, > FileNotFoundException, TransformerException { > StreamSource source = new StreamSource(getTestFileStream()); > - StreamSource cache = (StreamSource) > converter.convertToStreamCache(source); > + StreamCache cache = converter.convertToStreamCache(source); > //assert re-readability of the cached StreamSource > XmlConverter converter = new XmlConverter(); > - assertNotNull(converter.toString(cache)); > - assertNotNull(converter.toString(cache)); > + assertNotNull(converter.toString((Source)cache)); > + cache.reset(); > + assertNotNull(converter.toString((Source)cache)); > } > > public void testConvertToStreamCacheInputStream() throws IOException { > > Modified: > camel/trunk/camel-core/src/test/java/org/apache/camel/processor/interceptor/StreamCachingInterceptorTest.java > URL: > http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/interceptor/StreamCachingInterceptorTest.java?rev=746872&r1=746871&r2=746872&view=diff > ============================================================================== > --- > camel/trunk/camel-core/src/test/java/org/apache/camel/processor/interceptor/StreamCachingInterceptorTest.java > (original) > +++ > camel/trunk/camel-core/src/test/java/org/apache/camel/processor/interceptor/StreamCachingInterceptorTest.java > Mon Feb 23 03:52:43 2009 > @@ -81,7 +81,7 @@ > template.sendBody("direct:b", message); > > assertMockEndpointsSatisfied(); > - assertTrue(b.assertExchangeReceived(0).getIn().getBody() instanceof > StreamCache); > + assertTrue(b.assertExchangeReceived(0).getIn().getBody() instanceof > StreamCache); > > assertEquals(b.assertExchangeReceived(0).getIn().getBody(String.class), > MESSAGE); > } > > > > -- Claus Ibsen Apache Camel Committer Open Source Integration: http://fusesource.com Blog: http://davsclaus.blogspot.com/