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/09 20:33:53 UTC

[3/3] camel git commit: CAMEL-10684: camel-catalog - Simple validator should provide location index of the error

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/37c6375b
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/37c6375b
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/37c6375b

Branch: refs/heads/camel-2.18.x
Commit: 37c6375b7e8d1a8f8cafc9898ccf2f3787eef6ae
Parents: 28c066c
Author: Claus Ibsen <da...@apache.org>
Authored: Mon Jan 9 21:26:51 2017 +0100
Committer: Claus Ibsen <da...@apache.org>
Committed: Mon Jan 9 21:33:22 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/37c6375b/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 74b4b41..688c546 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;
@@ -1683,6 +1684,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);
@@ -1690,9 +1692,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/37c6375b/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/37c6375b/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