You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ni...@apache.org on 2013/08/06 13:11:13 UTC
[5/5] git commit: CAMEL-6607 fixed the issue that Tokenize XML does
not support child elements with names similar to their parent
CAMEL-6607 fixed the issue that Tokenize XML does not support child elements with names similar to their parent
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/968ad485
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/968ad485
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/968ad485
Branch: refs/heads/camel-2.11.x
Commit: 968ad485a561cb294e12d2421020a9478f584b4f
Parents: 7cb775c
Author: Willem Jiang <ni...@apache.org>
Authored: Tue Aug 6 17:36:02 2013 +0800
Committer: Willem Jiang <ni...@apache.org>
Committed: Tue Aug 6 19:02:20 2013 +0800
----------------------------------------------------------------------
.../org/apache/camel/support/TokenXMLExpressionIterator.java | 4 ++--
.../test/java/org/apache/camel/language/TokenizerTest.java | 8 ++++++++
2 files changed, 10 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/968ad485/camel-core/src/main/java/org/apache/camel/support/TokenXMLExpressionIterator.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/support/TokenXMLExpressionIterator.java b/camel-core/src/main/java/org/apache/camel/support/TokenXMLExpressionIterator.java
index b8d4374..938b1d6 100644
--- a/camel-core/src/main/java/org/apache/camel/support/TokenXMLExpressionIterator.java
+++ b/camel-core/src/main/java/org/apache/camel/support/TokenXMLExpressionIterator.java
@@ -47,7 +47,7 @@ import org.apache.camel.util.ObjectHelper;
public class TokenXMLExpressionIterator extends ExpressionAdapter {
private static final Pattern NAMESPACE_PATTERN = Pattern.compile("xmlns(:\\w+|)\\s*=\\s*('[^']+'|\"[^\"]+\")");
private static final String SCAN_TOKEN_NS_PREFIX_REGEX = "([^:<>]{1,15}?:|)";
- private static final String SCAN_BLOCK_TOKEN_REGEX_TEMPLATE = "<{0}(\\s+[^/]*)?/>|<{0}(\\s+[^>]*)?>(?:(?!</{0}).)*</{0}\\s*>";
+ private static final String SCAN_BLOCK_TOKEN_REGEX_TEMPLATE = "<{0}(\\s+[^/]*)?/>|<{0}(\\s+[^>]*)?>(?:(?!(</{0}\\s*>)).)*</{0}\\s*>";
private static final String SCAN_PARENT_TOKEN_REGEX_TEMPLATE = "<{0}(\\s+[^>]*\\s*)?>";
protected final String tagToken;
@@ -133,7 +133,7 @@ public class TokenXMLExpressionIterator extends ExpressionAdapter {
this.tagToken = tagToken;
this.in = in;
this.charset = charset;
-
+
// remove any beginning < and ending > as we need to support ns prefixes and attributes, so we use a reg exp patterns
this.tagTokenPattern =
Pattern.compile(MessageFormat.format(SCAN_BLOCK_TOKEN_REGEX_TEMPLATE,
http://git-wip-us.apache.org/repos/asf/camel/blob/968ad485/camel-core/src/test/java/org/apache/camel/language/TokenizerTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/language/TokenizerTest.java b/camel-core/src/test/java/org/apache/camel/language/TokenizerTest.java
index 7414583..414b926 100644
--- a/camel-core/src/test/java/org/apache/camel/language/TokenizerTest.java
+++ b/camel-core/src/test/java/org/apache/camel/language/TokenizerTest.java
@@ -204,6 +204,14 @@ public class TokenizerTest extends ExchangeTestSupport {
List<?> names = exp.evaluate(exchange, List.class);
assertNull(names);
}
+
+ public void testTokenizeXMLPairWithSimilarChildNames() throws Exception {
+ Expression exp = TokenizeLanguage.tokenizeXML("Trip", "Trips");
+ exchange.getIn().setBody("<?xml version='1.0' encoding='UTF-8'?>\n<Trips>\n<Trip>\n<TripType>\n</TripType>\n</Trip>\n</Trips>");
+ List<?> names = exp.evaluate(exchange, List.class);
+ assertEquals(1, names.size());
+ }
+
public void testTokenizeXMLPairWithDefaultNamespace() throws Exception {
Expression exp = TokenizeLanguage.tokenizeXML("<person>", "<persons>");