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

Reply via email to