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
+            }
+        };
+    }
+
+}