Author: davsclaus
Date: Fri Oct 16 05:55:44 2009
New Revision: 825774
URL: http://svn.apache.org/viewvc?rev=825774&view=rev
Log:
CAMEL-2070: Fixed recipient list using custom delimiter.
Added:
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RecipientListWithDelimiterTest.java
- copied, changed from r825755,
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RecipientListWithStringDelimitedHeaderTest.java
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java
camel/trunk/camel-core/src/main/java/org/apache/camel/model/RecipientListDefinition.java
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/RecipientList.java
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java
URL:
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java?rev=825774&r1=825773&r2=825774&view=diff
==============================================================================
---
camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java
(original)
+++
camel/trunk/camel-core/src/main/java/org/apache/camel/model/ProcessorDefinition.java
Fri Oct 16 05:55:44 2009
@@ -962,7 +962,9 @@
/**
* <a href="http://camel.apache.org/recipient-list.html">Recipient List
EIP:</a>
- * Creates a dynamic recipient list allowing you to route messages to a
number of dynamically specified recipients
+ * Creates a dynamic recipient list allowing you to route messages to a
number of dynamically specified recipients.
+ * <p/>
+ * Will use comma as default delimiter.
*
* @param recipients expression to decide the destinations
* @return the builder
@@ -978,6 +980,22 @@
* <a href="http://camel.apache.org/recipient-list.html">Recipient List
EIP:</a>
* Creates a dynamic recipient list allowing you to route messages to a
number of dynamically specified recipients
*
+ * @param recipients expression to decide the destinations
+ * @param delimiter a custom delimiter to use
+ * @return the builder
+ */
+ @SuppressWarnings("unchecked")
+ public Type recipientList(Expression recipients, String delimiter) {
+ RecipientListDefinition answer = new
RecipientListDefinition(recipients);
+ answer.setDelimiter(delimiter);
+ addOutput(answer);
+ return (Type) this;
+ }
+
+ /**
+ * <a href="http://camel.apache.org/recipient-list.html">Recipient List
EIP:</a>
+ * Creates a dynamic recipient list allowing you to route messages to a
number of dynamically specified recipients
+ *
* @return the expression clause to configure the expression to decide the
destinations
*/
public ExpressionClause<ProcessorDefinition<Type>> recipientList() {
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/model/RecipientListDefinition.java
URL:
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/model/RecipientListDefinition.java?rev=825774&r1=825773&r2=825774&view=diff
==============================================================================
---
camel/trunk/camel-core/src/main/java/org/apache/camel/model/RecipientListDefinition.java
(original)
+++
camel/trunk/camel-core/src/main/java/org/apache/camel/model/RecipientListDefinition.java
Fri Oct 16 05:55:44 2009
@@ -66,24 +66,13 @@
public Processor createProcessor(RouteContext routeContext) throws
Exception {
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, delimiter);
+ } else {
+ return new RecipientList(expression);
}
-
- return new RecipientList(expression);
}
- // Fluent API
- //-------------------------------------------------------------------------
- /**
- * Set the expression that RecipientListType will use
- * @return the builder
- */
- public ExpressionClause<RecipientListDefinition> expression() {
- return ExpressionClause.createAndSetExpression(this);
- }
-
// Properties
//-------------------------------------------------------------------------
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/RecipientList.java
URL:
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/RecipientList.java?rev=825774&r1=825773&r2=825774&view=diff
==============================================================================
---
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/RecipientList.java
(original)
+++
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/RecipientList.java
Fri Oct 16 05:55:44 2009
@@ -43,13 +43,23 @@
public class RecipientList extends ServiceSupport implements Processor {
private ProducerCache producerCache;
private Expression expression;
+ private final String delimiter;
public RecipientList() {
+ // use comma by default as delimiter
+ this.delimiter = ",";
}
public RecipientList(Expression expression) {
- notNull(expression, "expression");
+ // use comma by default as delimiter
+ this(expression, ",");
+ }
+
+ public RecipientList(Expression expression, String delimiter) {
+ ObjectHelper.notNull(expression, "expression");
+ ObjectHelper.notEmpty(delimiter, "delimiter");
this.expression = expression;
+ this.delimiter = delimiter;
}
@Override
@@ -66,7 +76,7 @@
* Sends the given exchange to the recipient list
*/
public void sendToRecipientList(Exchange exchange, Object receipientList)
throws Exception {
- Iterator iter = ObjectHelper.createIterator(receipientList);
+ Iterator iter = ObjectHelper.createIterator(receipientList, delimiter);
List<Processor> processors = new ArrayList<Processor>();
while (iter.hasNext()) {
Object recipient = iter.next();
Copied:
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RecipientListWithDelimiterTest.java
(from r825755,
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RecipientListWithStringDelimitedHeaderTest.java)
URL:
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RecipientListWithDelimiterTest.java?p2=camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RecipientListWithDelimiterTest.java&p1=camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RecipientListWithStringDelimitedHeaderTest.java&r1=825755&r2=825774&rev=825774&view=diff
==============================================================================
---
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RecipientListWithStringDelimitedHeaderTest.java
(original)
+++
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RecipientListWithDelimiterTest.java
Fri Oct 16 05:55:44 2009
@@ -23,9 +23,22 @@
/**
* @version $Revision$
*/
-public class RecipientListWithStringDelimitedHeaderTest extends
ContextTestSupport {
+public class RecipientListWithDelimiterTest extends ContextTestSupport {
+
+ @Override
+ public boolean isUseRouteBuilder() {
+ return false;
+ }
+
+ public void testRecipientList() throws Exception {
+ context.addRoutes(new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ from("direct:a").recipientList(header("myHeader"), "#");
+ }
+ });
+ context.start();
- public void testSendingAMessageUsingMulticastReceivesItsOwnExchange()
throws Exception {
MockEndpoint x = getMockEndpoint("mock:x");
MockEndpoint y = getMockEndpoint("mock:y");
MockEndpoint z = getMockEndpoint("mock:z");
@@ -39,19 +52,30 @@
assertMockEndpointsSatisfied();
}
- protected void sendBody() {
- 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("myHeader"));
- // END SNIPPET: example
+ public void testRecipientListWithTokenizer() throws Exception {
+ context.addRoutes(new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+
from("direct:a").recipientList(header("myHeader").tokenize("#"));
}
- };
+ });
+ context.start();
+
+ MockEndpoint x = getMockEndpoint("mock:x");
+ MockEndpoint y = getMockEndpoint("mock:y");
+ MockEndpoint z = getMockEndpoint("mock:z");
+ x.expectedBodiesReceived("answer");
+ y.expectedBodiesReceived("answer");
+ z.expectedBodiesReceived("answer");
+
+ sendBody();
+
+ assertMockEndpointsSatisfied();
+ }
+
+ protected void sendBody() {
+ template.sendBodyAndHeader("direct:a", "answer", "myHeader",
"mock:x#mock:y#mock:z");
}
}
\ No newline at end of file