Repository: camel Updated Branches: refs/heads/camel-2.18.x 28c066c23 -> 37c6375b7 refs/heads/master 43b9583b8 -> 318964b7b
CAMEL-10684: camel-catalog - Simple validator should provide location index of the error Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/837b64f1 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/837b64f1 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/837b64f1 Branch: refs/heads/master Commit: 837b64f15535ffe66fd2f40338d92e3b328c4a36 Parents: 43b9583 Author: Claus Ibsen <davscl...@apache.org> Authored: Mon Jan 9 21:26:51 2017 +0100 Committer: Claus Ibsen <davscl...@apache.org> Committed: Mon Jan 9 21:26:51 2017 +0100 ---------------------------------------------------------------------- .../camel/catalog/DefaultCamelCatalog.java | 26 ++++++++++++++++++-- .../camel/catalog/SimpleValidationResult.java | 9 +++++++ .../apache/camel/catalog/CamelCatalogTest.java | 2 ++ 3 files changed, 35 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/837b64f1/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 fcf74be..8089281 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 @@ -20,6 +20,7 @@ import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; import java.net.URI; import java.net.URISyntaxException; import java.util.ArrayList; @@ -1827,6 +1828,7 @@ public class DefaultCamelCatalog implements CamelCatalog { } if (clazz != null && instance != null) { + Throwable cause = null; try { if (predicate) { instance.getClass().getMethod("createPredicate", String.class).invoke(instance, simple); @@ -1834,9 +1836,29 @@ public class DefaultCamelCatalog implements CamelCatalog { instance.getClass().getMethod("createExpression", String.class).invoke(instance, simple); } } catch (InvocationTargetException e) { - answer.setError(e.getTargetException().getMessage()); + cause = e.getTargetException(); } catch (Exception e) { - answer.setError(e.getMessage()); + cause = e; + } + + if (cause != null) { + answer.setError(cause.getMessage()); + + // 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") + || cause.getClass().getName().equals("org.apache.camel.language.simple.types.SimpleParserException")) { + try { + // we need to grab the index field from those simple parser exceptions + Method method = cause.getClass().getMethod("getIndex"); + Object result = method.invoke(cause); + if (result != null) { + int index = (int) result; + answer.setIndex(index); + } + } catch (Throwable i) { + // ignore + } + } } } http://git-wip-us.apache.org/repos/asf/camel/blob/837b64f1/platforms/catalog/src/main/java/org/apache/camel/catalog/SimpleValidationResult.java ---------------------------------------------------------------------- diff --git a/platforms/catalog/src/main/java/org/apache/camel/catalog/SimpleValidationResult.java b/platforms/catalog/src/main/java/org/apache/camel/catalog/SimpleValidationResult.java index cd11ef0..87c846e 100644 --- a/platforms/catalog/src/main/java/org/apache/camel/catalog/SimpleValidationResult.java +++ b/platforms/catalog/src/main/java/org/apache/camel/catalog/SimpleValidationResult.java @@ -22,6 +22,7 @@ public class SimpleValidationResult implements Serializable { private final String simple; private String error; + private int index; public SimpleValidationResult(String simple) { this.simple = simple; @@ -42,4 +43,12 @@ public class SimpleValidationResult implements Serializable { public String getError() { return error; } + + public int getIndex() { + return index; + } + + public void setIndex(int index) { + this.index = index; + } } http://git-wip-us.apache.org/repos/asf/camel/blob/837b64f1/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 6380941..cc6c339 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 @@ -802,6 +802,7 @@ public class CamelCatalogTest { assertEquals("${body", result.getSimple()); LOG.info(result.getError()); assertTrue(result.getError().startsWith("expected symbol functionEnd but was eol at location 5")); + assertEquals(5, result.getIndex()); } @Test @@ -815,6 +816,7 @@ public class CamelCatalogTest { assertEquals("${body} > ${header.size", result.getSimple()); LOG.info(result.getError()); assertTrue(result.getError().startsWith("expected symbol functionEnd but was eol at location 22")); + assertEquals(22, result.getIndex()); } @Test