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/

Reply via email to