You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by or...@apache.org on 2023/10/27 15:36:38 UTC

(camel) branch main updated: (chores) camel-core: minor cleanup to the add/replace converter logic

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

orpiske pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/main by this push:
     new 878e5e64ecf (chores) camel-core: minor cleanup to the add/replace converter logic
878e5e64ecf is described below

commit 878e5e64ecff00d9cfc50dac317c55baea6a43ce
Author: Otavio Rodolfo Piske <an...@gmail.com>
AuthorDate: Fri Oct 27 17:16:14 2023 +0200

    (chores) camel-core: minor cleanup to the add/replace converter logic
---
 .../impl/converter/CoreTypeConverterRegistry.java  | 36 ++++++++++++++--------
 1 file changed, 24 insertions(+), 12 deletions(-)

diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/converter/CoreTypeConverterRegistry.java b/core/camel-base/src/main/java/org/apache/camel/impl/converter/CoreTypeConverterRegistry.java
index 8d0f0ad0a06..2d67b971f4c 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/converter/CoreTypeConverterRegistry.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/converter/CoreTypeConverterRegistry.java
@@ -447,7 +447,7 @@ public abstract class CoreTypeConverterRegistry extends ServiceSupport implement
                 // if fallback can promote then let it be promoted to a first class type converter
                 if (fallback.isCanPromote()) {
                     // add it as a known type converter since we found a fallback that could do it
-                    addTypeConverter(type, value.getClass(), fallback.getFallbackTypeConverter());
+                    addOrReplaceTypeConverter(tc, typeConvertible);
                 }
                 // return converted value
                 return rc;
@@ -484,6 +484,11 @@ public abstract class CoreTypeConverterRegistry extends ServiceSupport implement
     public void addTypeConverter(Class<?> toType, Class<?> fromType, TypeConverter typeConverter) {
         LOG.trace("Adding type converter: {}", typeConverter);
         final TypeConvertible<?, ?> typeConvertible = new TypeConvertible<>(fromType, toType);
+
+        addOrReplaceTypeConverter(typeConverter, typeConvertible);
+    }
+
+    private void addOrReplaceTypeConverter(TypeConverter typeConverter, TypeConvertible<?, ?> typeConvertible) {
         TypeConverter converter = converters.get(typeConvertible);
 
         if (converter == MISS_CONVERTER) {
@@ -501,17 +506,7 @@ public abstract class CoreTypeConverterRegistry extends ServiceSupport implement
 
             // if converter is not null then a duplicate exists
             if (converter != null) {
-                if (typeConverterExists == TypeConverterExists.Override) {
-                    CamelLogger logger = new CamelLogger(LOG, typeConverterExistsLoggingLevel);
-                    logger.log("Overriding type converter from: " + converter + " to: " + typeConverter);
-                } else if (typeConverterExists == TypeConverterExists.Ignore) {
-                    CamelLogger logger = new CamelLogger(LOG, typeConverterExistsLoggingLevel);
-                    logger.log("Ignoring duplicate type converter from: " + converter + " to: " + typeConverter);
-                    add = false;
-                } else {
-                    // we should fail
-                    throw new TypeConverterExistsException(toType, fromType);
-                }
+                add = onTypeConverterExists(typeConverter, typeConvertible, converter);
             }
 
             if (add) {
@@ -520,6 +515,23 @@ public abstract class CoreTypeConverterRegistry extends ServiceSupport implement
         }
     }
 
+    private boolean onTypeConverterExists(
+            TypeConverter typeConverter, TypeConvertible<?, ?> typeConvertible, TypeConverter converter) {
+        if (typeConverterExists == TypeConverterExists.Override) {
+            CamelLogger logger = new CamelLogger(LOG, typeConverterExistsLoggingLevel);
+            logger.log("Overriding type converter from: " + converter + " to: " + typeConverter);
+
+            return true;
+        } else if (typeConverterExists == TypeConverterExists.Ignore) {
+            CamelLogger logger = new CamelLogger(LOG, typeConverterExistsLoggingLevel);
+            logger.log("Ignoring duplicate type converter from: " + converter + " to: " + typeConverter);
+            return false;
+        }
+
+        // we should fail
+        throw new TypeConverterExistsException(typeConvertible.getTo(), typeConvertible.getFrom());
+    }
+
     public boolean removeTypeConverter(Class<?> toType, Class<?> fromType) {
         LOG.trace("Removing type converter from: {} to: {}", fromType, toType);
         final TypeConverter removed = converters.remove(new TypeConvertible<>(fromType, toType));