CAMEL-9898: Simple expression add support for escape curly bracket end to not trigger as function end
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/133778f5 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/133778f5 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/133778f5 Branch: refs/heads/master Commit: 133778f59d8f93694d55dcac09ecb42bd4b25d8f Parents: 44c7bd6 Author: Claus Ibsen <davscl...@apache.org> Authored: Thu Apr 21 20:40:55 2016 +0200 Committer: Claus Ibsen <davscl...@apache.org> Committed: Thu Apr 21 22:48:50 2016 +0200 ---------------------------------------------------------------------- .../camel/language/simple/SimpleTokenizer.java | 3 +++ .../apache/camel/builder/SimpleBuilderTest.java | 24 ++++++++++++++++++++ .../camel/language/simple/SimpleTest.java | 7 ++++++ 3 files changed, 34 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/133778f5/camel-core/src/main/java/org/apache/camel/language/simple/SimpleTokenizer.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/language/simple/SimpleTokenizer.java b/camel-core/src/main/java/org/apache/camel/language/simple/SimpleTokenizer.java index 37f83f4..1d5438a 100644 --- a/camel-core/src/main/java/org/apache/camel/language/simple/SimpleTokenizer.java +++ b/camel-core/src/main/java/org/apache/camel/language/simple/SimpleTokenizer.java @@ -193,6 +193,9 @@ public final class SimpleTokenizer { } else if ('r' == next) { sb.append("\r"); special = true; + } else if ('}' == next) { + sb.append("}"); + special = true; } else { // not special just a regular character sb.append(ch); http://git-wip-us.apache.org/repos/asf/camel/blob/133778f5/camel-core/src/test/java/org/apache/camel/builder/SimpleBuilderTest.java ---------------------------------------------------------------------- diff --git a/camel-core/src/test/java/org/apache/camel/builder/SimpleBuilderTest.java b/camel-core/src/test/java/org/apache/camel/builder/SimpleBuilderTest.java index e8f7b8f..915ae53 100644 --- a/camel-core/src/test/java/org/apache/camel/builder/SimpleBuilderTest.java +++ b/camel-core/src/test/java/org/apache/camel/builder/SimpleBuilderTest.java @@ -82,4 +82,28 @@ public class SimpleBuilderTest extends TestSupport { // should be convertable to integers assertEquals(11, SimpleBuilder.simple("11", int.class).evaluate(exchange, Object.class)); } + + public void testRegexAllWithPlaceHolders() { + exchange.getIn().setHeader("activateUrl", "http://some/rest/api/(id)/activate"); + assertEquals("http://some/rest/api/12/activate", SimpleBuilder.simple("${header.activateUrl.replaceAll(\"\\(id\\)\",\"12\")}").evaluate(exchange, String.class)); + + //passes when contains { only + exchange.getIn().setHeader("activateUrl", "http://some/rest/api/{id/activate"); + assertEquals("http://some/rest/api/12/activate", SimpleBuilder.simple("${header.activateUrl.replaceAll(\"\\{id\",\"12\")}").evaluate(exchange, String.class)); + + String replaced = "http://some/rest/api/{id}/activate".replaceAll("\\{id\\}", "12"); + assertEquals("http://some/rest/api/12/activate", replaced); + + //passes when contains { } + exchange.getIn().setHeader("activateUrl", "http://some/rest/api/{id}/activate"); + assertEquals("http://some/rest/api/12/activate", SimpleBuilder.simple("${header.activateUrl.replaceAll(\"\\{id\\}\",\"12\")}").evaluate(exchange, String.class)); + + //passes when contains { } and another ${body} function + exchange.getIn().setBody("12"); + assertEquals("http://some/rest/api/12/activate", SimpleBuilder.simple("${header.activateUrl.replaceAll(\"\\{id\\}\",\"${body}\")}").evaluate(exchange, String.class)); + + //passes when } is escaped with \} + assertEquals("http://some/rest/api/{}/activate", SimpleBuilder.simple("${header.activateUrl.replaceAll(\"\\{id\\}\",\"{\\}\")}").evaluate(exchange, String.class)); + } + } http://git-wip-us.apache.org/repos/asf/camel/blob/133778f5/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java ---------------------------------------------------------------------- diff --git a/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java b/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java index 3f3374c..c0cd5c0 100644 --- a/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java +++ b/camel-core/src/test/java/org/apache/camel/language/simple/SimpleTest.java @@ -1370,6 +1370,13 @@ public class SimpleTest extends LanguageTestSupport { assertExpression("$${body}", "$Something"); } + public void testEscapeEndFunction() throws Exception { + exchange.getIn().setBody("Something"); + + assertExpression("{hello\\}", "{hello}"); + assertExpression("${body}{hello\\}", "Something{hello}"); + } + public void testCamelContextOGNL() throws Exception { assertExpression("${camelContext.getName()}", context.getName()); assertExpression("${camelContext.version}", context.getVersion());