You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2021/08/16 08:13:58 UTC
[camel] branch main updated: CAMEL-16865 Adapt code to go up a
level if required even if no matches have been found (#5955)
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new a45cdf8 CAMEL-16865 Adapt code to go up a level if required even if no matches have been found (#5955)
a45cdf8 is described below
commit a45cdf8ca9140f64ef282f6ebe66d720295c84b4
Author: Ruben Gerits <ru...@gmail.com>
AuthorDate: Mon Aug 16 10:13:21 2021 +0200
CAMEL-16865 Adapt code to go up a level if required even if no matches have been found (#5955)
Co-authored-by: ruben.gerits <ru...@aviobook.aero>
---
.../xtokenizer/XMLTokenExpressionIterator.java | 8 ++--
.../xtokenizer/XMLTokenExpressionIteratorTest.java | 43 +++++++++++++++++++++-
2 files changed, 46 insertions(+), 5 deletions(-)
diff --git a/core/camel-xml-jaxp/src/main/java/org/apache/camel/language/xtokenizer/XMLTokenExpressionIterator.java b/core/camel-xml-jaxp/src/main/java/org/apache/camel/language/xtokenizer/XMLTokenExpressionIterator.java
index 0a22f0f..e77cbde 100644
--- a/core/camel-xml-jaxp/src/main/java/org/apache/camel/language/xtokenizer/XMLTokenExpressionIterator.java
+++ b/core/camel-xml-jaxp/src/main/java/org/apache/camel/language/xtokenizer/XMLTokenExpressionIterator.java
@@ -542,11 +542,11 @@ public class XMLTokenExpressionIterator extends ExpressionAdapter implements Nam
popSegment();
}
}
+ }
- if (ancestor() == null && !isTop()
- || ancestor() != null && ancestor().matches(endname)) {
- up();
- }
+ if (ancestor() == null && !isTop()
+ || ancestor() != null && ancestor().matches(endname)) {
+ up();
}
break;
case XMLStreamConstants.END_DOCUMENT:
diff --git a/core/camel-xml-jaxp/src/test/java/org/apache/camel/language/xtokenizer/XMLTokenExpressionIteratorTest.java b/core/camel-xml-jaxp/src/test/java/org/apache/camel/language/xtokenizer/XMLTokenExpressionIteratorTest.java
index d1ae99d..86f4868 100644
--- a/core/camel-xml-jaxp/src/test/java/org/apache/camel/language/xtokenizer/XMLTokenExpressionIteratorTest.java
+++ b/core/camel-xml-jaxp/src/test/java/org/apache/camel/language/xtokenizer/XMLTokenExpressionIteratorTest.java
@@ -81,6 +81,33 @@ public class XMLTokenExpressionIteratorTest {
+ "</grandparent>"
+ "</g:greatgrandparent>").getBytes();
+ // mixing different namespaces within a tag
+ private static final byte[] TEST_BODY_MIXED_CHILDREN = ("<?xml version='1.0' encoding='UTF-8'?>"
+ + "<greatgrandparent xmlns='urn:g' xmlns:c='urn:c' xmlns:x='urn:x'>"
+ + "<grandparent>"
+ + "<x:uncle>bob</x:uncle>"
+ + "<x:aunt>emma</x:aunt>"
+ + "</grandparent>"
+ + "<grandparent>"
+ + "<c:parent some_attr='1'>"
+ + "<c:child some_attr='a' anotherAttr='a'></c:child>"
+ + "<c:child some_attr='b' anotherAttr='b' />"
+ + "</c:parent>"
+ + "<c:parent some_attr='2'>"
+ + "<c:child some_attr='c' anotherAttr='c'></c:child>"
+ + "<c:child some_attr='d' anotherAttr='d' />"
+ + "</c:parent>"
+ + "</grandparent>"
+ + "<grandparent>"
+ + "<x:uncle>ben</x:uncle>"
+ + "<x:aunt>jenna</x:aunt>"
+ + "<c:parent some_attr='3'>"
+ + "<c:child some_attr='e' anotherAttr='e'></c:child>"
+ + "<c:child some_attr='f' anotherAttr='f' />"
+ + "</c:parent>"
+ + "</grandparent>"
+ + "</greatgrandparent>").getBytes();
+
private static final String RESULTS_CW1 = "<?xml version='1.0' encoding='UTF-8'?>"
+ "<g:greatgrandparent xmlns:g='urn:g'><grandparent><uncle/><aunt>emma</aunt>"
+ "<c:parent some_attr='1' xmlns:c='urn:c' xmlns:d=\"urn:d\">"
@@ -267,13 +294,20 @@ public class XMLTokenExpressionIteratorTest {
"ben"
};
+ private static final String[] RESULTS_AUNT_AND_UNCLE = {
+ "<x:uncle xmlns=\"urn:g\" xmlns:x=\"urn:x\" xmlns:c=\"urn:c\">bob</x:uncle>",
+ "<x:aunt xmlns=\"urn:g\" xmlns:x=\"urn:x\" xmlns:c=\"urn:c\">emma</x:aunt>",
+ "<x:uncle xmlns=\"urn:g\" xmlns:x=\"urn:x\" xmlns:c=\"urn:c\">ben</x:uncle>",
+ "<x:aunt xmlns=\"urn:g\" xmlns:x=\"urn:x\" xmlns:c=\"urn:c\">jenna</x:aunt>"
+ };
+
private static final String[] RESULTS_NULL = {
};
private Map<String, String> nsmap;
@BeforeEach
- public void setUp() throws Exception {
+ public void setUp() {
nsmap = new HashMap<>();
nsmap.put("G", "urn:g");
nsmap.put("C", "urn:c");
@@ -432,6 +466,13 @@ public class XMLTokenExpressionIteratorTest {
't', new ByteArrayInputStream(TEST_BODY), RESULTS_GRANDPARENT_TEXT);
}
+ @Test
+ public void testExtractAuntAndUncleByNamespace() throws Exception {
+ nsmap.put("X", "urn:x");
+ invokeAndVerify("//G:grandparent/X:*",
+ 'i', new ByteArrayInputStream(TEST_BODY_MIXED_CHILDREN), RESULTS_AUNT_AND_UNCLE);
+ }
+
private void invokeAndVerify(String path, char mode, InputStream in, String[] expected) throws Exception {
XMLTokenExpressionIterator xtei = new XMLTokenExpressionIterator(path, mode);
xtei.setNamespaces(nsmap);