You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2019/04/22 06:38:26 UTC

[camel] 01/04: CAMEL-13439: Resolving data formats is a bit cumbersome. So lets initialize dataformats that has been setup via XML DSL or added as model, then they are ready to be used. Avoid using RouteContext as it was not needed and helps with modularization. Add some missing dataformats in the DSL.

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

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

commit fc3567ffc5bcc5e1be04ef91a9b01d0f16efc87b
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Sun Apr 21 10:46:37 2019 +0200

    CAMEL-13439: Resolving data formats is a bit cumbersome. So lets initialize dataformats that has been setup via XML DSL or added as model, then they are ready to be used. Avoid using RouteContext as it was not needed and helps with modularization. Add some missing dataformats in the DSL.
---
 components/camel-dozer/pom.xml                     |  2 +-
 .../camel/component/dozer/DozerProducer.java       |  7 ++----
 .../apache/camel/impl/AbstractCamelContext.java    | 11 ++++++++
 .../impl/transformer/DataFormatTransformer.java    | 13 ++++++----
 .../apache/camel/model/DataFormatDefinition.java   | 29 ++++++++++------------
 .../org/apache/camel/model/MarshalDefinition.java  |  6 +++++
 .../apache/camel/model/UnmarshalDefinition.java    |  6 +++++
 .../camel/model/dataformat/BindyDataFormat.java    |  7 +++---
 .../camel/model/dataformat/BoonDataFormat.java     |  6 ++---
 .../camel/model/dataformat/CryptoDataFormat.java   | 16 ++++++------
 .../camel/model/dataformat/CustomDataFormat.java   |  6 ++---
 .../camel/model/dataformat/FlatpackDataFormat.java |  8 +++---
 .../camel/model/dataformat/GzipDataFormat.java     |  3 ++-
 .../model/dataformat/JacksonXMLDataFormat.java     |  8 +++---
 .../camel/model/dataformat/JibxDataFormat.java     |  6 ++---
 .../camel/model/dataformat/JsonDataFormat.java     | 18 +++++++-------
 .../model/dataformat/SerializationDataFormat.java  |  3 ++-
 .../camel/model/dataformat/StringDataFormat.java   |  3 ++-
 .../model/dataformat/TidyMarkupDataFormat.java     |  6 ++---
 .../camel/model/dataformat/XStreamDataFormat.java  |  8 +++---
 .../camel/model/dataformat/YAMLDataFormat.java     |  6 ++---
 .../camel/model/dataformat/ZipDataFormat.java      |  3 ++-
 .../org/apache/camel/reifier/MarshalReifier.java   |  2 +-
 .../org/apache/camel/reifier/UnmarshalReifier.java |  2 +-
 .../impl/transformer/TransformerContractTest.java  | 12 +++++----
 .../impl/transformer/TransformerRouteTest.java     | 12 ++++-----
 26 files changed, 118 insertions(+), 91 deletions(-)

diff --git a/components/camel-dozer/pom.xml b/components/camel-dozer/pom.xml
index 30d3729..4a33dcf 100644
--- a/components/camel-dozer/pom.xml
+++ b/components/camel-dozer/pom.xml
@@ -40,7 +40,7 @@
         <!-- requires camel-core -->
         <dependency>
             <groupId>org.apache.camel</groupId>
-            <artifactId>camel-core</artifactId>
+            <artifactId>camel-support</artifactId>
         </dependency>
         <dependency>
             <groupId>com.github.dozermapper</groupId>
diff --git a/components/camel-dozer/src/main/java/org/apache/camel/component/dozer/DozerProducer.java b/components/camel-dozer/src/main/java/org/apache/camel/component/dozer/DozerProducer.java
index 77fc3e9..6038d75 100644
--- a/components/camel-dozer/src/main/java/org/apache/camel/component/dozer/DozerProducer.java
+++ b/components/camel-dozer/src/main/java/org/apache/camel/component/dozer/DozerProducer.java
@@ -18,7 +18,6 @@ package org.apache.camel.component.dozer;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
-import org.apache.camel.model.DataFormatDefinition;
 import org.apache.camel.spi.DataFormat;
 import org.apache.camel.support.DefaultProducer;
 import org.apache.camel.support.processor.MarshalProcessor;
@@ -129,8 +128,7 @@ public class DozerProducer extends DefaultProducer {
             Exchange exchange, String dataFormatId) throws Exception {
         
         if (unmarshaller == null) {
-            DataFormat dataFormat = DataFormatDefinition.getDataFormat(
-                    exchange.getUnitOfWork().getRouteContext(), null, dataFormatId);
+            DataFormat dataFormat = exchange.getContext().resolveDataFormat(dataFormatId);
             if (dataFormat == null) {
                 throw new Exception("Unable to resolve data format for unmarshalling: " + dataFormatId);
             }
@@ -152,8 +150,7 @@ public class DozerProducer extends DefaultProducer {
             Exchange exchange, String dataFormatId) throws Exception {
         
         if (marshaller == null) {
-            DataFormat dataFormat = DataFormatDefinition.getDataFormat(
-                    exchange.getUnitOfWork().getRouteContext(), null, dataFormatId);
+            DataFormat dataFormat = exchange.getContext().resolveDataFormat(dataFormatId);
             if (dataFormat == null) {
                 throw new Exception("Unable to resolve data format for marshalling: " + dataFormatId);
             }
diff --git a/core/camel-core/src/main/java/org/apache/camel/impl/AbstractCamelContext.java b/core/camel-core/src/main/java/org/apache/camel/impl/AbstractCamelContext.java
index 2ea5ab7..fcb8743 100644
--- a/core/camel-core/src/main/java/org/apache/camel/impl/AbstractCamelContext.java
+++ b/core/camel-core/src/main/java/org/apache/camel/impl/AbstractCamelContext.java
@@ -2555,6 +2555,7 @@ public abstract class AbstractCamelContext extends ServiceSupport implements Mod
         }
 
         // Start runtime catalog
+        // TODO: remove me as already started earlier
         getExtension(RuntimeCamelCatalog.class);
 
         // re-create endpoint registry as the cache size limit may be set after the constructor of this instance was called.
@@ -2590,6 +2591,16 @@ public abstract class AbstractCamelContext extends ServiceSupport implements Mod
             propertiesComponent = existing;
         }
 
+        // eager lookup data formats and bind to registry so the dataformats can be looked up and used
+        for (Map.Entry<String, DataFormatDefinition> e : dataFormats.entrySet()) {
+            String id = e.getKey();
+            DataFormatDefinition def = e.getValue();
+            log.debug("Creating Dataformat with id: {} and definition: {}", id, def);
+            DataFormat df = def.getDataFormat(this);
+            addService(df, true);
+            getRegistry().bind(id, df);
+        }
+
         // start components
         startServices(components.values());
 
diff --git a/core/camel-core/src/main/java/org/apache/camel/impl/transformer/DataFormatTransformer.java b/core/camel-core/src/main/java/org/apache/camel/impl/transformer/DataFormatTransformer.java
index b537cac..7e9b409 100644
--- a/core/camel-core/src/main/java/org/apache/camel/impl/transformer/DataFormatTransformer.java
+++ b/core/camel-core/src/main/java/org/apache/camel/impl/transformer/DataFormatTransformer.java
@@ -93,13 +93,16 @@ public class DataFormatTransformer extends Transformer {
         }
     }
 
-    /**
-     * A bit dirty hack to create DataFormat instance, as it requires a RouteContext anyway.
-     */
     private DataFormat getDataFormat(Exchange exchange) throws Exception {
+        // TODO: Move this to doStart and remove this method
         if (this.dataFormat == null) {
-            this.dataFormat = DataFormatDefinition.getDataFormat(
-                exchange.getUnitOfWork().getRouteContext(), this.dataFormatType, this.dataFormatRef);
+            if (this.dataFormatType != null) {
+                this.dataFormat = this.dataFormatType.getDataFormat(exchange.getContext());
+            } else if (this.dataFormatRef != null) {
+                this.dataFormat = exchange.getContext().resolveDataFormat(this.dataFormatRef);
+            }
+//            this.dataFormat = DataFormatDefinition.getDataFormat(
+//                exchange.getContext(), this.dataFormatType, this.dataFormatRef);
             if (this.dataFormat != null && !getCamelContext().hasService(this.dataFormat)) {
                 getCamelContext().addService(this.dataFormat, false);
             }
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/DataFormatDefinition.java b/core/camel-core/src/main/java/org/apache/camel/model/DataFormatDefinition.java
index 6916e8d..7a1a3f1 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/DataFormatDefinition.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/DataFormatDefinition.java
@@ -29,11 +29,8 @@ import javax.xml.namespace.QName;
 import org.apache.camel.CamelContext;
 import org.apache.camel.spi.DataFormat;
 import org.apache.camel.spi.Metadata;
-import org.apache.camel.spi.RouteContext;
 import org.apache.camel.support.IntrospectionSupport;
 import org.apache.camel.util.ObjectHelper;
-
-
 import static org.apache.camel.support.EndpointHelper.isReferenceParameter;
 
 /**
@@ -67,55 +64,55 @@ public class DataFormatDefinition extends IdentifiedType implements OtherAttribu
     /**
      * Factory method to create the data format
      *
-     * @param routeContext route context
+     * @param camelContext the camel context
      * @param type         the data format type
      * @param ref          reference to lookup for a data format
      * @return the data format or null if not possible to create
      */
-    public static DataFormat getDataFormat(RouteContext routeContext, DataFormatDefinition type, String ref) {
+    public static DataFormat getDataFormat(CamelContext camelContext, DataFormatDefinition type, String ref) {
         if (type == null) {
             ObjectHelper.notNull(ref, "ref or type");
 
             // try to let resolver see if it can resolve it, its not always possible
-            type = routeContext.getCamelContext().adapt(ModelCamelContext.class).resolveDataFormatDefinition(ref);
+            type = camelContext.adapt(ModelCamelContext.class).resolveDataFormatDefinition(ref);
 
             if (type != null) {
-                return type.getDataFormat(routeContext);
+                return type.getDataFormat(camelContext);
             }
 
-            DataFormat dataFormat = routeContext.getCamelContext().resolveDataFormat(ref);
+            DataFormat dataFormat = camelContext.resolveDataFormat(ref);
             if (dataFormat == null) {
                 throw new IllegalArgumentException("Cannot find data format in registry with ref: " + ref);
             }
 
             return dataFormat;
         } else {
-            return type.getDataFormat(routeContext);
+            return type.getDataFormat(camelContext);
         }
     }
 
-    public DataFormat getDataFormat(RouteContext routeContext) {
+    public DataFormat getDataFormat(CamelContext camelContext) {
         if (dataFormat == null) {
             Runnable propertyPlaceholdersChangeReverter = ProcessorDefinitionHelper.createPropertyPlaceholdersChangeReverter();
 
             // resolve properties before we create the data format
             try {
-                ProcessorDefinitionHelper.resolvePropertyPlaceholders(routeContext.getCamelContext(), this);
+                ProcessorDefinitionHelper.resolvePropertyPlaceholders(camelContext, this);
             } catch (Exception e) {
                 throw new IllegalArgumentException("Error resolving property placeholders on data format: " + this, e);
             }
             try {
-                dataFormat = createDataFormat(routeContext);
+                dataFormat = createDataFormat(camelContext);
                 if (dataFormat != null) {
                     // is enabled by default so assume true if null
                     final boolean contentTypeHeader = this.contentTypeHeader == null || this.contentTypeHeader;
                     try {
-                        setProperty(routeContext.getCamelContext(), dataFormat, "contentTypeHeader", contentTypeHeader);
+                        setProperty(camelContext, dataFormat, "contentTypeHeader", contentTypeHeader);
                     } catch (Exception e) {
                         // ignore as this option is optional and not all data formats support this
                     }
                     // configure the rest of the options
-                    configureDataFormat(dataFormat, routeContext.getCamelContext());
+                    configureDataFormat(dataFormat, camelContext);
                 } else {
                     throw new IllegalArgumentException(
                             "Data format '" + (dataFormatName != null ? dataFormatName : "<null>") + "' could not be created. "
@@ -131,10 +128,10 @@ public class DataFormatDefinition extends IdentifiedType implements OtherAttribu
     /**
      * Factory method to create the data format instance
      */
-    protected DataFormat createDataFormat(RouteContext routeContext) {
+    protected DataFormat createDataFormat(CamelContext camelContext) {
         // must use getDataFormatName() as we need special logic in json dataformat
         if (getDataFormatName() != null) {
-            return routeContext.getCamelContext().createDataFormat(getDataFormatName());
+            return camelContext.createDataFormat(getDataFormatName());
         }
         return null;
     }
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/MarshalDefinition.java b/core/camel-core/src/main/java/org/apache/camel/model/MarshalDefinition.java
index f5dc02f..6fd3233 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/MarshalDefinition.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/MarshalDefinition.java
@@ -24,6 +24,7 @@ import javax.xml.bind.annotation.XmlRootElement;
 
 import org.apache.camel.model.dataformat.ASN1DataFormat;
 import org.apache.camel.model.dataformat.AvroDataFormat;
+import org.apache.camel.model.dataformat.BarcodeDataFormat;
 import org.apache.camel.model.dataformat.Base64DataFormat;
 import org.apache.camel.model.dataformat.BeanioDataFormat;
 import org.apache.camel.model.dataformat.BindyDataFormat;
@@ -42,6 +43,8 @@ import org.apache.camel.model.dataformat.JaxbDataFormat;
 import org.apache.camel.model.dataformat.JibxDataFormat;
 import org.apache.camel.model.dataformat.JsonApiDataFormat;
 import org.apache.camel.model.dataformat.JsonDataFormat;
+import org.apache.camel.model.dataformat.LZFDataFormat;
+import org.apache.camel.model.dataformat.MimeMultipartDataFormat;
 import org.apache.camel.model.dataformat.PGPDataFormat;
 import org.apache.camel.model.dataformat.ProtobufDataFormat;
 import org.apache.camel.model.dataformat.RssDataFormat;
@@ -74,6 +77,7 @@ public class MarshalDefinition extends NoOutputDefinition<MarshalDefinition> {
     @XmlElements({
         @XmlElement(required = false, name = "asn1", type = ASN1DataFormat.class),
         @XmlElement(required = false, name = "avro", type = AvroDataFormat.class),
+        @XmlElement(required = false, name = "barcode", type = BarcodeDataFormat.class),
         @XmlElement(required = false, name = "base64", type = Base64DataFormat.class),
         @XmlElement(required = false, name = "beanio", type = BeanioDataFormat.class),
         @XmlElement(required = false, name = "bindy", type = BindyDataFormat.class),
@@ -92,6 +96,8 @@ public class MarshalDefinition extends NoOutputDefinition<MarshalDefinition> {
         @XmlElement(required = false, name = "jibx", type = JibxDataFormat.class),
         @XmlElement(required = false, name = "json", type = JsonDataFormat.class),
         @XmlElement(required = false, name = "jsonApi", type = JsonApiDataFormat.class),
+        @XmlElement(required = false, name = "lzf", type = LZFDataFormat.class),
+        @XmlElement(required = false, name = "mimeMultipart", type = MimeMultipartDataFormat.class),
         @XmlElement(required = false, name = "protobuf", type = ProtobufDataFormat.class),
         @XmlElement(required = false, name = "rss", type = RssDataFormat.class),
         @XmlElement(required = false, name = "secureXML", type = XMLSecurityDataFormat.class),
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/UnmarshalDefinition.java b/core/camel-core/src/main/java/org/apache/camel/model/UnmarshalDefinition.java
index 444870a..1d6117f 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/UnmarshalDefinition.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/UnmarshalDefinition.java
@@ -24,6 +24,7 @@ import javax.xml.bind.annotation.XmlRootElement;
 
 import org.apache.camel.model.dataformat.ASN1DataFormat;
 import org.apache.camel.model.dataformat.AvroDataFormat;
+import org.apache.camel.model.dataformat.BarcodeDataFormat;
 import org.apache.camel.model.dataformat.Base64DataFormat;
 import org.apache.camel.model.dataformat.BeanioDataFormat;
 import org.apache.camel.model.dataformat.BindyDataFormat;
@@ -42,6 +43,8 @@ import org.apache.camel.model.dataformat.JaxbDataFormat;
 import org.apache.camel.model.dataformat.JibxDataFormat;
 import org.apache.camel.model.dataformat.JsonApiDataFormat;
 import org.apache.camel.model.dataformat.JsonDataFormat;
+import org.apache.camel.model.dataformat.LZFDataFormat;
+import org.apache.camel.model.dataformat.MimeMultipartDataFormat;
 import org.apache.camel.model.dataformat.PGPDataFormat;
 import org.apache.camel.model.dataformat.ProtobufDataFormat;
 import org.apache.camel.model.dataformat.RssDataFormat;
@@ -74,6 +77,7 @@ public class UnmarshalDefinition extends NoOutputDefinition<UnmarshalDefinition>
     @XmlElements({
         @XmlElement(required = false, name = "asn1", type = ASN1DataFormat.class),
         @XmlElement(required = false, name = "avro", type = AvroDataFormat.class),
+        @XmlElement(required = false, name = "barcode", type = BarcodeDataFormat.class),
         @XmlElement(required = false, name = "base64", type = Base64DataFormat.class),
         @XmlElement(required = false, name = "beanio", type = BeanioDataFormat.class),
         @XmlElement(required = false, name = "bindy", type = BindyDataFormat.class),
@@ -92,6 +96,8 @@ public class UnmarshalDefinition extends NoOutputDefinition<UnmarshalDefinition>
         @XmlElement(required = false, name = "jibx", type = JibxDataFormat.class),
         @XmlElement(required = false, name = "json", type = JsonDataFormat.class),
         @XmlElement(required = false, name = "jsonApi", type = JsonApiDataFormat.class),
+        @XmlElement(required = false, name = "lzf", type = LZFDataFormat.class),
+        @XmlElement(required = false, name = "mimeMultipart", type = MimeMultipartDataFormat.class),
         @XmlElement(required = false, name = "protobuf", type = ProtobufDataFormat.class),
         @XmlElement(required = false, name = "rss", type = RssDataFormat.class),
         @XmlElement(required = false, name = "secureXML", type = XMLSecurityDataFormat.class),
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/dataformat/BindyDataFormat.java b/core/camel-core/src/main/java/org/apache/camel/model/dataformat/BindyDataFormat.java
index 3962f72..681b1ad 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/dataformat/BindyDataFormat.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/dataformat/BindyDataFormat.java
@@ -104,7 +104,8 @@ public class BindyDataFormat extends DataFormatDefinition {
         this.unwrapSingleInstance = unwrapSingleInstance;
     }
 
-    protected DataFormat createDataFormat(RouteContext routeContext) {
+    @Override
+    protected DataFormat createDataFormat(CamelContext camelContext) {
         if (classType == null && clazz == null) {
             throw new IllegalArgumentException("Either packages or classType must be specified");
         }
@@ -119,12 +120,12 @@ public class BindyDataFormat extends DataFormatDefinition {
 
         if (clazz == null && classType != null) {
             try {
-                clazz = routeContext.getCamelContext().getClassResolver().resolveMandatoryClass(classType);
+                clazz = camelContext.getClassResolver().resolveMandatoryClass(classType);
             } catch (ClassNotFoundException e) {
                 throw RuntimeCamelException.wrapRuntimeCamelException(e);
             }
         }
-        return super.createDataFormat(routeContext);
+        return super.createDataFormat(camelContext);
     }
 
     @Override
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/dataformat/BoonDataFormat.java b/core/camel-core/src/main/java/org/apache/camel/model/dataformat/BoonDataFormat.java
index 6b43e49..85e56ef 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/dataformat/BoonDataFormat.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/dataformat/BoonDataFormat.java
@@ -87,15 +87,15 @@ public class BoonDataFormat extends DataFormatDefinition {
     }  
 
     @Override
-    protected DataFormat createDataFormat(RouteContext routeContext) {
+    protected DataFormat createDataFormat(CamelContext camelContext) {
         if (unmarshalType == null && unmarshalTypeName != null) {
             try {
-                unmarshalType = routeContext.getCamelContext().getClassResolver().resolveMandatoryClass(unmarshalTypeName);
+                unmarshalType = camelContext.getClassResolver().resolveMandatoryClass(unmarshalTypeName);
             } catch (ClassNotFoundException e) {
                 throw RuntimeCamelException.wrapRuntimeCamelException(e);
             }
         }
-        return super.createDataFormat(routeContext);
+        return super.createDataFormat(camelContext);
     }
 
     @Override
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/dataformat/CryptoDataFormat.java b/core/camel-core/src/main/java/org/apache/camel/model/dataformat/CryptoDataFormat.java
index 1a143a2..e9a411e 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/dataformat/CryptoDataFormat.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/dataformat/CryptoDataFormat.java
@@ -63,21 +63,21 @@ public class CryptoDataFormat extends DataFormatDefinition {
     }
 
     @Override
-    protected DataFormat createDataFormat(RouteContext routeContext) {
-        DataFormat cryptoFormat = super.createDataFormat(routeContext);
+    protected DataFormat createDataFormat(CamelContext camelContext) {
+        DataFormat cryptoFormat = super.createDataFormat(camelContext);
 
         if (ObjectHelper.isNotEmpty(keyRef)) {
-            Key key = CamelContextHelper.mandatoryLookup(routeContext.getCamelContext(), keyRef, Key.class);
-            setProperty(routeContext.getCamelContext(), cryptoFormat, "key", key);
+            Key key = CamelContextHelper.mandatoryLookup(camelContext, keyRef, Key.class);
+            setProperty(camelContext, cryptoFormat, "key", key);
         }
         if (ObjectHelper.isNotEmpty(algorithmParameterRef)) {
-            AlgorithmParameterSpec spec = CamelContextHelper.mandatoryLookup(routeContext.getCamelContext(),
+            AlgorithmParameterSpec spec = CamelContextHelper.mandatoryLookup(camelContext,
                     algorithmParameterRef, AlgorithmParameterSpec.class);
-            setProperty(routeContext.getCamelContext(), cryptoFormat, "AlgorithmParameterSpec", spec);
+            setProperty(camelContext, cryptoFormat, "AlgorithmParameterSpec", spec);
         }
         if (ObjectHelper.isNotEmpty(initVectorRef)) {
-            byte[] iv = CamelContextHelper.mandatoryLookup(routeContext.getCamelContext(), initVectorRef, byte[].class);
-            setProperty(routeContext.getCamelContext(), cryptoFormat, "InitializationVector", iv);
+            byte[] iv = CamelContextHelper.mandatoryLookup(camelContext, initVectorRef, byte[].class);
+            setProperty(camelContext, cryptoFormat, "InitializationVector", iv);
         }
         return cryptoFormat;
     }
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/dataformat/CustomDataFormat.java b/core/camel-core/src/main/java/org/apache/camel/model/dataformat/CustomDataFormat.java
index d6039c9..a321e3d 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/dataformat/CustomDataFormat.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/dataformat/CustomDataFormat.java
@@ -21,10 +21,10 @@ import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlRootElement;
 
+import org.apache.camel.CamelContext;
 import org.apache.camel.model.DataFormatDefinition;
 import org.apache.camel.spi.DataFormat;
 import org.apache.camel.spi.Metadata;
-import org.apache.camel.spi.RouteContext;
 
 /**
  * To use a custom data format implementation that does not come out of the box from Apache Camel.
@@ -44,8 +44,8 @@ public class CustomDataFormat extends DataFormatDefinition {
     }
 
     @Override
-    protected DataFormat createDataFormat(RouteContext routeContext) {
-        return DataFormatDefinition.getDataFormat(routeContext, null, ref);
+    protected DataFormat createDataFormat(CamelContext camelContext) {
+        return DataFormatDefinition.getDataFormat(camelContext, null, ref);
     }
 
     /**
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/dataformat/FlatpackDataFormat.java b/core/camel-core/src/main/java/org/apache/camel/model/dataformat/FlatpackDataFormat.java
index 7e20d56..6e1ddf5 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/dataformat/FlatpackDataFormat.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/dataformat/FlatpackDataFormat.java
@@ -151,12 +151,12 @@ public class FlatpackDataFormat extends DataFormatDefinition {
     }
 
     @Override
-    protected DataFormat createDataFormat(RouteContext routeContext) {
-        DataFormat flatpack = super.createDataFormat(routeContext);
+    protected DataFormat createDataFormat(CamelContext camelContext) {
+        DataFormat flatpack = super.createDataFormat(camelContext);
 
         if (ObjectHelper.isNotEmpty(parserFactoryRef)) {
-            Object parserFactory = CamelContextHelper.mandatoryLookup(routeContext.getCamelContext(), parserFactoryRef);
-            setProperty(routeContext.getCamelContext(), flatpack, "parserFactory", parserFactory);
+            Object parserFactory = CamelContextHelper.mandatoryLookup(camelContext, parserFactoryRef);
+            setProperty(camelContext, flatpack, "parserFactory", parserFactory);
         }
 
         return flatpack;
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/dataformat/GzipDataFormat.java b/core/camel-core/src/main/java/org/apache/camel/model/dataformat/GzipDataFormat.java
index a8483f5..1f62737 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/dataformat/GzipDataFormat.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/dataformat/GzipDataFormat.java
@@ -18,6 +18,7 @@ package org.apache.camel.model.dataformat;
 
 import javax.xml.bind.annotation.XmlRootElement;
 
+import org.apache.camel.CamelContext;
 import org.apache.camel.model.DataFormatDefinition;
 import org.apache.camel.spi.DataFormat;
 import org.apache.camel.spi.Metadata;
@@ -35,7 +36,7 @@ public class GzipDataFormat extends DataFormatDefinition {
     }
 
     @Override
-    protected DataFormat createDataFormat(RouteContext routeContext) {
+    protected DataFormat createDataFormat(CamelContext camelContext) {
         return new org.apache.camel.impl.GzipDataFormat();
     }
 }
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/dataformat/JacksonXMLDataFormat.java b/core/camel-core/src/main/java/org/apache/camel/model/dataformat/JacksonXMLDataFormat.java
index e48a99f..7442a91 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/dataformat/JacksonXMLDataFormat.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/dataformat/JacksonXMLDataFormat.java
@@ -276,24 +276,24 @@ public class JacksonXMLDataFormat extends DataFormatDefinition {
     }
 
     @Override
-    protected DataFormat createDataFormat(RouteContext routeContext) {
+    protected DataFormat createDataFormat(CamelContext camelContext) {
 
         if (unmarshalType == null && unmarshalTypeName != null) {
             try {
-                unmarshalType = routeContext.getCamelContext().getClassResolver().resolveMandatoryClass(unmarshalTypeName);
+                unmarshalType = camelContext.getClassResolver().resolveMandatoryClass(unmarshalTypeName);
             } catch (ClassNotFoundException e) {
                 throw RuntimeCamelException.wrapRuntimeCamelException(e);
             }
         }
         if (collectionType == null && collectionTypeName != null) {
             try {
-                collectionType = routeContext.getCamelContext().getClassResolver().resolveMandatoryClass(collectionTypeName);
+                collectionType = camelContext.getClassResolver().resolveMandatoryClass(collectionTypeName);
             } catch (ClassNotFoundException e) {
                 throw RuntimeCamelException.wrapRuntimeCamelException(e);
             }
         }
 
-        return super.createDataFormat(routeContext);
+        return super.createDataFormat(camelContext);
     }
 
     @Override
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/dataformat/JibxDataFormat.java b/core/camel-core/src/main/java/org/apache/camel/model/dataformat/JibxDataFormat.java
index 6e97dbb..0bc157c 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/dataformat/JibxDataFormat.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/dataformat/JibxDataFormat.java
@@ -86,16 +86,16 @@ public class JibxDataFormat extends DataFormatDefinition {
     }
 
     @Override
-    protected DataFormat createDataFormat(RouteContext routeContext) {
+    protected DataFormat createDataFormat(CamelContext camelContext) {
         if (unmarshallClass == null && unmarshallTypeName != null) {
             try {
-                unmarshallClass = routeContext.getCamelContext().getClassResolver().resolveMandatoryClass(unmarshallTypeName);
+                unmarshallClass = camelContext.getClassResolver().resolveMandatoryClass(unmarshallTypeName);
             } catch (ClassNotFoundException e) {
                 throw RuntimeCamelException.wrapRuntimeCamelException(e);
             }
         }
 
-        return super.createDataFormat(routeContext);
+        return super.createDataFormat(camelContext);
     }
 
     @Override
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/dataformat/JsonDataFormat.java b/core/camel-core/src/main/java/org/apache/camel/model/dataformat/JsonDataFormat.java
index f8ebd20..744c51e 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/dataformat/JsonDataFormat.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/dataformat/JsonDataFormat.java
@@ -369,35 +369,35 @@ public class JsonDataFormat extends DataFormatDefinition {
     }
 
     @Override
-    protected DataFormat createDataFormat(RouteContext routeContext) {
+    protected DataFormat createDataFormat(CamelContext camelContext) {
         if (library == JsonLibrary.XStream) {
-            setProperty(routeContext.getCamelContext(), this, "dataFormatName", "json-xstream");
+            setProperty(camelContext, this, "dataFormatName", "json-xstream");
         } else if (library == JsonLibrary.Jackson) {
-            setProperty(routeContext.getCamelContext(), this, "dataFormatName", "json-jackson");
+            setProperty(camelContext, this, "dataFormatName", "json-jackson");
         } else if (library == JsonLibrary.Gson) {
-            setProperty(routeContext.getCamelContext(), this, "dataFormatName", "json-gson");
+            setProperty(camelContext, this, "dataFormatName", "json-gson");
         } else if (library == JsonLibrary.Fastjson) {
-            setProperty(routeContext.getCamelContext(), this, "dataFormatName", "json-fastjson");
+            setProperty(camelContext, this, "dataFormatName", "json-fastjson");
         } else {
-            setProperty(routeContext.getCamelContext(), this, "dataFormatName", "json-johnzon");
+            setProperty(camelContext, this, "dataFormatName", "json-johnzon");
         }
 
         if (unmarshalType == null && unmarshalTypeName != null) {
             try {
-                unmarshalType = routeContext.getCamelContext().getClassResolver().resolveMandatoryClass(unmarshalTypeName);
+                unmarshalType = camelContext.getClassResolver().resolveMandatoryClass(unmarshalTypeName);
             } catch (ClassNotFoundException e) {
                 throw RuntimeCamelException.wrapRuntimeCamelException(e);
             }
         }
         if (collectionType == null && collectionTypeName != null) {
             try {
-                collectionType = routeContext.getCamelContext().getClassResolver().resolveMandatoryClass(collectionTypeName);
+                collectionType = camelContext.getClassResolver().resolveMandatoryClass(collectionTypeName);
             } catch (ClassNotFoundException e) {
                 throw RuntimeCamelException.wrapRuntimeCamelException(e);
             }
         }
 
-        return super.createDataFormat(routeContext);
+        return super.createDataFormat(camelContext);
     }
 
     @Override
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/dataformat/SerializationDataFormat.java b/core/camel-core/src/main/java/org/apache/camel/model/dataformat/SerializationDataFormat.java
index fa33b95..5eeb40d 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/dataformat/SerializationDataFormat.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/dataformat/SerializationDataFormat.java
@@ -18,6 +18,7 @@ package org.apache.camel.model.dataformat;
 
 import javax.xml.bind.annotation.XmlRootElement;
 
+import org.apache.camel.CamelContext;
 import org.apache.camel.model.DataFormatDefinition;
 import org.apache.camel.spi.DataFormat;
 import org.apache.camel.spi.Metadata;
@@ -36,7 +37,7 @@ public class SerializationDataFormat extends DataFormatDefinition {
     }
 
     @Override
-    protected DataFormat createDataFormat(RouteContext routeContext) {
+    protected DataFormat createDataFormat(CamelContext camelContext) {
         return new org.apache.camel.impl.SerializationDataFormat();
     }
 }
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/dataformat/StringDataFormat.java b/core/camel-core/src/main/java/org/apache/camel/model/dataformat/StringDataFormat.java
index ad28a1f..ce34d48 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/dataformat/StringDataFormat.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/dataformat/StringDataFormat.java
@@ -21,6 +21,7 @@ import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlRootElement;
 
+import org.apache.camel.CamelContext;
 import org.apache.camel.model.DataFormatDefinition;
 import org.apache.camel.spi.DataFormat;
 import org.apache.camel.spi.Metadata;
@@ -41,7 +42,7 @@ public class StringDataFormat extends DataFormatDefinition {
     }
 
     @Override
-    protected DataFormat createDataFormat(RouteContext routeContext) {
+    protected DataFormat createDataFormat(CamelContext camelContext) {
         return new org.apache.camel.impl.StringDataFormat(charset);
     }
 
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/dataformat/TidyMarkupDataFormat.java b/core/camel-core/src/main/java/org/apache/camel/model/dataformat/TidyMarkupDataFormat.java
index 08991ec..b165a00 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/dataformat/TidyMarkupDataFormat.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/dataformat/TidyMarkupDataFormat.java
@@ -96,16 +96,16 @@ public class TidyMarkupDataFormat extends DataFormatDefinition {
     }
 
     @Override
-    protected DataFormat createDataFormat(RouteContext routeContext) {
+    protected DataFormat createDataFormat(CamelContext camelContext) {
         if (dataObjectType == null && dataObjectTypeName != null) {
             try {
-                dataObjectType = routeContext.getCamelContext().getClassResolver().resolveMandatoryClass(dataObjectTypeName);
+                dataObjectType = camelContext.getClassResolver().resolveMandatoryClass(dataObjectTypeName);
             } catch (ClassNotFoundException e) {
                 throw RuntimeCamelException.wrapRuntimeCamelException(e);
             }
         }
 
-        return super.createDataFormat(routeContext);
+        return super.createDataFormat(camelContext);
     }
 
     @Override
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/dataformat/XStreamDataFormat.java b/core/camel-core/src/main/java/org/apache/camel/model/dataformat/XStreamDataFormat.java
index 47bae70..509bc06 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/dataformat/XStreamDataFormat.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/dataformat/XStreamDataFormat.java
@@ -219,14 +219,14 @@ public class XStreamDataFormat extends DataFormatDefinition {
     }
 
     @Override
-    protected DataFormat createDataFormat(RouteContext routeContext) {
+    protected DataFormat createDataFormat(CamelContext camelContext) {
         if ("json".equals(this.driver)) {
-            setProperty(routeContext.getCamelContext(), this, "dataFormatName", "json-xstream");
+            setProperty(camelContext, this, "dataFormatName", "json-xstream");
         }
-        DataFormat answer = super.createDataFormat(routeContext);
+        DataFormat answer = super.createDataFormat(camelContext);
         // need to lookup the reference for the xstreamDriver
         if (ObjectHelper.isNotEmpty(driverRef)) {
-            setProperty(routeContext.getCamelContext(), answer, "xstreamDriver", CamelContextHelper.mandatoryLookup(routeContext.getCamelContext(), driverRef));
+            setProperty(camelContext, answer, "xstreamDriver", CamelContextHelper.mandatoryLookup(camelContext, driverRef));
         }
         return answer;
     }
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/dataformat/YAMLDataFormat.java b/core/camel-core/src/main/java/org/apache/camel/model/dataformat/YAMLDataFormat.java
index 88bebec..750bbaa 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/dataformat/YAMLDataFormat.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/dataformat/YAMLDataFormat.java
@@ -218,12 +218,12 @@ public class YAMLDataFormat extends DataFormatDefinition {
     }
 
     @Override
-    protected DataFormat createDataFormat(RouteContext routeContext) {
+    protected DataFormat createDataFormat(CamelContext camelContext) {
         if (library == YAMLLibrary.SnakeYAML) {
-            setProperty(routeContext.getCamelContext(), this, "dataFormatName", "yaml-snakeyaml");
+            setProperty(camelContext, this, "dataFormatName", "yaml-snakeyaml");
         }
 
-        return super.createDataFormat(routeContext);
+        return super.createDataFormat(camelContext);
     }
 
     @Override
diff --git a/core/camel-core/src/main/java/org/apache/camel/model/dataformat/ZipDataFormat.java b/core/camel-core/src/main/java/org/apache/camel/model/dataformat/ZipDataFormat.java
index ece7655..9ffe245 100644
--- a/core/camel-core/src/main/java/org/apache/camel/model/dataformat/ZipDataFormat.java
+++ b/core/camel-core/src/main/java/org/apache/camel/model/dataformat/ZipDataFormat.java
@@ -23,6 +23,7 @@ import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlRootElement;
 
+import org.apache.camel.CamelContext;
 import org.apache.camel.model.DataFormatDefinition;
 import org.apache.camel.spi.DataFormat;
 import org.apache.camel.spi.Metadata;
@@ -47,7 +48,7 @@ public class ZipDataFormat extends DataFormatDefinition {
     }
 
     @Override
-    protected DataFormat createDataFormat(RouteContext routeContext) {
+    protected DataFormat createDataFormat(CamelContext camelContext) {
         if (compressionLevel == null) {
             return new org.apache.camel.impl.ZipDataFormat(Deflater.DEFAULT_COMPRESSION);
         } else {
diff --git a/core/camel-core/src/main/java/org/apache/camel/reifier/MarshalReifier.java b/core/camel-core/src/main/java/org/apache/camel/reifier/MarshalReifier.java
index 0699d3f..e749dcb 100644
--- a/core/camel-core/src/main/java/org/apache/camel/reifier/MarshalReifier.java
+++ b/core/camel-core/src/main/java/org/apache/camel/reifier/MarshalReifier.java
@@ -32,7 +32,7 @@ class MarshalReifier extends ProcessorReifier<MarshalDefinition> {
 
     @Override
     public Processor createProcessor(RouteContext routeContext) {
-        DataFormat dataFormat = DataFormatDefinition.getDataFormat(routeContext, definition.getDataFormatType(), null);
+        DataFormat dataFormat = DataFormatDefinition.getDataFormat(routeContext.getCamelContext(), definition.getDataFormatType(), null);
         return new MarshalProcessor(dataFormat);
     }
 
diff --git a/core/camel-core/src/main/java/org/apache/camel/reifier/UnmarshalReifier.java b/core/camel-core/src/main/java/org/apache/camel/reifier/UnmarshalReifier.java
index 62a6602..dca3dbe 100644
--- a/core/camel-core/src/main/java/org/apache/camel/reifier/UnmarshalReifier.java
+++ b/core/camel-core/src/main/java/org/apache/camel/reifier/UnmarshalReifier.java
@@ -32,7 +32,7 @@ class UnmarshalReifier extends ProcessorReifier<UnmarshalDefinition> {
 
     @Override
     public Processor createProcessor(RouteContext routeContext) {
-        DataFormat dataFormat = DataFormatDefinition.getDataFormat(routeContext, definition.getDataFormatType(), null);
+        DataFormat dataFormat = DataFormatDefinition.getDataFormat(routeContext.getCamelContext(), definition.getDataFormatType(), null);
         return new UnmarshalProcessor(dataFormat);
     }
 }
diff --git a/core/camel-core/src/test/java/org/apache/camel/impl/transformer/TransformerContractTest.java b/core/camel-core/src/test/java/org/apache/camel/impl/transformer/TransformerContractTest.java
index e79b19b..adc3417 100644
--- a/core/camel-core/src/test/java/org/apache/camel/impl/transformer/TransformerContractTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/impl/transformer/TransformerContractTest.java
@@ -23,6 +23,7 @@ import java.io.OutputStream;
 import java.io.OutputStreamWriter;
 import java.io.PrintWriter;
 
+import org.apache.camel.CamelContext;
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.Converter;
 import org.apache.camel.Exchange;
@@ -33,7 +34,6 @@ import org.apache.camel.model.DataFormatDefinition;
 import org.apache.camel.spi.DataFormat;
 import org.apache.camel.spi.DataType;
 import org.apache.camel.spi.DataTypeAware;
-import org.apache.camel.spi.RouteContext;
 import org.junit.Test;
 
 public class TransformerContractTest extends ContextTestSupport {
@@ -142,12 +142,12 @@ public class TransformerContractTest extends ContextTestSupport {
     }
 
     public static class MyDataFormatDefinition extends DataFormatDefinition {
-        public static DataFormat getDataFormat(RouteContext routeContext, DataFormatDefinition type, String ref) {
-            return new MyDataFormatDefinition().createDataFormat();
-        }
-        public DataFormat getDataFormat(RouteContext routeContext) {
+
+        @Override
+        public DataFormat getDataFormat(CamelContext camelContext) {
             return createDataFormat();
         }
+
         private DataFormat createDataFormat() {
             return new DataFormat() {
                 @Override
@@ -157,6 +157,7 @@ public class TransformerContractTest extends ContextTestSupport {
                     pw.print("<fooResponse/>");
                     pw.close();
                 }
+
                 @Override
                 public Object unmarshal(Exchange exchange, InputStream stream) throws Exception {
                     BufferedReader br = new BufferedReader(new InputStreamReader(stream));
@@ -168,5 +169,6 @@ public class TransformerContractTest extends ContextTestSupport {
     }
 
     public static class A { }
+
     public static class B { }
 }
diff --git a/core/camel-core/src/test/java/org/apache/camel/impl/transformer/TransformerRouteTest.java b/core/camel-core/src/test/java/org/apache/camel/impl/transformer/TransformerRouteTest.java
index 2ca4d3d..1a2148b 100644
--- a/core/camel-core/src/test/java/org/apache/camel/impl/transformer/TransformerRouteTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/impl/transformer/TransformerRouteTest.java
@@ -23,6 +23,7 @@ import java.io.OutputStream;
 import java.util.Map;
 
 import org.apache.camel.AsyncCallback;
+import org.apache.camel.CamelContext;
 import org.apache.camel.Consumer;
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.Converter;
@@ -39,7 +40,6 @@ import org.apache.camel.model.DataFormatDefinition;
 import org.apache.camel.spi.DataFormat;
 import org.apache.camel.spi.DataType;
 import org.apache.camel.spi.DataTypeAware;
-import org.apache.camel.spi.RouteContext;
 import org.apache.camel.spi.Transformer;
 import org.apache.camel.support.DefaultAsyncProducer;
 import org.apache.camel.support.DefaultComponent;
@@ -249,12 +249,12 @@ public class TransformerRouteTest extends ContextTestSupport {
     }
 
     public static class MyJsonDataFormatDefinition extends DataFormatDefinition {
-        public static DataFormat getDataFormat(RouteContext routeContext, DataFormatDefinition type, String ref) {
-            return new MyJsonDataFormatDefinition().createDataFormat();
-        }
-        public DataFormat getDataFormat(RouteContext routeContext) {
+
+        @Override
+        public DataFormat getDataFormat(CamelContext camelContext) {
             return createDataFormat();
         }
+
         private DataFormat createDataFormat() {
             return new DataFormat() {
                 @Override
@@ -263,6 +263,7 @@ public class TransformerRouteTest extends ContextTestSupport {
                     LOG.info("DataFormat: XOrderResponse -> JSON");
                     stream.write("{name:XOrderResponse}".getBytes());
                 }
+
                 @Override
                 public Object unmarshal(Exchange exchange, InputStream stream) throws Exception {
                     BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
@@ -285,7 +286,6 @@ public class TransformerRouteTest extends ContextTestSupport {
         protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception {
             return new MyXmlEndpoint();
         }
-        
     }
     
     public static class MyXmlEndpoint extends DefaultEndpoint {