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);