You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2017/01/13 17:02:00 UTC

camel git commit: CAMEL-10700: camel-catalog validate simple should deal with property placeholders cannot be resolved and therefore opt them out.

Repository: camel
Updated Branches:
  refs/heads/camel-2.18.x 21e483db7 -> e8de8c16b


CAMEL-10700: camel-catalog validate simple should deal with property placeholders cannot be resolved and therefore opt them out.


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/e8de8c16
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/e8de8c16
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/e8de8c16

Branch: refs/heads/camel-2.18.x
Commit: e8de8c16bbae212ef7e59260a4d9da4711a15621
Parents: 21e483d
Author: Claus Ibsen <da...@apache.org>
Authored: Fri Jan 13 17:57:04 2017 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Fri Jan 13 18:01:45 2017 +0100

----------------------------------------------------------------------
 .../camel/catalog/DefaultCamelCatalog.java      | 25 ++++++++++++++++----
 .../apache/camel/catalog/CamelCatalogTest.java  | 16 +++++++++++++
 2 files changed, 36 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/e8de8c16/platforms/catalog/src/main/java/org/apache/camel/catalog/DefaultCamelCatalog.java
----------------------------------------------------------------------
diff --git a/platforms/catalog/src/main/java/org/apache/camel/catalog/DefaultCamelCatalog.java b/platforms/catalog/src/main/java/org/apache/camel/catalog/DefaultCamelCatalog.java
index b51256d..b00bf73 100644
--- a/platforms/catalog/src/main/java/org/apache/camel/catalog/DefaultCamelCatalog.java
+++ b/platforms/catalog/src/main/java/org/apache/camel/catalog/DefaultCamelCatalog.java
@@ -1653,7 +1653,7 @@ public class DefaultCamelCatalog implements CamelCatalog {
 
     @Override
     public SimpleValidationResult validateSimpleExpression(String simple) {
-        return doValidateSimple(DefaultCamelCatalog.class.getClassLoader(), simple, false);
+        return doValidateSimple(null, simple, false);
     }
 
     @Override
@@ -1663,7 +1663,7 @@ public class DefaultCamelCatalog implements CamelCatalog {
 
     @Override
     public SimpleValidationResult validateSimplePredicate(String simple) {
-        return doValidateSimple(DefaultCamelCatalog.class.getClassLoader(), simple, true);
+        return doValidateSimple(null, simple, true);
     }
 
     @Override
@@ -1672,6 +1672,16 @@ public class DefaultCamelCatalog implements CamelCatalog {
     }
 
     private SimpleValidationResult doValidateSimple(ClassLoader classLoader, String simple, boolean predicate) {
+        if (classLoader == null) {
+            classLoader = DefaultCamelCatalog.class.getClassLoader();
+        }
+
+        // if there are {{ }}} property placeholders then we need to resolve them to something else
+        // as the simple parse cannot resolve them before parsing as we dont run the actual Camel application
+        // with property placeholders setup so we need to dummy this by replace the {{ }} to something else
+        // therefore we use an more unlikely character: {{XXX}} to ~^XXX^~
+        String resolved = simple.replaceAll("\\{\\{(.+)\\}\\}", "~^$1^~");
+
         SimpleValidationResult answer = new SimpleValidationResult(simple);
 
         Object instance = null;
@@ -1687,9 +1697,9 @@ public class DefaultCamelCatalog implements CamelCatalog {
             Throwable cause = null;
             try {
                 if (predicate) {
-                    instance.getClass().getMethod("createPredicate", String.class).invoke(instance, simple);
+                    instance.getClass().getMethod("createPredicate", String.class).invoke(instance, resolved);
                 } else {
-                    instance.getClass().getMethod("createExpression", String.class).invoke(instance, simple);
+                    instance.getClass().getMethod("createExpression", String.class).invoke(instance, resolved);
                 }
             } catch (InvocationTargetException e) {
                 cause = e.getTargetException();
@@ -1698,7 +1708,12 @@ public class DefaultCamelCatalog implements CamelCatalog {
             }
 
             if (cause != null) {
-                answer.setError(cause.getMessage());
+
+                // reverse ~^XXX^~ back to {{XXX}}
+                String errMsg = cause.getMessage();
+                errMsg = errMsg.replaceAll("\\~\\^(.+)\\^\\~", "{{$1}}");
+
+                answer.setError(errMsg);
 
                 // is it simple parser exception then we can grab the index where the problem is
                 if (cause.getClass().getName().equals("org.apache.camel.language.simple.types.SimpleIllegalSyntaxException")

http://git-wip-us.apache.org/repos/asf/camel/blob/e8de8c16/platforms/catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java
----------------------------------------------------------------------
diff --git a/platforms/catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java b/platforms/catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java
index e08e668..acddd83 100644
--- a/platforms/catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java
+++ b/platforms/catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java
@@ -822,6 +822,22 @@ public class CamelCatalogTest {
     }
 
     @Test
+    public void testSimplePredicatePlaceholder() throws Exception {
+        SimpleValidationResult result = catalog.validateSimplePredicate(null, "${body} contains '{{danger}}'");
+        assertTrue(result.isSuccess());
+        assertEquals("${body} contains '{{danger}}'", result.getSimple());
+
+        result = catalog.validateSimplePredicate(null, "${bdy} contains '{{danger}}'");
+        assertFalse(result.isSuccess());
+        assertEquals("${bdy} contains '{{danger}}'", result.getSimple());
+        LOG.info(result.getError());
+        assertTrue(result.getError().startsWith("Unknown function: bdy at location 0"));
+        assertTrue(result.getError().contains("'{{danger}}'"));
+        assertEquals("Unknown function: bdy", result.getShortError());
+        assertEquals(0, result.getIndex());
+    }
+
+    @Test
     public void testSpringCamelContext() throws Exception {
         String json = catalog.modelJSonSchema("camelContext");
         assertNotNull(json);