Repository: camel Updated Branches: refs/heads/master 888fdf7c0 -> 1fe303771
CAMEL-11321: Load core fallback type converters a bit faster Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/6c73ae86 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/6c73ae86 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/6c73ae86 Branch: refs/heads/master Commit: 6c73ae86fc62c630e119b556edefee1507adcd41 Parents: a2324c3 Author: Claus Ibsen <davscl...@apache.org> Authored: Wed May 24 20:29:15 2017 +0200 Committer: Claus Ibsen <davscl...@apache.org> Committed: Thu May 25 11:09:52 2017 +0200 ---------------------------------------------------------------------- .../converter/BaseTypeConverterRegistry.java | 32 +++++++++++++++++--- 1 file changed, 27 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/6c73ae86/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 da15cfb..3cbbe59 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 @@ -88,18 +88,22 @@ public abstract class BaseTypeConverterRegistry extends ServiceSupport implement this.factoryFinder = factoryFinder; this.typeConverterLoaders.add(new AnnotationTypeConverterLoader(resolver)); + List<FallbackTypeConverter> fallbacks = new ArrayList<>(); // add to string first as it will then be last in the last as to string can nearly // always convert something to a string so we want it only as the last resort // ToStringTypeConverter should NOT allow to be promoted - addFallbackTypeConverter(new ToStringTypeConverter(), false); + addCoreFallbackTypeConverterToList(new ToStringTypeConverter(), false, fallbacks); // enum is okay to be promoted - addFallbackTypeConverter(new EnumTypeConverter(), true); + addCoreFallbackTypeConverterToList(new EnumTypeConverter(), true, fallbacks); // arrays is okay to be promoted - addFallbackTypeConverter(new ArrayTypeConverter(), true); + addCoreFallbackTypeConverterToList(new ArrayTypeConverter(), true, fallbacks); // and future should also not allowed to be promoted - addFallbackTypeConverter(new FutureTypeConverter(this), false); + addCoreFallbackTypeConverterToList(new FutureTypeConverter(this), false, fallbacks); // add sync processor to async processor converter is to be promoted - addFallbackTypeConverter(new AsyncProcessorTypeConverter(), true); + addCoreFallbackTypeConverterToList(new AsyncProcessorTypeConverter(), true, fallbacks); + + // add all core fallback converters at once which is faster (profiler) + fallbackConverters.addAll(fallbacks); } @Override @@ -465,6 +469,24 @@ public abstract class BaseTypeConverterRegistry extends ServiceSupport implement } } + private void addCoreFallbackTypeConverterToList(TypeConverter typeConverter, boolean canPromote, List<FallbackTypeConverter> converters) { + log.trace("Adding core fallback type converter: {} which can promote: {}", typeConverter, canPromote); + + // add in top of fallback as the toString() fallback will nearly always be able to convert + // the last one which is add to the FallbackTypeConverter will be called at the first place + converters.add(0, new FallbackTypeConverter(typeConverter, canPromote)); + if (typeConverter instanceof TypeConverterAware) { + TypeConverterAware typeConverterAware = (TypeConverterAware) typeConverter; + typeConverterAware.setTypeConverter(this); + } + if (typeConverter instanceof CamelContextAware) { + CamelContextAware camelContextAware = (CamelContextAware) typeConverter; + if (camelContext != null) { + camelContextAware.setCamelContext(camelContext); + } + } + } + public TypeConverter getTypeConverter(Class<?> toType, Class<?> fromType) { TypeMapping key = new TypeMapping(toType, fromType); return typeMappings.get(key);