From 98db562bfa2ac72bf8948edd5eb039795760b871 Mon Sep 17 00:00:00 2001 From: Claus Ibsen Date: Sun, 21 Apr 2019 10:46:37 +0200 Subject: [PATCH] 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 ++--- .../camel/impl/AbstractCamelContext.java | 11 +++++++ .../transformer/DataFormatTransformer.java | 13 +++++---- .../camel/model/DataFormatDefinition.java | 29 +++++++++---------- .../apache/camel/model/MarshalDefinition.java | 6 ++++ .../camel/model/UnmarshalDefinition.java | 6 ++++ .../model/dataformat/BindyDataFormat.java | 7 +++-- .../model/dataformat/BoonDataFormat.java | 6 ++-- .../model/dataformat/CryptoDataFormat.java | 16 +++++----- .../model/dataformat/CustomDataFormat.java | 6 ++-- .../model/dataformat/FlatpackDataFormat.java | 8 ++--- .../model/dataformat/GzipDataFormat.java | 3 +- .../dataformat/JacksonXMLDataFormat.java | 8 ++--- .../model/dataformat/JibxDataFormat.java | 6 ++-- .../model/dataformat/JsonDataFormat.java | 18 ++++++------ .../dataformat/SerializationDataFormat.java | 3 +- .../model/dataformat/StringDataFormat.java | 3 +- .../dataformat/TidyMarkupDataFormat.java | 6 ++-- .../model/dataformat/XStreamDataFormat.java | 8 ++--- .../model/dataformat/YAMLDataFormat.java | 6 ++-- .../camel/model/dataformat/ZipDataFormat.java | 3 +- .../apache/camel/reifier/MarshalReifier.java | 2 +- .../camel/reifier/UnmarshalReifier.java | 2 +- .../transformer/TransformerContractTest.java | 12 ++++---- .../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 30d3729756b5b..4a33dcf68fc26 100644 --- a/components/camel-dozer/pom.xml +++ b/components/camel-dozer/pom.xml @@ -40,7 +40,7 @@ org.apache.camel - camel-core + camel-support com.github.dozermapper 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 77fc3e954e374..6038d75f7c826 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 @@ 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 @@ private synchronized UnmarshalProcessor resolveUnmarshaller( 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 @@ private synchronized MarshalProcessor resolveMarshaller( 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 2ea5ab72c3ee1..fcb874338a81e 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 @@ protected void doStartCamel() throws Exception { } // 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 @@ protected void doStartCamel() throws Exception { propertiesComponent = existing; } + // eager lookup data formats and bind to registry so the dataformats can be looked up and used + for (Map.Entry 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 b537cac3de4a0..7e9b409026daa 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 void transform(Message message, DataType from, DataType to) throws Except } } - /** - * 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 6916e8defc09c..7a1a3f1e1e7ae 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 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 @@ protected DataFormatDefinition(String dataFormatName) { /** * 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 : "") + "' could not be created. " @@ -131,10 +128,10 @@ public DataFormat getDataFormat(RouteContext routeContext) { /** * 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 f5dc02f2aca02..6fd32332cc6c3 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 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.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 { @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 { @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 444870adaf8ab..1d6117fd67da8 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 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.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 @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 @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 3962f727fcb02..681b1adc62ddb 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 void setUnwrapSingleInstance(Boolean unwrapSingleInstance) { 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 @@ protected DataFormat createDataFormat(RouteContext routeContext) { 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 6b43e49848fb7..85e56efbaea6c 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 void setUseList(boolean useList) { } @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 1a143a2af4e7f..e9a411e1cd737 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 CryptoDataFormat() { } @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 d6039c9ca8366..a321e3d7c78db 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.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 CustomDataFormat(String ref) { } @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 7e20d56f5a87f..6e1ddf5e4e698 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 void setParserFactoryRef(String parserFactoryRef) { } @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 a8483f5fcf02c..1f627373ee007 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 @@ 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 GzipDataFormat() { } @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 e48a99f06d469..7442a91a42b11 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 String getDataFormatName() { } @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 6e97dbba01b53..0bc157c7a1eda 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 void setBindingName(String bindingName) { } @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 f8ebd20dd0cdc..744c51ebe8611 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 String getDataFormatName() { } @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 fa33b95acf166..5eeb40d26e970 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 @@ 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 SerializationDataFormat() { } @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 ad28a1fd64c15..ce34d48ce68a0 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.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 StringDataFormat() { } @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 08991ec7cea7f..b165a00dd7401 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 void setOmitXmlDeclaration(Boolean omitXmlDeclaration) { } @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 47bae70b2d91e..509bc06cf94c9 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 void setPermissions(Class... type) { } @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 88bebec85f49c..750bbaacd0e19 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 void setTypeFilters(List typeFilters) { } @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 ece76551e840e..9ffe245d70180 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.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 ZipDataFormat(int compressionLevel) { } @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 0699d3fb6484a..e749dcbfc0d20 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 { @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 62a6602c1d19e..dca3dbe5531d1 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 { @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 e79b19b3b5a3d..adc3417fb3a34 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.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.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 A toA(String in) { } 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 void marshal(Exchange exchange, Object graph, OutputStream stream) throws pw.print(""); pw.close(); } + @Override public Object unmarshal(Exchange exchange, InputStream stream) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(stream)); @@ -168,5 +169,6 @@ public Object unmarshal(Exchange exchange, InputStream stream) throws Exception } 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 2ca4d3d58c3a8..1a2148b48e8e3 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.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.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 AOrderResponse toAOrderResponse(XOrderResponse xres) { } 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 void marshal(Exchange exchange, Object graph, OutputStream stream) throws 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 static class MyXmlComponent extends DefaultComponent { protected Endpoint createEndpoint(String uri, String remaining, Map parameters) throws Exception { return new MyXmlEndpoint(); } - } public static class MyXmlEndpoint extends DefaultEndpoint {