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