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/12 06:18:38 UTC
[camel] 03/11: 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 1e2f796c5eba327aa6e03afb20e0752e278c856e
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Fri Mar 11 11:01:16 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.
---
...PreProcessor.java => CompilePostProcessor.java} | 19 ++++++++++++++-----
.../dsl/support/RouteBuilderLoaderSupport.java | 22 +++++++++++-----------
.../dsl/java/joor/JavaRoutesBuilderLoader.java | 19 +++++++++----------
.../apache/camel/main/SpringAnnotationSupport.java | 8 ++++----
4 files changed, 38 insertions(+), 30 deletions(-)
diff --git a/dsl/camel-dsl-support/src/main/java/org/apache/camel/dsl/support/AnnotationPreProcessor.java b/dsl/camel-dsl-support/src/main/java/org/apache/camel/dsl/support/CompilePostProcessor.java
similarity index 64%
rename from dsl/camel-dsl-support/src/main/java/org/apache/camel/dsl/support/AnnotationPreProcessor.java
rename to dsl/camel-dsl-support/src/main/java/org/apache/camel/dsl/support/CompilePostProcessor.java
index 2c0499a..021a97f 100644
--- a/dsl/camel-dsl-support/src/main/java/org/apache/camel/dsl/support/AnnotationPreProcessor.java
+++ b/dsl/camel-dsl-support/src/main/java/org/apache/camel/dsl/support/CompilePostProcessor.java
@@ -19,15 +19,24 @@ package org.apache.camel.dsl.support;
import org.apache.camel.CamelContext;
/**
- * Allows to plugin custom annotation pre-processors that are processed after the DSL has loaded the source and compiled
- * into a Java object.
+ * Allows to plugin custom post processors that are processed after the DSL has loaded the source and compiled into a
+ * Java object.
* <p/>
- * This is used to detect and handle {@link org.apache.camel.BindToRegistry} and {@link org.apache.camel.TypeConverter}
+ * This is used to detect and handle {@link org.apache.camel.BindToRegistry} and {@link org.apache.camel.Converter}
* classes.
*/
-public interface AnnotationPreProcessor {
+public interface CompilePostProcessor {
- void handleAnnotation(
+ /**
+ * Invoked after the class has been compiled
+ *
+ * @param camelContext the camel context
+ * @param name the name of the resource/class
+ * @param clazz the class
+ * @param instance the object created as instance of the class (if any)
+ * @throws Exception is thrown if error during post-processing
+ */
+ void postCompile(
CamelContext camelContext, String name,
Class<?> clazz, Object instance)
throws Exception;
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 5e93d15..0b3dae8 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
@@ -39,7 +39,7 @@ public abstract class RouteBuilderLoaderSupport extends RoutesBuilderLoaderSuppo
private final String extension;
private StartupStepRecorder recorder;
- private final List<AnnotationPreProcessor> annotationPreProcessors = new ArrayList<>();
+ private final List<CompilePostProcessor> compilePostProcessors = new ArrayList<>();
protected RouteBuilderLoaderSupport(String extension) {
this.extension = extension;
@@ -52,18 +52,18 @@ public abstract class RouteBuilderLoaderSupport extends RoutesBuilderLoaderSuppo
}
/**
- * Gets the registered {@link AnnotationPreProcessor}.
+ * Gets the registered {@link CompilePostProcessor}.
*/
- public List<AnnotationPreProcessor> getAnnotationPreProcessors() {
- return annotationPreProcessors;
+ public List<CompilePostProcessor> getCompilePostProcessors() {
+ return compilePostProcessors;
}
/**
- * Add a custom {@link AnnotationPreProcessor} to handle specific annotations after compiling the source into a Java
- * object.
+ * Add a custom {@link CompilePostProcessor} to handle specific post-processing after compiling the source into a
+ * Java object.
*/
- public void addAnnotationPreProcessor(AnnotationPreProcessor preProcessor) {
- this.annotationPreProcessors.add(preProcessor);
+ public void addCompilePostProcessor(CompilePostProcessor preProcessor) {
+ this.compilePostProcessors.add(preProcessor);
}
@Override
@@ -81,10 +81,10 @@ public abstract class RouteBuilderLoaderSupport extends RoutesBuilderLoaderSuppo
if (getCamelContext() != null) {
// discover optional pre-processors to be used
- Set<AnnotationPreProcessor> pres = getCamelContext().getRegistry().findByType(AnnotationPreProcessor.class);
+ Set<CompilePostProcessor> pres = getCamelContext().getRegistry().findByType(CompilePostProcessor.class);
if (pres != null && !pres.isEmpty()) {
- for (AnnotationPreProcessor pre : pres) {
- addAnnotationPreProcessor(pre);
+ for (CompilePostProcessor pre : pres) {
+ addCompilePostProcessor(pre);
}
}
}
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 baad4ee..a407559 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
@@ -31,7 +31,7 @@ import org.apache.camel.LoggingLevel;
import org.apache.camel.TypeConverterExists;
import org.apache.camel.api.management.ManagedResource;
import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.dsl.support.AnnotationPreProcessor;
+import org.apache.camel.dsl.support.CompilePostProcessor;
import org.apache.camel.dsl.support.RouteBuilderLoaderSupport;
import org.apache.camel.spi.CamelBeanPostProcessor;
import org.apache.camel.spi.Resource;
@@ -53,8 +53,8 @@ public class JavaRoutesBuilderLoader extends RouteBuilderLoaderSupport {
public JavaRoutesBuilderLoader() {
super(EXTENSION);
- addAnnotationPreProcessor(new ConverterAnnotationPreProcessor());
- addAnnotationPreProcessor(new BindToRegistryAnnotationPreProcessor());
+ addCompilePostProcessor(new ConverterCompilePostProcessor());
+ addCompilePostProcessor(new BindToRegistryCompilePostProcessor());
}
@Override
@@ -75,8 +75,8 @@ public class JavaRoutesBuilderLoader extends RouteBuilderLoaderSupport {
}
// not a route builder but we support annotation scan to register custom beans, type converters, etc.
- for (AnnotationPreProcessor pre : getAnnotationPreProcessors()) {
- pre.handleAnnotation(getCamelContext(), name, clazz, obj);
+ for (CompilePostProcessor pre : getCompilePostProcessors()) {
+ pre.postCompile(getCamelContext(), name, clazz, obj);
}
return null;
@@ -98,10 +98,10 @@ public class JavaRoutesBuilderLoader extends RouteBuilderLoaderSupport {
: name;
}
- private static class ConverterAnnotationPreProcessor implements AnnotationPreProcessor {
+ private static class ConverterCompilePostProcessor implements CompilePostProcessor {
@Override
- public void handleAnnotation(CamelContext camelContext, String name, Class<?> clazz, Object instance) {
+ public void postCompile(CamelContext camelContext, String name, Class<?> clazz, Object instance) throws Exception {
if (clazz.getAnnotation(Converter.class) != null) {
TypeConverterRegistry tcr = camelContext.getTypeConverterRegistry();
TypeConverterExists exists = tcr.getTypeConverterExists();
@@ -119,11 +119,10 @@ public class JavaRoutesBuilderLoader extends RouteBuilderLoaderSupport {
}
}
- private static class BindToRegistryAnnotationPreProcessor implements AnnotationPreProcessor {
+ private static class BindToRegistryCompilePostProcessor implements CompilePostProcessor {
@Override
- public void handleAnnotation(CamelContext camelContext, String name, Class<?> clazz, Object instance)
- throws Exception {
+ public void postCompile(CamelContext camelContext, String name, Class<?> clazz, Object instance) throws Exception {
BindToRegistry bir = instance.getClass().getAnnotation(BindToRegistry.class);
Configuration cfg = instance.getClass().getAnnotation(Configuration.class);
if (bir != null || cfg != null || instance instanceof CamelConfiguration) {
diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/SpringAnnotationSupport.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/SpringAnnotationSupport.java
index 22a185b..26392b0 100644
--- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/SpringAnnotationSupport.java
+++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/SpringAnnotationSupport.java
@@ -18,7 +18,7 @@ package org.apache.camel.main;
import org.apache.camel.CamelContext;
import org.apache.camel.ExtendedCamelContext;
-import org.apache.camel.dsl.support.AnnotationPreProcessor;
+import org.apache.camel.dsl.support.CompilePostProcessor;
import org.apache.camel.spi.CamelBeanPostProcessor;
import org.apache.camel.util.ObjectHelper;
import org.springframework.stereotype.Component;
@@ -30,13 +30,13 @@ public final class SpringAnnotationSupport {
}
public static void registerSpringSupport(CamelContext context) {
- context.getRegistry().bind("SpringAnnotationPreProcessor", new SpringAnnotationPreProcessor());
+ context.getRegistry().bind("SpringAnnotationCompilePostProcessor", new SpringAnnotationCompilePostProcessor());
}
- private static class SpringAnnotationPreProcessor implements AnnotationPreProcessor {
+ private static class SpringAnnotationCompilePostProcessor implements CompilePostProcessor {
@Override
- public void handleAnnotation(CamelContext camelContext, String name, Class<?> clazz, Object instance) throws Exception {
+ public void postCompile(CamelContext camelContext, String name, Class<?> clazz, Object instance) throws Exception {
// @Component and @Service are the same
Component comp = clazz.getAnnotation(Component.class);
Service service = clazz.getAnnotation(Service.class);