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"));
+ }
}
}