You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2012/05/03 06:58:15 UTC
svn commit: r1333308 - in /camel/trunk/camel-core/src:
main/java/org/apache/camel/builder/
main/java/org/apache/camel/language/tokenizer/
test/java/org/apache/camel/processor/
Author: davsclaus
Date: Thu May 3 04:58:14 2012
New Revision: 1333308
URL: http://svn.apache.org/viewvc?rev=1333308&view=rev
Log:
CAMEL-5236: Added group option to tokenize xml to be able to splint into chunks of xml elements.
Added:
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitGroupMultiXmlTest.java
- copied, changed from r1333072, camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitGroupMultiLinesTest.java
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionClause.java
camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionClauseSupport.java
camel/trunk/camel-core/src/main/java/org/apache/camel/language/tokenizer/TokenizeLanguage.java
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionClause.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionClause.java?rev=1333308&r1=1333307&r2=1333308&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionClause.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionClause.java Thu May 3 04:58:14 2012
@@ -500,6 +500,17 @@ public class ExpressionClause<T> extends
}
/**
+ * Evaluates a XML token expression on the message body with XML content
+ *
+ * @param tagName the the tag name of the child nodes to tokenize
+ * @param group to group by the given number
+ * @return the builder to continue processing the DSL
+ */
+ public T tokenizeXML(String tagName, int group) {
+ return tokenizeXML(tagName, null, group);
+ }
+
+ /**
* Evaluates a token pair expression on the message body with XML content
*
* @param tagName the the tag name of the child nodes to tokenize
@@ -507,7 +518,19 @@ public class ExpressionClause<T> extends
* @return the builder to continue processing the DSL
*/
public T tokenizeXML(String tagName, String inheritNamespaceTagName) {
- return delegate.tokenizeXMLPair(tagName, inheritNamespaceTagName);
+ return tokenizeXML(tagName, inheritNamespaceTagName, 0);
+ }
+
+ /**
+ * Evaluates a token pair expression on the message body with XML content
+ *
+ * @param tagName the the tag name of the child nodes to tokenize
+ * @param inheritNamespaceTagName parent or root tag name that contains namespace(s) to inherit
+ * @param group to group by the given number
+ * @return the builder to continue processing the DSL
+ */
+ public T tokenizeXML(String tagName, String inheritNamespaceTagName, int group) {
+ return delegate.tokenizeXMLPair(tagName, inheritNamespaceTagName, group);
}
/**
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionClauseSupport.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionClauseSupport.java?rev=1333308&r1=1333307&r2=1333308&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionClauseSupport.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionClauseSupport.java Thu May 3 04:58:14 2012
@@ -547,13 +547,17 @@ public class ExpressionClauseSupport<T>
*
* @param tagName the the tag name of the child nodes to tokenize
* @param inheritNamespaceTagName optional parent or root tag name that contains namespace(s) to inherit
+ * @param group to group by the given number
* @return the builder to continue processing the DSL
*/
- public T tokenizeXMLPair(String tagName, String inheritNamespaceTagName) {
+ public T tokenizeXMLPair(String tagName, String inheritNamespaceTagName, int group) {
TokenizerExpression expression = new TokenizerExpression();
expression.setToken(tagName);
expression.setInheritNamespaceTagName(inheritNamespaceTagName);
expression.setXml(true);
+ if (group > 0) {
+ expression.setGroup(group);
+ }
setExpressionType(expression);
return result;
}
Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/language/tokenizer/TokenizeLanguage.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/language/tokenizer/TokenizeLanguage.java?rev=1333308&r1=1333307&r2=1333308&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/language/tokenizer/TokenizeLanguage.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/language/tokenizer/TokenizeLanguage.java Thu May 3 04:58:14 2012
@@ -98,24 +98,28 @@ public class TokenizeLanguage implements
public Expression createExpression() {
ObjectHelper.notNull(token, "token");
+ Expression answer = null;
if (isXml()) {
- return ExpressionBuilder.tokenizeXMLExpression(token, inheritNamespaceTagName);
+ answer = ExpressionBuilder.tokenizeXMLExpression(token, inheritNamespaceTagName);
} else if (endToken != null) {
- return ExpressionBuilder.tokenizePairExpression(token, endToken, includeTokens);
+ answer = ExpressionBuilder.tokenizePairExpression(token, endToken, includeTokens);
}
- // use the regular tokenizer
- Expression answer;
- Expression exp = headerName == null ? ExpressionBuilder.bodyExpression() : ExpressionBuilder.headerExpression(headerName);
- if (regex) {
- answer = ExpressionBuilder.regexTokenizeExpression(exp, token);
- } else {
- answer = ExpressionBuilder.tokenizeExpression(exp, token);
+ if (answer == null) {
+ // use the regular tokenizer
+ Expression exp = headerName == null ? ExpressionBuilder.bodyExpression() : ExpressionBuilder.headerExpression(headerName);
+ if (regex) {
+ answer = ExpressionBuilder.regexTokenizeExpression(exp, token);
+ } else {
+ answer = ExpressionBuilder.tokenizeExpression(exp, token);
+ }
}
// if group then wrap answer in group expression
if (group > 0) {
- answer = ExpressionBuilder.groupIteratorExpression(answer, token, group);
+ // only include group token if not xml
+ String groupToken = isXml() ? null : token;
+ answer = ExpressionBuilder.groupIteratorExpression(answer, groupToken, group);
}
return answer;
Copied: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitGroupMultiXmlTest.java (from r1333072, camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitGroupMultiLinesTest.java)
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitGroupMultiXmlTest.java?p2=camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitGroupMultiXmlTest.java&p1=camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitGroupMultiLinesTest.java&r1=1333072&r2=1333308&rev=1333308&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitGroupMultiLinesTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/processor/SplitGroupMultiXmlTest.java Thu May 3 04:58:14 2012
@@ -17,31 +17,57 @@
package org.apache.camel.processor;
import org.apache.camel.ContextTestSupport;
+import org.apache.camel.Exchange;
import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
/**
*
*/
-public class SplitGroupMultiLinesTest extends ContextTestSupport {
+public class SplitGroupMultiXmlTest extends ContextTestSupport {
- public void testSplitMultiLines() throws Exception {
- getMockEndpoint("mock:group").expectedBodiesReceived("ABC\nDEF\nGHI", "JKL\nMN");
+ @Override
+ protected void setUp() throws Exception {
+ deleteDirectory("target/pair");
+ super.setUp();
+ }
+
+ public void testTokenXMLPairGroup() throws Exception {
+ MockEndpoint mock = getMockEndpoint("mock:split");
+ mock.expectedMessageCount(3);
+ mock.message(0).body().isEqualTo("<order id=\"1\" xmlns=\"http:acme.com\">Camel in Action</order><order id=\"2\" xmlns=\"http:acme.com\">ActiveMQ in Action</order>");
+ mock.message(1).body().isEqualTo("<order id=\"3\" xmlns=\"http:acme.com\">Spring in Action</order><order id=\"4\" xmlns=\"http:acme.com\">Scala in Action</order>");
+ mock.message(2).body().isEqualTo("<order id=\"5\" xmlns=\"http:acme.com\">Groovy in Action</order>");
- template.sendBody("direct:start", "ABC\nDEF\nGHI\nJKL\nMN");
+ String body = createBody();
+ template.sendBodyAndHeader("file:target/pair", body, Exchange.FILE_NAME, "orders.xml");
assertMockEndpointsSatisfied();
}
+ protected String createBody() {
+ StringBuilder sb = new StringBuilder("<?xml version=\"1.0\"?>\n");
+ sb.append("<orders xmlns=\"http:acme.com\">\n");
+ sb.append(" <order id=\"1\">Camel in Action</order>\n");
+ sb.append(" <order id=\"2\">ActiveMQ in Action</order>\n");
+ sb.append(" <order id=\"3\">Spring in Action</order>\n");
+ sb.append(" <order id=\"4\">Scala in Action</order>\n");
+ sb.append(" <order id=\"5\">Groovy in Action</order>\n");
+ sb.append("</orders>");
+ return sb.toString();
+ }
+
@Override
protected RouteBuilder createRouteBuilder() throws Exception {
return new RouteBuilder() {
@Override
public void configure() throws Exception {
// START SNIPPET: e1
- from("direct:start")
- // split by new line and group by 3
- .split().tokenize("\n", 3).streaming()
- .to("mock:group");
+ from("file:target/pair")
+ // split the order child tags, and inherit namespaces from the orders root tag
+ .split().tokenizeXML("order", "orders", 2)
+ .to("log:split")
+ .to("mock:split");
// END SNIPPET: e1
}
};