This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/master by this push:
     new 0dd4f9d  CAMEL-15697: camel-joor - Camel expression langauge using 
jOOR runtime java compiled.
0dd4f9d is described below

commit 0dd4f9dda350f0dee7aa482425ada8418d05c818
Author: Claus Ibsen <[email protected]>
AuthorDate: Sun Oct 18 17:04:32 2020 +0200

    CAMEL-15697: camel-joor - Camel expression langauge using jOOR runtime java 
compiled.
---
 .../language/joor/JoorCompilationException.java    | 19 +++++++++++++-
 .../apache/camel/language/joor/JoorCompiler.java   |  2 --
 .../camel/language/joor/JoorCompileErrorTest.java} | 30 +++++++++++++---------
 3 files changed, 36 insertions(+), 15 deletions(-)

diff --git 
a/components/camel-joor/src/main/java/org/apache/camel/language/joor/JoorCompilationException.java
 
b/components/camel-joor/src/main/java/org/apache/camel/language/joor/JoorCompilationException.java
index 348c728..c2e8123 100644
--- 
a/components/camel-joor/src/main/java/org/apache/camel/language/joor/JoorCompilationException.java
+++ 
b/components/camel-joor/src/main/java/org/apache/camel/language/joor/JoorCompilationException.java
@@ -22,7 +22,7 @@ public class JoorCompilationException extends 
RuntimeException {
     private final String code;
 
     public JoorCompilationException(String className, String code, Throwable 
cause) {
-        super("jOOR compilation error for class: " + className + " with 
code:\n" + code, cause);
+        super("jOOR compilation error for class: " + className, cause);
         this.className = className;
         this.code = code;
     }
@@ -35,4 +35,21 @@ public class JoorCompilationException extends 
RuntimeException {
         return code;
     }
 
+    @Override
+    public String getMessage() {
+        return super.getMessage() + "\n\n" + codeWithLineNumbers() + "\n\n";
+    }
+
+    private String codeWithLineNumbers() {
+        StringBuilder sb = new StringBuilder();
+        String[] lines = code.split("\n");
+        int counter = 0;
+        for (String line : lines) {
+            String s = String.format("%3d %s", ++counter, line);
+            sb.append(s);
+            sb.append("\n");
+        }
+        return sb.toString();
+    }
+
 }
diff --git 
a/components/camel-joor/src/main/java/org/apache/camel/language/joor/JoorCompiler.java
 
b/components/camel-joor/src/main/java/org/apache/camel/language/joor/JoorCompiler.java
index 81752de..da5bc99 100644
--- 
a/components/camel-joor/src/main/java/org/apache/camel/language/joor/JoorCompiler.java
+++ 
b/components/camel-joor/src/main/java/org/apache/camel/language/joor/JoorCompiler.java
@@ -76,14 +76,12 @@ public class JoorCompiler extends ServiceSupport implements 
StaticService {
 
         //  wrap text into a class method we can call
         StringBuilder sb = new StringBuilder();
-        sb.append("\n");
         sb.append("package ").append(qn).append(";\n");
         sb.append("\n");
         sb.append("import org.apache.camel.*;\n");
         sb.append("\n");
         sb.append("public class ").append(name).append(" {\n");
         sb.append("\n");
-        sb.append("\n");
         sb.append(
                 "    public static Object evaluate(CamelContext context, 
Exchange exchange, Message message, Object body) throws Exception {\n");
         sb.append("        ");
diff --git 
a/components/camel-joor/src/main/java/org/apache/camel/language/joor/JoorCompilationException.java
 
b/components/camel-joor/src/test/java/org/apache/camel/language/joor/JoorCompileErrorTest.java
similarity index 52%
copy from 
components/camel-joor/src/main/java/org/apache/camel/language/joor/JoorCompilationException.java
copy to 
components/camel-joor/src/test/java/org/apache/camel/language/joor/JoorCompileErrorTest.java
index 348c728..ced4655 100644
--- 
a/components/camel-joor/src/main/java/org/apache/camel/language/joor/JoorCompilationException.java
+++ 
b/components/camel-joor/src/test/java/org/apache/camel/language/joor/JoorCompileErrorTest.java
@@ -16,23 +16,29 @@
  */
 package org.apache.camel.language.joor;
 
-public class JoorCompilationException extends RuntimeException {
+import org.apache.camel.test.junit5.LanguageTestSupport;
+import org.junit.jupiter.api.Test;
 
-    private final String className;
-    private final String code;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
 
-    public JoorCompilationException(String className, String code, Throwable 
cause) {
-        super("jOOR compilation error for class: " + className + " with 
code:\n" + code, cause);
-        this.className = className;
-        this.code = code;
-    }
+public class JoorCompileErrorTest extends LanguageTestSupport {
 
-    public String getClassName() {
-        return className;
+    @Override
+    protected String getLanguageName() {
+        return "joor";
     }
 
-    public String getCode() {
-        return code;
+    @Test
+    public void testCompileError() throws Exception {
+        try {
+            assertExpression("'Hello World", null);
+            fail("Should fail");
+        } catch (JoorCompilationException e) {
+            // there is a missing end quote cauing compile error
+            assertTrue(e.getCode().contains("return \"Hello World;"));
+            assertTrue(e.getCause().getMessage().contains("Compilation 
error"));
+        }
     }
 
 }

Reply via email to