CAMEL-6094: Add option to type converter registry to control what to do if a 
type converter already exists.


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

Branch: refs/heads/master
Commit: 08d185c22c97d3ef61c20be2bc7294ee03ae8468
Parents: a7a40d2
Author: Claus Ibsen <[email protected]>
Authored: Sat Aug 8 17:05:10 2015 +0200
Committer: Claus Ibsen <[email protected]>
Committed: Sat Aug 8 17:05:10 2015 +0200

----------------------------------------------------------------------
 .../org/apache/camel/TypeConverterExists.java   | 31 ++++++++++++++++++++
 .../converter/BaseTypeConverterRegistry.java    |  5 ++--
 .../apache/camel/spi/TypeConverterRegistry.java |  8 +----
 .../main/resources/org/apache/camel/jaxb.index  |  1 +
 .../camel/impl/TypeConverterRegistryTest.java   |  6 ++--
 .../blueprint/CamelContextFactoryBean.java      | 22 ++++++++++++++
 .../xml/AbstractCamelContextFactoryBean.java    | 12 ++++++++
 .../camel/spring/CamelContextFactoryBean.java   | 22 ++++++++++++++
 8 files changed, 95 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/08d185c2/camel-core/src/main/java/org/apache/camel/TypeConverterExists.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/TypeConverterExists.java 
b/camel-core/src/main/java/org/apache/camel/TypeConverterExists.java
new file mode 100644
index 0000000..ba2bb19
--- /dev/null
+++ b/camel-core/src/main/java/org/apache/camel/TypeConverterExists.java
@@ -0,0 +1,31 @@
+/**
+ * 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;
+
+import javax.xml.bind.annotation.XmlEnum;
+
+/**
+ * What to do if attempting to add a duplicate type converter
+ *
+ * @version 
+ */
+@XmlEnum
+public enum TypeConverterExists {
+
+    Override, Ignore, Fail
+
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/08d185c2/camel-core/src/main/java/org/apache/camel/impl/converter/BaseTypeConverterRegistry.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/impl/converter/BaseTypeConverterRegistry.java
 
b/camel-core/src/main/java/org/apache/camel/impl/converter/BaseTypeConverterRegistry.java
index 1a7bba0..95069d9 100644
--- 
a/camel-core/src/main/java/org/apache/camel/impl/converter/BaseTypeConverterRegistry.java
+++ 
b/camel-core/src/main/java/org/apache/camel/impl/converter/BaseTypeConverterRegistry.java
@@ -36,6 +36,7 @@ import org.apache.camel.NoFactoryAvailableException;
 import org.apache.camel.NoTypeConversionAvailableException;
 import org.apache.camel.TypeConversionException;
 import org.apache.camel.TypeConverter;
+import org.apache.camel.TypeConverterExists;
 import org.apache.camel.TypeConverterExistsException;
 import org.apache.camel.TypeConverterLoaderException;
 import org.apache.camel.TypeConverters;
@@ -69,7 +70,7 @@ public abstract class BaseTypeConverterRegistry extends 
ServiceSupport implement
     protected final PackageScanClassResolver resolver;
     protected Injector injector;
     protected final FactoryFinder factoryFinder;
-    protected TypeConverterExists typeConverterExists = 
TypeConverterExists.Overwrite;
+    protected TypeConverterExists typeConverterExists = 
TypeConverterExists.Override;
     protected LoggingLevel typeConverterExistsLoggingLevel = LoggingLevel.WARN;
     protected final Statistics statistics = new UtilizationStatistics();
     protected final AtomicLong noopCounter = new AtomicLong();
@@ -387,7 +388,7 @@ public abstract class BaseTypeConverterRegistry extends 
ServiceSupport implement
 
             // if converter is not null then a duplicate exists
             if (converter != null) {
-                if (typeConverterExists == TypeConverterExists.Overwrite) {
+                if (typeConverterExists == TypeConverterExists.Override) {
                     CamelLogger logger = new CamelLogger(log, 
typeConverterExistsLoggingLevel);
                     logger.log("Overriding type converter from: " + converter 
+ " to: " + typeConverter);
                 } else if (typeConverterExists == TypeConverterExists.Ignore) {

http://git-wip-us.apache.org/repos/asf/camel/blob/08d185c2/camel-core/src/main/java/org/apache/camel/spi/TypeConverterRegistry.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/main/java/org/apache/camel/spi/TypeConverterRegistry.java 
b/camel-core/src/main/java/org/apache/camel/spi/TypeConverterRegistry.java
index b7f2c48..387b3ab 100644
--- a/camel-core/src/main/java/org/apache/camel/spi/TypeConverterRegistry.java
+++ b/camel-core/src/main/java/org/apache/camel/spi/TypeConverterRegistry.java
@@ -21,6 +21,7 @@ import java.util.List;
 import org.apache.camel.LoggingLevel;
 import org.apache.camel.StaticService;
 import org.apache.camel.TypeConverter;
+import org.apache.camel.TypeConverterExists;
 import org.apache.camel.TypeConverters;
 
 /**
@@ -82,13 +83,6 @@ public interface TypeConverterRegistry extends StaticService 
{
     }
 
     /**
-     * What to do if attempting to add a duplicate type converter
-     */
-    enum TypeConverterExists {
-        Overwrite, Ignore, Fail
-    }
-
-    /**
      * Registers a new type converter.
      * <p/>
      * This method may throw {@link 
org.apache.camel.TypeConverterExistsException} if configured to fail if an 
existing

http://git-wip-us.apache.org/repos/asf/camel/blob/08d185c2/camel-core/src/main/resources/org/apache/camel/jaxb.index
----------------------------------------------------------------------
diff --git a/camel-core/src/main/resources/org/apache/camel/jaxb.index 
b/camel-core/src/main/resources/org/apache/camel/jaxb.index
index 5f71139..c4c326b 100644
--- a/camel-core/src/main/resources/org/apache/camel/jaxb.index
+++ b/camel-core/src/main/resources/org/apache/camel/jaxb.index
@@ -18,5 +18,6 @@ ExchangePattern
 LoggingLevel
 ManagementStatisticsLevel
 ThreadPoolRejectedPolicy
+TypeConverterExists
 ShutdownRoute
 ShutdownRunningTask
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/08d185c2/camel-core/src/test/java/org/apache/camel/impl/TypeConverterRegistryTest.java
----------------------------------------------------------------------
diff --git 
a/camel-core/src/test/java/org/apache/camel/impl/TypeConverterRegistryTest.java 
b/camel-core/src/test/java/org/apache/camel/impl/TypeConverterRegistryTest.java
index c12b7d6..707ab32 100644
--- 
a/camel-core/src/test/java/org/apache/camel/impl/TypeConverterRegistryTest.java
+++ 
b/camel-core/src/test/java/org/apache/camel/impl/TypeConverterRegistryTest.java
@@ -23,8 +23,8 @@ import junit.framework.TestCase;
 import org.apache.camel.Exchange;
 import org.apache.camel.LoggingLevel;
 import org.apache.camel.TypeConverter;
+import org.apache.camel.TypeConverterExists;
 import org.apache.camel.TypeConverterExistsException;
-import org.apache.camel.spi.TypeConverterRegistry;
 import org.apache.camel.support.TypeConverterSupport;
 
 /**
@@ -66,7 +66,7 @@ public class TypeConverterRegistryTest extends TestCase {
 
     public void testAddDuplicateTypeConverterIgnore() {
         DefaultCamelContext context = new DefaultCamelContext();
-        
context.getTypeConverterRegistry().setTypeConverterExists(TypeConverterRegistry.TypeConverterExists.Ignore);
+        
context.getTypeConverterRegistry().setTypeConverterExists(TypeConverterExists.Ignore);
         
context.getTypeConverterRegistry().setTypeConverterExistsLoggingLevel(LoggingLevel.INFO);
 
         context.getTypeConverterRegistry().addTypeConverter(MyOrder.class, 
String.class, new MyOrderTypeConverter());
@@ -75,7 +75,7 @@ public class TypeConverterRegistryTest extends TestCase {
 
     public void testAddDuplicateTypeConverterFail() {
         DefaultCamelContext context = new DefaultCamelContext();
-        
context.getTypeConverterRegistry().setTypeConverterExists(TypeConverterRegistry.TypeConverterExists.Fail);
+        
context.getTypeConverterRegistry().setTypeConverterExists(TypeConverterExists.Fail);
 
         context.getTypeConverterRegistry().addTypeConverter(MyOrder.class, 
String.class, new MyOrderTypeConverter());
         try {

http://git-wip-us.apache.org/repos/asf/camel/blob/08d185c2/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelContextFactoryBean.java
----------------------------------------------------------------------
diff --git 
a/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelContextFactoryBean.java
 
b/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelContextFactoryBean.java
index 9584b62..71dde2c 100644
--- 
a/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelContextFactoryBean.java
+++ 
b/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelContextFactoryBean.java
@@ -28,9 +28,11 @@ import javax.xml.bind.annotation.XmlElements;
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlTransient;
 
+import org.apache.camel.LoggingLevel;
 import org.apache.camel.RoutesBuilder;
 import org.apache.camel.ShutdownRoute;
 import org.apache.camel.ShutdownRunningTask;
+import org.apache.camel.TypeConverterExists;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.properties.PropertiesComponent;
 import org.apache.camel.core.osgi.OsgiCamelContextPublisher;
@@ -117,6 +119,10 @@ public class CamelContextFactoryBean extends 
AbstractCamelContextFactoryBean<Blu
     private Boolean lazyLoadTypeConverters;
     @XmlAttribute(required = false)
     private Boolean typeConverterStatisticsEnabled;
+    @XmlAttribute(required = false)
+    private TypeConverterExists typeConverterExists;
+    @XmlAttribute(required = false)
+    private LoggingLevel typeConverterExistsLoggingLevel;
     @XmlElement(name = "properties", required = false)
     private PropertiesDefinition properties;
     @XmlElement(name = "propertyPlaceholder", type = 
CamelPropertyPlaceholderDefinition.class, required = false)
@@ -407,6 +413,22 @@ public class CamelContextFactoryBean extends 
AbstractCamelContextFactoryBean<Blu
         this.typeConverterStatisticsEnabled = typeConverterStatisticsEnabled;
     }
 
+    public TypeConverterExists getTypeConverterExists() {
+        return typeConverterExists;
+    }
+
+    public void setTypeConverterExists(TypeConverterExists 
typeConverterExists) {
+        this.typeConverterExists = typeConverterExists;
+    }
+
+    public LoggingLevel getTypeConverterExistsLoggingLevel() {
+        return typeConverterExistsLoggingLevel;
+    }
+
+    public void setTypeConverterExistsLoggingLevel(LoggingLevel 
typeConverterExistsLoggingLevel) {
+        this.typeConverterExistsLoggingLevel = typeConverterExistsLoggingLevel;
+    }
+
     public ShutdownRoute getShutdownRoute() {
         return shutdownRoute;
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/08d185c2/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
----------------------------------------------------------------------
diff --git 
a/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
 
b/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
index b24cf81..0aef50b 100644
--- 
a/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
+++ 
b/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
@@ -30,10 +30,12 @@ import javax.xml.bind.annotation.XmlTransient;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.CamelException;
+import org.apache.camel.LoggingLevel;
 import org.apache.camel.ManagementStatisticsLevel;
 import org.apache.camel.RoutesBuilder;
 import org.apache.camel.ShutdownRoute;
 import org.apache.camel.ShutdownRunningTask;
+import org.apache.camel.TypeConverterExists;
 import org.apache.camel.TypeConverters;
 import org.apache.camel.builder.ErrorHandlerBuilderRef;
 import org.apache.camel.builder.RouteBuilder;
@@ -699,6 +701,10 @@ public abstract class AbstractCamelContextFactoryBean<T 
extends ModelCamelContex
 
     public abstract Boolean getTypeConverterStatisticsEnabled();
 
+    public abstract LoggingLevel getTypeConverterExistsLoggingLevel();
+
+    public abstract TypeConverterExists getTypeConverterExists();
+
     public abstract CamelJMXAgentDefinition getCamelJMXAgent();
 
     public abstract CamelStreamCachingStrategyDefinition 
getCamelStreamCachingStrategy();
@@ -786,6 +792,12 @@ public abstract class AbstractCamelContextFactoryBean<T 
extends ModelCamelContex
         if (getTypeConverterStatisticsEnabled() != null) {
             
ctx.setTypeConverterStatisticsEnabled(getTypeConverterStatisticsEnabled());
         }
+        if (getTypeConverterExists() != null) {
+            
ctx.getTypeConverterRegistry().setTypeConverterExists(getTypeConverterExists());
+        }
+        if (getTypeConverterExistsLoggingLevel() != null) {
+            
ctx.getTypeConverterRegistry().setTypeConverterExistsLoggingLevel(getTypeConverterExistsLoggingLevel());
+        }
         if (getRestConfiguration() != null) {
             
ctx.setRestConfiguration(getRestConfiguration().asRestConfiguration(ctx));
         }

http://git-wip-us.apache.org/repos/asf/camel/blob/08d185c2/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java
----------------------------------------------------------------------
diff --git 
a/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java
 
b/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java
index 9703f70..7e8e4fe 100644
--- 
a/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java
+++ 
b/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java
@@ -28,9 +28,11 @@ import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlTransient;
 
 import org.apache.camel.CamelContext;
+import org.apache.camel.LoggingLevel;
 import org.apache.camel.RoutesBuilder;
 import org.apache.camel.ShutdownRoute;
 import org.apache.camel.ShutdownRunningTask;
+import org.apache.camel.TypeConverterExists;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.properties.PropertiesComponent;
 import org.apache.camel.core.xml.AbstractCamelContextFactoryBean;
@@ -126,6 +128,10 @@ public class CamelContextFactoryBean extends 
AbstractCamelContextFactoryBean<Spr
     private Boolean lazyLoadTypeConverters;
     @XmlAttribute(required = false)
     private Boolean typeConverterStatisticsEnabled;
+    @XmlAttribute(required = false)
+    private TypeConverterExists typeConverterExists;
+    @XmlAttribute(required = false)
+    private LoggingLevel typeConverterExistsLoggingLevel;
     @XmlElement(name = "properties", required = false)
     private PropertiesDefinition properties;
     @XmlElement(name = "propertyPlaceholder", type = 
CamelPropertyPlaceholderDefinition.class, required = false)
@@ -659,6 +665,22 @@ public class CamelContextFactoryBean extends 
AbstractCamelContextFactoryBean<Spr
         this.typeConverterStatisticsEnabled = typeConverterStatisticsEnabled;
     }
 
+    public TypeConverterExists getTypeConverterExists() {
+        return typeConverterExists;
+    }
+
+    public void setTypeConverterExists(TypeConverterExists 
typeConverterExists) {
+        this.typeConverterExists = typeConverterExists;
+    }
+
+    public LoggingLevel getTypeConverterExistsLoggingLevel() {
+        return typeConverterExistsLoggingLevel;
+    }
+
+    public void setTypeConverterExistsLoggingLevel(LoggingLevel 
typeConverterExistsLoggingLevel) {
+        this.typeConverterExistsLoggingLevel = typeConverterExistsLoggingLevel;
+    }
+
     public CamelJMXAgentDefinition getCamelJMXAgent() {
         return camelJMXAgent;
     }

Reply via email to