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);