Repository: camel Updated Branches: refs/heads/master fb8cff7c3 -> c69feb066
CAMEL-7468: allow a null namespace map for unqualified elements matching Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/c69feb06 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/c69feb06 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/c69feb06 Branch: refs/heads/master Commit: c69feb0661aa353ce86f2abb43ba75a8a17c794a Parents: fb8cff7 Author: Akitoshi Yoshida <a...@apache.org> Authored: Wed Jul 2 13:50:15 2014 +0200 Committer: Akitoshi Yoshida <a...@apache.org> Committed: Fri Jul 4 10:56:23 2014 +0200 ---------------------------------------------------------------------- .../support/XMLTokenExpressionIterator.java | 2 +- .../support/XMLTokenExpressionIteratorTest.java | 33 ++++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/c69feb06/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 655feef..a9ca796 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 @@ -151,7 +151,7 @@ public class XMLTokenExpressionIterator extends ExpressionAdapter implements Nam String pfx = d > 0 ? s.substring(0, d) : ""; this.splitpath[i] = new AttributedQName( - "*".equals(pfx) ? "*" : nsmap.get(pfx), d > 0 ? s.substring(d + 1) : s, pfx); + "*".equals(pfx) ? "*" : nsmap == null ? "" : nsmap.get(pfx), d > 0 ? s.substring(d + 1) : s, pfx); } } http://git-wip-us.apache.org/repos/asf/camel/blob/c69feb06/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 3954038..f787f2a 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 @@ -155,6 +155,7 @@ public class XMLTokenExpressionIteratorTest extends TestCase { "<child some_attr='c' anotherAttr='c' xmlns:g=\"urn:g\" xmlns:c=\"urn:c\"></child>", }; + // note that there is no preceding sibling to the extracted 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\">" @@ -164,6 +165,23 @@ public class XMLTokenExpressionIteratorTest extends TestCase { + "<child some_attr='c' anotherAttr='c'></child></c:parent></grandparent></g:greatgrandparent>", }; + private static final String[] RESULTS_CHILD_NS_MIXED = { + "<x:child xmlns:x='urn:c' some_attr='b' anotherAttr='b' xmlns='urn:c' xmlns:g='urn:g' xmlns:c='urn:c'/>", + "<c:child some_attr='d' anotherAttr='d' xmlns:g=\"urn:g\" xmlns:c=\"urn:c\"/>" + }; + + // note that there is a preceding sibling to the extracted child + private static final String[] RESULTS_CHILD_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>" + + "<x:child xmlns:x='urn:c' some_attr='b' anotherAttr='b'/></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:child some_attr='d' anotherAttr='d'/></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>" @@ -277,6 +295,21 @@ public class XMLTokenExpressionIteratorTest extends TestCase { invokeAndVerify("//child", 'i', new ByteArrayInputStream(TEST_BODY_NO_NS_MIXED), RESULTS_CHILD_NO_NS_MIXED); } + public void testExtractSomeQualifiedChild() throws Exception { + nsmap.put("", "urn:c"); + invokeAndVerify("//child", 'w', new ByteArrayInputStream(TEST_BODY_NO_NS_MIXED), RESULTS_CHILD_NS_MIXED_WRAPPED); + } + + public void testExtractSomeQualifiedChildInjected() throws Exception { + nsmap.put("", "urn:c"); + invokeAndVerify("//child", 'i', new ByteArrayInputStream(TEST_BODY_NO_NS_MIXED), RESULTS_CHILD_NS_MIXED); + } + + public void testExtractWithNullNamespaceMap() throws Exception { + nsmap = null; + 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);