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 2019/03/14 06:53:22 UTC

[camel] branch tc-loader created (now 379d1ec)

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

davsclaus pushed a change to branch tc-loader
in repository https://gitbox.apache.org/repos/asf/camel.git.


      at 379d1ec  CAMEL-13313: Add support for generating type converter loader source code to be able to load component type converters in a faster way.

This branch includes the following new commits:

     new 9cf5e63  CAMEL-13313: Add support for generating type converter loader source code to be able to load component type converters in a faster way.
     new 6ad60d2  CAMEL-13313: Add support for generating type converter loader source code to be able to load component type converters in a faster way.
     new 2511087  CAMEL-13313: Add support for generating type converter loader source code to be able to load component type converters in a faster way.
     new cbb9455  CAMEL-13313: Add support for generating type converter loader source code to be able to load component type converters in a faster way.
     new de67fd6  CAMEL-13313: Add support for generating type converter loader source code to be able to load component type converters in a faster way.
     new 379d1ec  CAMEL-13313: Add support for generating type converter loader source code to be able to load component type converters in a faster way.

The 6 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[camel] 01/06: CAMEL-13313: Add support for generating type converter loader source code to be able to load component type converters in a faster way.

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 9cf5e63f3aba656a2956f891f95a38ec49d0c473
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Thu Mar 14 05:44:45 2019 +0100

    CAMEL-13313: Add support for generating type converter loader source code to be able to load component type converters in a faster way.
---
 ...nverter.java => InjectedTestTypeConverter.java} |  84 ++++++++--------
 .../InjectedTypeConverterMultipleContextsTest.java |   4 +-
 .../camel/cdi/test/InjectedTypeConverterTest.java  |   4 +-
 .../src/main/java/org/apache/camel/Converter.java  |   8 ++
 .../java/org/apache/camel/FallbackConverter.java   |   9 ++
 .../impl/converter/BaseTypeConverterRegistry.java  |   1 +
 .../java/org/apache/camel/util}/DoubleMap.java     |   2 +-
 .../camel/tools/apt/AnnotationProcessorHelper.java |   4 +-
 ...essor.java => ComponentConverterProcessor.java} | 110 ++++++++++++++++-----
 ...rProcessor.java => CoreConverterProcessor.java} |   3 +-
 .../services/javax.annotation.processing.Processor |   6 +-
 11 files changed, 161 insertions(+), 74 deletions(-)

diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/converter/InjectedTypeConverter.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/converter/InjectedTestTypeConverter.java
similarity index 91%
rename from components/camel-cdi/src/test/java/org/apache/camel/cdi/converter/InjectedTypeConverter.java
rename to components/camel-cdi/src/test/java/org/apache/camel/cdi/converter/InjectedTestTypeConverter.java
index ef0b245..2e7fc75 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/converter/InjectedTypeConverter.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/converter/InjectedTestTypeConverter.java
@@ -1,42 +1,42 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.cdi.converter;
-
-import javax.inject.Inject;
-
-import org.apache.camel.CamelContext;
-import org.apache.camel.Converter;
-import org.apache.camel.cdi.pojo.TypeConverterInput;
-import org.apache.camel.cdi.pojo.TypeConverterOutput;
-
-@Converter
-public final class InjectedTypeConverter {
-
-    private final CamelContext context;
-    
-    @Inject
-    InjectedTypeConverter(CamelContext context) {
-        this.context = context;
-    }
-
-    @Converter
-    public TypeConverterOutput convert(TypeConverterInput input) throws Exception {
-        TypeConverterOutput output = new TypeConverterOutput();
-        output.setProperty(context.resolvePropertyPlaceholders(input.getProperty()));
-        return output;
-    }
-}
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.cdi.converter;
+
+import javax.inject.Inject;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.Converter;
+import org.apache.camel.cdi.pojo.TypeConverterInput;
+import org.apache.camel.cdi.pojo.TypeConverterOutput;
+
+@Converter
+public final class InjectedTestTypeConverter {
+
+    private final CamelContext context;
+    
+    @Inject
+    InjectedTestTypeConverter(CamelContext context) {
+        this.context = context;
+    }
+
+    @Converter
+    public TypeConverterOutput convert(TypeConverterInput input) throws Exception {
+        TypeConverterOutput output = new TypeConverterOutput();
+        output.setProperty(context.resolvePropertyPlaceholders(input.getProperty()));
+        return output;
+    }
+}
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/InjectedTypeConverterMultipleContextsTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/InjectedTypeConverterMultipleContextsTest.java
index ccd5796..4f65e73 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/InjectedTypeConverterMultipleContextsTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/InjectedTypeConverterMultipleContextsTest.java
@@ -59,7 +59,7 @@ public class InjectedTypeConverterMultipleContextsTest {
                 .addClass(FirstCamelContextConvertingRoute.class)
                 .addClass(SecondCamelContextConvertingRoute.class)
                 // Type converter
-                .addClass(InjectedTypeConverter.class)
+                .addClass(InjectedTestTypeConverter.class)
                 // No need as Camel CDI automatically registers the type converter bean
                 //.addAsManifestResource(new StringAsset("org.apache.camel.cdi.se.converter"), ArchivePaths.create("services/org/apache/camel/TypeConverter"))
                 // Bean archive deployment descriptor
@@ -107,7 +107,7 @@ public class InjectedTypeConverterMultipleContextsTest {
     }
 
     @Converter
-    public static final class InjectedTypeConverter {
+    public static final class InjectedTestTypeConverter {
         @Converter
         public TypeConverterOutput convert(TypeConverterInput input) throws Exception {
             TypeConverterOutput output = new TypeConverterOutput();
diff --git a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/InjectedTypeConverterTest.java b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/InjectedTypeConverterTest.java
index 6e43984..4f9342f 100644
--- a/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/InjectedTypeConverterTest.java
+++ b/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/InjectedTypeConverterTest.java
@@ -28,7 +28,7 @@ import org.apache.camel.TypeConverter;
 import org.apache.camel.cdi.CdiCamelExtension;
 import org.apache.camel.cdi.Uri;
 import org.apache.camel.cdi.bean.InjectedTypeConverterRoute;
-import org.apache.camel.cdi.converter.InjectedTypeConverter;
+import org.apache.camel.cdi.converter.InjectedTestTypeConverter;
 import org.apache.camel.cdi.pojo.TypeConverterInput;
 import org.apache.camel.cdi.pojo.TypeConverterOutput;
 import org.apache.camel.component.mock.MockEndpoint;
@@ -58,7 +58,7 @@ public class InjectedTypeConverterTest {
             // Test class
             .addClass(InjectedTypeConverterRoute.class)
             // Type converter
-            .addClass(InjectedTypeConverter.class)
+            .addClass(InjectedTestTypeConverter.class)
             // No need as Camel CDI automatically registers the type converter bean
             //.addAsManifestResource(new StringAsset("org.apache.camel.cdi.se.converter"), ArchivePaths.create("services/org/apache/camel/TypeConverter"))
             // Bean archive deployment descriptor
diff --git a/core/camel-api/src/main/java/org/apache/camel/Converter.java b/core/camel-api/src/main/java/org/apache/camel/Converter.java
index 79b2234..9f08426 100644
--- a/core/camel-api/src/main/java/org/apache/camel/Converter.java
+++ b/core/camel-api/src/main/java/org/apache/camel/Converter.java
@@ -50,4 +50,12 @@ public @interface Converter {
      * Important this configuration must be set on the class-level, not on the method.
      */
     boolean ignoreOnLoadError() default false;
+
+    /**
+     * Whether to let the Camel compiler plugin to generate java source code
+     * for fast loading of the type converters.
+     *
+     * This option should only be configured on the top-level class.
+     */
+    boolean loader() default false;
 }
diff --git a/core/camel-api/src/main/java/org/apache/camel/FallbackConverter.java b/core/camel-api/src/main/java/org/apache/camel/FallbackConverter.java
index f3e4dae..6b3f4e7 100644
--- a/core/camel-api/src/main/java/org/apache/camel/FallbackConverter.java
+++ b/core/camel-api/src/main/java/org/apache/camel/FallbackConverter.java
@@ -51,4 +51,13 @@ public @interface FallbackConverter {
      */
     boolean canPromote() default false;
 
+    /**
+     * Whether to let the Camel compiler plugin to generate java source code
+     * for fast loading of the type converters.
+     * 
+     * This option should only be configured on the top-level class.
+     */
+    boolean loader() default false;
+
+
 }
\ No newline at end of file
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/converter/BaseTypeConverterRegistry.java b/core/camel-base/src/main/java/org/apache/camel/impl/converter/BaseTypeConverterRegistry.java
index 5a808b1..6380da8 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/converter/BaseTypeConverterRegistry.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/converter/BaseTypeConverterRegistry.java
@@ -48,6 +48,7 @@ import org.apache.camel.spi.TypeConverterRegistry;
 import org.apache.camel.support.MessageHelper;
 import org.apache.camel.support.TypeConverterSupport;
 import org.apache.camel.support.service.ServiceSupport;
+import org.apache.camel.util.DoubleMap;
 import org.apache.camel.util.ObjectHelper;
 
 /**
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/converter/DoubleMap.java b/core/camel-util/src/main/java/org/apache/camel/util/DoubleMap.java
similarity index 99%
rename from core/camel-base/src/main/java/org/apache/camel/impl/converter/DoubleMap.java
rename to core/camel-util/src/main/java/org/apache/camel/util/DoubleMap.java
index abeb236..9a8ff70 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/converter/DoubleMap.java
+++ b/core/camel-util/src/main/java/org/apache/camel/util/DoubleMap.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.impl.converter;
+package org.apache.camel.util;
 
 import java.util.function.Predicate;
 
diff --git a/tooling/apt/src/main/java/org/apache/camel/tools/apt/AnnotationProcessorHelper.java b/tooling/apt/src/main/java/org/apache/camel/tools/apt/AnnotationProcessorHelper.java
index 66e4e86..09fd766 100644
--- a/tooling/apt/src/main/java/org/apache/camel/tools/apt/AnnotationProcessorHelper.java
+++ b/tooling/apt/src/main/java/org/apache/camel/tools/apt/AnnotationProcessorHelper.java
@@ -23,7 +23,9 @@ import java.io.PrintWriter;
 import java.io.StringWriter;
 import java.io.Writer;
 import java.nio.file.Files;
+import java.nio.file.OpenOption;
 import java.nio.file.Paths;
+import java.nio.file.StandardOpenOption;
 import java.util.Collections;
 import java.util.List;
 import java.util.Set;
@@ -379,7 +381,7 @@ public final class AnnotationProcessorHelper {
     }
 
     public static void dumpExceptionToErrorFile(String fileName, String message, Throwable e) {
-        try (BufferedWriter w = Files.newBufferedWriter(Paths.get(fileName))) {
+        try (BufferedWriter w = Files.newBufferedWriter(Paths.get(fileName), StandardOpenOption.CREATE, StandardOpenOption.APPEND)) {
             w.append(message);
             w.append("\n\n");
             PrintWriter pw = new PrintWriter(w);
diff --git a/tooling/apt/src/main/java/org/apache/camel/tools/apt/ConverterProcessor.java b/tooling/apt/src/main/java/org/apache/camel/tools/apt/ComponentConverterProcessor.java
similarity index 76%
copy from tooling/apt/src/main/java/org/apache/camel/tools/apt/ConverterProcessor.java
copy to tooling/apt/src/main/java/org/apache/camel/tools/apt/ComponentConverterProcessor.java
index 08e3322..19c9790 100644
--- a/tooling/apt/src/main/java/org/apache/camel/tools/apt/ConverterProcessor.java
+++ b/tooling/apt/src/main/java/org/apache/camel/tools/apt/ComponentConverterProcessor.java
@@ -24,7 +24,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.TreeMap;
-
 import javax.annotation.processing.RoundEnvironment;
 import javax.annotation.processing.SupportedAnnotationTypes;
 import javax.lang.model.element.AnnotationMirror;
@@ -39,27 +38,60 @@ import javax.tools.Diagnostic;
 import javax.tools.JavaFileObject;
 
 @SupportedAnnotationTypes({"org.apache.camel.Converter"})
-public class ConverterProcessor extends AbstractCamelAnnotationProcessor {
+public class ComponentConverterProcessor extends AbstractCamelAnnotationProcessor {
 
-    @Override
-    protected void doProcess(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) throws Exception {
-        if (this.processingEnv.getElementUtils().getTypeElement("org.apache.camel.impl.converter.CoreStaticTypeConverterLoader") != null) {
-            return;
+    private static final class ClassConverters {
+
+        private final Map<String, Map<TypeMirror, ExecutableElement>> converters = new TreeMap<>();
+        private final Comparator<TypeMirror> comparator;
+        private final List<ExecutableElement> fallbackConverters = new ArrayList<>();
+
+        ClassConverters(Comparator<TypeMirror> comparator) {
+            this.comparator = comparator;
+        }
+
+        void addTypeConverter(TypeMirror to, TypeMirror from, ExecutableElement ee) {
+            converters.computeIfAbsent(toString(to), c -> new TreeMap<>(comparator)).put(from, ee);
+        }
+
+        void addFallbackTypeConverter(ExecutableElement ee) {
+            fallbackConverters.add(ee);
+        }
+
+        Map<String, Map<TypeMirror, ExecutableElement>> getConverters() {
+            return converters;
+        }
+
+        List<ExecutableElement> getFallbackConverters() {
+            return fallbackConverters;
         }
 
-        // We're in tests, do not generate anything
-        if (this.processingEnv.getElementUtils().getTypeElement("org.apache.camel.converter.ObjectConverter") == null) {
-            return;
+        private static String toString(TypeMirror type) {
+            return type.toString().replaceAll("<.*>", "");
         }
 
+    }
+
+    @Override
+    protected void doProcess(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) throws Exception {
+        Map<String, ClassConverters> converters = new TreeMap<>();
+
         Comparator<TypeMirror> comparator = (o1, o2) -> processingEnv.getTypeUtils().isAssignable(o1, o2)
             ? -1 : processingEnv.getTypeUtils().isAssignable(o2, o1) ? +1 : o1.toString().compareTo(o2.toString());
 
-        Map<String, Map<TypeMirror, ExecutableElement>> converters = new TreeMap<>();
         TypeElement converterAnnotationType = this.processingEnv.getElementUtils().getTypeElement("org.apache.camel.Converter");
+        // the current class with type converters
+        String currentClass = null;
         for (Element element : roundEnv.getElementsAnnotatedWith(converterAnnotationType)) {
-            if (element.getKind() == ElementKind.METHOD) {
-                ExecutableElement ee = (ExecutableElement)element;
+            // we need a top level class first
+            if (element.getKind() == ElementKind.CLASS) {
+                TypeElement te = (TypeElement) element;
+                if (!te.getNestingKind().isNested() && isLoaderEnabled(te)) {
+                    // we only accept top-level classes and if loader is enabled
+                    currentClass = te.getQualifiedName().toString();
+                }
+            } else if (currentClass != null && element.getKind() == ElementKind.METHOD) {
+                ExecutableElement ee = (ExecutableElement) element;
                 TypeMirror to = ee.getReturnType();
                 TypeMirror from = ee.getParameters().get(0).asType();
                 String fromStr = toString(from);
@@ -70,22 +102,53 @@ public class ConverterProcessor extends AbstractCamelAnnotationProcessor {
                     } else {
                         processingEnv.getMessager().printMessage(Diagnostic.Kind.NOTE, "Could not retrieve type element for " + fromStr);
                     }
-
                 }
-                converters.computeIfAbsent(toString(to), c -> new TreeMap<>(comparator)).put(from, ee);
+                converters.computeIfAbsent(currentClass, c -> new ClassConverters(comparator)).addTypeConverter(to, from, ee);
             }
         }
+
         TypeElement fallbackAnnotationType = this.processingEnv.getElementUtils().getTypeElement("org.apache.camel.FallbackConverter");
-        List<ExecutableElement> fallbackConverters = new ArrayList<>();
+        currentClass = null;
         for (Element element : roundEnv.getElementsAnnotatedWith(fallbackAnnotationType)) {
-            if (element.getKind() == ElementKind.METHOD) {
-                ExecutableElement ee = (ExecutableElement)element;
-                fallbackConverters.add(ee);
+            if (element.getKind() == ElementKind.CLASS) {
+                TypeElement te = (TypeElement) element;
+                if (!te.getNestingKind().isNested() && isLoaderEnabled(te)) {
+                    // we only accept top-level classes and if loader is enabled
+                    currentClass = te.getQualifiedName().toString();
+                }
+            } else if (currentClass != null && element.getKind() == ElementKind.METHOD) {
+                ExecutableElement ee = (ExecutableElement) element;
+                converters.computeIfAbsent(currentClass, c -> new ClassConverters(comparator)).addFallbackTypeConverter(ee);
+            }
+        }
+
+        // now write all the converters
+        for (Map.Entry<String, ClassConverters> entry : converters.entrySet()) {
+            String key = entry.getKey();
+            ClassConverters value = entry.getValue();
+            writeConverterLoader(key, value, converterAnnotationType, fallbackAnnotationType);
+        }
+    }
+
+    private static boolean isLoaderEnabled(Element element) {
+        for (AnnotationMirror ann : element.getAnnotationMirrors()) {
+            for (Map.Entry<? extends ExecutableElement, ? extends AnnotationValue> entry : ann.getElementValues().entrySet()) {
+                if ("loader".equals(entry.getKey().getSimpleName().toString())) {
+                    return (Boolean) entry.getValue().getValue();
+                }
             }
         }
+        return false;
+    }
+
+    private void writeConverterLoader(String fqn, ClassConverters converters,
+                                      TypeElement converterAnnotationType,
+                                      TypeElement fallbackAnnotationType) throws Exception {
+
+        int pos = fqn.lastIndexOf('.');
+        String p = fqn.substring(0, pos);
+        String c = fqn.substring(pos + 1) + "Loader";
 
-        String p = "org.apache.camel.impl.converter";
-        String c = "CoreStaticTypeConverterLoader";
         JavaFileObject jfo = processingEnv.getFiler().createSourceFile(p + "." + c);
         Set<String> converterClasses = new LinkedHashSet<>();
         try (Writer writer = jfo.openWriter()) {
@@ -98,11 +161,12 @@ public class ConverterProcessor extends AbstractCamelAnnotationProcessor {
             writer.append("import org.apache.camel.spi.TypeConverterLoader;\n");
             writer.append("import org.apache.camel.spi.TypeConverterRegistry;\n");
             writer.append("import org.apache.camel.support.TypeConverterSupport;\n");
+            writer.append("import org.apache.camel.util.DoubleMap;\n");
             writer.append("\n");
             writer.append("@SuppressWarnings(\"unchecked\")\n");
             writer.append("public class ").append(c).append(" implements TypeConverterLoader {\n");
             writer.append("\n");
-            writer.append("    public static final CoreStaticTypeConverterLoader INSTANCE = new CoreStaticTypeConverterLoader();\n");
+            writer.append("    public static final ").append(c).append(" INSTANCE = new ").append(c).append("();\n");
             writer.append("\n");
             writer.append("    static abstract class SimpleTypeConverter extends TypeConverterSupport {\n");
             writer.append("        private final boolean allowNull;\n");
@@ -133,7 +197,7 @@ public class ConverterProcessor extends AbstractCamelAnnotationProcessor {
             writer.append("\n");
             writer.append("    private ").append(c).append("() {\n");
 
-            for (Map.Entry<String, Map<TypeMirror, ExecutableElement>> to : converters.entrySet()) {
+            for (Map.Entry<String, Map<TypeMirror, ExecutableElement>> to : converters.getConverters().entrySet()) {
                 for (Map.Entry<TypeMirror, ExecutableElement> from : to.getValue().entrySet()) {
                     boolean allowNull = false;
                     for (AnnotationMirror ann : from.getValue().getAnnotationMirrors()) {
@@ -163,7 +227,7 @@ public class ConverterProcessor extends AbstractCamelAnnotationProcessor {
             writer.append("    @Override\n");
             writer.append("    public void load(TypeConverterRegistry registry) throws TypeConverterLoaderException {\n");
             writer.append("        converters.forEach((k, v, c) -> registry.addTypeConverter(k, v, c));\n");
-            for (ExecutableElement ee : fallbackConverters) {
+            for (ExecutableElement ee : converters.getFallbackConverters()) {
                 boolean allowNull = false;
                 boolean canPromote = false;
                 for (AnnotationMirror ann : ee.getAnnotationMirrors()) {
diff --git a/tooling/apt/src/main/java/org/apache/camel/tools/apt/ConverterProcessor.java b/tooling/apt/src/main/java/org/apache/camel/tools/apt/CoreConverterProcessor.java
similarity index 98%
rename from tooling/apt/src/main/java/org/apache/camel/tools/apt/ConverterProcessor.java
rename to tooling/apt/src/main/java/org/apache/camel/tools/apt/CoreConverterProcessor.java
index 08e3322..dfa0c29 100644
--- a/tooling/apt/src/main/java/org/apache/camel/tools/apt/ConverterProcessor.java
+++ b/tooling/apt/src/main/java/org/apache/camel/tools/apt/CoreConverterProcessor.java
@@ -39,7 +39,7 @@ import javax.tools.Diagnostic;
 import javax.tools.JavaFileObject;
 
 @SupportedAnnotationTypes({"org.apache.camel.Converter"})
-public class ConverterProcessor extends AbstractCamelAnnotationProcessor {
+public class CoreConverterProcessor extends AbstractCamelAnnotationProcessor {
 
     @Override
     protected void doProcess(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) throws Exception {
@@ -98,6 +98,7 @@ public class ConverterProcessor extends AbstractCamelAnnotationProcessor {
             writer.append("import org.apache.camel.spi.TypeConverterLoader;\n");
             writer.append("import org.apache.camel.spi.TypeConverterRegistry;\n");
             writer.append("import org.apache.camel.support.TypeConverterSupport;\n");
+            writer.append("import org.apache.camel.util.DoubleMap;\n");
             writer.append("\n");
             writer.append("@SuppressWarnings(\"unchecked\")\n");
             writer.append("public class ").append(c).append(" implements TypeConverterLoader {\n");
diff --git a/tooling/apt/src/main/resources/META-INF/services/javax.annotation.processing.Processor b/tooling/apt/src/main/resources/META-INF/services/javax.annotation.processing.Processor
index 264838a..790ceb0 100644
--- a/tooling/apt/src/main/resources/META-INF/services/javax.annotation.processing.Processor
+++ b/tooling/apt/src/main/resources/META-INF/services/javax.annotation.processing.Processor
@@ -18,6 +18,8 @@
 ### only specify ModelAnnotationProcessor as it delegates to CoreEip or Spring accordingly
 org.apache.camel.tools.apt.ModelAnnotationProcessor
 org.apache.camel.tools.apt.EndpointAnnotationProcessor
-org.apache.camel.tools.apt.ConverterProcessor
-org.apache.camel.tools.apt.TypeConverterProcessor
 org.apache.camel.tools.apt.SpiProcessor
+org.apache.camel.tools.apt.TypeConverterProcessor
+org.apache.camel.tools.apt.CoreConverterProcessor
+org.apache.camel.tools.apt.ComponentConverterProcessor
+


[camel] 05/06: CAMEL-13313: Add support for generating type converter loader source code to be able to load component type converters in a faster way.

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit de67fd6e14d4e90612c570be12a0d3cf1c423480
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Thu Mar 14 07:14:36 2019 +0100

    CAMEL-13313: Add support for generating type converter loader source code to be able to load component type converters in a faster way.
---
 .../camel/component/aws/ddbstream/StringSequenceNumberConverter.java    | 2 +-
 .../org/apache/camel/component/aws/kinesis/RecordStringConverter.java   | 2 +-
 .../src/main/java/org/apache/camel/component/hl7/HL721Converter.java    | 2 +-
 .../src/main/java/org/apache/camel/component/hl7/HL722Converter.java    | 2 +-
 .../src/main/java/org/apache/camel/component/hl7/HL7231Converter.java   | 2 +-
 .../src/main/java/org/apache/camel/component/hl7/HL723Converter.java    | 2 +-
 .../src/main/java/org/apache/camel/component/hl7/HL724Converter.java    | 2 +-
 .../src/main/java/org/apache/camel/component/hl7/HL7251Converter.java   | 2 +-
 .../src/main/java/org/apache/camel/component/hl7/HL725Converter.java    | 2 +-
 .../src/main/java/org/apache/camel/component/hl7/HL726Converter.java    | 2 +-
 10 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddbstream/StringSequenceNumberConverter.java b/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddbstream/StringSequenceNumberConverter.java
index d6e55c8..68d58ef 100644
--- a/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddbstream/StringSequenceNumberConverter.java
+++ b/components/camel-aws-ddb/src/main/java/org/apache/camel/component/aws/ddbstream/StringSequenceNumberConverter.java
@@ -19,7 +19,7 @@ package org.apache.camel.component.aws.ddbstream;
 import org.apache.camel.Converter;
 
 // Allow to ignore this type converter if the ddbstream JARs are not present on the classpath
-@Converter(ignoreOnLoadError = true)
+@Converter(loader = true, ignoreOnLoadError = true)
 public final class StringSequenceNumberConverter {
 
     private StringSequenceNumberConverter() {
diff --git a/components/camel-aws-kinesis/src/main/java/org/apache/camel/component/aws/kinesis/RecordStringConverter.java b/components/camel-aws-kinesis/src/main/java/org/apache/camel/component/aws/kinesis/RecordStringConverter.java
index df2f016..7b41ac5 100644
--- a/components/camel-aws-kinesis/src/main/java/org/apache/camel/component/aws/kinesis/RecordStringConverter.java
+++ b/components/camel-aws-kinesis/src/main/java/org/apache/camel/component/aws/kinesis/RecordStringConverter.java
@@ -23,7 +23,7 @@ import com.amazonaws.services.kinesis.model.Record;
 import org.apache.camel.Converter;
 
 // Allow to ignore this type converter if the kinesis JARs are not present on the classpath
-@Converter(ignoreOnLoadError = true)
+@Converter(loader = true, ignoreOnLoadError = true)
 public final class RecordStringConverter {
 
     private RecordStringConverter() {
diff --git a/components/camel-hl7/src/main/java/org/apache/camel/component/hl7/HL721Converter.java b/components/camel-hl7/src/main/java/org/apache/camel/component/hl7/HL721Converter.java
index 05a929e..31bddad 100644
--- a/components/camel-hl7/src/main/java/org/apache/camel/component/hl7/HL721Converter.java
+++ b/components/camel-hl7/src/main/java/org/apache/camel/component/hl7/HL721Converter.java
@@ -74,7 +74,7 @@ import org.apache.camel.converter.IOConverter;
 /**
  * HL7 converters.
  */
-@Converter(ignoreOnLoadError = true)
+@Converter(loader = true, ignoreOnLoadError = true)
 public final class HL721Converter {
 
     private static final HapiContext DEFAULT_CONTEXT;
diff --git a/components/camel-hl7/src/main/java/org/apache/camel/component/hl7/HL722Converter.java b/components/camel-hl7/src/main/java/org/apache/camel/component/hl7/HL722Converter.java
index 8b6e699..7f3dd97 100644
--- a/components/camel-hl7/src/main/java/org/apache/camel/component/hl7/HL722Converter.java
+++ b/components/camel-hl7/src/main/java/org/apache/camel/component/hl7/HL722Converter.java
@@ -109,7 +109,7 @@ import org.apache.camel.converter.IOConverter;
 /**
  * HL7 converters.
  */
-@Converter(ignoreOnLoadError = true)
+@Converter(loader = true, ignoreOnLoadError = true)
 public final class HL722Converter {
 
     private static final HapiContext DEFAULT_CONTEXT;
diff --git a/components/camel-hl7/src/main/java/org/apache/camel/component/hl7/HL7231Converter.java b/components/camel-hl7/src/main/java/org/apache/camel/component/hl7/HL7231Converter.java
index a96b21e..5934454 100644
--- a/components/camel-hl7/src/main/java/org/apache/camel/component/hl7/HL7231Converter.java
+++ b/components/camel-hl7/src/main/java/org/apache/camel/component/hl7/HL7231Converter.java
@@ -208,7 +208,7 @@ import org.apache.camel.converter.IOConverter;
 /**
  * HL7 converters.
  */
-@Converter(ignoreOnLoadError = true)
+@Converter(loader = true, ignoreOnLoadError = true)
 public final class HL7231Converter {
 
     private static final HapiContext DEFAULT_CONTEXT;
diff --git a/components/camel-hl7/src/main/java/org/apache/camel/component/hl7/HL723Converter.java b/components/camel-hl7/src/main/java/org/apache/camel/component/hl7/HL723Converter.java
index 33372c1..41dbfbd 100644
--- a/components/camel-hl7/src/main/java/org/apache/camel/component/hl7/HL723Converter.java
+++ b/components/camel-hl7/src/main/java/org/apache/camel/component/hl7/HL723Converter.java
@@ -271,7 +271,7 @@ import org.apache.camel.converter.IOConverter;
 /**
  * HL7 converters.
  */
-@Converter(ignoreOnLoadError = true)
+@Converter(loader = true, ignoreOnLoadError = true)
 public final class HL723Converter {
 
     private static final HapiContext DEFAULT_CONTEXT;
diff --git a/components/camel-hl7/src/main/java/org/apache/camel/component/hl7/HL724Converter.java b/components/camel-hl7/src/main/java/org/apache/camel/component/hl7/HL724Converter.java
index 2bfc0f3..6778616 100644
--- a/components/camel-hl7/src/main/java/org/apache/camel/component/hl7/HL724Converter.java
+++ b/components/camel-hl7/src/main/java/org/apache/camel/component/hl7/HL724Converter.java
@@ -213,7 +213,7 @@ import org.apache.camel.converter.IOConverter;
 /**
  * HL7 converters.
  */
-@Converter(ignoreOnLoadError = true)
+@Converter(loader = true, ignoreOnLoadError = true)
 public final class HL724Converter {
 
     private static final HapiContext DEFAULT_CONTEXT;
diff --git a/components/camel-hl7/src/main/java/org/apache/camel/component/hl7/HL7251Converter.java b/components/camel-hl7/src/main/java/org/apache/camel/component/hl7/HL7251Converter.java
index 5751321..a47503c 100644
--- a/components/camel-hl7/src/main/java/org/apache/camel/component/hl7/HL7251Converter.java
+++ b/components/camel-hl7/src/main/java/org/apache/camel/component/hl7/HL7251Converter.java
@@ -235,7 +235,7 @@ import org.apache.camel.converter.IOConverter;
 /**
  * HL7 converters.
  */
-@Converter(ignoreOnLoadError = true)
+@Converter(loader = true, ignoreOnLoadError = true)
 public final class HL7251Converter {
 
     private static final HapiContext DEFAULT_CONTEXT;
diff --git a/components/camel-hl7/src/main/java/org/apache/camel/component/hl7/HL725Converter.java b/components/camel-hl7/src/main/java/org/apache/camel/component/hl7/HL725Converter.java
index 33beb9e..79decde 100644
--- a/components/camel-hl7/src/main/java/org/apache/camel/component/hl7/HL725Converter.java
+++ b/components/camel-hl7/src/main/java/org/apache/camel/component/hl7/HL725Converter.java
@@ -237,7 +237,7 @@ import org.apache.camel.converter.IOConverter;
 /**
  * HL7 converters.
  */
-@Converter(ignoreOnLoadError = true)
+@Converter(loader = true, ignoreOnLoadError = true)
 public final class HL725Converter {
 
     private static final HapiContext DEFAULT_CONTEXT;
diff --git a/components/camel-hl7/src/main/java/org/apache/camel/component/hl7/HL726Converter.java b/components/camel-hl7/src/main/java/org/apache/camel/component/hl7/HL726Converter.java
index 9e6606c..37954c9 100644
--- a/components/camel-hl7/src/main/java/org/apache/camel/component/hl7/HL726Converter.java
+++ b/components/camel-hl7/src/main/java/org/apache/camel/component/hl7/HL726Converter.java
@@ -250,7 +250,7 @@ import org.apache.camel.converter.IOConverter;
 /**
  * HL7 converters.
  */
-@Converter(ignoreOnLoadError = true)
+@Converter(loader = true, ignoreOnLoadError = true)
 public final class HL726Converter {
 
     private static final HapiContext DEFAULT_CONTEXT;


[camel] 04/06: CAMEL-13313: Add support for generating type converter loader source code to be able to load component type converters in a faster way.

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit cbb94555c9288ae705b26d7c0b4e1f01fc337b32
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Thu Mar 14 07:12:09 2019 +0100

    CAMEL-13313: Add support for generating type converter loader source code to be able to load component type converters in a faster way.
---
 .../apache/camel/component/activemq/converter/ActiveMQConverter.java  | 2 +-
 .../camel/component/activemq/converter/ActiveMQMessageConverter.java  | 2 +-
 .../apache/camel/component/as2/converter/ContentTypeConverter.java    | 2 +-
 .../src/main/java/org/apache/camel/component/atom/AtomConverter.java  | 2 +-
 .../java/org/apache/camel/component/atomix/AtomixTypeConverter.java   | 2 +-
 .../java/org/apache/camel/component/exec/ExecResultConverter.java     | 2 +-
 .../java/org/apache/camel/component/file/GenericFileConverter.java    | 2 +-
 .../camel/component/google/drive/GoogleDriveFilesConverter.java       | 2 +-
 .../apache/camel/component/hbase/converter/HBaseModelConverter.java   | 2 +-
 .../src/main/java/org/apache/camel/component/hl7/HL7Converter.java    | 2 +-
 .../src/main/java/org/apache/camel/http/common/HttpConverter.java     | 2 +-
 .../java/org/apache/camel/component/http4/HttpEntityConverter.java    | 4 ++--
 .../java/org/apache/camel/component/http4/HttpMethodsConverter.java   | 4 ++--
 .../src/main/java/org/apache/camel/component/ical/ICalConverter.java  | 2 +-
 .../camel/component/jackson/converter/JacksonTypeConverters.java      | 2 +-
 .../component/jacksonxml/converter/JacksonXMLTypeConverters.java      | 2 +-
 .../org/apache/camel/component/jclouds/JcloudsPayloadConverter.java   | 2 +-
 .../src/main/java/org/apache/camel/component/jcr/JcrConverter.java    | 2 +-
 .../org/apache/camel/component/milo/converter/ValueConverter.java     | 2 +-
 .../main/java/org/apache/camel/component/mina2/Mina2Converter.java    | 2 +-
 .../camel/component/mongodb3/converters/MongoDbBasicConverters.java   | 2 +-
 .../camel/component/mongodb3/converters/MongoDbFallbackConverter.java | 4 ++--
 .../org/apache/camel/component/netty4/http/NettyHttpConverter.java    | 2 +-
 .../apache/camel/component/restlet/converter/RestletConverter.java    | 2 +-
 .../src/main/java/org/apache/camel/dataformat/rss/RssConverter.java   | 2 +-
 .../salesforce/api/SalesforceReportResultsToListConverter.java        | 2 +-
 .../main/java/org/apache/camel/converter/saxon/SaxonConverter.java    | 2 +-
 .../src/main/java/org/apache/camel/component/snmp/SnmpConverters.java | 2 +-
 .../java/org/apache/camel/component/sparkrest/SparkConverter.java     | 2 +-
 29 files changed, 32 insertions(+), 32 deletions(-)

diff --git a/components/camel-activemq/src/main/java/org/apache/camel/component/activemq/converter/ActiveMQConverter.java b/components/camel-activemq/src/main/java/org/apache/camel/component/activemq/converter/ActiveMQConverter.java
index 81f89a2..433ec3a 100644
--- a/components/camel-activemq/src/main/java/org/apache/camel/component/activemq/converter/ActiveMQConverter.java
+++ b/components/camel-activemq/src/main/java/org/apache/camel/component/activemq/converter/ActiveMQConverter.java
@@ -22,7 +22,7 @@ import org.apache.camel.Converter;
 /**
  * 
  */
-@Converter
+@Converter(loader = true)
 public class ActiveMQConverter {
     /**
      * Converts a URL in ActiveMQ syntax to a destination such as to support
diff --git a/components/camel-activemq/src/main/java/org/apache/camel/component/activemq/converter/ActiveMQMessageConverter.java b/components/camel-activemq/src/main/java/org/apache/camel/component/activemq/converter/ActiveMQMessageConverter.java
index 8f14823..0a56268 100644
--- a/components/camel-activemq/src/main/java/org/apache/camel/component/activemq/converter/ActiveMQMessageConverter.java
+++ b/components/camel-activemq/src/main/java/org/apache/camel/component/activemq/converter/ActiveMQMessageConverter.java
@@ -33,7 +33,7 @@ import org.apache.camel.component.jms.JmsBinding;
 /**
  * 
  */
-@Converter
+@Converter(loader = true)
 public class ActiveMQMessageConverter {
     private JmsBinding binding = new JmsBinding();
 
diff --git a/components/camel-as2/camel-as2-component/src/main/java/org/apache/camel/component/as2/converter/ContentTypeConverter.java b/components/camel-as2/camel-as2-component/src/main/java/org/apache/camel/component/as2/converter/ContentTypeConverter.java
index cb2e948..9bd623b 100644
--- a/components/camel-as2/camel-as2-component/src/main/java/org/apache/camel/component/as2/converter/ContentTypeConverter.java
+++ b/components/camel-as2/camel-as2-component/src/main/java/org/apache/camel/component/as2/converter/ContentTypeConverter.java
@@ -23,7 +23,7 @@ import org.apache.http.entity.ContentType;
 /**
  * Content type related converters.
  */
-@Converter
+@Converter(loader = true)
 public enum ContentTypeConverter {
     INSTANCE;
     
diff --git a/components/camel-atom/src/main/java/org/apache/camel/component/atom/AtomConverter.java b/components/camel-atom/src/main/java/org/apache/camel/component/atom/AtomConverter.java
index e3e7b74..da629a5 100644
--- a/components/camel-atom/src/main/java/org/apache/camel/component/atom/AtomConverter.java
+++ b/components/camel-atom/src/main/java/org/apache/camel/component/atom/AtomConverter.java
@@ -26,7 +26,7 @@ import org.apache.camel.Converter;
 /**
  * Date converters.
  */
-@Converter
+@Converter(loader = true)
 public final class AtomConverter {
 
     public static final String DATE_PATTERN_NO_TIMEZONE = "yyyy-MM-dd'T'HH:mm:ss";
diff --git a/components/camel-atomix/src/main/java/org/apache/camel/component/atomix/AtomixTypeConverter.java b/components/camel-atomix/src/main/java/org/apache/camel/component/atomix/AtomixTypeConverter.java
index 3f2c9c1..8ee4ada 100644
--- a/components/camel-atomix/src/main/java/org/apache/camel/component/atomix/AtomixTypeConverter.java
+++ b/components/camel-atomix/src/main/java/org/apache/camel/component/atomix/AtomixTypeConverter.java
@@ -19,7 +19,7 @@ package org.apache.camel.component.atomix;
 import io.atomix.catalyst.transport.Address;
 import org.apache.camel.Converter;
 
-@Converter
+@Converter(loader = true)
 public final class AtomixTypeConverter {
 
     private AtomixTypeConverter() {
diff --git a/components/camel-exec/src/main/java/org/apache/camel/component/exec/ExecResultConverter.java b/components/camel-exec/src/main/java/org/apache/camel/component/exec/ExecResultConverter.java
index ca9723f..f9b4b30 100644
--- a/components/camel-exec/src/main/java/org/apache/camel/component/exec/ExecResultConverter.java
+++ b/components/camel-exec/src/main/java/org/apache/camel/component/exec/ExecResultConverter.java
@@ -38,7 +38,7 @@ import static org.apache.camel.TypeConverter.MISS_VALUE;
  * href="http://camel.apache.org/type-converter.html">the Camel docs for type
  * converters.</a>
  */
-@Converter
+@Converter(loader = true)
 public final class ExecResultConverter {
 
     private static final Logger LOG = LoggerFactory.getLogger(ExecResultConverter.class);
diff --git a/components/camel-file/src/main/java/org/apache/camel/component/file/GenericFileConverter.java b/components/camel-file/src/main/java/org/apache/camel/component/file/GenericFileConverter.java
index ccc460d..5d27cf0 100644
--- a/components/camel-file/src/main/java/org/apache/camel/component/file/GenericFileConverter.java
+++ b/components/camel-file/src/main/java/org/apache/camel/component/file/GenericFileConverter.java
@@ -45,7 +45,7 @@ import org.slf4j.LoggerFactory;
 /**
  * A set of converter methods for working with generic file types
  */
-@Converter
+@Converter(loader = true)
 public final class GenericFileConverter {
 
     static Supplier<Charset> defaultCharset = Charset::defaultCharset;
diff --git a/components/camel-google-drive/src/main/java/org/apache/camel/component/google/drive/GoogleDriveFilesConverter.java b/components/camel-google-drive/src/main/java/org/apache/camel/component/google/drive/GoogleDriveFilesConverter.java
index 4f76cf4..e8ab32c 100644
--- a/components/camel-google-drive/src/main/java/org/apache/camel/component/google/drive/GoogleDriveFilesConverter.java
+++ b/components/camel-google-drive/src/main/java/org/apache/camel/component/google/drive/GoogleDriveFilesConverter.java
@@ -31,7 +31,7 @@ import org.apache.camel.component.file.GenericFile;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-@Converter
+@Converter(loader = true)
 public final class GoogleDriveFilesConverter {
     private static final Logger LOG = LoggerFactory.getLogger(GoogleDriveFilesConverter.class);
     
diff --git a/components/camel-hbase/src/main/java/org/apache/camel/component/hbase/converter/HBaseModelConverter.java b/components/camel-hbase/src/main/java/org/apache/camel/component/hbase/converter/HBaseModelConverter.java
index 0bc337c..76896f7 100644
--- a/components/camel-hbase/src/main/java/org/apache/camel/component/hbase/converter/HBaseModelConverter.java
+++ b/components/camel-hbase/src/main/java/org/apache/camel/component/hbase/converter/HBaseModelConverter.java
@@ -19,7 +19,7 @@ package org.apache.camel.component.hbase.converter;
 import org.apache.camel.Converter;
 import org.apache.hadoop.hbase.util.Bytes;
 
-@Converter
+@Converter(loader = true)
 public final class HBaseModelConverter {
 
     private HBaseModelConverter() {
diff --git a/components/camel-hl7/src/main/java/org/apache/camel/component/hl7/HL7Converter.java b/components/camel-hl7/src/main/java/org/apache/camel/component/hl7/HL7Converter.java
index 521e2fc..e74eba2 100644
--- a/components/camel-hl7/src/main/java/org/apache/camel/component/hl7/HL7Converter.java
+++ b/components/camel-hl7/src/main/java/org/apache/camel/component/hl7/HL7Converter.java
@@ -33,7 +33,7 @@ import org.apache.camel.converter.IOConverter;
 /**
  * HL7 converters.
  */
-@Converter
+@Converter(loader = true)
 public final class HL7Converter {
 
     private static final HapiContext DEFAULT_CONTEXT;
diff --git a/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpConverter.java b/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpConverter.java
index 5008d9d..94a9871 100644
--- a/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpConverter.java
+++ b/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpConverter.java
@@ -32,7 +32,7 @@ import org.apache.camel.support.GZIPHelper;
  * Some converter methods making it easy to convert the body of a message to servlet types or to switch between
  * the underlying {@link ServletInputStream} or {@link BufferedReader} payloads etc.
  */
-@Converter
+@Converter(loader = true)
 public final class HttpConverter {
 
     private HttpConverter() {
diff --git a/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpEntityConverter.java b/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpEntityConverter.java
index 8796a04..21f1749 100644
--- a/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpEntityConverter.java
+++ b/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpEntityConverter.java
@@ -32,7 +32,7 @@ import org.apache.http.entity.InputStreamEntity;
 /**
  * Some converter methods to make it easier to convert the body to RequestEntity types.
  */
-@Converter
+@Converter(loader = true)
 public final class HttpEntityConverter {
 
     private HttpEntityConverter() {
@@ -97,4 +97,4 @@ public final class HttpEntityConverter {
         }
         return entity;
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpMethodsConverter.java b/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpMethodsConverter.java
index b2c54a4..a79bf37 100644
--- a/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpMethodsConverter.java
+++ b/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpMethodsConverter.java
@@ -24,7 +24,7 @@ import org.apache.camel.Exchange;
 /**
  * To convert between camel-http4 and camel-http-common for the http methods enums
  */
-@Converter
+@Converter(loader = true)
 public final class HttpMethodsConverter {
 
     private HttpMethodsConverter() {
@@ -37,4 +37,4 @@ public final class HttpMethodsConverter {
         return HttpMethods.valueOf(name);
     }
 
-}
\ No newline at end of file
+}
diff --git a/components/camel-ical/src/main/java/org/apache/camel/component/ical/ICalConverter.java b/components/camel-ical/src/main/java/org/apache/camel/component/ical/ICalConverter.java
index 4965faf..a3f0dc2 100644
--- a/components/camel-ical/src/main/java/org/apache/camel/component/ical/ICalConverter.java
+++ b/components/camel-ical/src/main/java/org/apache/camel/component/ical/ICalConverter.java
@@ -30,7 +30,7 @@ import org.apache.camel.support.ExchangeHelper;
 /**
  * ICal related converter.
  */
-@Converter
+@Converter(loader = true)
 public final class ICalConverter {
     private ICalConverter() {
         // Helper class
diff --git a/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/converter/JacksonTypeConverters.java b/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/converter/JacksonTypeConverters.java
index fdb3ce8..7a2d5d2 100644
--- a/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/converter/JacksonTypeConverters.java
+++ b/components/camel-jackson/src/main/java/org/apache/camel/component/jackson/converter/JacksonTypeConverters.java
@@ -43,7 +43,7 @@ import org.apache.camel.spi.TypeConverterRegistry;
  * default the converter only attempts to convert to primitive types such as String and numbers. To convert to any kind, then
  * enable this by setting {@link JacksonConstants#TYPE_CONVERTER_TO_POJO} to <tt>true</tt> on {@link CamelContext#getGlobalOptions()}.
  */
-@Converter
+@Converter(loader = true)
 public final class JacksonTypeConverters {
 
     private final ObjectMapper defaultMapper;
diff --git a/components/camel-jacksonxml/src/main/java/org/apache/camel/component/jacksonxml/converter/JacksonXMLTypeConverters.java b/components/camel-jacksonxml/src/main/java/org/apache/camel/component/jacksonxml/converter/JacksonXMLTypeConverters.java
index fd5035b..c211d2d 100644
--- a/components/camel-jacksonxml/src/main/java/org/apache/camel/component/jacksonxml/converter/JacksonXMLTypeConverters.java
+++ b/components/camel-jacksonxml/src/main/java/org/apache/camel/component/jacksonxml/converter/JacksonXMLTypeConverters.java
@@ -28,7 +28,7 @@ import org.apache.camel.component.jacksonxml.JacksonXMLConstants;
 import org.apache.camel.spi.Registry;
 import org.apache.camel.spi.TypeConverterRegistry;
 
-@Converter
+@Converter(loader = true)
 public final class JacksonXMLTypeConverters {
 
     private final XmlMapper defaultMapper = new XmlMapper();
diff --git a/components/camel-jclouds/src/main/java/org/apache/camel/component/jclouds/JcloudsPayloadConverter.java b/components/camel-jclouds/src/main/java/org/apache/camel/component/jclouds/JcloudsPayloadConverter.java
index ea0363a..401c45e 100644
--- a/components/camel-jclouds/src/main/java/org/apache/camel/component/jclouds/JcloudsPayloadConverter.java
+++ b/components/camel-jclouds/src/main/java/org/apache/camel/component/jclouds/JcloudsPayloadConverter.java
@@ -40,7 +40,7 @@ import org.jclouds.io.Payload;
 import org.jclouds.io.payloads.ByteSourcePayload;
 import org.jclouds.io.payloads.InputStreamPayload;
 
-@Converter
+@Converter(loader = true)
 public final class JcloudsPayloadConverter {
 
     private JcloudsPayloadConverter() {
diff --git a/components/camel-jcr/src/main/java/org/apache/camel/component/jcr/JcrConverter.java b/components/camel-jcr/src/main/java/org/apache/camel/component/jcr/JcrConverter.java
index b6f4dcb..846fbb8 100644
--- a/components/camel-jcr/src/main/java/org/apache/camel/component/jcr/JcrConverter.java
+++ b/components/camel-jcr/src/main/java/org/apache/camel/component/jcr/JcrConverter.java
@@ -31,7 +31,7 @@ import org.apache.jackrabbit.value.StringValue;
 /**
  * A helper class to transform Object into JCR {@link Value} implementations 
  */
-@Converter
+@Converter(loader = true)
 public final class JcrConverter {
 
     private JcrConverter() {
diff --git a/components/camel-milo/src/main/java/org/apache/camel/component/milo/converter/ValueConverter.java b/components/camel-milo/src/main/java/org/apache/camel/component/milo/converter/ValueConverter.java
index aec9af2..fd9b464 100644
--- a/components/camel-milo/src/main/java/org/apache/camel/component/milo/converter/ValueConverter.java
+++ b/components/camel-milo/src/main/java/org/apache/camel/component/milo/converter/ValueConverter.java
@@ -21,7 +21,7 @@ import org.apache.camel.TypeConverters;
 import org.eclipse.milo.opcua.stack.core.types.builtin.DataValue;
 import org.eclipse.milo.opcua.stack.core.types.builtin.Variant;
 
-@Converter
+@Converter(loader = true)
 public final class ValueConverter implements TypeConverters {
     private ValueConverter() {
     }
diff --git a/components/camel-mina2/src/main/java/org/apache/camel/component/mina2/Mina2Converter.java b/components/camel-mina2/src/main/java/org/apache/camel/component/mina2/Mina2Converter.java
index 951d408..017f144 100644
--- a/components/camel-mina2/src/main/java/org/apache/camel/component/mina2/Mina2Converter.java
+++ b/components/camel-mina2/src/main/java/org/apache/camel/component/mina2/Mina2Converter.java
@@ -28,7 +28,7 @@ import org.apache.mina.core.buffer.IoBuffer;
 /**
  * A set of converter methods for working with MINA2 types
  */
-@Converter
+@Converter(loader = true)
 public final class Mina2Converter {
 
     private Mina2Converter() {
diff --git a/components/camel-mongodb3/src/main/java/org/apache/camel/component/mongodb3/converters/MongoDbBasicConverters.java b/components/camel-mongodb3/src/main/java/org/apache/camel/component/mongodb3/converters/MongoDbBasicConverters.java
index c03345f..6eac954 100644
--- a/components/camel-mongodb3/src/main/java/org/apache/camel/component/mongodb3/converters/MongoDbBasicConverters.java
+++ b/components/camel-mongodb3/src/main/java/org/apache/camel/component/mongodb3/converters/MongoDbBasicConverters.java
@@ -44,7 +44,7 @@ import org.bson.json.JsonReader;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-@Converter
+@Converter(loader = true)
 public final class MongoDbBasicConverters {
 
     private static final Logger LOG = LoggerFactory.getLogger(MongoDbBasicConverters.class);
diff --git a/components/camel-mongodb3/src/main/java/org/apache/camel/component/mongodb3/converters/MongoDbFallbackConverter.java b/components/camel-mongodb3/src/main/java/org/apache/camel/component/mongodb3/converters/MongoDbFallbackConverter.java
index 83b1b48..01d1dcc 100644
--- a/components/camel-mongodb3/src/main/java/org/apache/camel/component/mongodb3/converters/MongoDbFallbackConverter.java
+++ b/components/camel-mongodb3/src/main/java/org/apache/camel/component/mongodb3/converters/MongoDbFallbackConverter.java
@@ -31,7 +31,7 @@ import org.apache.camel.InvalidPayloadException;
 import org.apache.camel.spi.TypeConverterRegistry;
 import org.bson.Document;
 
-@Converter
+@Converter(loader = true)
 public final class MongoDbFallbackConverter {
 
     // Jackson's ObjectMapper is thread-safe, so no need to create a pool nor synchronize access to it
@@ -99,4 +99,4 @@ public final class MongoDbFallbackConverter {
             }
         }
     }
-}
\ No newline at end of file
+}
diff --git a/components/camel-netty4-http/src/main/java/org/apache/camel/component/netty4/http/NettyHttpConverter.java b/components/camel-netty4-http/src/main/java/org/apache/camel/component/netty4/http/NettyHttpConverter.java
index 69302ec..66bdd68 100644
--- a/components/camel-netty4-http/src/main/java/org/apache/camel/component/netty4/http/NettyHttpConverter.java
+++ b/components/camel-netty4-http/src/main/java/org/apache/camel/component/netty4/http/NettyHttpConverter.java
@@ -30,7 +30,7 @@ import org.apache.camel.component.netty4.NettyConverter;
 import org.apache.camel.spi.TypeConverterRegistry;
 
 
-@Converter
+@Converter(loader = true)
 public final class NettyHttpConverter {
 
     private NettyHttpConverter() {
diff --git a/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/converter/RestletConverter.java b/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/converter/RestletConverter.java
index 3b13dd4..4e26d81 100644
--- a/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/converter/RestletConverter.java
+++ b/components/camel-restlet/src/main/java/org/apache/camel/component/restlet/converter/RestletConverter.java
@@ -23,7 +23,7 @@ import org.apache.camel.Converter;
 import org.restlet.data.MediaType;
 import org.restlet.data.Method;
 
-@Converter
+@Converter(loader = true)
 public final class RestletConverter {
 
     private RestletConverter() {
diff --git a/components/camel-rss/src/main/java/org/apache/camel/dataformat/rss/RssConverter.java b/components/camel-rss/src/main/java/org/apache/camel/dataformat/rss/RssConverter.java
index 7fada8d..d814d10 100644
--- a/components/camel-rss/src/main/java/org/apache/camel/dataformat/rss/RssConverter.java
+++ b/components/camel-rss/src/main/java/org/apache/camel/dataformat/rss/RssConverter.java
@@ -24,7 +24,7 @@ import com.sun.syndication.io.SyndFeedInput;
 import com.sun.syndication.io.SyndFeedOutput;
 import org.apache.camel.Converter;
 
-@Converter
+@Converter(loader = true)
 public final class RssConverter {
     private RssConverter() {
     }
diff --git a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/SalesforceReportResultsToListConverter.java b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/SalesforceReportResultsToListConverter.java
index b454f42..dde0c95 100644
--- a/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/SalesforceReportResultsToListConverter.java
+++ b/components/camel-salesforce/camel-salesforce-component/src/main/java/org/apache/camel/component/salesforce/api/SalesforceReportResultsToListConverter.java
@@ -40,7 +40,7 @@ import org.apache.camel.component.salesforce.api.dto.analytics.reports.SummaryVa
 /**
  * Salesforce report results to <code>List&lt;List&lt;String&gt;&gt;</code>converter.
  */
-@Converter
+@Converter(loader = true)
 public final class SalesforceReportResultsToListConverter {
 
     public static final String INCLUDE_DETAILS = "CamelSalesforceIncludeDetails";
diff --git a/components/camel-saxon/src/main/java/org/apache/camel/converter/saxon/SaxonConverter.java b/components/camel-saxon/src/main/java/org/apache/camel/converter/saxon/SaxonConverter.java
index 27df7fb..defc7c4 100644
--- a/components/camel-saxon/src/main/java/org/apache/camel/converter/saxon/SaxonConverter.java
+++ b/components/camel-saxon/src/main/java/org/apache/camel/converter/saxon/SaxonConverter.java
@@ -38,7 +38,7 @@ import org.apache.camel.FallbackConverter;
 import org.apache.camel.TypeConverter;
 import org.apache.camel.spi.TypeConverterRegistry;
 
-@Converter
+@Converter(loader = true)
 public final class SaxonConverter {
 
     private SaxonConverter() {
diff --git a/components/camel-snmp/src/main/java/org/apache/camel/component/snmp/SnmpConverters.java b/components/camel-snmp/src/main/java/org/apache/camel/component/snmp/SnmpConverters.java
index 93e13c0..88a6ee4 100644
--- a/components/camel-snmp/src/main/java/org/apache/camel/component/snmp/SnmpConverters.java
+++ b/components/camel-snmp/src/main/java/org/apache/camel/component/snmp/SnmpConverters.java
@@ -26,7 +26,7 @@ import org.snmp4j.PDUv1;
 import org.snmp4j.smi.OID;
 import org.snmp4j.smi.VariableBinding;
 
-@Converter
+@Converter(loader = true)
 public final class SnmpConverters {
     public static final String SNMP_TAG = "snmp";
     public static final String ENTRY_TAG = "entry";
diff --git a/components/camel-spark-rest/src/main/java/org/apache/camel/component/sparkrest/SparkConverter.java b/components/camel-spark-rest/src/main/java/org/apache/camel/component/sparkrest/SparkConverter.java
index fb95f0d..8c49e94 100644
--- a/components/camel-spark-rest/src/main/java/org/apache/camel/component/sparkrest/SparkConverter.java
+++ b/components/camel-spark-rest/src/main/java/org/apache/camel/component/sparkrest/SparkConverter.java
@@ -23,7 +23,7 @@ import org.apache.camel.spi.TypeConverterRegistry;
 import spark.Request;
 import spark.Response;
 
-@Converter
+@Converter(loader = true)
 public final class SparkConverter {
 
     private SparkConverter() {


[camel] 03/06: CAMEL-13313: Add support for generating type converter loader source code to be able to load component type converters in a faster way.

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 2511087377e31900c69594b23eb44da6ca3b6418
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Thu Mar 14 06:57:19 2019 +0100

    CAMEL-13313: Add support for generating type converter loader source code to be able to load component type converters in a faster way.
---
 .../java/org/apache/camel/component/cxf/converter/CxfConverter.java     | 2 +-
 .../org/apache/camel/component/cxf/converter/CxfPayloadConverter.java   | 2 +-
 .../elasticsearch/converter/ElasticsearchActionRequestConverter.java    | 2 +-
 .../java/org/apache/camel/component/flatpack/FlatpackConverter.java     | 2 +-
 .../java/org/apache/camel/component/hl7/HL7GenericMessageConverter.java | 2 +-
 .../camel/component/influxdb/converters/CamelInfluxDbConverters.java    | 2 +-
 .../src/main/java/org/apache/camel/component/jetty/JettyConverter.java  | 2 +-
 .../src/main/java/org/apache/camel/component/mail/MailConverters.java   | 2 +-
 .../src/main/java/org/apache/camel/component/netty4/NettyConverter.java | 2 +-
 .../apache/camel/component/quickfixj/converter/QuickfixjConverters.java | 2 +-
 .../camel/component/reactive/streams/ReactiveStreamsConverter.java      | 2 +-
 .../spring/integration/converter/SpringIntegrationConverter.java        | 2 +-
 .../camel/component/spring/ws/converter/StringSourceConverter.java      | 2 +-
 .../main/java/org/apache/camel/spring/converter/ResourceConverter.java  | 2 +-
 .../main/java/org/apache/camel/component/syslog/SyslogConverter.java    | 2 +-
 .../org/apache/camel/component/telegram/util/TelegramConverter.java     | 2 +-
 .../main/java/org/apache/camel/component/twilio/TwilioConverter.java    | 2 +-
 .../java/org/apache/camel/component/twitter/util/TwitterConverter.java  | 2 +-
 18 files changed, 18 insertions(+), 18 deletions(-)

diff --git a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/converter/CxfConverter.java b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/converter/CxfConverter.java
index 323e028..653f407 100644
--- a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/converter/CxfConverter.java
+++ b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/converter/CxfConverter.java
@@ -42,7 +42,7 @@ import static org.apache.camel.TypeConverter.MISS_VALUE;
  * The <a href="http://camel.apache.org/type-converter.html">Type Converters</a>
  * for CXF related types' converting .
  */
-@Converter
+@Converter(loader = true)
 public final class CxfConverter {
 
     private CxfConverter() {
diff --git a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/converter/CxfPayloadConverter.java b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/converter/CxfPayloadConverter.java
index dff05c6..ea26664 100644
--- a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/converter/CxfPayloadConverter.java
+++ b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/converter/CxfPayloadConverter.java
@@ -47,7 +47,7 @@ import org.apache.cxf.staxutils.StaxUtils;
 
 import static org.apache.camel.TypeConverter.MISS_VALUE;
 
-@Converter
+@Converter(loader = true)
 public final class CxfPayloadConverter {
 
     private CxfPayloadConverter() {
diff --git a/components/camel-elasticsearch-rest/src/main/java/org/apache/camel/component/elasticsearch/converter/ElasticsearchActionRequestConverter.java b/components/camel-elasticsearch-rest/src/main/java/org/apache/camel/component/elasticsearch/converter/ElasticsearchActionRequestConverter.java
index 6572c96..3bbbf8a 100644
--- a/components/camel-elasticsearch-rest/src/main/java/org/apache/camel/component/elasticsearch/converter/ElasticsearchActionRequestConverter.java
+++ b/components/camel-elasticsearch-rest/src/main/java/org/apache/camel/component/elasticsearch/converter/ElasticsearchActionRequestConverter.java
@@ -40,7 +40,7 @@ import org.elasticsearch.search.builder.SearchSourceBuilder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-@Converter
+@Converter(loader = true)
 public final class ElasticsearchActionRequestConverter {
     private static final Logger LOG = LoggerFactory.getLogger(ElasticsearchActionRequestConverter.class);
 
diff --git a/components/camel-flatpack/src/main/java/org/apache/camel/component/flatpack/FlatpackConverter.java b/components/camel-flatpack/src/main/java/org/apache/camel/component/flatpack/FlatpackConverter.java
index f51ab3c..efc5db7 100644
--- a/components/camel-flatpack/src/main/java/org/apache/camel/component/flatpack/FlatpackConverter.java
+++ b/components/camel-flatpack/src/main/java/org/apache/camel/component/flatpack/FlatpackConverter.java
@@ -31,7 +31,7 @@ import org.w3c.dom.Element;
 import net.sf.flatpack.DataSet;
 import org.apache.camel.Converter;
 
-@Converter
+@Converter(loader = true)
 public final class FlatpackConverter {
 
     private FlatpackConverter() {
diff --git a/components/camel-hl7/src/main/java/org/apache/camel/component/hl7/HL7GenericMessageConverter.java b/components/camel-hl7/src/main/java/org/apache/camel/component/hl7/HL7GenericMessageConverter.java
index 98becb9..392bce4 100644
--- a/components/camel-hl7/src/main/java/org/apache/camel/component/hl7/HL7GenericMessageConverter.java
+++ b/components/camel-hl7/src/main/java/org/apache/camel/component/hl7/HL7GenericMessageConverter.java
@@ -36,7 +36,7 @@ import org.apache.camel.converter.IOConverter;
 /**
  * HL7 converters.
  */
-@Converter
+@Converter(loader = true)
 public final class HL7GenericMessageConverter {
 
     private static final HapiContext GENERIC_MESSAGE_CONTEXT;
diff --git a/components/camel-influxdb/src/main/java/org/apache/camel/component/influxdb/converters/CamelInfluxDbConverters.java b/components/camel-influxdb/src/main/java/org/apache/camel/component/influxdb/converters/CamelInfluxDbConverters.java
index 6544c98..a2736ec 100644
--- a/components/camel-influxdb/src/main/java/org/apache/camel/component/influxdb/converters/CamelInfluxDbConverters.java
+++ b/components/camel-influxdb/src/main/java/org/apache/camel/component/influxdb/converters/CamelInfluxDbConverters.java
@@ -23,7 +23,7 @@ import org.apache.camel.component.influxdb.CamelInfluxDbException;
 import org.apache.camel.component.influxdb.InfluxDbConstants;
 import org.influxdb.dto.Point;
 
-@Converter
+@Converter(loader = true)
 public final class CamelInfluxDbConverters {
 
     private CamelInfluxDbConverters() {
diff --git a/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/JettyConverter.java b/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/JettyConverter.java
index e382ab8..c8a1e05 100644
--- a/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/JettyConverter.java
+++ b/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/JettyConverter.java
@@ -25,7 +25,7 @@ import org.eclipse.jetty.server.Response;
 
 import static org.apache.camel.TypeConverter.MISS_VALUE;
 
-@Converter
+@Converter(loader = true)
 public final class JettyConverter {
 
     private JettyConverter() {
diff --git a/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConverters.java b/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConverters.java
index ad8964a..65360ec 100644
--- a/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConverters.java
+++ b/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConverters.java
@@ -45,7 +45,7 @@ import org.apache.camel.support.ExchangeHelper;
 /**
  * JavaMail specific converters.
  */
-@Converter
+@Converter(loader = true)
 public final class MailConverters {
 
     private static final String NOW_DATE_FORMAT = "yyyy-MM-dd HH:mm:SS";
diff --git a/components/camel-netty4/src/main/java/org/apache/camel/component/netty4/NettyConverter.java b/components/camel-netty4/src/main/java/org/apache/camel/component/netty4/NettyConverter.java
index 2cf3394..62d33ed 100644
--- a/components/camel-netty4/src/main/java/org/apache/camel/component/netty4/NettyConverter.java
+++ b/components/camel-netty4/src/main/java/org/apache/camel/component/netty4/NettyConverter.java
@@ -38,7 +38,7 @@ import org.apache.camel.Exchange;
 /**
  * A set of converter methods for working with Netty types
  */
-@Converter
+@Converter(loader = true)
 public final class NettyConverter {
 
     private NettyConverter() {
diff --git a/components/camel-quickfix/src/main/java/org/apache/camel/component/quickfixj/converter/QuickfixjConverters.java b/components/camel-quickfix/src/main/java/org/apache/camel/component/quickfixj/converter/QuickfixjConverters.java
index 339c81f..a507689 100644
--- a/components/camel-quickfix/src/main/java/org/apache/camel/component/quickfixj/converter/QuickfixjConverters.java
+++ b/components/camel-quickfix/src/main/java/org/apache/camel/component/quickfixj/converter/QuickfixjConverters.java
@@ -42,7 +42,7 @@ import static org.apache.camel.component.quickfixj.QuickfixjEndpoint.EVENT_CATEG
 import static org.apache.camel.component.quickfixj.QuickfixjEndpoint.MESSAGE_TYPE_KEY;
 import static org.apache.camel.component.quickfixj.QuickfixjEndpoint.SESSION_ID_KEY;
 
-@Converter
+@Converter(loader = true)
 public final class QuickfixjConverters {
     private static final Logger LOG = LoggerFactory.getLogger(QuickfixjConverters.class);
 
diff --git a/components/camel-reactive-streams/src/main/java/org/apache/camel/component/reactive/streams/ReactiveStreamsConverter.java b/components/camel-reactive-streams/src/main/java/org/apache/camel/component/reactive/streams/ReactiveStreamsConverter.java
index 1fd61ae..08cb29b 100644
--- a/components/camel-reactive-streams/src/main/java/org/apache/camel/component/reactive/streams/ReactiveStreamsConverter.java
+++ b/components/camel-reactive-streams/src/main/java/org/apache/camel/component/reactive/streams/ReactiveStreamsConverter.java
@@ -26,7 +26,7 @@ import org.apache.camel.spi.TypeConverterRegistry;
 import org.reactivestreams.Publisher;
 
 
-@Converter
+@Converter(loader = true)
 public final class ReactiveStreamsConverter implements CamelContextAware {
 
     private CamelContext camelContext;
diff --git a/components/camel-spring-integration/src/main/java/org/apache/camel/component/spring/integration/converter/SpringIntegrationConverter.java b/components/camel-spring-integration/src/main/java/org/apache/camel/component/spring/integration/converter/SpringIntegrationConverter.java
index 2830e4a..c7fefbf 100644
--- a/components/camel-spring-integration/src/main/java/org/apache/camel/component/spring/integration/converter/SpringIntegrationConverter.java
+++ b/components/camel-spring-integration/src/main/java/org/apache/camel/component/spring/integration/converter/SpringIntegrationConverter.java
@@ -29,7 +29,7 @@ import org.springframework.messaging.support.GenericMessage;
  * The <a href="http://camel.apache.org/type-converter.html">Type Converters</a>
  * for turning the Spring Integration types into Camel native type.
  */
-@Converter
+@Converter(loader = true)
 public final class SpringIntegrationConverter {
 
     private SpringIntegrationConverter() {
diff --git a/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/converter/StringSourceConverter.java b/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/converter/StringSourceConverter.java
index d70443d..96b5861 100644
--- a/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/converter/StringSourceConverter.java
+++ b/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/converter/StringSourceConverter.java
@@ -32,7 +32,7 @@ import org.apache.camel.StringSource;
  * since it's the most simple one. It has just one constructor that accepts a
  * String as input.
  */
-@Converter
+@Converter(loader = true)
 public final class StringSourceConverter {
 
     private StringSourceConverter() {
diff --git a/components/camel-spring/src/main/java/org/apache/camel/spring/converter/ResourceConverter.java b/components/camel-spring/src/main/java/org/apache/camel/spring/converter/ResourceConverter.java
index b32e6eb..bdab617 100644
--- a/components/camel-spring/src/main/java/org/apache/camel/spring/converter/ResourceConverter.java
+++ b/components/camel-spring/src/main/java/org/apache/camel/spring/converter/ResourceConverter.java
@@ -22,7 +22,7 @@ import java.io.InputStream;
 import org.apache.camel.Converter;
 import org.springframework.core.io.Resource;
 
-@Converter
+@Converter(loader = true)
 public final class ResourceConverter {
 
     private ResourceConverter() {
diff --git a/components/camel-syslog/src/main/java/org/apache/camel/component/syslog/SyslogConverter.java b/components/camel-syslog/src/main/java/org/apache/camel/component/syslog/SyslogConverter.java
index 9cba73b..fa1cdf3 100644
--- a/components/camel-syslog/src/main/java/org/apache/camel/component/syslog/SyslogConverter.java
+++ b/components/camel-syslog/src/main/java/org/apache/camel/component/syslog/SyslogConverter.java
@@ -30,7 +30,7 @@ import org.apache.camel.Converter;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-@Converter
+@Converter(loader = true)
 public final class SyslogConverter {
 
     private static final Logger LOG = LoggerFactory.getLogger(SyslogConverter.class);
diff --git a/components/camel-telegram/src/main/java/org/apache/camel/component/telegram/util/TelegramConverter.java b/components/camel-telegram/src/main/java/org/apache/camel/component/telegram/util/TelegramConverter.java
index 5e4c5b4..f4e0557 100644
--- a/components/camel-telegram/src/main/java/org/apache/camel/component/telegram/util/TelegramConverter.java
+++ b/components/camel-telegram/src/main/java/org/apache/camel/component/telegram/util/TelegramConverter.java
@@ -33,7 +33,7 @@ import org.apache.camel.component.telegram.model.Update;
 /**
  * Utilities for converting between Telegram APIs and standard java objects.
  */
-@Converter
+@Converter(loader = true)
 public final class TelegramConverter {
 
     private TelegramConverter() {
diff --git a/components/camel-twilio/src/main/java/org/apache/camel/component/twilio/TwilioConverter.java b/components/camel-twilio/src/main/java/org/apache/camel/component/twilio/TwilioConverter.java
index db2660f..7cbc18b 100644
--- a/components/camel-twilio/src/main/java/org/apache/camel/component/twilio/TwilioConverter.java
+++ b/components/camel-twilio/src/main/java/org/apache/camel/component/twilio/TwilioConverter.java
@@ -20,7 +20,7 @@ import com.twilio.type.PhoneNumber;
 import com.twilio.type.Sip;
 import org.apache.camel.Converter;
 
-@Converter
+@Converter(loader = true)
 public final class TwilioConverter {
 
     private TwilioConverter() {
diff --git a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/util/TwitterConverter.java b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/util/TwitterConverter.java
index a78fe37..773f120 100644
--- a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/util/TwitterConverter.java
+++ b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/util/TwitterConverter.java
@@ -28,7 +28,7 @@ import twitter4j.UserList;
 /**
  * Utility for converting between Twitter4J and camel-twitter data layers.
  */
-@Converter
+@Converter(loader = true)
 public final class TwitterConverter {
 
     private TwitterConverter() {


[camel] 06/06: CAMEL-13313: Add support for generating type converter loader source code to be able to load component type converters in a faster way.

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 379d1ec2378199a638ca18e3c2fba06b8234ba82
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Thu Mar 14 07:25:30 2019 +0100

    CAMEL-13313: Add support for generating type converter loader source code to be able to load component type converters in a faster way.
---
 .../tools/apt/TypeConverterLoaderProcessor.java    | 40 +++++++++++++++++++++-
 1 file changed, 39 insertions(+), 1 deletion(-)

diff --git a/tooling/apt/src/main/java/org/apache/camel/tools/apt/TypeConverterLoaderProcessor.java b/tooling/apt/src/main/java/org/apache/camel/tools/apt/TypeConverterLoaderProcessor.java
index 321d904..1e2fbc3 100644
--- a/tooling/apt/src/main/java/org/apache/camel/tools/apt/TypeConverterLoaderProcessor.java
+++ b/tooling/apt/src/main/java/org/apache/camel/tools/apt/TypeConverterLoaderProcessor.java
@@ -52,11 +52,20 @@ public class TypeConverterLoaderProcessor extends AbstractCamelAnnotationProcess
         private final Map<String, Map<TypeMirror, ExecutableElement>> converters = new TreeMap<>();
         private final List<ExecutableElement> fallbackConverters = new ArrayList<>();
         private int size;
+        private boolean ignoreOnLoadError;
 
         ClassConverters(Comparator<TypeMirror> comparator) {
             this.comparator = comparator;
         }
 
+        boolean isIgnoreOnLoadError() {
+            return ignoreOnLoadError;
+        }
+
+        void setIgnoreOnLoadError(boolean ignoreOnLoadError) {
+            this.ignoreOnLoadError = ignoreOnLoadError;
+        }
+
         void addTypeConverter(TypeMirror to, TypeMirror from, ExecutableElement ee) {
             converters.computeIfAbsent(toString(to), c -> new TreeMap<>(comparator)).put(from, ee);
             size++;
@@ -98,6 +107,7 @@ public class TypeConverterLoaderProcessor extends AbstractCamelAnnotationProcess
         TypeElement converterAnnotationType = this.processingEnv.getElementUtils().getTypeElement("org.apache.camel.Converter");
         // the current class with type converters
         String currentClass = null;
+        boolean ignoreOnLoadError = false;
         for (Element element : roundEnv.getElementsAnnotatedWith(converterAnnotationType)) {
             // we need a top level class first
             if (element.getKind() == ElementKind.CLASS) {
@@ -105,6 +115,7 @@ public class TypeConverterLoaderProcessor extends AbstractCamelAnnotationProcess
                 if (!te.getNestingKind().isNested() && isLoaderEnabled(te)) {
                     // we only accept top-level classes and if loader is enabled
                     currentClass = te.getQualifiedName().toString();
+                    ignoreOnLoadError = isIgnoreOnLoadError(element);
                 }
             } else if (currentClass != null && element.getKind() == ElementKind.METHOD) {
                 ExecutableElement ee = (ExecutableElement) element;
@@ -120,21 +131,29 @@ public class TypeConverterLoaderProcessor extends AbstractCamelAnnotationProcess
                     }
                 }
                 converters.computeIfAbsent(currentClass, c -> new ClassConverters(comparator)).addTypeConverter(to, from, ee);
+                if (converters.containsKey(currentClass)) {
+                    converters.get(currentClass).setIgnoreOnLoadError(ignoreOnLoadError);
+                }
             }
         }
 
         TypeElement fallbackAnnotationType = this.processingEnv.getElementUtils().getTypeElement("org.apache.camel.FallbackConverter");
         currentClass = null;
+        ignoreOnLoadError = false;
         for (Element element : roundEnv.getElementsAnnotatedWith(fallbackAnnotationType)) {
             if (element.getKind() == ElementKind.CLASS) {
                 TypeElement te = (TypeElement) element;
                 if (!te.getNestingKind().isNested() && isLoaderEnabled(te)) {
                     // we only accept top-level classes and if loader is enabled
                     currentClass = te.getQualifiedName().toString();
+                    ignoreOnLoadError = isIgnoreOnLoadError(element);
                 }
             } else if (currentClass != null && element.getKind() == ElementKind.METHOD) {
                 ExecutableElement ee = (ExecutableElement) element;
                 converters.computeIfAbsent(currentClass, c -> new ClassConverters(comparator)).addFallbackTypeConverter(ee);
+                if (converters.containsKey(currentClass)) {
+                    converters.get(currentClass).setIgnoreOnLoadError(ignoreOnLoadError);
+                }
             }
         }
 
@@ -160,6 +179,17 @@ public class TypeConverterLoaderProcessor extends AbstractCamelAnnotationProcess
         return false;
     }
 
+    private static boolean isIgnoreOnLoadError(Element element) {
+        for (AnnotationMirror ann : element.getAnnotationMirrors()) {
+            for (Map.Entry<? extends ExecutableElement, ? extends AnnotationValue> entry : ann.getElementValues().entrySet()) {
+                if ("ignoreOnLoadError".equals(entry.getKey().getSimpleName().toString())) {
+                    return (Boolean) entry.getValue().getValue();
+                }
+            }
+        }
+        return false;
+    }
+
     private void writeConverterLoaderMetaInfo(Map<String, ClassConverters> converters) throws Exception {
         StringJoiner sj = new StringJoiner(",");
         for (Map.Entry<String, ClassConverters> entry : converters.entrySet()) {
@@ -266,7 +296,15 @@ public class TypeConverterLoaderProcessor extends AbstractCamelAnnotationProcess
             writer.append("\n");
             writer.append("    @Override\n");
             writer.append("    public void load(TypeConverterRegistry registry) throws TypeConverterLoaderException {\n");
-            writer.append("        converters.forEach((k, v, c) -> registry.addTypeConverter(k, v, c));\n");
+            if (converters.isIgnoreOnLoadError()) {
+                writer.append("        try {\n");
+                writer.append("            converters.forEach((k, v, c) -> registry.addTypeConverter(k, v, c));\n");
+                writer.append("        } catch (Throwable e) {\n");
+                writer.append("            // ignore on load error\n");
+                writer.append("        }\n");
+            } else {
+                writer.append("        converters.forEach((k, v, c) -> registry.addTypeConverter(k, v, c));\n");
+            }
             for (ExecutableElement ee : converters.getFallbackConverters()) {
                 boolean allowNull = false;
                 boolean canPromote = false;


[camel] 02/06: CAMEL-13313: Add support for generating type converter loader source code to be able to load component type converters in a faster way.

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 6ad60d2cdece7e15e2559e181caa32122f1e77da
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Thu Mar 14 06:02:57 2019 +0100

    CAMEL-13313: Add support for generating type converter loader source code to be able to load component type converters in a faster way.
---
 .../camel/component/dns/types/DnsConverter.java    |  2 +-
 .../component/dns/types/DnsRecordConverter.java    |  2 +-
 ...ssor.java => TypeConverterLoaderProcessor.java} | 54 +++++++++++++++++++---
 .../services/javax.annotation.processing.Processor |  2 +-
 4 files changed, 50 insertions(+), 10 deletions(-)

diff --git a/components/camel-dns/src/main/java/org/apache/camel/component/dns/types/DnsConverter.java b/components/camel-dns/src/main/java/org/apache/camel/component/dns/types/DnsConverter.java
index 683ae80..6f848c2 100644
--- a/components/camel-dns/src/main/java/org/apache/camel/component/dns/types/DnsConverter.java
+++ b/components/camel-dns/src/main/java/org/apache/camel/component/dns/types/DnsConverter.java
@@ -29,7 +29,7 @@ import org.xbill.DNS.Record;
 /**
  * A converter for all the DNS objects used by the DNS component.
  */
-@Converter
+@Converter(loader = true)
 public final class DnsConverter {
 
     private DnsConverter() {
diff --git a/components/camel-dns/src/main/java/org/apache/camel/component/dns/types/DnsRecordConverter.java b/components/camel-dns/src/main/java/org/apache/camel/component/dns/types/DnsRecordConverter.java
index afc0d7c..75ad410 100644
--- a/components/camel-dns/src/main/java/org/apache/camel/component/dns/types/DnsRecordConverter.java
+++ b/components/camel-dns/src/main/java/org/apache/camel/component/dns/types/DnsRecordConverter.java
@@ -32,7 +32,7 @@ import org.xbill.DNS.Type;
 /**
  * More converters for all the DNS objects used by the DNS component.
  */
-@Converter
+@Converter(loader = true)
 public final class DnsRecordConverter {
 
     private DnsRecordConverter() {
diff --git a/tooling/apt/src/main/java/org/apache/camel/tools/apt/ComponentConverterProcessor.java b/tooling/apt/src/main/java/org/apache/camel/tools/apt/TypeConverterLoaderProcessor.java
similarity index 89%
rename from tooling/apt/src/main/java/org/apache/camel/tools/apt/ComponentConverterProcessor.java
rename to tooling/apt/src/main/java/org/apache/camel/tools/apt/TypeConverterLoaderProcessor.java
index 19c9790..321d904 100644
--- a/tooling/apt/src/main/java/org/apache/camel/tools/apt/ComponentConverterProcessor.java
+++ b/tooling/apt/src/main/java/org/apache/camel/tools/apt/TypeConverterLoaderProcessor.java
@@ -23,7 +23,9 @@ import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.StringJoiner;
 import java.util.TreeMap;
+import java.util.stream.Collectors;
 import javax.annotation.processing.RoundEnvironment;
 import javax.annotation.processing.SupportedAnnotationTypes;
 import javax.lang.model.element.AnnotationMirror;
@@ -35,16 +37,21 @@ import javax.lang.model.element.Modifier;
 import javax.lang.model.element.TypeElement;
 import javax.lang.model.type.TypeMirror;
 import javax.tools.Diagnostic;
+import javax.tools.DocumentationTool;
+import javax.tools.FileObject;
+import javax.tools.JavaFileManager;
 import javax.tools.JavaFileObject;
+import javax.tools.StandardLocation;
 
 @SupportedAnnotationTypes({"org.apache.camel.Converter"})
-public class ComponentConverterProcessor extends AbstractCamelAnnotationProcessor {
+public class TypeConverterLoaderProcessor extends AbstractCamelAnnotationProcessor {
 
     private static final class ClassConverters {
 
-        private final Map<String, Map<TypeMirror, ExecutableElement>> converters = new TreeMap<>();
         private final Comparator<TypeMirror> comparator;
+        private final Map<String, Map<TypeMirror, ExecutableElement>> converters = new TreeMap<>();
         private final List<ExecutableElement> fallbackConverters = new ArrayList<>();
+        private int size;
 
         ClassConverters(Comparator<TypeMirror> comparator) {
             this.comparator = comparator;
@@ -52,10 +59,12 @@ public class ComponentConverterProcessor extends AbstractCamelAnnotationProcesso
 
         void addTypeConverter(TypeMirror to, TypeMirror from, ExecutableElement ee) {
             converters.computeIfAbsent(toString(to), c -> new TreeMap<>(comparator)).put(from, ee);
+            size++;
         }
 
         void addFallbackTypeConverter(ExecutableElement ee) {
             fallbackConverters.add(ee);
+            size++;
         }
 
         Map<String, Map<TypeMirror, ExecutableElement>> getConverters() {
@@ -70,6 +79,13 @@ public class ComponentConverterProcessor extends AbstractCamelAnnotationProcesso
             return type.toString().replaceAll("<.*>", "");
         }
 
+        long size() {
+            return size;
+        }
+
+        boolean isEmpty() {
+            return size == 0;
+        }
     }
 
     @Override
@@ -126,8 +142,11 @@ public class ComponentConverterProcessor extends AbstractCamelAnnotationProcesso
         for (Map.Entry<String, ClassConverters> entry : converters.entrySet()) {
             String key = entry.getKey();
             ClassConverters value = entry.getValue();
-            writeConverterLoader(key, value, converterAnnotationType, fallbackAnnotationType);
+            if (!value.isEmpty()) {
+                writeConverterLoader(key, value, converterAnnotationType, fallbackAnnotationType);
+            }
         }
+        writeConverterLoaderMetaInfo(converters);
     }
 
     private static boolean isLoaderEnabled(Element element) {
@@ -141,6 +160,27 @@ public class ComponentConverterProcessor extends AbstractCamelAnnotationProcesso
         return false;
     }
 
+    private void writeConverterLoaderMetaInfo(Map<String, ClassConverters> converters) throws Exception {
+        StringJoiner sj = new StringJoiner(",");
+        for (Map.Entry<String, ClassConverters> entry : converters.entrySet()) {
+            String key = entry.getKey();
+            ClassConverters value = entry.getValue();
+            if (!value.isEmpty()) {
+                sj.add(key);
+            }
+        }
+
+        if (sj.length() > 0) {
+            FileObject fo = processingEnv.getFiler().createResource(StandardLocation.CLASS_OUTPUT, "", "META-INF/services/org/apache/camel/TypeConverterLoader");
+            try (Writer writer = fo.openWriter()) {
+                writer.append("# Generated by camel annotation processor\n");
+                for (String fqn : sj.toString().split(",")) {
+                    writer.append("class=").append(fqn).append("Loader\n");
+                }
+            }
+        }
+    }
+
     private void writeConverterLoader(String fqn, ClassConverters converters,
                                       TypeElement converterAnnotationType,
                                       TypeElement fallbackAnnotationType) throws Exception {
@@ -168,10 +208,10 @@ public class ComponentConverterProcessor extends AbstractCamelAnnotationProcesso
             writer.append("\n");
             writer.append("    public static final ").append(c).append(" INSTANCE = new ").append(c).append("();\n");
             writer.append("\n");
-            writer.append("    static abstract class SimpleTypeConverter extends TypeConverterSupport {\n");
+            writer.append("    static abstract class BaseTypeConverter extends TypeConverterSupport {\n");
             writer.append("        private final boolean allowNull;\n");
             writer.append("\n");
-            writer.append("        public SimpleTypeConverter(boolean allowNull) {\n");
+            writer.append("        public BaseTypeConverter(boolean allowNull) {\n");
             writer.append("            this.allowNull = allowNull;\n");
             writer.append("        }\n");
             writer.append("\n");
@@ -193,7 +233,7 @@ public class ComponentConverterProcessor extends AbstractCamelAnnotationProcesso
             writer.append("        protected abstract Object doConvert(Exchange exchange, Object value) throws Exception;\n");
             writer.append("    };\n");
             writer.append("\n");
-            writer.append("    private DoubleMap<Class<?>, Class<?>, SimpleTypeConverter> converters = new DoubleMap<>(256);\n");
+            writer.append("    private DoubleMap<Class<?>, Class<?>, BaseTypeConverter> converters = new DoubleMap<>(" + converters.size() + ");\n");
             writer.append("\n");
             writer.append("    private ").append(c).append("() {\n");
 
@@ -214,7 +254,7 @@ public class ComponentConverterProcessor extends AbstractCamelAnnotationProcesso
                         }
                     }
                     writer.append("        converters.put(").append(to.getKey()).append(".class").append(", ").append(toString(from.getKey()))
-                        .append(".class, new SimpleTypeConverter(").append(Boolean.toString(allowNull)).append(") {\n");
+                        .append(".class, new BaseTypeConverter(").append(Boolean.toString(allowNull)).append(") {\n");
                     writer.append("            @Override\n");
                     writer.append("            public Object doConvert(Exchange exchange, Object value) throws Exception {\n");
                     writer.append("                return ").append(toJava(from.getValue(), converterClasses)).append(";\n");
diff --git a/tooling/apt/src/main/resources/META-INF/services/javax.annotation.processing.Processor b/tooling/apt/src/main/resources/META-INF/services/javax.annotation.processing.Processor
index 790ceb0..065f185 100644
--- a/tooling/apt/src/main/resources/META-INF/services/javax.annotation.processing.Processor
+++ b/tooling/apt/src/main/resources/META-INF/services/javax.annotation.processing.Processor
@@ -21,5 +21,5 @@ org.apache.camel.tools.apt.EndpointAnnotationProcessor
 org.apache.camel.tools.apt.SpiProcessor
 org.apache.camel.tools.apt.TypeConverterProcessor
 org.apache.camel.tools.apt.CoreConverterProcessor
-org.apache.camel.tools.apt.ComponentConverterProcessor
+org.apache.camel.tools.apt.TypeConverterLoaderProcessor