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 2022/03/14 06:11:05 UTC

[camel] 02/04: CAMEL-17571: camel-dsl - Allow to register custom annotation processors that can do custom logic after a DSL has compiled source into Java object.

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

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

commit 6a206f2b872f8190e4069db05dc7263f10a2ace5
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Sun Mar 13 14:37:11 2022 +0100

    CAMEL-17571: camel-dsl - Allow to register custom annotation processors that can do custom logic after a DSL has compiled source into Java object.
---
 .../dsl/support/BindToRegistryCompilePostProcessor.java    |  2 ++
 .../camel/dsl/support/RouteBuilderLoaderSupport.java       |  4 ----
 .../dsl/support/TypeConverterCompilePostProcessor.java     |  2 ++
 .../camel/dsl/java/joor/JavaRoutesBuilderLoader.java       | 10 +++++-----
 .../java/org/apache/camel/main/CamelAnnotationSupport.java | 14 ++++++++++++++
 .../src/main/java/org/apache/camel/main/KameletMain.java   |  3 ++-
 6 files changed, 25 insertions(+), 10 deletions(-)

diff --git a/dsl/camel-dsl-support/src/main/java/org/apache/camel/dsl/support/BindToRegistryCompilePostProcessor.java b/dsl/camel-dsl-support/src/main/java/org/apache/camel/dsl/support/BindToRegistryCompilePostProcessor.java
index cd1271a..041f45d 100644
--- a/dsl/camel-dsl-support/src/main/java/org/apache/camel/dsl/support/BindToRegistryCompilePostProcessor.java
+++ b/dsl/camel-dsl-support/src/main/java/org/apache/camel/dsl/support/BindToRegistryCompilePostProcessor.java
@@ -26,6 +26,8 @@ import org.apache.camel.util.ObjectHelper;
 
 public class BindToRegistryCompilePostProcessor implements CompilePostProcessor {
 
+    // TODO: move to camel-kamelet-main
+
     @Override
     public void postCompile(CamelContext camelContext, String name, Class<?> clazz, Object instance) throws Exception {
         BindToRegistry bir = instance.getClass().getAnnotation(BindToRegistry.class);
diff --git a/dsl/camel-dsl-support/src/main/java/org/apache/camel/dsl/support/RouteBuilderLoaderSupport.java b/dsl/camel-dsl-support/src/main/java/org/apache/camel/dsl/support/RouteBuilderLoaderSupport.java
index eb0024b..763d9e0 100644
--- a/dsl/camel-dsl-support/src/main/java/org/apache/camel/dsl/support/RouteBuilderLoaderSupport.java
+++ b/dsl/camel-dsl-support/src/main/java/org/apache/camel/dsl/support/RouteBuilderLoaderSupport.java
@@ -42,10 +42,6 @@ public abstract class RouteBuilderLoaderSupport extends RoutesBuilderLoaderSuppo
 
     protected RouteBuilderLoaderSupport(String extension) {
         this.extension = extension;
-
-        // out of the box camel based compile post processors
-        addCompilePostProcessor(new TypeConverterCompilePostProcessor());
-        addCompilePostProcessor(new BindToRegistryCompilePostProcessor());
     }
 
     @ManagedAttribute(description = "Supported file extension")
diff --git a/dsl/camel-dsl-support/src/main/java/org/apache/camel/dsl/support/TypeConverterCompilePostProcessor.java b/dsl/camel-dsl-support/src/main/java/org/apache/camel/dsl/support/TypeConverterCompilePostProcessor.java
index ba3de3b..19028ee 100644
--- a/dsl/camel-dsl-support/src/main/java/org/apache/camel/dsl/support/TypeConverterCompilePostProcessor.java
+++ b/dsl/camel-dsl-support/src/main/java/org/apache/camel/dsl/support/TypeConverterCompilePostProcessor.java
@@ -24,6 +24,8 @@ import org.apache.camel.spi.TypeConverterRegistry;
 
 public class TypeConverterCompilePostProcessor implements CompilePostProcessor {
 
+    // TODO: move to camel-kamelet-main
+
     @Override
     public void postCompile(CamelContext camelContext, String name, Class<?> clazz, Object instance) throws Exception {
         if (clazz.getAnnotation(Converter.class) != null) {
diff --git a/dsl/camel-java-joor-dsl/src/main/java/org/apache/camel/dsl/java/joor/JavaRoutesBuilderLoader.java b/dsl/camel-java-joor-dsl/src/main/java/org/apache/camel/dsl/java/joor/JavaRoutesBuilderLoader.java
index b5d2815..c29e54d 100644
--- a/dsl/camel-java-joor-dsl/src/main/java/org/apache/camel/dsl/java/joor/JavaRoutesBuilderLoader.java
+++ b/dsl/camel-java-joor-dsl/src/main/java/org/apache/camel/dsl/java/joor/JavaRoutesBuilderLoader.java
@@ -54,17 +54,17 @@ public class JavaRoutesBuilderLoader extends RouteBuilderLoaderSupport {
 
             Reflect ref = Reflect.compile(name, content).create();
             Class<?> clazz = ref.type();
-
             Object obj = ref.get();
-            if (obj instanceof RouteBuilder) {
-                return (RouteBuilder) obj;
-            }
 
-            // not a route builder but we support annotation scan to register custom beans, type converters, etc.
+            // support custom annotation scanning post compilation
+            // such as to register custom beans, type converters, etc.
             for (CompilePostProcessor pre : getCompilePostProcessors()) {
                 pre.postCompile(getCamelContext(), name, clazz, obj);
             }
 
+            if (obj instanceof RouteBuilder) {
+                return (RouteBuilder) obj;
+            }
             return null;
         }
     }
diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/CamelAnnotationSupport.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/CamelAnnotationSupport.java
new file mode 100644
index 0000000..b7c58cc
--- /dev/null
+++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/CamelAnnotationSupport.java
@@ -0,0 +1,14 @@
+package org.apache.camel.main;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.dsl.support.BindToRegistryCompilePostProcessor;
+import org.apache.camel.dsl.support.TypeConverterCompilePostProcessor;
+
+public class CamelAnnotationSupport {
+
+    public static void registerCamelSupport(CamelContext context) {
+        context.getRegistry().bind("CamelTypeConverterCompilePostProcessor", new TypeConverterCompilePostProcessor());
+        context.getRegistry().bind("CamelBindToRegistryCompilePostProcessor", new BindToRegistryCompilePostProcessor());
+    }
+
+}
diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java
index 6b22b88..09a629c 100644
--- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java
+++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java
@@ -163,7 +163,8 @@ public class KameletMain extends MainCommandLineSupport {
         answer.setRegistry(registry);
         // load camel component and custom health-checks
         answer.setLoadHealthChecks(true);
-        // optional spring/quarkus annotation support
+        // optional camel/spring/quarkus annotation support in DSL and Java beans
+        CamelAnnotationSupport.registerCamelSupport(answer);
         SpringAnnotationSupport.registerSpringSupport(answer);
         QuarkusAnnotationSupport.registerQuarkus(answer);