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 2016/08/02 15:03:13 UTC

camel git commit: CAMEL-10168: camel-aws ignores type converter loading error if the end user have opted-out some of the AWS features by not having the uber JAR but specialized JARs

Repository: camel
Updated Branches:
  refs/heads/master 213e351bc -> 00fef5857


CAMEL-10168: camel-aws ignores type converter loading error if the end user have opted-out some of the AWS features by not having the uber JAR but specialized JARs


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/00fef585
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/00fef585
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/00fef585

Branch: refs/heads/master
Commit: 00fef5857c0bcb0fc7a02f19f5ba51ef0382133d
Parents: 213e351
Author: Claus Ibsen <da...@apache.org>
Authored: Tue Aug 2 17:03:01 2016 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Tue Aug 2 17:03:01 2016 +0200

----------------------------------------------------------------------
 .../src/main/java/org/apache/camel/Converter.java     | 13 +++++++++++++
 .../impl/converter/AnnotationTypeConverterLoader.java | 14 +++++++++++++-
 .../aws/ddbstream/StringSequenceNumberConverter.java  |  3 ++-
 .../component/aws/kinesis/RecordStringConverter.java  |  3 ++-
 4 files changed, 30 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/00fef585/camel-core/src/main/java/org/apache/camel/Converter.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/Converter.java b/camel-core/src/main/java/org/apache/camel/Converter.java
index 1652e77..5c83841 100644
--- a/camel-core/src/main/java/org/apache/camel/Converter.java
+++ b/camel-core/src/main/java/org/apache/camel/Converter.java
@@ -39,4 +39,17 @@ public @interface Converter {
      * Whether or not returning <tt>null</tt> is a valid response.
      */
     boolean allowNull() default false;
+
+    /**
+     * Whether to ignore the type converter if it cannot be loaded for some reason.
+     * <p/>
+     * This can be used if a Camel component provides multiple components
+     * where the end user can opt-out some of these components by excluding
+     * dependencies on the classpath, meaning the type converter would not
+     * be able to load due class not found errors. But in those cases its
+     * okay as the component is opted-out.
+     * <p/>
+     * Important this configuration must be set on the class-level, not on the method.
+     */
+    boolean ignoreOnLoadError() default false;
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/00fef585/camel-core/src/main/java/org/apache/camel/impl/converter/AnnotationTypeConverterLoader.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/impl/converter/AnnotationTypeConverterLoader.java b/camel-core/src/main/java/org/apache/camel/impl/converter/AnnotationTypeConverterLoader.java
index c724870..eb1bd4b 100644
--- a/camel-core/src/main/java/org/apache/camel/impl/converter/AnnotationTypeConverterLoader.java
+++ b/camel-core/src/main/java/org/apache/camel/impl/converter/AnnotationTypeConverterLoader.java
@@ -285,7 +285,19 @@ public class AnnotationTypeConverterLoader implements TypeConverterLoader {
                 loadConverterMethods(registry, superclass);
             }
         } catch (NoClassDefFoundError e) {
-            LOG.warn("Ignoring converter type: " + type.getCanonicalName() + " as a dependent class could not be found: " + e, e);
+            boolean ignore = false;
+            // does the class allow to ignore the type converter when having load errors
+            if (ObjectHelper.hasAnnotation(type, Converter.class, true)) {
+                if (type.getAnnotation(Converter.class) != null) {
+                    ignore = type.getAnnotation(Converter.class).ignoreOnLoadError();
+                }
+            }
+            // if we should ignore then only log at debug level
+            if (ignore) {
+                LOG.debug("Ignoring converter type: " + type.getCanonicalName() + " as a dependent class could not be found: " + e, e);
+            } else {
+                LOG.warn("Ignoring converter type: " + type.getCanonicalName() + " as a dependent class could not be found: " + e, e);
+            }
         }
     }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/00fef585/components/camel-aws/src/main/java/org/apache/camel/component/aws/ddbstream/StringSequenceNumberConverter.java
----------------------------------------------------------------------
diff --git a/components/camel-aws/src/main/java/org/apache/camel/component/aws/ddbstream/StringSequenceNumberConverter.java b/components/camel-aws/src/main/java/org/apache/camel/component/aws/ddbstream/StringSequenceNumberConverter.java
index 0048ce0..d6e55c8 100644
--- a/components/camel-aws/src/main/java/org/apache/camel/component/aws/ddbstream/StringSequenceNumberConverter.java
+++ b/components/camel-aws/src/main/java/org/apache/camel/component/aws/ddbstream/StringSequenceNumberConverter.java
@@ -18,7 +18,8 @@ package org.apache.camel.component.aws.ddbstream;
 
 import org.apache.camel.Converter;
 
-@Converter
+// Allow to ignore this type converter if the ddbstream JARs are not present on the classpath
+@Converter(ignoreOnLoadError = true)
 public final class StringSequenceNumberConverter {
 
     private StringSequenceNumberConverter() {

http://git-wip-us.apache.org/repos/asf/camel/blob/00fef585/components/camel-aws/src/main/java/org/apache/camel/component/aws/kinesis/RecordStringConverter.java
----------------------------------------------------------------------
diff --git a/components/camel-aws/src/main/java/org/apache/camel/component/aws/kinesis/RecordStringConverter.java b/components/camel-aws/src/main/java/org/apache/camel/component/aws/kinesis/RecordStringConverter.java
index 19b8590..df2f016 100644
--- a/components/camel-aws/src/main/java/org/apache/camel/component/aws/kinesis/RecordStringConverter.java
+++ b/components/camel-aws/src/main/java/org/apache/camel/component/aws/kinesis/RecordStringConverter.java
@@ -22,7 +22,8 @@ import java.nio.charset.Charset;
 import com.amazonaws.services.kinesis.model.Record;
 import org.apache.camel.Converter;
 
-@Converter
+// Allow to ignore this type converter if the kinesis JARs are not present on the classpath
+@Converter(ignoreOnLoadError = true)
 public final class RecordStringConverter {
 
     private RecordStringConverter() {