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 <[email protected]>
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 <[email protected]>
---
.../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);