Author: davsclaus
Date: Tue Jan 13 22:39:58 2009
New Revision: 734348
URL: http://svn.apache.org/viewvc?rev=734348&view=rev
Log:
CAMEL-1251: Dynamic recipient list not handles a single String with endpoints
seperated with comma. Exposes a seperator attribute in Spring DSL to set it.
Polished zip dataformat.
Added:
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RecipientListWithStringDelimitedHeaderTest.java
(contents, props changed)
- copied, changed from r734141,
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RecipientListWithArrayHeaderTest.java
activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListWithStringDelimitedHeaderTest.java
(contents, props changed)
- copied, changed from r734141,
activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListWithArrayHeaderTest.java
activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/recipientListWithStringDelimitedHeader.xml
(contents, props changed)
- copied, changed from r734141,
activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/recipientListWithArrayHeader.xml
Modified:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/ZipDataFormat.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/RecipientListType.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/dataformat/ZipDataFormat.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/RecipientList.java
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/impl/ZipDataFormatTest.java
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/util/ObjectHelperTest.java
Modified:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/ZipDataFormat.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/ZipDataFormat.java?rev=734348&r1=734347&r2=734348&view=diff
==============================================================================
---
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/ZipDataFormat.java
(original)
+++
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/ZipDataFormat.java
Tue Jan 13 22:39:58 2009
@@ -26,10 +26,10 @@
import org.apache.camel.Exchange;
import org.apache.camel.converter.IOConverter;
import org.apache.camel.spi.DataFormat;
+import org.apache.camel.util.ExchangeHelper;
public class ZipDataFormat implements DataFormat {
- private static final int INITIALBYTEARRAYSIZE = 1048576;
private int compressionLevel;
public ZipDataFormat() {
@@ -40,43 +40,31 @@
this.compressionLevel = compressionLevel;
}
- public void marshal(Exchange exchange, Object body, OutputStream stream)
+ public void marshal(Exchange exchange, Object graph, OutputStream stream)
throws Exception {
- InputStream is;
- if (body instanceof InputStream) {
- is = (InputStream)body;
- }
- is = exchange.getIn().getBody(InputStream.class);
+
+ InputStream is =
exchange.getContext().getTypeConverter().convertTo(InputStream.class, graph);
if (is == null) {
- throw new IllegalArgumentException("Can't get the inputstream for
ZipDataFormat mashalling");
+ throw new IllegalArgumentException("Cannot get the inputstream for
ZipDataFormat mashalling");
}
-
- DeflaterOutputStream zipOutput = new DeflaterOutputStream(stream, new
Deflater(compressionLevel));
-
- // Compress the data
- IOConverter.copy(is, zipOutput);
- zipOutput.close();
+ DeflaterOutputStream zipOutput = new DeflaterOutputStream(stream, new
Deflater(compressionLevel));
+ try {
+ IOConverter.copy(is, zipOutput);
+ } finally {
+ zipOutput.close();
+ }
}
public Object unmarshal(Exchange exchange, InputStream stream)
throws Exception {
-
- InputStream is = stream;
- if (is == null) {
- exchange.getIn().getBody(InputStream.class);
- }
- if (is == null) {
- throw new IllegalArgumentException("Can't get the inputStream for
ZipDataFormat unmashalling");
- }
-
+
+ InputStream is = ExchangeHelper.getMandatoryInBody(exchange,
InputStream.class);
InflaterInputStream unzipInput = new InflaterInputStream(is);
// Create an expandable byte array to hold the inflated data
ByteArrayOutputStream bos = new ByteArrayOutputStream();
-
- IOConverter.copy(unzipInput, bos);
-
+ IOConverter.copy(unzipInput, bos);
return bos.toByteArray();
}
Modified:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/RecipientListType.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/RecipientListType.java?rev=734348&r1=734347&r2=734348&view=diff
==============================================================================
---
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/RecipientListType.java
(original)
+++
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/RecipientListType.java
Tue Jan 13 22:39:58 2009
@@ -18,10 +18,12 @@
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlRootElement;
import org.apache.camel.Expression;
import org.apache.camel.Processor;
+import org.apache.camel.builder.ExpressionBuilder;
import org.apache.camel.builder.ExpressionClause;
import org.apache.camel.model.language.ExpressionType;
import org.apache.camel.processor.RecipientList;
@@ -36,6 +38,9 @@
@XmlAccessorType(XmlAccessType.FIELD)
public class RecipientListType extends ExpressionNode {
+ @XmlAttribute(required = false)
+ private String delimiter;
+
public RecipientListType() {
}
@@ -59,7 +64,14 @@
@Override
public Processor createProcessor(RouteContext routeContext) throws
Exception {
- return new
RecipientList(getExpression().createExpression(routeContext));
+ Expression expression = getExpression().createExpression(routeContext);
+
+ // add a tokenizer if we have a delimiter
+ if (delimiter != null) {
+ expression = ExpressionBuilder.tokenizeExpression(expression,
delimiter);
+ }
+
+ return new RecipientList(expression);
}
// Fluent API
@@ -71,4 +83,15 @@
public ExpressionClause<RecipientListType> expression() {
return ExpressionClause.createAndSetExpression(this);
}
+
+ // Properties
+ //-------------------------------------------------------------------------
+
+ public String getDelimiter() {
+ return delimiter;
+ }
+
+ public void setDelimiter(String delimiter) {
+ this.delimiter = delimiter;
+ }
}
Modified:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/dataformat/ZipDataFormat.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/dataformat/ZipDataFormat.java?rev=734348&r1=734347&r2=734348&view=diff
==============================================================================
---
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/dataformat/ZipDataFormat.java
(original)
+++
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/dataformat/ZipDataFormat.java
Tue Jan 13 22:39:58 2009
@@ -36,7 +36,6 @@
private int compressionLevel = Deflater.BEST_SPEED;
public ZipDataFormat() {
-
}
public ZipDataFormat(int compressionLevel) {
Modified:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/RecipientList.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/RecipientList.java?rev=734348&r1=734347&r2=734348&view=diff
==============================================================================
---
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/RecipientList.java
(original)
+++
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/RecipientList.java
Tue Jan 13 22:39:58 2009
@@ -76,6 +76,10 @@
}
protected Endpoint resolveEndpoint(Exchange exchange, Object recipient) {
+ // trim strings as end users might have added spaces between separators
+ if (recipient instanceof String) {
+ recipient = ((String)recipient).trim();
+ }
return ExchangeHelper.resolveEndpoint(exchange, recipient);
}
Modified:
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java?rev=734348&r1=734347&r2=734348&view=diff
==============================================================================
---
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java
(original)
+++
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/util/ObjectHelper.java
Tue Jan 13 22:39:58 2009
@@ -30,6 +30,7 @@
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
+import java.util.Scanner;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
@@ -349,6 +350,11 @@
throw new UnsupportedOperationException();
}
};
+ } else if (value instanceof String) {
+ Scanner scanner = new Scanner((String)value);
+ // use comma as delimiter for String values
+ scanner.useDelimiter(",");
+ return scanner;
} else {
return Collections.singletonList(value).iterator();
}
Modified:
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/impl/ZipDataFormatTest.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/impl/ZipDataFormatTest.java?rev=734348&r1=734347&r2=734348&view=diff
==============================================================================
---
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/impl/ZipDataFormatTest.java
(original)
+++
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/impl/ZipDataFormatTest.java
Tue Jan 13 22:39:58 2009
@@ -19,21 +19,18 @@
import java.io.ByteArrayOutputStream;
import java.util.zip.Deflater;
import java.util.zip.Inflater;
-import org.apache.camel.CamelContext;
+
+import org.apache.camel.ContextTestSupport;
import org.apache.camel.Exchange;
import org.apache.camel.Message;
import org.apache.camel.Processor;
-import org.apache.camel.ProducerTemplate;
-import org.apache.camel.TestSupport;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
-
-
/**
* Unit test of the zip data format.
*/
-public class ZipDataFormatTest extends TestSupport {
+public class ZipDataFormatTest extends ContextTestSupport {
private static final String TEXT = "The Cow in Apple Time \n"
+ "by: Robert Frost \n\n"
+ "Something inspires the only cow of late\n"
@@ -48,24 +45,12 @@
+ "She bellows on a knoll against the sky.\n"
+ "Her udder shrivels and the milk goes dry.";
- private CamelContext context;
- private ProducerTemplate template;
-
-
-
- protected void setUp() throws Exception {
- context = new DefaultCamelContext();
- template = context.createProducerTemplate();
- template.start();
+ @Override
+ public boolean isUseRouteBuilder() {
+ return false;
}
- protected void tearDown() throws Exception {
- template.stop();
- context.stop();
- }
-
private void sendText() throws Exception {
-
template.send("direct:start", new Processor() {
public void process(Exchange exchange) throws Exception {
// Set the property of the charset encoding
@@ -78,7 +63,6 @@
}
public void testMarshalTextToZipBestCompression() throws Exception {
-
context.addRoutes(new RouteBuilder() {
public void configure() {
from("direct:start").marshal().zip(Deflater.BEST_COMPRESSION).process(new
ZippedMessageProcessor());
@@ -90,7 +74,6 @@
}
public void testMarshalTextToZipBestSpeed() throws Exception {
-
context.addRoutes(new RouteBuilder() {
public void configure() {
from("direct:start").marshal().zip(Deflater.BEST_SPEED).process(new
ZippedMessageProcessor());
@@ -103,7 +86,6 @@
}
public void testMarshalTextToZipDefaultCompression() throws Exception {
-
context.addRoutes(new RouteBuilder() {
public void configure() {
from("direct:start").marshal().zip(Deflater.DEFAULT_COMPRESSION).process(new
ZippedMessageProcessor());
@@ -115,13 +97,13 @@
}
public void testUnMarshalTextToZip() throws Exception {
-
context.addRoutes(new RouteBuilder() {
public void configure() {
from("direct:start").marshal().zip().unmarshal().zip().to("mock:result");
}
});
context.start();
+
MockEndpoint result = (MockEndpoint)context.getEndpoint("mock:result");
result.expectedBodiesReceived(TEXT);
sendText();
Copied:
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RecipientListWithStringDelimitedHeaderTest.java
(from r734141,
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RecipientListWithArrayHeaderTest.java)
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RecipientListWithStringDelimitedHeaderTest.java?p2=activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RecipientListWithStringDelimitedHeaderTest.java&p1=activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RecipientListWithArrayHeaderTest.java&r1=734141&r2=734348&rev=734348&view=diff
==============================================================================
---
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RecipientListWithArrayHeaderTest.java
(original)
+++
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RecipientListWithStringDelimitedHeaderTest.java
Tue Jan 13 22:39:58 2009
@@ -23,7 +23,7 @@
/**
* @version $Revision$
*/
-public class RecipientListWithArrayHeaderTest extends ContextTestSupport {
+public class RecipientListWithStringDelimitedHeaderTest extends
ContextTestSupport {
public void testSendingAMessageUsingMulticastReceivesItsOwnExchange()
throws Exception {
MockEndpoint x = getMockEndpoint("mock:x");
@@ -40,19 +40,18 @@
}
protected void sendBody() {
- template.sendBodyAndHeader("direct:a", "answer", "recipientListHeader",
- new String[] {"mock:x", "mock:y", "mock:z"});
+ template.sendBodyAndHeader("direct:a", "answer", "myHeader", "mock:x,
mock:y, mock:z");
}
protected RouteBuilder createRouteBuilder() {
return new RouteBuilder() {
public void configure() {
// START SNIPPET: example
- from("direct:a").recipientList(header("recipientListHeader"));
+ from("direct:a").recipientList(header("myHeader"));
// END SNIPPET: example
}
};
}
-}
+}
\ No newline at end of file
Propchange:
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RecipientListWithStringDelimitedHeaderTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RecipientListWithStringDelimitedHeaderTest.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Propchange:
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RecipientListWithStringDelimitedHeaderTest.java
------------------------------------------------------------------------------
svn:mergeinfo =
Modified:
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/util/ObjectHelperTest.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/util/ObjectHelperTest.java?rev=734348&r1=734347&r2=734348&view=diff
==============================================================================
---
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/util/ObjectHelperTest.java
(original)
+++
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/util/ObjectHelperTest.java
Tue Jan 13 22:39:58 2009
@@ -132,4 +132,13 @@
Iterator<String> iterator = list.iterator();
assertSame("Should return the same iterator", iterator,
ObjectHelper.createIterator(iterator));
}
+
+ public void testCreateIteratorWithStringAndCommaSeparator() {
+ String s = "a,b,c";
+ Iterator it = ObjectHelper.createIterator(s);
+ assertEquals("a", it.next());
+ assertEquals("b", it.next());
+ assertEquals("c", it.next());
+ }
+
}
Copied:
activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListWithStringDelimitedHeaderTest.java
(from r734141,
activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListWithArrayHeaderTest.java)
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListWithStringDelimitedHeaderTest.java?p2=activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListWithStringDelimitedHeaderTest.java&p1=activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListWithArrayHeaderTest.java&r1=734141&r2=734348&rev=734348&view=diff
==============================================================================
---
activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListWithArrayHeaderTest.java
(original)
+++
activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListWithStringDelimitedHeaderTest.java
Tue Jan 13 22:39:58 2009
@@ -17,12 +17,12 @@
package org.apache.camel.spring.processor;
import org.apache.camel.CamelContext;
-import org.apache.camel.processor.RecipientListWithArrayHeaderTest;
+import org.apache.camel.processor.RecipientListWithStringDelimitedHeaderTest;
import static
org.apache.camel.spring.processor.SpringTestHelper.createSpringCamelContext;
-public class SpringRecipientListWithArrayHeaderTest extends
RecipientListWithArrayHeaderTest {
+public class SpringRecipientListWithStringDelimitedHeaderTest extends
RecipientListWithStringDelimitedHeaderTest {
protected CamelContext createCamelContext() throws Exception {
return createSpringCamelContext(this,
-
"org/apache/camel/spring/processor/recipientListWithArrayHeader.xml");
+
"org/apache/camel/spring/processor/recipientListWithStringDelimitedHeader.xml");
}
-}
+}
\ No newline at end of file
Propchange:
activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListWithStringDelimitedHeaderTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListWithStringDelimitedHeaderTest.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Propchange:
activemq/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/SpringRecipientListWithStringDelimitedHeaderTest.java
------------------------------------------------------------------------------
svn:mergeinfo =
Copied:
activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/recipientListWithStringDelimitedHeader.xml
(from r734141,
activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/recipientListWithArrayHeader.xml)
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/recipientListWithStringDelimitedHeader.xml?p2=activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/recipientListWithStringDelimitedHeader.xml&p1=activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/recipientListWithArrayHeader.xml&r1=734141&r2=734348&rev=734348&view=diff
==============================================================================
---
activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/recipientListWithArrayHeader.xml
(original)
+++
activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/recipientListWithStringDelimitedHeader.xml
Tue Jan 13 22:39:58 2009
@@ -23,13 +23,14 @@
">
<!--
- from("direct:a").recipientList(header("recipientListHeader"));
+
from("direct:a").recipientList(header("recipientListHeader").tokenize(","));
-->
<camelContext id="camel"
xmlns="http://activemq.apache.org/camel/schema/spring">
<route>
<from uri="direct:a"/>
- <recipientList>
- <header>recipientListHeader</header>
+ <!-- use comma as a delimiter for String based values -->
+ <recipientList delimiter=",">
+ <header>myHeader</header>
</recipientList>
</route>
</camelContext>
Propchange:
activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/recipientListWithStringDelimitedHeader.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/recipientListWithStringDelimitedHeader.xml
------------------------------------------------------------------------------
svn:keywords = Rev Date
Propchange:
activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/recipientListWithStringDelimitedHeader.xml
------------------------------------------------------------------------------
svn:mergeinfo =
Propchange:
activemq/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/recipientListWithStringDelimitedHeader.xml
------------------------------------------------------------------------------
svn:mime-type = text/xml