Repository: camel
Updated Branches:
  refs/heads/master 9f857ec87 -> f25c7923d


CAMEL-7468: fix the injected mode for a token having xmlns=''


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/f25c7923
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/f25c7923
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/f25c7923

Branch: refs/heads/master
Commit: f25c7923d3083aead8016e6a9742073f80f2720e
Parents: 9f857ec
Author: Akitoshi Yoshida <a...@apache.org>
Authored: Tue Jul 1 19:10:38 2014 +0200
Committer: Akitoshi Yoshida <a...@apache.org>
Committed: Tue Jul 1 19:11:19 2014 +0200

----------------------------------------------------------------------
 .../support/XMLTokenExpressionIterator.java     |  2 +-
 .../support/XMLTokenExpressionIteratorTest.java | 38 ++++++++++++++++++++
 2 files changed, 39 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/f25c7923/camel-core/src/main/java/org/apache/camel/support/XMLTokenExpressionIterator.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/support/XMLTokenExpressionIterator.java
 
b/camel-core/src/main/java/org/apache/camel/support/XMLTokenExpressionIterator.java
index 6c5e2b5..655feef 100644
--- 
a/camel-core/src/main/java/org/apache/camel/support/XMLTokenExpressionIterator.java
+++ 
b/camel-core/src/main/java/org/apache/camel/support/XMLTokenExpressionIterator.java
@@ -122,7 +122,7 @@ public class XMLTokenExpressionIterator extends 
ExpressionAdapter implements Nam
 
     static class XMLTokenIterator implements Iterator<Object>, Closeable {
         private static final Logger LOG = 
LoggerFactory.getLogger(XMLTokenIterator.class);
-        private static final Pattern NAMESPACE_PATTERN = 
Pattern.compile("xmlns(:\\w+|)\\s*=\\s*('[^']+'|\"[^\"]+\")");
+        private static final Pattern NAMESPACE_PATTERN = 
Pattern.compile("xmlns(:\\w+|)\\s*=\\s*('[^']*'|\"[^\"]*\")");
 
         private AttributedQName[] splitpath;
         private int index;

http://git-wip-us.apache.org/repos/asf/camel/blob/f25c7923/camel-core/src/test/java/org/apache/camel/support/XMLTokenExpressionIteratorTest.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/test/java/org/apache/camel/support/XMLTokenExpressionIteratorTest.java
 
b/camel-core/src/test/java/org/apache/camel/support/XMLTokenExpressionIteratorTest.java
index 7b91e7a..3954038 100644
--- 
a/camel-core/src/test/java/org/apache/camel/support/XMLTokenExpressionIteratorTest.java
+++ 
b/camel-core/src/test/java/org/apache/camel/support/XMLTokenExpressionIteratorTest.java
@@ -56,6 +56,7 @@ public class XMLTokenExpressionIteratorTest extends TestCase {
             + "</grandparent>"
             + "</g:greatgrandparent>").getBytes();
 
+    // mixing a default namespace with an explicit namespace for child
     private static final byte[] TEST_BODY_NS_MIXED =
         ("<?xml version='1.0' encoding='UTF-8'?>"
             + "<g:greatgrandparent xmlns:g='urn:g'><grandparent>"
@@ -70,6 +71,21 @@ public class XMLTokenExpressionIteratorTest extends TestCase 
{
             + "</grandparent>"
             + "</g:greatgrandparent>").getBytes();
 
+    // mixing a no namespace with an explicit namespace for child
+    private static final byte[] TEST_BODY_NO_NS_MIXED =
+        ("<?xml version='1.0' encoding='UTF-8'?>"
+            + "<g:greatgrandparent xmlns:g='urn:g'><grandparent>"
+            + "<parent some_attr='1' xmlns:c='urn:c' xmlns=\"urn:c\">"
+            + "<child some_attr='a' anotherAttr='a' xmlns=''></child>"
+            + "<x:child xmlns:x='urn:c' some_attr='b' anotherAttr='b'/>"
+            + "</parent>"
+            + "<c:parent some_attr='2' xmlns:c='urn:c'>"
+            + "<child some_attr='c' anotherAttr='c'></child>"
+            + "<c:child some_attr='d' anotherAttr='d'/>"
+            + "</c:parent>"
+            + "</grandparent>"
+            + "</g:greatgrandparent>").getBytes();
+
     private static final String[] RESULTS_CHILD_WRAPPED = {
         "<?xml version='1.0' encoding='UTF-8'?>"
             + "<g:greatgrandparent 
xmlns:g='urn:g'><grandparent><uncle/><aunt>emma</aunt>"
@@ -134,6 +150,20 @@ public class XMLTokenExpressionIteratorTest extends 
TestCase {
         "<c:child some_attr='f' anotherAttr='f' xmlns:g=\"urn:g\" 
xmlns:d=\"urn:d\" xmlns:c=\"urn:c\"/>"
     };
 
+    private static final String[] RESULTS_CHILD_NO_NS_MIXED = {
+        "<child some_attr='a' anotherAttr='a' xmlns='' xmlns:g='urn:g' 
xmlns:c='urn:c'></child>",
+        "<child some_attr='c' anotherAttr='c' xmlns:g=\"urn:g\" 
xmlns:c=\"urn:c\"></child>",
+    };
+
+    private static final String[] RESULTS_CHILD_NO_NS_MIXED_WRAPPED = {
+        "<?xml version='1.0' encoding='UTF-8'?><g:greatgrandparent 
xmlns:g='urn:g'><grandparent>"
+            + "<parent some_attr='1' xmlns:c='urn:c' xmlns=\"urn:c\">"
+            + "<child some_attr='a' anotherAttr='a' 
xmlns=''></child></parent></grandparent></g:greatgrandparent>",
+        "<?xml version='1.0' encoding='UTF-8'?><g:greatgrandparent 
xmlns:g='urn:g'><grandparent>"
+            + "<c:parent some_attr='2' xmlns:c='urn:c'>"
+            + "<child some_attr='c' 
anotherAttr='c'></child></c:parent></grandparent></g:greatgrandparent>",
+    };
+
     private static final String[] RESULTS_PARENT_WRAPPED = {
         "<?xml version='1.0' encoding='UTF-8'?>"
             + "<g:greatgrandparent 
xmlns:g='urn:g'><grandparent><uncle/><aunt>emma</aunt>"
@@ -239,6 +269,14 @@ public class XMLTokenExpressionIteratorTest extends 
TestCase {
         invokeAndVerify("//child", 'w', new ByteArrayInputStream(TEST_BODY), 
RESULTS_NULL);
     }
 
+    public void testExtractSomeUnqualifiedChild() throws Exception {
+        invokeAndVerify("//child", 'w', new 
ByteArrayInputStream(TEST_BODY_NO_NS_MIXED), RESULTS_CHILD_NO_NS_MIXED_WRAPPED);
+    }
+
+    public void testExtractSomeUnqualifiedChildInjected() throws Exception {
+        invokeAndVerify("//child", 'i', new 
ByteArrayInputStream(TEST_BODY_NO_NS_MIXED), RESULTS_CHILD_NO_NS_MIXED);
+    }
+
     public void testExtractChildWithAncestorGGPdGP() throws Exception {
         invokeAndVerify("/G:greatgrandparent/grandparent//C:child", 
                         'w', new ByteArrayInputStream(TEST_BODY), 
RESULTS_CHILD_WRAPPED);

Reply via email to