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 <davscl...@apache.org> Authored: Fri Jan 13 17:57:04 2017 +0100 Committer: Claus Ibsen <davscl...@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);