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; }
