Author: gertv
Date: Mon Oct 13 02:36:51 2008
New Revision: 703990

URL: http://svn.apache.org/viewvc?rev=703990&view=rev
Log:
CAMEL-973: Partial solution -- avoid unnecessary conversions to StreamCache

Modified:
    
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/converter/stream/StreamCacheConverter.java
    
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/interceptor/StreamCachingInterceptorTest.java

Modified: 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/converter/stream/StreamCacheConverter.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/converter/stream/StreamCacheConverter.java?rev=703990&r1=703989&r2=703990&view=diff
==============================================================================
--- 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/converter/stream/StreamCacheConverter.java
 (original)
+++ 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/converter/stream/StreamCacheConverter.java
 Mon Oct 13 02:36:51 2008
@@ -22,15 +22,15 @@
 import java.io.Reader;
 import java.io.StringReader;
 
-import javax.xml.transform.Source;
 import javax.xml.transform.TransformerException;
+import javax.xml.transform.sax.SAXSource;
 import javax.xml.transform.stream.StreamSource;
 
 import org.apache.camel.Converter;
 import org.apache.camel.converter.IOConverter;
+import org.apache.camel.converter.jaxp.BytesSource;
 import org.apache.camel.converter.jaxp.StringSource;
 import org.apache.camel.converter.jaxp.XmlConverter;
-import org.apache.camel.processor.interceptor.Debugger;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
@@ -45,8 +45,25 @@
     private XmlConverter converter = new XmlConverter();
 
     @Converter
-    public StreamCache convertToStreamCache(Source source) throws 
TransformerException {
-        return new StreamSourceCache(converter.toString(source));
+    public StreamCache convertToStreamCache(StreamSource source) throws 
TransformerException {
+        return new SourceCache(converter.toString(source));
+    }
+    
+    @Converter
+    public StreamCache convertToStreamCache(StringSource source) throws 
TransformerException {
+        //no need to do stream caching for a StringSource
+        return null;
+    }
+    
+    @Converter
+    public StreamCache convertToStreamCache(BytesSource source) throws 
TransformerException {
+        //no need to do stream caching for a StringSource
+        return null;
+    }
+    
+    @Converter
+    public StreamCache convertToStreamCache(SAXSource source) throws 
TransformerException {
+        return new SourceCache(converter.toString(source));
     }
 
     @Converter
@@ -59,11 +76,14 @@
         return new ReaderCache(IOConverter.toString(reader));
     }
 
-    private class StreamSourceCache extends StringSource implements 
StreamCache {
+    /*
+     * [EMAIL PROTECTED] StreamCache} implementation for [EMAIL PROTECTED] 
Source}s
+     */
+    private class SourceCache extends StringSource implements StreamCache {
 
         private static final long serialVersionUID = 4147248494104812945L;
 
-        public StreamSourceCache(String text) {
+        public SourceCache(String text) {
             super(text);
         }
 

Modified: 
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/interceptor/StreamCachingInterceptorTest.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/interceptor/StreamCachingInterceptorTest.java?rev=703990&r1=703989&r2=703990&view=diff
==============================================================================
--- 
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/interceptor/StreamCachingInterceptorTest.java
 (original)
+++ 
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/interceptor/StreamCachingInterceptorTest.java
 Mon Oct 13 02:36:51 2008
@@ -22,11 +22,16 @@
 import java.util.LinkedList;
 import java.util.List;
 
+import javax.xml.transform.Source;
 import javax.xml.transform.stream.StreamSource;
 
 import org.apache.camel.ContextTestSupport;
+import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.converter.jaxp.BytesSource;
+import org.apache.camel.converter.jaxp.StringSource;
+import org.apache.camel.converter.jaxp.XmlConverter;
 import org.apache.camel.converter.stream.StreamCache;
 import org.apache.camel.model.InterceptorRef;
 import org.apache.camel.model.InterceptorType;
@@ -34,45 +39,67 @@
 
 public class StreamCachingInterceptorTest extends ContextTestSupport {
 
+    private static final String MESSAGE = "<hello>world!</hello>";
+    private static final String BODY_TYPE = "body.type";
+    
     private MockEndpoint a;
     private MockEndpoint b;
+    private final XmlConverter converter = new XmlConverter();
 
     public void testConvertStreamSourceWithRouteBuilderStreamCaching() throws 
Exception {
         a.expectedMessageCount(1);
 
-        StreamSource message = new StreamSource(new 
StringReader("<hello>world!</hello>"));
+        StreamSource message = new StreamSource(new StringReader(MESSAGE));
         template.sendBody("direct:a", message);
 
         assertMockEndpointsSatisfied();
         assertTrue(a.assertExchangeReceived(0).getIn().getBody() instanceof 
StreamCache);
     }
+    
+    public void testNoConversionForOtherXmlSourceTypes() throws Exception {
+        a.expectedMessageCount(3);
+
+        send(converter.toDOMSource(MESSAGE));
+        send(new StringSource(MESSAGE));
+        send(new BytesSource(MESSAGE.getBytes()));
+
+        assertMockEndpointsSatisfied();
+        for (Exchange exchange : a.getExchanges()) {
+            assertFalse(exchange.getIn().getHeader(BODY_TYPE, 
Class.class).toString() + " shouldn't have been converted to StreamCache", 
+                        exchange.getIn().getBody() instanceof StreamCache);
+        }        
+    }
+
+    private void send(Source source) {
+        template.sendBodyAndHeader("direct:a", source, BODY_TYPE, 
source.getClass());
+    }
 
     public void testConvertStreamSourceWithRouteOnlyStreamCaching() throws 
Exception {
         b.expectedMessageCount(1);
 
-        StreamSource message = new StreamSource(new 
StringReader("<hello>world!</hello>"));
+        StreamSource message = new StreamSource(new StringReader(MESSAGE));
         template.sendBody("direct:b", message);
 
         assertMockEndpointsSatisfied();
         assertTrue(b.assertExchangeReceived(0).getIn().getBody() instanceof 
StreamCache);
-        
assertEquals(b.assertExchangeReceived(0).getIn().getBody(String.class), 
"<hello>world!</hello>");
+        
assertEquals(b.assertExchangeReceived(0).getIn().getBody(String.class), 
MESSAGE);
     }
 
     public void testConvertInputStreamWithRouteBuilderStreamCaching() throws 
Exception {
         a.expectedMessageCount(1);
 
-        InputStream message = new 
ByteArrayInputStream("<hello>world!</hello>".getBytes());
+        InputStream message = new ByteArrayInputStream(MESSAGE.getBytes());
         template.sendBody("direct:a", message);
 
         assertMockEndpointsSatisfied();
         assertTrue(a.assertExchangeReceived(0).getIn().getBody() instanceof 
StreamCache);
-        
assertEquals(a.assertExchangeReceived(0).getIn().getBody(String.class), 
"<hello>world!</hello>");
+        
assertEquals(a.assertExchangeReceived(0).getIn().getBody(String.class), 
MESSAGE);
     }
 
     public void testIgnoreAlreadyRereadable() throws Exception {
         a.expectedMessageCount(1);
 
-        template.sendBody("direct:a", "<hello>world!</hello>");
+        template.sendBody("direct:a", MESSAGE);
 
         assertMockEndpointsSatisfied();
         assertTrue(a.assertExchangeReceived(0).getIn().getBody() instanceof 
String);


Reply via email to