You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ay...@apache.org on 2014/06/06 16:46:14 UTC
git commit: CAMEL-7468: fix the group option
Repository: camel
Updated Branches:
refs/heads/master 5d54b3973 -> edfc54e72
CAMEL-7468: fix the group option
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/edfc54e7
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/edfc54e7
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/edfc54e7
Branch: refs/heads/master
Commit: edfc54e72ca76e6e34e2b361519a9727d8f543d4
Parents: 5d54b39
Author: Akitoshi Yoshida <ay...@apache.org>
Authored: Fri Jun 6 16:45:26 2014 +0200
Committer: Akitoshi Yoshida <ay...@apache.org>
Committed: Fri Jun 6 16:45:56 2014 +0200
----------------------------------------------------------------------
.../model/language/XMLTokenizerExpression.java | 13 ++++
.../processor/SplitGroupMultiXmlTokenTest.java | 78 ++++++++++++++++++++
2 files changed, 91 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/edfc54e7/camel-core/src/main/java/org/apache/camel/model/language/XMLTokenizerExpression.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/model/language/XMLTokenizerExpression.java b/camel-core/src/main/java/org/apache/camel/model/language/XMLTokenizerExpression.java
index 7052ab7..1cac8d5 100644
--- a/camel-core/src/main/java/org/apache/camel/model/language/XMLTokenizerExpression.java
+++ b/camel-core/src/main/java/org/apache/camel/model/language/XMLTokenizerExpression.java
@@ -24,6 +24,7 @@ import javax.xml.bind.annotation.XmlRootElement;
import org.apache.camel.CamelContext;
import org.apache.camel.Expression;
import org.apache.camel.Predicate;
+import org.apache.camel.builder.ExpressionBuilder;
import org.apache.camel.language.tokenizer.XMLTokenizeLanguage;
/**
@@ -92,4 +93,16 @@ public class XMLTokenizerExpression extends NamespaceAwareExpression {
setProperty(predicate, "mode", mode);
}
}
+
+ @Override
+ public Expression createExpression(CamelContext camelContext) {
+ Expression answer = super.createExpression(camelContext);
+ if (group != null) {
+ if (group >0) {
+ //REVISIT wrap the xml tokens with a group element to turn the result into xml?
+ answer = ExpressionBuilder.groupIteratorExpression(answer, null, group);
+ }
+ }
+ return answer;
+ }
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/camel/blob/edfc54e7/camel-core/src/test/java/org/apache/camel/processor/SplitGroupMultiXmlTokenTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/processor/SplitGroupMultiXmlTokenTest.java b/camel-core/src/test/java/org/apache/camel/processor/SplitGroupMultiXmlTokenTest.java
new file mode 100644
index 0000000..86f4201
--- /dev/null
+++ b/camel-core/src/test/java/org/apache/camel/processor/SplitGroupMultiXmlTokenTest.java
@@ -0,0 +1,78 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+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.builder.xml.Namespaces;
+import org.apache.camel.component.mock.MockEndpoint;
+
+/**
+ *
+ */
+public class SplitGroupMultiXmlTokenTest extends ContextTestSupport {
+
+ @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>");
+
+ 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() {
+ Namespaces ns = new Namespaces("", "http:acme.com");
+ @Override
+ public void configure() throws Exception {
+ // START SNIPPET: e1
+ from("file:target/pair")
+ // split the order child tags, and inherit namespaces from the orders root tag
+ .split().xtokenize("//order", 'i', ns, 2)
+ .to("log:split")
+ .to("mock:split");
+ // END SNIPPET: e1
+ }
+ };
+ }
+
+}