Updated Branches: refs/heads/master 328e6e3f9 -> 2d7051ed0
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/2d7051ed Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/2d7051ed Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/2d7051ed Branch: refs/heads/master Commit: 2d7051ed0ea61f7651d27b8bbe6bd1a2006df725 Parents: 328e6e3 Author: Willem Jiang <ningji...@apache.org> Authored: Tue Aug 6 17:36:02 2013 +0800 Committer: Willem Jiang <ningji...@apache.org> Committed: Tue Aug 6 18:41:46 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/2d7051ed/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/2d7051ed/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>");