Repository: camel Updated Branches: refs/heads/master 4afb42f82 -> 4683a8726
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/4683a872 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/4683a872 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/4683a872 Branch: refs/heads/master Commit: 4683a87260d6c133a02bd11167d5465bfc315c94 Parents: 4afb42f Author: Claus Ibsen <davscl...@apache.org> Authored: Fri Jan 13 17:57:04 2017 +0100 Committer: Claus Ibsen <davscl...@apache.org> Committed: Fri Jan 13 18:02:25 2017 +0100 ---------------------------------------------------------------------- .../apache/camel/catalog/DefaultCamelCatalog.java | 17 ++++++++++++++--- .../org/apache/camel/catalog/CamelCatalogTest.java | 16 ++++++++++++++++ 2 files changed, 30 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/4683a872/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 e30616f..7c5ad30 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 @@ -1820,6 +1820,12 @@ public class DefaultCamelCatalog implements CamelCatalog { 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; @@ -1835,9 +1841,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(); @@ -1846,7 +1852,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/4683a872/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 0682026..a541d24 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 testValidateLanguage() throws Exception { LanguageValidationResult result = catalog.validateLanguageExpression(null, "simple", "${body}"); assertTrue(result.isSuccess());