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());

Reply via email to