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 <[email protected]> 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);
