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);