This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new 9967be01033 CAMEL-20890: camel-core-model: Copy definitions to make
deep copy for route templates to avoid side-effects when the template are
reused to create multiple routes. (#14602)
9967be01033 is described below
commit 9967be010339c93208fc59adf5ea2923d0cb91fe
Author: Claus Ibsen <[email protected]>
AuthorDate: Wed Jun 19 19:47:07 2024 +0200
CAMEL-20890: camel-core-model: Copy definitions to make deep copy for route
templates to avoid side-effects when the template are reused to create multiple
routes. (#14602)
---
.../org/apache/camel/model/ChoiceDefinition.java | 13 +-------
.../org/apache/camel/model/CopyableDefinition.java | 4 +--
.../apache/camel/model/DataFormatDefinition.java | 4 +--
.../apache/camel/model/LoadBalancerDefinition.java | 4 +--
.../apache/camel/model/OnFallbackDefinition.java | 2 +-
.../org/apache/camel/model/OutputDefinition.java | 2 +-
.../apache/camel/model/OutputExpressionNode.java | 2 +-
.../apache/camel/model/ProcessorDefinition.java | 2 +-
.../camel/model/ProcessorDefinitionHelper.java | 19 ++++++++---
.../camel/model/RouteTemplateDefinition.java | 2 +-
.../org/apache/camel/model/SagaDefinition.java | 13 +-------
.../apache/camel/model/SetHeadersDefinition.java | 12 +------
.../apache/camel/model/SetVariablesDefinition.java | 12 +------
.../java/org/apache/camel/model/TryDefinition.java | 13 +-------
.../camel/model/dataformat/ASN1DataFormat.java | 12 +++++++
.../camel/model/dataformat/AvroDataFormat.java | 33 +++++++++++++++++++
.../camel/model/dataformat/BarcodeDataFormat.java | 13 ++++++++
.../camel/model/dataformat/Base64DataFormat.java | 12 +++++++
.../camel/model/dataformat/BeanioDataFormat.java | 17 ++++++++++
.../camel/model/dataformat/BindyDataFormat.java | 15 +++++++++
.../camel/model/dataformat/CBORDataFormat.java | 21 ++++++++++++
.../camel/model/dataformat/CryptoDataFormat.java | 18 ++++++++++
.../camel/model/dataformat/CsvDataFormat.java | 38 ++++++++++++++++++++++
.../camel/model/dataformat/CustomDataFormat.java | 10 ++++++
.../model/dataformat/DataFormatsDefinition.java | 16 ++++++++-
.../camel/model/dataformat/FhirDataformat.java | 23 +++++++++++++
.../camel/model/dataformat/FhirJsonDataFormat.java | 9 +++++
.../camel/model/dataformat/FhirXmlDataFormat.java | 9 +++++
.../camel/model/dataformat/FlatpackDataFormat.java | 17 ++++++++++
.../camel/model/dataformat/GrokDataFormat.java | 13 ++++++++
.../model/dataformat/GzipDeflaterDataFormat.java | 9 +++++
.../camel/model/dataformat/HL7DataFormat.java | 11 +++++++
.../camel/model/dataformat/IcalDataFormat.java | 10 ++++++
.../model/dataformat/JacksonXMLDataFormat.java | 28 ++++++++++++++++
.../camel/model/dataformat/JaxbDataFormat.java | 29 +++++++++++++++++
.../camel/model/dataformat/JsonApiDataFormat.java | 13 ++++++++
.../camel/model/dataformat/JsonDataFormat.java | 35 ++++++++++++++++++++
.../camel/model/dataformat/LZFDataFormat.java | 10 ++++++
.../model/dataformat/MimeMultipartDataFormat.java | 14 ++++++++
.../camel/model/dataformat/PGPDataFormat.java | 24 ++++++++++++++
.../model/dataformat/ParquetAvroDataFormat.java | 13 ++++++++
.../camel/model/dataformat/ProtobufDataFormat.java | 34 +++++++++++++++++++
.../camel/model/dataformat/RssDataFormat.java | 9 +++++
.../camel/model/dataformat/SoapDataFormat.java | 16 +++++++++
.../camel/model/dataformat/SwiftMtDataFormat.java | 10 ++++++
.../camel/model/dataformat/SwiftMxDataFormat.java | 15 +++++++++
.../camel/model/dataformat/SyslogDataFormat.java | 9 +++++
.../camel/model/dataformat/TarFileDataFormat.java | 13 ++++++++
.../camel/model/dataformat/ThriftDataFormat.java | 13 ++++++++
.../model/dataformat/TidyMarkupDataFormat.java | 12 +++++++
.../dataformat/UniVocityAbstractDataFormat.java | 18 ++++++++++
.../model/dataformat/UniVocityCsvDataFormat.java | 13 ++++++++
.../model/dataformat/UniVocityFixedDataFormat.java | 12 +++++++
.../camel/model/dataformat/UniVocityHeader.java | 16 ++++++++-
.../model/dataformat/UniVocityTsvDataFormat.java | 10 ++++++
.../model/dataformat/XMLSecurityDataFormat.java | 24 ++++++++++++++
.../camel/model/dataformat/YAMLDataFormat.java | 23 +++++++++++++
.../model/dataformat/YAMLTypeFilterDefinition.java | 16 ++++++++-
.../model/dataformat/ZipDeflaterDataFormat.java | 10 ++++++
.../camel/model/dataformat/ZipFileDataFormat.java | 13 ++++++++
.../model/language/NamespaceAwareExpression.java | 15 ++-------
.../loadbalancer/CustomLoadBalancerDefinition.java | 1 +
.../FailoverLoadBalancerDefinition.java | 1 +
.../loadbalancer/RandomLoadBalancerDefinition.java | 1 +
.../RoundRobinLoadBalancerDefinition.java | 1 +
.../loadbalancer/StickyLoadBalancerDefinition.java | 1 +
.../loadbalancer/TopicLoadBalancerDefinition.java | 1 +
.../WeightedLoadBalancerDefinition.java | 1 +
.../transformer/CustomTransformerDefinition.java | 14 ++++++++
.../DataFormatTransformerDefinition.java | 13 ++++++++
.../transformer/EndpointTransformerDefinition.java | 14 ++++++++
.../transformer/LoadTransformerDefinition.java | 15 ++++++++-
.../model/transformer/TransformerDefinition.java | 13 +++++++-
.../model/transformer/TransformersDefinition.java | 17 ++++++++--
.../model/validator/CustomValidatorDefinition.java | 14 ++++++++
.../validator/EndpointValidatorDefinition.java | 14 ++++++++
.../validator/PredicateValidatorDefinition.java | 13 ++++++++
.../camel/model/validator/ValidatorDefinition.java | 10 +++++-
.../model/validator/ValidatorsDefinition.java | 8 +++++
.../camel/model/RouteTemplateDefinitionTest.java | 3 +-
80 files changed, 935 insertions(+), 97 deletions(-)
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/ChoiceDefinition.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/ChoiceDefinition.java
index e752d246558..69192d540a2 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/ChoiceDefinition.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/ChoiceDefinition.java
@@ -64,7 +64,7 @@ public class ChoiceDefinition extends
ProcessorDefinition<ChoiceDefinition> impl
protected ChoiceDefinition(ChoiceDefinition source) {
super(source);
- this.whenClauses = copyWhenClauses(source);
+ this.whenClauses =
ProcessorDefinitionHelper.deepCopyDefinitions(source.whenClauses);
this.otherwise = source.otherwise != null ?
source.otherwise.copyDefinition() : null;
this.precondition = source.precondition;
}
@@ -331,15 +331,4 @@ public class ChoiceDefinition extends
ProcessorDefinition<ChoiceDefinition> impl
}
}
- private static List<WhenDefinition> copyWhenClauses(ChoiceDefinition
source) {
- if (source.whenClauses != null) {
- var answer = new ArrayList<WhenDefinition>();
- for (var def : source.whenClauses) {
- answer.add(def.copyDefinition());
- }
- return answer;
- }
- return null;
- }
-
}
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/CopyableDefinition.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/CopyableDefinition.java
index cfd714aac43..262b8c1f396 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/CopyableDefinition.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/CopyableDefinition.java
@@ -20,10 +20,10 @@ package org.apache.camel.model;
* This interface is used to copy {@link ProcessorDefinition
ProcessorDefinitions} during instantiation of route
* templates.
*/
-public interface CopyableDefinition {
+public interface CopyableDefinition<T> {
/**
* Makes a copy of this definition.
*/
- ProcessorDefinition<?> copyDefinition();
+ T copyDefinition();
}
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/DataFormatDefinition.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/DataFormatDefinition.java
index 7594bab7006..503de71cf7e 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/DataFormatDefinition.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/DataFormatDefinition.java
@@ -30,7 +30,7 @@ import org.apache.camel.spi.Metadata;
@Metadata(label = "dataformat,transformation")
@XmlType(name = "dataFormat")
@XmlAccessorType(XmlAccessType.FIELD)
-public class DataFormatDefinition extends IdentifiedType {
+public class DataFormatDefinition extends IdentifiedType implements
CopyableDefinition<DataFormatDefinition> {
@XmlTransient
private DataFormat dataFormat;
@@ -50,7 +50,7 @@ public class DataFormatDefinition extends IdentifiedType {
}
public DataFormatDefinition copyDefinition() {
- return new DataFormatDefinition(this);
+ throw new UnsupportedOperationException("Should be implemented in
child classes");
}
protected DataFormatDefinition(String dataFormatName) {
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/LoadBalancerDefinition.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/LoadBalancerDefinition.java
index 85bd68e9b84..4fb0616b22b 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/LoadBalancerDefinition.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/LoadBalancerDefinition.java
@@ -21,7 +21,7 @@ import jakarta.xml.bind.annotation.XmlTransient;
/**
* Balances message processing among a number of nodes
*/
-public abstract class LoadBalancerDefinition extends IdentifiedType {
+public abstract class LoadBalancerDefinition extends IdentifiedType implements
CopyableDefinition<LoadBalancerDefinition> {
@XmlTransient
private String loadBalancerTypeName;
@@ -37,8 +37,6 @@ public abstract class LoadBalancerDefinition extends
IdentifiedType {
this.loadBalancerTypeName = loadBalancerTypeName;
}
- protected abstract LoadBalancerDefinition copyDefinition();
-
/**
* Maximum number of outputs, as some load balancers only support 1
processor
*/
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/OnFallbackDefinition.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/OnFallbackDefinition.java
index 7b6ad38c3b6..6bd6bd06226 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/OnFallbackDefinition.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/OnFallbackDefinition.java
@@ -48,7 +48,7 @@ public class OnFallbackDefinition extends
ProcessorDefinition<OnFallbackDefiniti
protected OnFallbackDefinition(OnFallbackDefinition source) {
super(source);
this.fallbackViaNetwork = source.fallbackViaNetwork;
- this.outputs =
ProcessorDefinitionHelper.copyDefinitions(source.outputs);
+ this.outputs =
ProcessorDefinitionHelper.deepCopyDefinitions(source.outputs);
}
@Override
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/OutputDefinition.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/OutputDefinition.java
index 5634206975d..57d85d7b51e 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/OutputDefinition.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/OutputDefinition.java
@@ -42,7 +42,7 @@ public class OutputDefinition<Type extends
ProcessorDefinition<Type>> extends Pr
protected OutputDefinition(OutputDefinition<?> source) {
super(source);
- this.outputs =
ProcessorDefinitionHelper.copyDefinitions(source.outputs);
+ this.outputs =
ProcessorDefinitionHelper.deepCopyDefinitions(source.outputs);
}
@Override
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/OutputExpressionNode.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/OutputExpressionNode.java
index e03d7d8b5b2..cdd438ed548 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/OutputExpressionNode.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/OutputExpressionNode.java
@@ -43,7 +43,7 @@ public abstract class OutputExpressionNode extends
ExpressionNode implements Out
public OutputExpressionNode(OutputExpressionNode source) {
super(source);
- this.outputs =
ProcessorDefinitionHelper.copyDefinitions(source.outputs);
+ this.outputs =
ProcessorDefinitionHelper.deepCopyDefinitions(source.outputs);
}
public OutputExpressionNode(ExpressionDefinition expression) {
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/ProcessorDefinition.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/ProcessorDefinition.java
index fa0371e16fa..391b2b6ea66 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/ProcessorDefinition.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/ProcessorDefinition.java
@@ -78,7 +78,7 @@ import org.slf4j.Logger;
@XmlAccessorType(XmlAccessType.FIELD)
@SuppressWarnings("rawtypes")
public abstract class ProcessorDefinition<Type extends
ProcessorDefinition<Type>> extends OptionalIdentifiedDefinition<Type>
- implements Block, CopyableDefinition {
+ implements Block, CopyableDefinition<ProcessorDefinition> {
@XmlTransient
private static final AtomicInteger COUNTER = new AtomicInteger();
@XmlAttribute
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/ProcessorDefinitionHelper.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/ProcessorDefinitionHelper.java
index e5e34da8081..c48fe079307 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/ProcessorDefinitionHelper.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/ProcessorDefinitionHelper.java
@@ -461,10 +461,21 @@ public final class ProcessorDefinitionHelper {
return null;
}
- public static List<ProcessorDefinition<?>>
copyDefinitions(List<ProcessorDefinition<?>> outputs) {
- var answer = new ArrayList<ProcessorDefinition<?>>();
- for (var def : outputs) {
- answer.add(def.copyDefinition());
+ /**
+ * Performs a depp copy of the list of model classes
+ *
+ * @param models list of model classes
+ * @return a new list containing a deep copy of the model classes
+ */
+ public static List deepCopyDefinitions(List models) {
+ var answer = new ArrayList();
+ if (models != null) {
+ for (var def : models) {
+ if (def instanceof CopyableDefinition<?> copy) {
+ def = copy.copyDefinition();
+ }
+ answer.add(def);
+ }
}
return answer;
}
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/RouteTemplateDefinition.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/RouteTemplateDefinition.java
index 450a1845fdd..03618b3ea38 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/RouteTemplateDefinition.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/RouteTemplateDefinition.java
@@ -418,7 +418,7 @@ public class RouteTemplateDefinition extends
OptionalIdentifiedDefinition<RouteT
copy.setLogMask(route.getLogMask());
copy.setMessageHistory(route.getMessageHistory());
copy.setOutputType(route.getOutputType());
-
copy.setOutputs(ProcessorDefinitionHelper.copyDefinitions(route.getOutputs()));
+
copy.setOutputs(ProcessorDefinitionHelper.deepCopyDefinitions(route.getOutputs()));
copy.setRoutePolicies(shallowCopy(route.getRoutePolicies()));
copy.setRoutePolicyRef(route.getRoutePolicyRef());
copy.setRouteProperties(shallowCopy(route.getRouteProperties()));
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/SagaDefinition.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/SagaDefinition.java
index fc5119e8a72..bf97caa3797 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/SagaDefinition.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/SagaDefinition.java
@@ -79,7 +79,7 @@ public class SagaDefinition extends
OutputDefinition<SagaDefinition> {
this.timeout = source.timeout;
this.compensation = source.compensation != null ?
source.compensation.copyDefinition() : null;
this.completion = source.completion != null ?
source.completion.copyDefinition() : null;
- this.options = copyOptions(source);
+ this.options =
ProcessorDefinitionHelper.deepCopyDefinitions(source.options);
}
@Override
@@ -313,15 +313,4 @@ public class SagaDefinition extends
OutputDefinition<SagaDefinition> {
builder.append(key).append(':').append(value);
}
- private static List<PropertyExpressionDefinition>
copyOptions(SagaDefinition source) {
- if (source.options != null) {
- var answer = new ArrayList<PropertyExpressionDefinition>();
- for (var def : source.options) {
- answer.add(def.copyDefinition());
- }
- return answer;
- }
- return null;
- }
-
}
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/SetHeadersDefinition.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/SetHeadersDefinition.java
index a7ee80ba259..e86d1fa23a0 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/SetHeadersDefinition.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/SetHeadersDefinition.java
@@ -51,7 +51,7 @@ public class SetHeadersDefinition extends
ProcessorDefinition<SetHeadersDefiniti
protected SetHeadersDefinition(SetHeadersDefinition source) {
super(source);
- this.headers = copyHeaders(source);
+ this.headers =
ProcessorDefinitionHelper.deepCopyDefinitions(source.headers);
}
@Override
@@ -126,14 +126,4 @@ public class SetHeadersDefinition extends
ProcessorDefinition<SetHeadersDefiniti
return Collections.emptyList();
}
- private static List<SetHeaderDefinition> copyHeaders(SetHeadersDefinition
source) {
- var answer = new ArrayList<SetHeaderDefinition>();
- if (source.headers != null) {
- for (var def : source.headers) {
- answer.add(def.copyDefinition());
- }
- }
- return answer;
- }
-
}
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/SetVariablesDefinition.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/SetVariablesDefinition.java
index f609e2a9142..e52017c1924 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/SetVariablesDefinition.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/SetVariablesDefinition.java
@@ -49,7 +49,7 @@ public class SetVariablesDefinition extends
ProcessorDefinition<SetVariablesDefi
protected SetVariablesDefinition(SetVariablesDefinition source) {
super(source);
- this.variables = copyVariables(source);
+ this.variables =
ProcessorDefinitionHelper.deepCopyDefinitions(source.variables);
}
@Override
@@ -124,14 +124,4 @@ public class SetVariablesDefinition extends
ProcessorDefinition<SetVariablesDefi
return Collections.emptyList();
}
- private static List<SetVariableDefinition>
copyVariables(SetVariablesDefinition source) {
- var answer = new ArrayList<SetVariableDefinition>();
- if (source.variables != null) {
- for (var def : source.variables) {
- answer.add(def.copyDefinition());
- }
- }
- return answer;
- }
-
}
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/TryDefinition.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/TryDefinition.java
index 5701f436b7e..f39217f695c 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/TryDefinition.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/TryDefinition.java
@@ -58,7 +58,7 @@ public class TryDefinition extends
OutputDefinition<TryDefinition> {
protected TryDefinition(TryDefinition source) {
super(source);
- this.catchClauses = copyCatchClauses(source);
+ this.catchClauses =
ProcessorDefinitionHelper.deepCopyDefinitions(source.catchClauses);
this.finallyClause = source.finallyClause != null ?
source.finallyClause.copyDefinition() : null;
}
@@ -255,15 +255,4 @@ public class TryDefinition extends
OutputDefinition<TryDefinition> {
}
}
- private static List<CatchDefinition> copyCatchClauses(TryDefinition
source) {
- if (source.catchClauses != null) {
- var answer = new ArrayList<CatchDefinition>();
- for (var def : source.catchClauses) {
- answer.add(def.copyDefinition());
- }
- return answer;
- }
- return null;
- }
-
}
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/ASN1DataFormat.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/ASN1DataFormat.java
index 140470b401d..9f81a5d9313 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/ASN1DataFormat.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/ASN1DataFormat.java
@@ -47,6 +47,13 @@ public class ASN1DataFormat extends DataFormatDefinition {
super("asn1");
}
+ protected ASN1DataFormat(ASN1DataFormat source) {
+ super(source);
+ this.unmarshalType = source.unmarshalType;
+ this.unmarshalTypeName = source.unmarshalTypeName;
+ this.usingIterator = source.usingIterator;
+ }
+
public ASN1DataFormat(Boolean usingIterator) {
this();
setUsingIterator(usingIterator != null ? usingIterator.toString() :
null);
@@ -71,6 +78,11 @@ public class ASN1DataFormat extends DataFormatDefinition {
this.unmarshalType = builder.unmarshalType;
}
+ @Override
+ public ASN1DataFormat copyDefinition() {
+ return new ASN1DataFormat(this);
+ }
+
public String getUsingIterator() {
return usingIterator;
}
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/AvroDataFormat.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/AvroDataFormat.java
index 00463544127..7fb6c262509 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/AvroDataFormat.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/AvroDataFormat.java
@@ -104,6 +104,34 @@ public class AvroDataFormat extends DataFormatDefinition {
super("avro");
}
+ protected AvroDataFormat(AvroDataFormat source) {
+ super(source);
+ this.unmarshalType = source.unmarshalType;
+ this.jsonView = source.jsonView;
+ this.collectionType = source.collectionType;
+ this.schema = source.schema;
+ this.instanceClassName = source.instanceClassName;
+ this.library = source.library;
+ this.objectMapper = source.objectMapper;
+ this.useDefaultObjectMapper = source.useDefaultObjectMapper;
+ this.unmarshalTypeName = source.unmarshalTypeName;
+ this.jsonViewTypeName = source.jsonViewTypeName;
+ this.include = source.include;
+ this.allowJmsType = source.allowJmsType;
+ this.collectionTypeName = source.collectionTypeName;
+ this.useList = source.useList;
+ this.moduleClassNames = source.moduleClassNames;
+ this.moduleRefs = source.moduleRefs;
+ this.enableFeatures = source.enableFeatures;
+ this.disableFeatures = source.disableFeatures;
+ this.allowUnmarshallType = source.allowUnmarshallType;
+ this.timezone = source.timezone;
+ this.autoDiscoverObjectMapper = source.autoDiscoverObjectMapper;
+ this.contentTypeHeader = source.contentTypeHeader;
+ this.schemaResolver = source.schemaResolver;
+ this.autoDiscoverSchemaResolver = source.autoDiscoverSchemaResolver;
+ }
+
public AvroDataFormat(AvroLibrary library) {
this();
setLibrary(library);
@@ -142,6 +170,11 @@ public class AvroDataFormat extends DataFormatDefinition {
this.autoDiscoverSchemaResolver = builder.autoDiscoverSchemaResolver;
}
+ @Override
+ public AvroDataFormat copyDefinition() {
+ return new AvroDataFormat(this);
+ }
+
public String getInstanceClassName() {
return instanceClassName;
}
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/BarcodeDataFormat.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/BarcodeDataFormat.java
index 20bc655104e..288338d918b 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/BarcodeDataFormat.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/BarcodeDataFormat.java
@@ -49,6 +49,14 @@ public class BarcodeDataFormat extends DataFormatDefinition {
super("barcode");
}
+ protected BarcodeDataFormat(BarcodeDataFormat source) {
+ super(source);
+ this.barcodeFormat = source.barcodeFormat;
+ this.imageType = source.imageType;
+ this.width = source.width;
+ this.height = source.height;
+ }
+
private BarcodeDataFormat(Builder builder) {
this();
this.barcodeFormat = builder.barcodeFormat;
@@ -57,6 +65,11 @@ public class BarcodeDataFormat extends DataFormatDefinition {
this.height = builder.height;
}
+ @Override
+ public BarcodeDataFormat copyDefinition() {
+ return new BarcodeDataFormat(this);
+ }
+
public String getWidth() {
return width;
}
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/Base64DataFormat.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/Base64DataFormat.java
index 2f994ba7f06..b7cc8572967 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/Base64DataFormat.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/Base64DataFormat.java
@@ -48,6 +48,13 @@ public class Base64DataFormat extends DataFormatDefinition {
super("base64");
}
+ protected Base64DataFormat(Base64DataFormat source) {
+ super(source);
+ this.lineLength = source.lineLength;
+ this.lineSeparator = source.lineSeparator;
+ this.urlSafe = source.urlSafe;
+ }
+
private Base64DataFormat(Builder builder) {
this();
this.lineLength = builder.lineLength;
@@ -55,6 +62,11 @@ public class Base64DataFormat extends DataFormatDefinition {
this.urlSafe = builder.urlSafe;
}
+ @Override
+ public Base64DataFormat copyDefinition() {
+ return new Base64DataFormat(this);
+ }
+
public String getLineLength() {
return lineLength;
}
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/BeanioDataFormat.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/BeanioDataFormat.java
index 0b175a8b50f..d113ba00429 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/BeanioDataFormat.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/BeanioDataFormat.java
@@ -61,6 +61,18 @@ public class BeanioDataFormat extends DataFormatDefinition {
super("beanio");
}
+ protected BeanioDataFormat(BeanioDataFormat source) {
+ super(source);
+ this.mapping = source.mapping;
+ this.streamName = source.streamName;
+ this.ignoreUnidentifiedRecords = source.ignoreUnidentifiedRecords;
+ this.ignoreUnexpectedRecords = source.ignoreUnexpectedRecords;
+ this.ignoreInvalidRecords = source.ignoreInvalidRecords;
+ this.encoding = source.encoding;
+ this.beanReaderErrorHandlerType = source.beanReaderErrorHandlerType;
+ this.unmarshalSingleObject = source.unmarshalSingleObject;
+ }
+
private BeanioDataFormat(BeanioDataFormat.Builder builder) {
this();
this.mapping = builder.mapping;
@@ -73,6 +85,11 @@ public class BeanioDataFormat extends DataFormatDefinition {
this.unmarshalSingleObject = builder.unmarshalSingleObject;
}
+ @Override
+ public BeanioDataFormat copyDefinition() {
+ return new BeanioDataFormat(this);
+ }
+
public String getMapping() {
return mapping;
}
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/BindyDataFormat.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/BindyDataFormat.java
index 5d540686d69..daf486714c0 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/BindyDataFormat.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/BindyDataFormat.java
@@ -58,6 +58,16 @@ public class BindyDataFormat extends DataFormatDefinition {
super("bindy");
}
+ protected BindyDataFormat(BindyDataFormat source) {
+ super(source);
+ this.classType = source.classType;
+ this.type = source.type;
+ this.classTypeAsString = source.classTypeAsString;
+ this.allowEmptyStream = source.allowEmptyStream;
+ this.unwrapSingleInstance = source.unwrapSingleInstance;
+ this.locale = source.locale;
+ }
+
private BindyDataFormat(Builder builder) {
this();
this.classType = builder.classType;
@@ -68,6 +78,11 @@ public class BindyDataFormat extends DataFormatDefinition {
this.locale = builder.locale;
}
+ @Override
+ public BindyDataFormat copyDefinition() {
+ return new BindyDataFormat(this);
+ }
+
public String getType() {
return type;
}
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/CBORDataFormat.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/CBORDataFormat.java
index 0df047503f5..575ed2dcdc7 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/CBORDataFormat.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/CBORDataFormat.java
@@ -71,6 +71,22 @@ public class CBORDataFormat extends DataFormatDefinition {
super("cbor");
}
+ protected CBORDataFormat(CBORDataFormat source) {
+ super(source);
+ this.collectionType = source.collectionType;
+ this.unmarshalType = source.unmarshalType;
+ this.objectMapper = source.objectMapper;
+ this.useDefaultObjectMapper = source.useDefaultObjectMapper;
+ this.unmarshalTypeName = source.unmarshalTypeName;
+ this.collectionTypeName = source.collectionTypeName;
+ this.useList = source.useList;
+ this.allowUnmarshallType = source.allowUnmarshallType;
+ this.prettyPrint = source.prettyPrint;
+ this.allowJmsType = source.allowJmsType;
+ this.enableFeatures = source.enableFeatures;
+ this.disableFeatures = source.disableFeatures;
+ }
+
private CBORDataFormat(Builder builder) {
this();
this.collectionType = builder.collectionType;
@@ -87,6 +103,11 @@ public class CBORDataFormat extends DataFormatDefinition {
this.disableFeatures = builder.disableFeatures;
}
+ @Override
+ public CBORDataFormat copyDefinition() {
+ return new CBORDataFormat(this);
+ }
+
public String getObjectMapper() {
return objectMapper;
}
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/CryptoDataFormat.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/CryptoDataFormat.java
index fe645da8092..146222aa961 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/CryptoDataFormat.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/CryptoDataFormat.java
@@ -64,6 +64,19 @@ public class CryptoDataFormat extends DataFormatDefinition {
super("crypto");
}
+ protected CryptoDataFormat(CryptoDataFormat source) {
+ super(source);
+ this.algorithm = source.algorithm;
+ this.keyRef = source.keyRef;
+ this.cryptoProvider = source.cryptoProvider;
+ this.initVectorRef = source.initVectorRef;
+ this.algorithmParameterRef = source.algorithmParameterRef;
+ this.bufferSize = source.bufferSize;
+ this.macAlgorithm = source.macAlgorithm;
+ this.shouldAppendHMAC = source.shouldAppendHMAC;
+ this.inline = source.inline;
+ }
+
private CryptoDataFormat(Builder builder) {
this();
this.algorithm = builder.algorithm;
@@ -77,6 +90,11 @@ public class CryptoDataFormat extends DataFormatDefinition {
this.inline = builder.inline;
}
+ @Override
+ public CryptoDataFormat copyDefinition() {
+ return new CryptoDataFormat(this);
+ }
+
public String getAlgorithm() {
return algorithm;
}
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/CsvDataFormat.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/CsvDataFormat.java
index 5272b99201f..be77d1fe53f 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/CsvDataFormat.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/CsvDataFormat.java
@@ -128,6 +128,39 @@ public class CsvDataFormat extends DataFormatDefinition {
super("csv");
}
+ protected CsvDataFormat(CsvDataFormat source) {
+ super(source);
+ this.formatRef = source.formatRef;
+ this.formatName = source.formatName;
+ this.commentMarkerDisabled = source.commentMarkerDisabled;
+ this.commentMarker = source.commentMarker;
+ this.delimiter = source.delimiter;
+ this.escapeDisabled = source.escapeDisabled;
+ this.escape = source.escape;
+ this.headerDisabled = source.headerDisabled;
+ this.header = source.header;
+ this.allowMissingColumnNames = source.allowMissingColumnNames;
+ this.ignoreEmptyLines = source.ignoreEmptyLines;
+ this.ignoreSurroundingSpaces = source.ignoreSurroundingSpaces;
+ this.nullStringDisabled = source.nullStringDisabled;
+ this.nullString = source.nullString;
+ this.quoteDisabled = source.quoteDisabled;
+ this.quote = source.quote;
+ this.recordSeparatorDisabled = source.recordSeparatorDisabled;
+ this.recordSeparator = source.recordSeparator;
+ this.skipHeaderRecord = source.skipHeaderRecord;
+ this.quoteMode = source.quoteMode;
+ this.ignoreHeaderCase = source.ignoreHeaderCase;
+ this.trim = source.trim;
+ this.trailingDelimiter = source.trailingDelimiter;
+ this.marshallerFactoryRef = source.marshallerFactoryRef;
+ this.lazyLoad = source.lazyLoad;
+ this.useMaps = source.useMaps;
+ this.useOrderedMaps = source.useOrderedMaps;
+ this.recordConverterRef = source.recordConverterRef;
+ this.captureHeaderRecord = source.captureHeaderRecord;
+ }
+
public CsvDataFormat(String delimiter) {
this();
setDelimiter(delimiter);
@@ -171,6 +204,11 @@ public class CsvDataFormat extends DataFormatDefinition {
this.captureHeaderRecord = builder.captureHeaderRecord;
}
+ @Override
+ public CsvDataFormat copyDefinition() {
+ return new CsvDataFormat(this);
+ }
+
/**
* Sets the implementation of the CsvMarshallerFactory interface which is
able to customize
* marshalling/unmarshalling behavior by extending CsvMarshaller or
creating it from scratch.
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/CustomDataFormat.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/CustomDataFormat.java
index 093697a2616..933e409c957 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/CustomDataFormat.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/CustomDataFormat.java
@@ -40,6 +40,11 @@ public class CustomDataFormat extends DataFormatDefinition {
public CustomDataFormat() {
}
+ protected CustomDataFormat(CustomDataFormat source) {
+ super(source);
+ this.ref = source.ref;
+ }
+
public CustomDataFormat(String ref) {
this.ref = ref;
}
@@ -49,6 +54,11 @@ public class CustomDataFormat extends DataFormatDefinition {
this.ref = builder.ref;
}
+ @Override
+ public CustomDataFormat copyDefinition() {
+ return new CustomDataFormat(this);
+ }
+
/**
* Reference to the custom {@link org.apache.camel.spi.DataFormat} to
lookup from the Camel registry.
*/
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/DataFormatsDefinition.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/DataFormatsDefinition.java
index 5e3f91d2578..e129a74a6a9 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/DataFormatsDefinition.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/DataFormatsDefinition.java
@@ -26,7 +26,9 @@ import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlElements;
import jakarta.xml.bind.annotation.XmlRootElement;
+import org.apache.camel.model.CopyableDefinition;
import org.apache.camel.model.DataFormatDefinition;
+import org.apache.camel.model.ProcessorDefinitionHelper;
import org.apache.camel.spi.Metadata;
/**
@@ -35,7 +37,7 @@ import org.apache.camel.spi.Metadata;
@Metadata(label = "dataformat,transformation", title = "Data formats")
@XmlRootElement(name = "dataFormats")
@XmlAccessorType(XmlAccessType.FIELD)
-public class DataFormatsDefinition {
+public class DataFormatsDefinition implements
CopyableDefinition<DataFormatsDefinition> {
// cannot use @XmlElementRef as it doesn't allow optional properties
@XmlElements({
@@ -82,6 +84,18 @@ public class DataFormatsDefinition {
@XmlElement(name = "zipFile", type = ZipFileDataFormat.class) })
private List<DataFormatDefinition> dataFormats;
+ public DataFormatsDefinition() {
+ }
+
+ protected DataFormatsDefinition(DataFormatsDefinition source) {
+ this.dataFormats =
ProcessorDefinitionHelper.deepCopyDefinitions(source.dataFormats);
+ }
+
+ @Override
+ public DataFormatsDefinition copyDefinition() {
+ return new DataFormatsDefinition(this);
+ }
+
/**
* A list holding the configured data formats
*/
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/FhirDataformat.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/FhirDataformat.java
index 9e301d104fd..d1825c98333 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/FhirDataformat.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/FhirDataformat.java
@@ -27,6 +27,7 @@ import org.apache.camel.model.DataFormatDefinition;
import org.apache.camel.spi.Metadata;
public abstract class FhirDataformat extends DataFormatDefinition implements
ContentTypeHeaderAware {
+
@XmlAttribute
@Metadata(enums = "DSTU2,DSTU2_HL7ORG,DSTU2_1,DSTU3,R4,R5", defaultValue =
"R4")
private String fhirVersion;
@@ -88,6 +89,28 @@ public abstract class FhirDataformat extends
DataFormatDefinition implements Con
super(dataFormatName);
}
+ protected FhirDataformat(FhirDataformat source) {
+ super(source);
+ this.fhirContext = source.fhirContext;
+ this.fhirVersion = source.fhirVersion;
+ this.prettyPrint = source.prettyPrint;
+ this.parserErrorHandler = source.parserErrorHandler;
+ this.parserOptions = source.parserOptions;
+ this.preferTypes = source.preferTypes;
+ this.forceResourceId = source.forceResourceId;
+ this.serverBaseUrl = source.serverBaseUrl;
+ this.omitResourceId = source.omitResourceId;
+ this.encodeElementsAppliesToChildResourcesOnly =
source.encodeElementsAppliesToChildResourcesOnly;
+ this.encodeElements = source.encodeElements;
+ this.dontEncodeElements = source.dontEncodeElements;
+ this.stripVersionsFromReferences = source.stripVersionsFromReferences;
+ this.overrideResourceIdWithBundleEntryFullUrl =
source.overrideResourceIdWithBundleEntryFullUrl;
+ this.summaryMode = source.summaryMode;
+ this.suppressNarratives = source.suppressNarratives;
+ this.dontStripVersionsFromReferencesAtPaths =
source.dontStripVersionsFromReferencesAtPaths;
+ this.contentTypeHeader = source.contentTypeHeader;
+ }
+
protected FhirDataformat() {
// This constructor is needed by jaxb for schema generation
}
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/FhirJsonDataFormat.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/FhirJsonDataFormat.java
index a28a74a5823..c9e72a32738 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/FhirJsonDataFormat.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/FhirJsonDataFormat.java
@@ -35,6 +35,15 @@ public class FhirJsonDataFormat extends FhirDataformat {
super("fhirJson");
}
+ protected FhirJsonDataFormat(FhirJsonDataFormat source) {
+ super(source);
+ }
+
+ @Override
+ public FhirJsonDataFormat copyDefinition() {
+ return new FhirJsonDataFormat(this);
+ }
+
private FhirJsonDataFormat(Builder builder) {
super("fhirJson", builder);
}
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/FhirXmlDataFormat.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/FhirXmlDataFormat.java
index 2caad688b51..d663522560a 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/FhirXmlDataFormat.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/FhirXmlDataFormat.java
@@ -39,6 +39,15 @@ public class FhirXmlDataFormat extends FhirDataformat {
super("fhirXml", builder);
}
+ protected FhirXmlDataFormat(FhirXmlDataFormat source) {
+ super(source);
+ }
+
+ @Override
+ public FhirXmlDataFormat copyDefinition() {
+ return new FhirXmlDataFormat(this);
+ }
+
/**
* {@code Builder} is a specific builder for {@link FhirXmlDataFormat}.
*/
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/FlatpackDataFormat.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/FlatpackDataFormat.java
index 16c77269866..9ce79bb95e2 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/FlatpackDataFormat.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/FlatpackDataFormat.java
@@ -63,6 +63,18 @@ public class FlatpackDataFormat extends DataFormatDefinition
{
super("flatpack");
}
+ protected FlatpackDataFormat(FlatpackDataFormat source) {
+ super(source);
+ this.definition = source.definition;
+ this.fixed = source.fixed;
+ this.delimiter = source.delimiter;
+ this.ignoreFirstRecord = source.ignoreFirstRecord;
+ this.allowShortLines = source.allowShortLines;
+ this.ignoreExtraColumns = source.ignoreExtraColumns;
+ this.textQualifier = source.textQualifier;
+ this.parserFactoryRef = source.parserFactoryRef;
+ }
+
private FlatpackDataFormat(Builder builder) {
this();
this.definition = builder.definition;
@@ -75,6 +87,11 @@ public class FlatpackDataFormat extends DataFormatDefinition
{
this.parserFactoryRef = builder.parserFactoryRef;
}
+ @Override
+ public FlatpackDataFormat copyDefinition() {
+ return new FlatpackDataFormat(this);
+ }
+
public String getDefinition() {
return definition;
}
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/GrokDataFormat.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/GrokDataFormat.java
index b51f93b02b3..5c26891f483 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/GrokDataFormat.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/GrokDataFormat.java
@@ -51,6 +51,14 @@ public class GrokDataFormat extends DataFormatDefinition {
super("grok");
}
+ protected GrokDataFormat(GrokDataFormat source) {
+ super(source);
+ this.pattern = source.pattern;
+ this.flattened = source.flattened;
+ this.allowMultipleMatchesPerLine = source.allowMultipleMatchesPerLine;
+ this.namedOnly = source.namedOnly;
+ }
+
private GrokDataFormat(Builder builder) {
this();
this.pattern = builder.pattern;
@@ -59,6 +67,11 @@ public class GrokDataFormat extends DataFormatDefinition {
this.namedOnly = builder.namedOnly;
}
+ @Override
+ public GrokDataFormat copyDefinition() {
+ return new GrokDataFormat(this);
+ }
+
public String getPattern() {
return pattern;
}
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/GzipDeflaterDataFormat.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/GzipDeflaterDataFormat.java
index 0d71d772539..0d8b0ffe96b 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/GzipDeflaterDataFormat.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/GzipDeflaterDataFormat.java
@@ -34,6 +34,15 @@ public class GzipDeflaterDataFormat extends
DataFormatDefinition {
super("gzipDeflater");
}
+ protected GzipDeflaterDataFormat(GzipDeflaterDataFormat source) {
+ super(source);
+ }
+
+ @Override
+ public GzipDeflaterDataFormat copyDefinition() {
+ return new GzipDeflaterDataFormat(this);
+ }
+
/**
* {@code Builder} is a specific builder for {@link
GzipDeflaterDataFormat}.
*/
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/HL7DataFormat.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/HL7DataFormat.java
index 70aa967189b..9a5e600a136 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/HL7DataFormat.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/HL7DataFormat.java
@@ -46,12 +46,23 @@ public class HL7DataFormat extends DataFormatDefinition {
super("hl7");
}
+ protected HL7DataFormat(HL7DataFormat source) {
+ super(source);
+ this.parser = source.parser;
+ this.validate = source.validate;
+ }
+
private HL7DataFormat(Builder builder) {
this();
this.parser = builder.parser;
this.validate = builder.validate;
}
+ @Override
+ public HL7DataFormat copyDefinition() {
+ return new HL7DataFormat(this);
+ }
+
public String getValidate() {
return validate;
}
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/IcalDataFormat.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/IcalDataFormat.java
index 814717ae166..adca1379eb4 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/IcalDataFormat.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/IcalDataFormat.java
@@ -42,11 +42,21 @@ public class IcalDataFormat extends DataFormatDefinition {
super("ical");
}
+ protected IcalDataFormat(IcalDataFormat source) {
+ super(source);
+ this.validating = source.validating;
+ }
+
private IcalDataFormat(Builder builder) {
this();
this.validating = builder.validating;
}
+ @Override
+ public IcalDataFormat copyDefinition() {
+ return new IcalDataFormat(this);
+ }
+
public String getValidating() {
return validating;
}
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/JacksonXMLDataFormat.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/JacksonXMLDataFormat.java
index b7479c4e6fc..429817b657a 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/JacksonXMLDataFormat.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/JacksonXMLDataFormat.java
@@ -91,6 +91,29 @@ public class JacksonXMLDataFormat extends
DataFormatDefinition implements Conten
super("jacksonXml");
}
+ protected JacksonXMLDataFormat(JacksonXMLDataFormat builder) {
+ super(builder);
+ this.unmarshalType = builder.unmarshalType;
+ this.jsonView = builder.jsonView;
+ this.collectionType = builder.collectionType;
+ this.xmlMapper = builder.xmlMapper;
+ this.prettyPrint = builder.prettyPrint;
+ this.unmarshalTypeName = builder.unmarshalTypeName;
+ this.allowUnmarshallType = builder.allowUnmarshallType;
+ this.jsonViewTypeName = builder.jsonViewTypeName;
+ this.include = builder.include;
+ this.allowJmsType = builder.allowJmsType;
+ this.collectionTypeName = builder.collectionTypeName;
+ this.useList = builder.useList;
+ this.timezone = builder.timezone;
+ this.enableJaxbAnnotationModule = builder.enableJaxbAnnotationModule;
+ this.moduleClassNames = builder.moduleClassNames;
+ this.moduleRefs = builder.moduleRefs;
+ this.enableFeatures = builder.enableFeatures;
+ this.disableFeatures = builder.disableFeatures;
+ this.contentTypeHeader = builder.contentTypeHeader;
+ }
+
private JacksonXMLDataFormat(Builder builder) {
this();
this.unmarshalType = builder.unmarshalType;
@@ -114,6 +137,11 @@ public class JacksonXMLDataFormat extends
DataFormatDefinition implements Conten
this.contentTypeHeader = builder.contentTypeHeader;
}
+ @Override
+ public JacksonXMLDataFormat copyDefinition() {
+ return new JacksonXMLDataFormat(this);
+ }
+
public String getXmlMapper() {
return xmlMapper;
}
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/JaxbDataFormat.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/JaxbDataFormat.java
index 21e8b14595c..d7181ce785f 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/JaxbDataFormat.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/JaxbDataFormat.java
@@ -98,6 +98,30 @@ public class JaxbDataFormat extends DataFormatDefinition
implements ContentTypeH
super("jaxb");
}
+ private JaxbDataFormat(JaxbDataFormat source) {
+ super(source);
+ this.contextPath = source.contextPath;
+ this.contextPathIsClassName = source.contextPathIsClassName;
+ this.schema = source.schema;
+ this.schemaSeverityLevel = source.schemaSeverityLevel;
+ this.prettyPrint = source.prettyPrint;
+ this.objectFactory = source.objectFactory;
+ this.ignoreJAXBElement = source.ignoreJAXBElement;
+ this.mustBeJAXBElement = source.mustBeJAXBElement;
+ this.filterNonXmlChars = source.filterNonXmlChars;
+ this.encoding = source.encoding;
+ this.fragment = source.fragment;
+ this.partClass = source.partClass;
+ this.partNamespace = source.partNamespace;
+ this.namespacePrefixRef = source.namespacePrefixRef;
+ this.xmlStreamWriterWrapper = source.xmlStreamWriterWrapper;
+ this.schemaLocation = source.schemaLocation;
+ this.noNamespaceSchemaLocation = source.noNamespaceSchemaLocation;
+ this.jaxbProviderProperties = source.jaxbProviderProperties;
+ this.contentTypeHeader = source.contentTypeHeader;
+ this.accessExternalSchemaProtocols =
source.accessExternalSchemaProtocols;
+ }
+
public JaxbDataFormat(boolean prettyPrint) {
this();
setPrettyPrint(Boolean.toString(prettyPrint));
@@ -127,6 +151,11 @@ public class JaxbDataFormat extends DataFormatDefinition
implements ContentTypeH
this.accessExternalSchemaProtocols =
builder.accessExternalSchemaProtocols;
}
+ @Override
+ public JaxbDataFormat copyDefinition() {
+ return new JaxbDataFormat(this);
+ }
+
public String getContextPath() {
return contextPath;
}
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/JsonApiDataFormat.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/JsonApiDataFormat.java
index b5f41718c18..05c03f59bc7 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/JsonApiDataFormat.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/JsonApiDataFormat.java
@@ -48,6 +48,14 @@ public class JsonApiDataFormat extends DataFormatDefinition {
super("jsonApi");
}
+ protected JsonApiDataFormat(JsonApiDataFormat source) {
+ super(source);
+ this.dataFormatTypes = source.dataFormatTypes;
+ this.dataFormatTypeClasses = source.dataFormatTypeClasses;
+ this.mainFormatType = source.mainFormatType;
+ this.mainFormatTypeClass = source.mainFormatTypeClass;
+ }
+
private JsonApiDataFormat(Builder builder) {
this();
this.dataFormatTypes = builder.dataFormatTypes;
@@ -56,6 +64,11 @@ public class JsonApiDataFormat extends DataFormatDefinition {
this.mainFormatTypeClass = builder.mainFormatTypeClass;
}
+ @Override
+ public JsonApiDataFormat copyDefinition() {
+ return new JsonApiDataFormat(this);
+ }
+
public String getDataFormatTypes() {
return dataFormatTypes;
}
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/JsonDataFormat.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/JsonDataFormat.java
index 4811695bd0b..5f53443d2c3 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/JsonDataFormat.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/JsonDataFormat.java
@@ -33,6 +33,7 @@ import org.apache.camel.spi.Metadata;
@XmlRootElement(name = "json")
@XmlAccessorType(XmlAccessType.FIELD)
public class JsonDataFormat extends DataFormatDefinition implements
ContentTypeHeaderAware {
+
@XmlAttribute
private String objectMapper;
@XmlAttribute
@@ -116,6 +117,35 @@ public class JsonDataFormat extends DataFormatDefinition
implements ContentTypeH
this.library = library;
}
+ protected JsonDataFormat(JsonDataFormat source) {
+ super(source);
+ this.objectMapper = source.objectMapper;
+ this.useDefaultObjectMapper = source.useDefaultObjectMapper;
+ this.autoDiscoverObjectMapper = source.autoDiscoverObjectMapper;
+ this.prettyPrint = source.prettyPrint;
+ this.library = source.library;
+ this.unmarshalTypeName = source.unmarshalTypeName;
+ this.unmarshalType = source.unmarshalType;
+ this.jsonViewTypeName = source.jsonViewTypeName;
+ this.jsonView = source.jsonView;
+ this.include = source.include;
+ this.allowJmsType = source.allowJmsType;
+ this.collectionTypeName = source.collectionTypeName;
+ this.collectionType = source.collectionType;
+ this.useList = source.useList;
+ this.moduleClassNames = source.moduleClassNames;
+ this.moduleRefs = source.moduleRefs;
+ this.enableFeatures = source.enableFeatures;
+ this.disableFeatures = source.disableFeatures;
+ this.allowUnmarshallType = source.allowUnmarshallType;
+ this.timezone = source.timezone;
+ this.schemaResolver = source.schemaResolver;
+ this.autoDiscoverSchemaResolver = source.autoDiscoverSchemaResolver;
+ this.namingStrategy = source.namingStrategy;
+ this.contentTypeHeader = source.contentTypeHeader;
+ this.dateFormatPattern = source.dateFormatPattern;
+ }
+
private JsonDataFormat(Builder builder) {
this();
this.objectMapper = builder.objectMapper;
@@ -145,6 +175,11 @@ public class JsonDataFormat extends DataFormatDefinition
implements ContentTypeH
this.dateFormatPattern = builder.dateFormatPattern;
}
+ @Override
+ public JsonDataFormat copyDefinition() {
+ return new JsonDataFormat(this);
+ }
+
@Override
public String getDataFormatName() {
// json data format is special as the name can be from different
bundles
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/LZFDataFormat.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/LZFDataFormat.java
index 2af0586275b..d6b69f28ab6 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/LZFDataFormat.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/LZFDataFormat.java
@@ -42,11 +42,21 @@ public class LZFDataFormat extends DataFormatDefinition {
super("lzf");
}
+ protected LZFDataFormat(LZFDataFormat source) {
+ super(source);
+ this.usingParallelCompression = source.usingParallelCompression;
+ }
+
private LZFDataFormat(Builder builder) {
this();
this.usingParallelCompression = builder.usingParallelCompression;
}
+ @Override
+ public LZFDataFormat copyDefinition() {
+ return new LZFDataFormat(this);
+ }
+
public String getUsingParallelCompression() {
return usingParallelCompression;
}
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/MimeMultipartDataFormat.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/MimeMultipartDataFormat.java
index 2ddd1e448da..a9afa6b57a9 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/MimeMultipartDataFormat.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/MimeMultipartDataFormat.java
@@ -53,6 +53,15 @@ public class MimeMultipartDataFormat extends
DataFormatDefinition {
super("mimeMultipart");
}
+ protected MimeMultipartDataFormat(MimeMultipartDataFormat source) {
+ super(source);
+ this.multipartSubType = source.multipartSubType;
+ this.multipartWithoutAttachment = source.multipartWithoutAttachment;
+ this.headersInline = source.headersInline;
+ this.includeHeaders = source.includeHeaders;
+ this.binaryContent = source.binaryContent;
+ }
+
private MimeMultipartDataFormat(Builder builder) {
this();
this.multipartSubType = builder.multipartSubType;
@@ -62,6 +71,11 @@ public class MimeMultipartDataFormat extends
DataFormatDefinition {
this.binaryContent = builder.binaryContent;
}
+ @Override
+ public MimeMultipartDataFormat copyDefinition() {
+ return new MimeMultipartDataFormat(this);
+ }
+
public String getMultipartSubType() {
return multipartSubType;
}
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/PGPDataFormat.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/PGPDataFormat.java
index e138dbbdeec..9923cf7b06b 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/PGPDataFormat.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/PGPDataFormat.java
@@ -33,6 +33,7 @@ import org.apache.camel.spi.Metadata;
@XmlRootElement(name = "pgp")
@XmlAccessorType(XmlAccessType.FIELD)
public class PGPDataFormat extends DataFormatDefinition {
+
@XmlAttribute
private String keyUserid;
@XmlAttribute
@@ -71,6 +72,24 @@ public class PGPDataFormat extends DataFormatDefinition {
super("pgp");
}
+ protected PGPDataFormat(PGPDataFormat source) {
+ super(source);
+ this.keyUserid = source.keyUserid;
+ this.signatureKeyUserid = source.signatureKeyUserid;
+ this.password = source.password;
+ this.signaturePassword = source.signaturePassword;
+ this.keyFileName = source.keyFileName;
+ this.signatureKeyFileName = source.signatureKeyFileName;
+ this.signatureKeyRing = source.signatureKeyRing;
+ this.armored = source.armored;
+ this.integrity = source.integrity;
+ this.provider = source.provider;
+ this.algorithm = source.algorithm;
+ this.compressionAlgorithm = source.compressionAlgorithm;
+ this.hashAlgorithm = source.hashAlgorithm;
+ this.signatureVerificationOption = source.signatureVerificationOption;
+ }
+
private PGPDataFormat(Builder builder) {
this();
this.keyUserid = builder.keyUserid;
@@ -89,6 +108,11 @@ public class PGPDataFormat extends DataFormatDefinition {
this.signatureVerificationOption = builder.signatureVerificationOption;
}
+ @Override
+ public PGPDataFormat copyDefinition() {
+ return new PGPDataFormat(this);
+ }
+
public String getSignatureKeyUserid() {
return signatureKeyUserid;
}
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/ParquetAvroDataFormat.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/ParquetAvroDataFormat.java
index fce4152f027..034e332c76f 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/ParquetAvroDataFormat.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/ParquetAvroDataFormat.java
@@ -49,6 +49,14 @@ public class ParquetAvroDataFormat extends
DataFormatDefinition {
super("parquetAvro");
}
+ protected ParquetAvroDataFormat(ParquetAvroDataFormat source) {
+ super(source);
+ this.compressionCodecName = source.compressionCodecName;
+ this.unmarshalTypeName = source.unmarshalTypeName;
+ this.unmarshalType = source.unmarshalType;
+ this.lazyLoad = source.lazyLoad;
+ }
+
public ParquetAvroDataFormat(String unmarshalTypeName) {
this();
setUnmarshalTypeName(unmarshalTypeName);
@@ -72,6 +80,11 @@ public class ParquetAvroDataFormat extends
DataFormatDefinition {
this.lazyLoad = builder.lazyLoad;
}
+ @Override
+ public ParquetAvroDataFormat copyDefinition() {
+ return new ParquetAvroDataFormat(this);
+ }
+
/**
* Compression codec to use when marshalling.
*/
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/ProtobufDataFormat.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/ProtobufDataFormat.java
index 4fbdb038be5..f325977e1f2 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/ProtobufDataFormat.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/ProtobufDataFormat.java
@@ -122,6 +122,35 @@ public class ProtobufDataFormat extends
DataFormatDefinition implements ContentT
setContentTypeFormat(contentTypeFormat);
}
+ protected ProtobufDataFormat(ProtobufDataFormat source) {
+ super(source);
+ this.defaultInstance = source.defaultInstance;
+ this.instanceClass = source.instanceClass;
+ this.objectMapper = source.objectMapper;
+ this.useDefaultObjectMapper = source.useDefaultObjectMapper;
+ this.autoDiscoverObjectMapper = source.autoDiscoverObjectMapper;
+ this.library = source.library;
+ this.unmarshalTypeName = source.unmarshalTypeName;
+ this.unmarshalType = source.unmarshalType;
+ this.jsonViewTypeName = source.jsonViewTypeName;
+ this.jsonView = source.jsonView;
+ this.include = source.include;
+ this.allowJmsType = source.allowJmsType;
+ this.collectionTypeName = source.collectionTypeName;
+ this.collectionType = source.collectionType;
+ this.useList = source.useList;
+ this.moduleClassNames = source.moduleClassNames;
+ this.moduleRefs = source.moduleRefs;
+ this.enableFeatures = source.enableFeatures;
+ this.disableFeatures = source.disableFeatures;
+ this.allowUnmarshallType = source.allowUnmarshallType;
+ this.timezone = source.timezone;
+ this.schemaResolver = source.schemaResolver;
+ this.autoDiscoverSchemaResolver = source.autoDiscoverSchemaResolver;
+ this.contentTypeFormat = source.contentTypeFormat;
+ this.contentTypeHeader = source.contentTypeHeader;
+ }
+
private ProtobufDataFormat(Builder builder) {
this();
this.defaultInstance = builder.defaultInstance;
@@ -151,6 +180,11 @@ public class ProtobufDataFormat extends
DataFormatDefinition implements ContentT
this.contentTypeHeader = builder.contentTypeHeader;
}
+ @Override
+ public ProtobufDataFormat copyDefinition() {
+ return new ProtobufDataFormat(this);
+ }
+
@Override
public String getDataFormatName() {
// protobuf data format is special as the name can be from different
bundles
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/RssDataFormat.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/RssDataFormat.java
index d77d959e540..5a5975f34f4 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/RssDataFormat.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/RssDataFormat.java
@@ -37,6 +37,15 @@ public class RssDataFormat extends DataFormatDefinition {
super("rss");
}
+ protected RssDataFormat(RssDataFormat source) {
+ super(source);
+ }
+
+ @Override
+ public RssDataFormat copyDefinition() {
+ return new RssDataFormat(this);
+ }
+
/**
* {@code Builder} is a specific builder for {@link RssDataFormat}.
*/
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/SoapDataFormat.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/SoapDataFormat.java
index 2dfd3f54217..b6df4c864e3 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/SoapDataFormat.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/SoapDataFormat.java
@@ -56,6 +56,17 @@ public class SoapDataFormat extends DataFormatDefinition {
super("soap");
}
+ protected SoapDataFormat(SoapDataFormat source) {
+ super(source);
+ this.contextPath = source.contextPath;
+ this.encoding = source.encoding;
+ this.elementNameStrategyRef = source.elementNameStrategyRef;
+ this.elementNameStrategy = source.elementNameStrategy;
+ this.version = source.version;
+ this.namespacePrefixRef = source.namespacePrefixRef;
+ this.schema = source.schema;
+ }
+
public SoapDataFormat(String contextPath) {
this();
setContextPath(contextPath);
@@ -84,6 +95,11 @@ public class SoapDataFormat extends DataFormatDefinition {
this.schema = builder.schema;
}
+ @Override
+ public SoapDataFormat copyDefinition() {
+ return new SoapDataFormat(this);
+ }
+
/**
* Package name where your JAXB classes are located.
*/
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/SwiftMtDataFormat.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/SwiftMtDataFormat.java
index ab2f8124da4..83f2d2e80e1 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/SwiftMtDataFormat.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/SwiftMtDataFormat.java
@@ -42,6 +42,11 @@ public class SwiftMtDataFormat extends DataFormatDefinition {
super("swiftMt");
}
+ protected SwiftMtDataFormat(SwiftMtDataFormat source) {
+ super(source);
+ this.writeInJson = source.writeInJson;
+ }
+
public SwiftMtDataFormat(String writeInJson) {
this();
this.writeInJson = writeInJson;
@@ -52,6 +57,11 @@ public class SwiftMtDataFormat extends DataFormatDefinition {
this.writeInJson = builder.writeInJson;
}
+ @Override
+ public SwiftMtDataFormat copyDefinition() {
+ return new SwiftMtDataFormat(this);
+ }
+
public String getWriteInJson() {
return writeInJson;
}
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/SwiftMxDataFormat.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/SwiftMxDataFormat.java
index 31e3087ab63..6414ea7a8c4 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/SwiftMxDataFormat.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/SwiftMxDataFormat.java
@@ -55,6 +55,16 @@ public class SwiftMxDataFormat extends DataFormatDefinition {
super("swiftMx");
}
+ protected SwiftMxDataFormat(SwiftMxDataFormat source) {
+ super(source);
+ this.writeConfigRef = source.writeConfigRef;
+ this.writeConfig = source.writeConfig;
+ this.writeInJson = source.writeInJson;
+ this.readMessageId = source.readMessageId;
+ this.readConfigRef = source.readConfigRef;
+ this.readConfig = source.readConfig;
+ }
+
public SwiftMxDataFormat(boolean writeInJson) {
this();
this.writeInJson = Boolean.toString(writeInJson);
@@ -96,6 +106,11 @@ public class SwiftMxDataFormat extends DataFormatDefinition
{
this.readConfig = builder.readConfig;
}
+ @Override
+ public SwiftMxDataFormat copyDefinition() {
+ return new SwiftMxDataFormat(this);
+ }
+
public Object getWriteConfig() {
return writeConfig;
}
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/SyslogDataFormat.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/SyslogDataFormat.java
index 6a93508d3d4..2ce10bd88a6 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/SyslogDataFormat.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/SyslogDataFormat.java
@@ -37,6 +37,15 @@ public class SyslogDataFormat extends DataFormatDefinition {
super("syslog");
}
+ protected SyslogDataFormat(SyslogDataFormat source) {
+ super(source);
+ }
+
+ @Override
+ public SyslogDataFormat copyDefinition() {
+ return new SyslogDataFormat(this);
+ }
+
/**
* {@code Builder} is a specific builder for {@link SyslogDataFormat}.
*/
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/TarFileDataFormat.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/TarFileDataFormat.java
index 4c222dc6e3c..de1d4bdb104 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/TarFileDataFormat.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/TarFileDataFormat.java
@@ -51,6 +51,14 @@ public class TarFileDataFormat extends DataFormatDefinition {
super("tarFile");
}
+ protected TarFileDataFormat(TarFileDataFormat source) {
+ super(source);
+ this.usingIterator = source.usingIterator;
+ this.allowEmptyDirectory = source.allowEmptyDirectory;
+ this.preservePathElements = source.preservePathElements;
+ this.maxDecompressedSize = source.maxDecompressedSize;
+ }
+
private TarFileDataFormat(Builder builder) {
this.usingIterator = builder.usingIterator;
this.allowEmptyDirectory = builder.allowEmptyDirectory;
@@ -58,6 +66,11 @@ public class TarFileDataFormat extends DataFormatDefinition {
this.maxDecompressedSize = builder.maxDecompressedSize;
}
+ @Override
+ public TarFileDataFormat copyDefinition() {
+ return new TarFileDataFormat(this);
+ }
+
public String getUsingIterator() {
return usingIterator;
}
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/ThriftDataFormat.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/ThriftDataFormat.java
index 9faa9fa33cd..6a8af5ddbf6 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/ThriftDataFormat.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/ThriftDataFormat.java
@@ -52,6 +52,14 @@ public class ThriftDataFormat extends DataFormatDefinition
implements ContentTyp
super("thrift");
}
+ protected ThriftDataFormat(ThriftDataFormat builder) {
+ super(builder);
+ this.defaultInstance = builder.defaultInstance;
+ this.instanceClass = builder.instanceClass;
+ this.contentTypeFormat = builder.contentTypeFormat;
+ this.contentTypeHeader = builder.contentTypeHeader;
+ }
+
public ThriftDataFormat(String instanceClass) {
this();
setInstanceClass(instanceClass);
@@ -71,6 +79,11 @@ public class ThriftDataFormat extends DataFormatDefinition
implements ContentTyp
this.contentTypeHeader = builder.contentTypeHeader;
}
+ @Override
+ public ThriftDataFormat copyDefinition() {
+ return new ThriftDataFormat(this);
+ }
+
public String getInstanceClass() {
return instanceClass;
}
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/TidyMarkupDataFormat.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/TidyMarkupDataFormat.java
index 0166bc6620f..6afeb78d198 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/TidyMarkupDataFormat.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/TidyMarkupDataFormat.java
@@ -51,6 +51,18 @@ public class TidyMarkupDataFormat extends
DataFormatDefinition {
this.setDataObjectType(Node.class);
}
+ protected TidyMarkupDataFormat(TidyMarkupDataFormat source) {
+ super(source);
+ this.dataObjectType = source.dataObjectType;
+ this.dataObjectTypeName = source.dataObjectTypeName;
+ this.omitXmlDeclaration = source.omitXmlDeclaration;
+ }
+
+ @Override
+ public TidyMarkupDataFormat copyDefinition() {
+ return new TidyMarkupDataFormat(this);
+ }
+
public TidyMarkupDataFormat(Class<?> dataObjectType) {
this();
if (!dataObjectType.isAssignableFrom(String.class) &&
!dataObjectType.isAssignableFrom(Node.class)) {
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/UniVocityAbstractDataFormat.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/UniVocityAbstractDataFormat.java
index 6fc5657164c..ca5cdbb703b 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/UniVocityAbstractDataFormat.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/UniVocityAbstractDataFormat.java
@@ -81,6 +81,24 @@ public abstract class UniVocityAbstractDataFormat extends
DataFormatDefinition {
// This constructor is needed by jaxb for schema generation
}
+ protected UniVocityAbstractDataFormat(UniVocityAbstractDataFormat source) {
+ super(source);
+ this.nullValue = source.nullValue;
+ this.skipEmptyLines = source.skipEmptyLines;
+ this.ignoreTrailingWhitespaces = source.ignoreTrailingWhitespaces;
+ this.ignoreLeadingWhitespaces = source.ignoreLeadingWhitespaces;
+ this.headersDisabled = source.headersDisabled;
+ this.headers = source.headers;
+ this.headerExtractionEnabled = source.headerExtractionEnabled;
+ this.numberOfRecordsToRead = source.numberOfRecordsToRead;
+ this.emptyValue = source.emptyValue;
+ this.lineSeparator = source.lineSeparator;
+ this.normalizedLineSeparator = source.normalizedLineSeparator;
+ this.comment = source.comment;
+ this.lazyLoad = source.lazyLoad;
+ this.asMap = source.asMap;
+ }
+
protected UniVocityAbstractDataFormat(String dataFormatName) {
super(dataFormatName);
}
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/UniVocityCsvDataFormat.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/UniVocityCsvDataFormat.java
index d2724bb207d..ad841b829c3 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/UniVocityCsvDataFormat.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/UniVocityCsvDataFormat.java
@@ -49,6 +49,14 @@ public class UniVocityCsvDataFormat extends
UniVocityAbstractDataFormat {
super("univocityCsv");
}
+ protected UniVocityCsvDataFormat(UniVocityCsvDataFormat source) {
+ super(source);
+ this.delimiter = source.delimiter;
+ this.quoteAllFields = source.quoteAllFields;
+ this.quote = source.quote;
+ this.quoteEscape = source.quoteEscape;
+ }
+
private UniVocityCsvDataFormat(Builder builder) {
super("univocityCsv", builder);
this.delimiter = builder.delimiter;
@@ -57,6 +65,11 @@ public class UniVocityCsvDataFormat extends
UniVocityAbstractDataFormat {
this.quoteEscape = builder.quoteEscape;
}
+ @Override
+ public UniVocityCsvDataFormat copyDefinition() {
+ return new UniVocityCsvDataFormat(this);
+ }
+
public String getQuoteAllFields() {
return quoteAllFields;
}
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/UniVocityFixedDataFormat.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/UniVocityFixedDataFormat.java
index 138680e4bf9..feb834a46a1 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/UniVocityFixedDataFormat.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/UniVocityFixedDataFormat.java
@@ -45,6 +45,13 @@ public class UniVocityFixedDataFormat extends
UniVocityAbstractDataFormat {
super("univocityFixed");
}
+ protected UniVocityFixedDataFormat(UniVocityFixedDataFormat source) {
+ super(source);
+ this.padding = source.padding;
+ this.skipTrailingCharsUntilNewline =
source.skipTrailingCharsUntilNewline;
+ this.recordEndsOnNewline = source.recordEndsOnNewline;
+ }
+
private UniVocityFixedDataFormat(Builder builder) {
super("univocityFixed", builder);
this.padding = builder.padding;
@@ -52,6 +59,11 @@ public class UniVocityFixedDataFormat extends
UniVocityAbstractDataFormat {
this.recordEndsOnNewline = builder.recordEndsOnNewline;
}
+ @Override
+ public UniVocityFixedDataFormat copyDefinition() {
+ return new UniVocityFixedDataFormat(this);
+ }
+
public String getSkipTrailingCharsUntilNewline() {
return skipTrailingCharsUntilNewline;
}
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/UniVocityHeader.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/UniVocityHeader.java
index f758a9c9cfa..32240aefa75 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/UniVocityHeader.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/UniVocityHeader.java
@@ -22,6 +22,7 @@ import jakarta.xml.bind.annotation.XmlAttribute;
import jakarta.xml.bind.annotation.XmlRootElement;
import jakarta.xml.bind.annotation.XmlValue;
+import org.apache.camel.model.CopyableDefinition;
import org.apache.camel.spi.Metadata;
/**
@@ -30,13 +31,26 @@ import org.apache.camel.spi.Metadata;
@Metadata(label = "dataformat,transformation,csv", title = "uniVocity Header")
@XmlRootElement(name = "univocityHeader")
@XmlAccessorType(XmlAccessType.FIELD)
-public class UniVocityHeader {
+public class UniVocityHeader implements CopyableDefinition<UniVocityHeader> {
@XmlValue
private String name;
@XmlAttribute
private String length;
+ public UniVocityHeader() {
+ }
+
+ protected UniVocityHeader(UniVocityHeader source) {
+ this.name = source.name;
+ this.length = source.length;
+ }
+
+ @Override
+ public UniVocityHeader copyDefinition() {
+ return new UniVocityHeader(this);
+ }
+
public String getName() {
return name;
}
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/UniVocityTsvDataFormat.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/UniVocityTsvDataFormat.java
index 8c10c0baa05..94285c24ec3 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/UniVocityTsvDataFormat.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/UniVocityTsvDataFormat.java
@@ -40,11 +40,21 @@ public class UniVocityTsvDataFormat extends
UniVocityAbstractDataFormat {
super("univocityTsv");
}
+ protected UniVocityTsvDataFormat(UniVocityTsvDataFormat source) {
+ super(source);
+ this.escapeChar = source.escapeChar;
+ }
+
private UniVocityTsvDataFormat(Builder builder) {
super("univocityTsv", builder);
this.escapeChar = builder.escapeChar;
}
+ @Override
+ public UniVocityTsvDataFormat copyDefinition() {
+ return new UniVocityTsvDataFormat(this);
+ }
+
public String getEscapeChar() {
return escapeChar;
}
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/XMLSecurityDataFormat.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/XMLSecurityDataFormat.java
index 6c627df216f..5e135d40527 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/XMLSecurityDataFormat.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/XMLSecurityDataFormat.java
@@ -17,6 +17,7 @@
package org.apache.camel.model.dataformat;
import java.util.HashMap;
+import java.util.LinkedHashMap;
import java.util.Map;
import jakarta.xml.bind.annotation.XmlAccessType;
@@ -80,6 +81,24 @@ public class XMLSecurityDataFormat extends
DataFormatDefinition implements Names
super("xmlSecurity");
}
+ protected XMLSecurityDataFormat(XMLSecurityDataFormat source) {
+ super(source);
+ this.xmlCipherAlgorithm = source.xmlCipherAlgorithm;
+ this.passPhrase = source.passPhrase;
+ this.passPhraseByte = source.passPhraseByte;
+ this.secureTag = source.secureTag;
+ this.secureTagContents = source.secureTagContents;
+ this.keyCipherAlgorithm = source.keyCipherAlgorithm;
+ this.recipientKeyAlias = source.recipientKeyAlias;
+ this.keyOrTrustStoreParametersRef =
source.keyOrTrustStoreParametersRef;
+ this.keyPassword = source.keyPassword;
+ this.digestAlgorithm = source.digestAlgorithm;
+ this.mgfAlgorithm = source.mgfAlgorithm;
+ this.addKeyValueForEncryptedKey = source.addKeyValueForEncryptedKey;
+ this.keyOrTrustStoreParameters = source.keyOrTrustStoreParameters;
+ this.namespaces = source.namespaces != null ? new
LinkedHashMap<>(source.namespaces) : null;
+ }
+
private XMLSecurityDataFormat(Builder builder) {
this();
this.xmlCipherAlgorithm = builder.xmlCipherAlgorithm;
@@ -98,6 +117,11 @@ public class XMLSecurityDataFormat extends
DataFormatDefinition implements Names
this.namespaces = builder.namespaces;
}
+ @Override
+ public XMLSecurityDataFormat copyDefinition() {
+ return new XMLSecurityDataFormat(this);
+ }
+
public String getXmlCipherAlgorithm() {
return xmlCipherAlgorithm;
}
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/YAMLDataFormat.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/YAMLDataFormat.java
index fa038e465dd..83b7cd954b0 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/YAMLDataFormat.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/YAMLDataFormat.java
@@ -81,6 +81,24 @@ public class YAMLDataFormat extends DataFormatDefinition {
this(YAMLLibrary.SnakeYAML);
}
+ protected YAMLDataFormat(YAMLDataFormat source) {
+ super(source);
+ this.classLoader = source.classLoader;
+ this.unmarshalType = source.unmarshalType;
+ this.library = source.library;
+ this.unmarshalTypeName = source.unmarshalTypeName;
+ this.constructor = source.constructor;
+ this.representer = source.representer;
+ this.dumperOptions = source.dumperOptions;
+ this.resolver = source.resolver;
+ this.useApplicationContextClassLoader =
source.useApplicationContextClassLoader;
+ this.prettyFlow = source.prettyFlow;
+ this.allowAnyType = source.allowAnyType;
+ this.typeFilters = source.typeFilters;
+ this.maxAliasesForCollections = source.maxAliasesForCollections;
+ this.allowRecursiveKeys = source.allowRecursiveKeys;
+ }
+
public YAMLDataFormat(YAMLLibrary library) {
super(library.getDataFormatName());
this.library = library;
@@ -110,6 +128,11 @@ public class YAMLDataFormat extends DataFormatDefinition {
this.allowRecursiveKeys = builder.allowRecursiveKeys;
}
+ @Override
+ public YAMLDataFormat copyDefinition() {
+ return new YAMLDataFormat(this);
+ }
+
@Override
public String getDataFormatName() {
// yaml data format is special as the name can be from different
bundles
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/YAMLTypeFilterDefinition.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/YAMLTypeFilterDefinition.java
index ee61b427283..9792066ca5a 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/YAMLTypeFilterDefinition.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/YAMLTypeFilterDefinition.java
@@ -21,12 +21,13 @@ import jakarta.xml.bind.annotation.XmlAccessorType;
import jakarta.xml.bind.annotation.XmlAttribute;
import jakarta.xml.bind.annotation.XmlRootElement;
+import org.apache.camel.model.CopyableDefinition;
import org.apache.camel.spi.Metadata;
@Metadata(label = "dataformat,transformation,yaml", title = "YAML Type Filter")
@XmlRootElement(name = "typeFilter")
@XmlAccessorType(XmlAccessType.FIELD)
-public class YAMLTypeFilterDefinition {
+public class YAMLTypeFilterDefinition implements
CopyableDefinition<YAMLTypeFilterDefinition> {
@XmlAttribute
private String value;
@@ -34,6 +35,19 @@ public class YAMLTypeFilterDefinition {
@Metadata(javaType =
"org.apache.camel.model.dataformat.YAMLTypeFilterType")
private String type;
+ public YAMLTypeFilterDefinition() {
+ }
+
+ protected YAMLTypeFilterDefinition(YAMLTypeFilterDefinition source) {
+ this.value = source.value;
+ this.type = source.type;
+ }
+
+ @Override
+ public YAMLTypeFilterDefinition copyDefinition() {
+ return new YAMLTypeFilterDefinition(this);
+ }
+
public String getValue() {
return value;
}
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/ZipDeflaterDataFormat.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/ZipDeflaterDataFormat.java
index 1a1141fd9b6..99588e1a4a1 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/ZipDeflaterDataFormat.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/ZipDeflaterDataFormat.java
@@ -42,11 +42,21 @@ public class ZipDeflaterDataFormat extends
DataFormatDefinition {
super("zipDeflater");
}
+ protected ZipDeflaterDataFormat(ZipDeflaterDataFormat source) {
+ super(source);
+ this.compressionLevel = source.compressionLevel;
+ }
+
private ZipDeflaterDataFormat(Builder builder) {
this();
this.compressionLevel = builder.compressionLevel;
}
+ @Override
+ public ZipDeflaterDataFormat copyDefinition() {
+ return new ZipDeflaterDataFormat(this);
+ }
+
public String getCompressionLevel() {
return compressionLevel;
}
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/ZipFileDataFormat.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/ZipFileDataFormat.java
index 3137fcaf1cc..87a7c94c5f7 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/ZipFileDataFormat.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/ZipFileDataFormat.java
@@ -51,6 +51,14 @@ public class ZipFileDataFormat extends DataFormatDefinition {
super("zipFile");
}
+ protected ZipFileDataFormat(ZipFileDataFormat source) {
+ super(source);
+ this.usingIterator = source.usingIterator;
+ this.allowEmptyDirectory = source.allowEmptyDirectory;
+ this.preservePathElements = source.preservePathElements;
+ this.maxDecompressedSize = source.maxDecompressedSize;
+ }
+
private ZipFileDataFormat(Builder builder) {
this();
this.usingIterator = builder.usingIterator;
@@ -59,6 +67,11 @@ public class ZipFileDataFormat extends DataFormatDefinition {
this.maxDecompressedSize = builder.maxDecompressedSize;
}
+ @Override
+ public ZipFileDataFormat copyDefinition() {
+ return new ZipFileDataFormat(this);
+ }
+
public String getUsingIterator() {
return usingIterator;
}
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/language/NamespaceAwareExpression.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/language/NamespaceAwareExpression.java
index 715c7a973f1..834158bb6ef 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/language/NamespaceAwareExpression.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/language/NamespaceAwareExpression.java
@@ -16,7 +16,6 @@
*/
package org.apache.camel.model.language;
-import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
@@ -27,6 +26,7 @@ import jakarta.xml.bind.annotation.XmlAccessorType;
import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlTransient;
+import org.apache.camel.model.ProcessorDefinitionHelper;
import org.apache.camel.model.PropertyDefinition;
import org.apache.camel.spi.Metadata;
import org.apache.camel.spi.NamespaceAware;
@@ -50,7 +50,7 @@ public abstract class NamespaceAwareExpression extends
SingleInputTypedExpressio
protected NamespaceAwareExpression(NamespaceAwareExpression source) {
super(source);
- this.namespace = copyNamespace(source);
+ this.namespace =
ProcessorDefinitionHelper.deepCopyDefinitions(source.namespace);
this.namespaces = source.namespaces != null ? new
LinkedHashMap<>(source.namespaces) : null;
}
@@ -102,17 +102,6 @@ public abstract class NamespaceAwareExpression extends
SingleInputTypedExpressio
return namespaces;
}
- private static List<PropertyDefinition>
copyNamespace(NamespaceAwareExpression source) {
- if (source.namespace != null) {
- var answer = new ArrayList<PropertyDefinition>();
- for (var def : source.namespace) {
- answer.add(def.copyDefinition());
- }
- return answer;
- }
- return null;
- }
-
/**
* {@code NamespaceAwareBuilder} is the base namespace aware expression
builder.
*/
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/loadbalancer/CustomLoadBalancerDefinition.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/loadbalancer/CustomLoadBalancerDefinition.java
index e47b3157eaa..5cf8dbfb134 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/loadbalancer/CustomLoadBalancerDefinition.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/loadbalancer/CustomLoadBalancerDefinition.java
@@ -53,6 +53,7 @@ public class CustomLoadBalancerDefinition extends
LoadBalancerDefinition {
this.ref = ref;
}
+ @Override
public CustomLoadBalancerDefinition copyDefinition() {
return new CustomLoadBalancerDefinition(this);
}
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/loadbalancer/FailoverLoadBalancerDefinition.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/loadbalancer/FailoverLoadBalancerDefinition.java
index 09c98bc2a73..9c70e700f57 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/loadbalancer/FailoverLoadBalancerDefinition.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/loadbalancer/FailoverLoadBalancerDefinition.java
@@ -62,6 +62,7 @@ public class FailoverLoadBalancerDefinition extends
LoadBalancerDefinition {
this.maximumFailoverAttempts = source.maximumFailoverAttempts;
}
+ @Override
public FailoverLoadBalancerDefinition copyDefinition() {
return new FailoverLoadBalancerDefinition(this);
}
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/loadbalancer/RandomLoadBalancerDefinition.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/loadbalancer/RandomLoadBalancerDefinition.java
index 26005c07785..cb71ee5fdc2 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/loadbalancer/RandomLoadBalancerDefinition.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/loadbalancer/RandomLoadBalancerDefinition.java
@@ -38,6 +38,7 @@ public class RandomLoadBalancerDefinition extends
LoadBalancerDefinition {
super(source);
}
+ @Override
public RandomLoadBalancerDefinition copyDefinition() {
return new RandomLoadBalancerDefinition(this);
}
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/loadbalancer/RoundRobinLoadBalancerDefinition.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/loadbalancer/RoundRobinLoadBalancerDefinition.java
index f5bef1e0d0f..2fa4ec8cbf2 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/loadbalancer/RoundRobinLoadBalancerDefinition.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/loadbalancer/RoundRobinLoadBalancerDefinition.java
@@ -39,6 +39,7 @@ public class RoundRobinLoadBalancerDefinition extends
LoadBalancerDefinition {
super(source);
}
+ @Override
public RoundRobinLoadBalancerDefinition copyDefinition() {
return new RoundRobinLoadBalancerDefinition(this);
}
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/loadbalancer/StickyLoadBalancerDefinition.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/loadbalancer/StickyLoadBalancerDefinition.java
index 39d07d4a93f..c4bb99e847e 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/loadbalancer/StickyLoadBalancerDefinition.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/loadbalancer/StickyLoadBalancerDefinition.java
@@ -48,6 +48,7 @@ public class StickyLoadBalancerDefinition extends
LoadBalancerDefinition {
= source.correlationExpression != null ?
source.correlationExpression.copyDefinition() : null;
}
+ @Override
public StickyLoadBalancerDefinition copyDefinition() {
return new StickyLoadBalancerDefinition(this);
}
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/loadbalancer/TopicLoadBalancerDefinition.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/loadbalancer/TopicLoadBalancerDefinition.java
index f786818c7a3..197830b9db2 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/loadbalancer/TopicLoadBalancerDefinition.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/loadbalancer/TopicLoadBalancerDefinition.java
@@ -38,6 +38,7 @@ public class TopicLoadBalancerDefinition extends
LoadBalancerDefinition {
super(source);
}
+ @Override
public TopicLoadBalancerDefinition copyDefinition() {
return new TopicLoadBalancerDefinition(this);
}
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/loadbalancer/WeightedLoadBalancerDefinition.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/loadbalancer/WeightedLoadBalancerDefinition.java
index 3610484d51d..b710f832156 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/loadbalancer/WeightedLoadBalancerDefinition.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/loadbalancer/WeightedLoadBalancerDefinition.java
@@ -51,6 +51,7 @@ public class WeightedLoadBalancerDefinition extends
LoadBalancerDefinition {
this.roundRobin = source.roundRobin;
}
+ @Override
public WeightedLoadBalancerDefinition copyDefinition() {
return new WeightedLoadBalancerDefinition(this);
}
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/transformer/CustomTransformerDefinition.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/transformer/CustomTransformerDefinition.java
index ddd52b37d76..04fca5ecd7b 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/transformer/CustomTransformerDefinition.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/transformer/CustomTransformerDefinition.java
@@ -38,6 +38,20 @@ public class CustomTransformerDefinition extends
TransformerDefinition {
@XmlAttribute
private String className;
+ public CustomTransformerDefinition() {
+ }
+
+ protected CustomTransformerDefinition(CustomTransformerDefinition source) {
+ super(source);
+ this.ref = source.ref;
+ this.className = source.className;
+ }
+
+ @Override
+ public CustomTransformerDefinition copyDefinition() {
+ return new CustomTransformerDefinition(this);
+ }
+
public String getRef() {
return ref;
}
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/transformer/DataFormatTransformerDefinition.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/transformer/DataFormatTransformerDefinition.java
index cdca86bca14..a9656a330c6 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/transformer/DataFormatTransformerDefinition.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/transformer/DataFormatTransformerDefinition.java
@@ -120,6 +120,19 @@ public class DataFormatTransformerDefinition extends
TransformerDefinition {
@XmlElement(name = "zipFile", type = ZipFileDataFormat.class) })
private DataFormatDefinition dataFormatType;
+ public DataFormatTransformerDefinition() {
+ }
+
+ protected DataFormatTransformerDefinition(DataFormatTransformerDefinition
source) {
+ super(source);
+ this.dataFormatType = source.dataFormatType != null ?
source.dataFormatType.copyDefinition() : null;
+ }
+
+ @Override
+ public DataFormatTransformerDefinition copyDefinition() {
+ return new DataFormatTransformerDefinition(this);
+ }
+
public DataFormatDefinition getDataFormatType() {
return dataFormatType;
}
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/transformer/EndpointTransformerDefinition.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/transformer/EndpointTransformerDefinition.java
index 905aceab917..7501cbc3f2e 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/transformer/EndpointTransformerDefinition.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/transformer/EndpointTransformerDefinition.java
@@ -40,6 +40,20 @@ public class EndpointTransformerDefinition extends
TransformerDefinition {
@XmlAttribute
private String uri;
+ public EndpointTransformerDefinition() {
+ }
+
+ protected EndpointTransformerDefinition(EndpointTransformerDefinition
source) {
+ super(source);
+ this.ref = source.ref;
+ this.uri = source.uri;
+ }
+
+ @Override
+ public EndpointTransformerDefinition copyDefinition() {
+ return new EndpointTransformerDefinition(this);
+ }
+
public String getRef() {
return ref;
}
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/transformer/LoadTransformerDefinition.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/transformer/LoadTransformerDefinition.java
index 68a2630d392..3b93b4f0d76 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/transformer/LoadTransformerDefinition.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/transformer/LoadTransformerDefinition.java
@@ -34,11 +34,24 @@ public class LoadTransformerDefinition extends
TransformerDefinition {
@XmlAttribute
private String packageScan;
-
@XmlAttribute
@Metadata(javaType = "java.lang.Boolean", defaultValue = "false")
private String defaults;
+ public LoadTransformerDefinition() {
+ }
+
+ protected LoadTransformerDefinition(LoadTransformerDefinition source) {
+ super(source);
+ this.packageScan = source.packageScan;
+ this.defaults = source.defaults;
+ }
+
+ @Override
+ public LoadTransformerDefinition copyDefinition() {
+ return new LoadTransformerDefinition(this);
+ }
+
public String getDefaults() {
return defaults;
}
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/transformer/TransformerDefinition.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/transformer/TransformerDefinition.java
index 8006181630a..d49cf958169 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/transformer/TransformerDefinition.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/transformer/TransformerDefinition.java
@@ -21,6 +21,7 @@ import jakarta.xml.bind.annotation.XmlAccessorType;
import jakarta.xml.bind.annotation.XmlAttribute;
import jakarta.xml.bind.annotation.XmlType;
+import org.apache.camel.model.CopyableDefinition;
import org.apache.camel.model.InputTypeDefinition;
import org.apache.camel.model.OutputTypeDefinition;
import org.apache.camel.spi.DataType;
@@ -45,7 +46,7 @@ import org.apache.camel.spi.Metadata;
@Metadata(label = "transformation")
@XmlType(name = "transformer")
@XmlAccessorType(XmlAccessType.FIELD)
-public abstract class TransformerDefinition {
+public abstract class TransformerDefinition implements
CopyableDefinition<TransformerDefinition> {
@XmlAttribute
private String scheme;
@@ -56,6 +57,16 @@ public abstract class TransformerDefinition {
@XmlAttribute
private String toType;
+ public TransformerDefinition() {
+ }
+
+ protected TransformerDefinition(TransformerDefinition source) {
+ this.scheme = source.scheme;
+ this.name = source.name;
+ this.fromType = source.fromType;
+ this.toType = source.toType;
+ }
+
public String getScheme() {
return scheme;
}
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/transformer/TransformersDefinition.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/transformer/TransformersDefinition.java
index 907fc405db5..50ef874d2bf 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/transformer/TransformersDefinition.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/transformer/TransformersDefinition.java
@@ -24,6 +24,8 @@ import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlElements;
import jakarta.xml.bind.annotation.XmlRootElement;
+import org.apache.camel.model.CopyableDefinition;
+import org.apache.camel.model.ProcessorDefinitionHelper;
import org.apache.camel.spi.Metadata;
/**
@@ -32,7 +34,7 @@ import org.apache.camel.spi.Metadata;
@Metadata(label = "transformation", title = "Transformations")
@XmlRootElement(name = "transformers")
@XmlAccessorType(XmlAccessType.FIELD)
-public class TransformersDefinition {
+public class TransformersDefinition implements
CopyableDefinition<TransformersDefinition> {
@XmlElements({
@XmlElement(name = "dataFormatTransformer", type =
DataFormatTransformerDefinition.class),
@@ -41,6 +43,18 @@ public class TransformersDefinition {
@XmlElement(name = "customTransformer", type =
CustomTransformerDefinition.class) })
private List<TransformerDefinition> transformers;
+ public TransformersDefinition() {
+ }
+
+ protected TransformersDefinition(TransformersDefinition source) {
+ this.transformers =
ProcessorDefinitionHelper.deepCopyDefinitions(source.transformers);
+ }
+
+ @Override
+ public TransformersDefinition copyDefinition() {
+ return new TransformersDefinition(this);
+ }
+
/**
* The configured transformers
*/
@@ -51,5 +65,4 @@ public class TransformersDefinition {
public List<TransformerDefinition> getTransformers() {
return transformers;
}
-
}
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/validator/CustomValidatorDefinition.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/validator/CustomValidatorDefinition.java
index bd2b6736f64..5bccfc5d307 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/validator/CustomValidatorDefinition.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/validator/CustomValidatorDefinition.java
@@ -42,6 +42,20 @@ public class CustomValidatorDefinition extends
ValidatorDefinition {
return ref;
}
+ public CustomValidatorDefinition() {
+ }
+
+ protected CustomValidatorDefinition(CustomValidatorDefinition source) {
+ super(source);
+ this.ref = source.ref;
+ this.className = source.className;
+ }
+
+ @Override
+ public CustomValidatorDefinition copyDefinition() {
+ return null;
+ }
+
/**
* Set a bean reference of the {@link Validator}
*/
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/validator/EndpointValidatorDefinition.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/validator/EndpointValidatorDefinition.java
index 458b54d828a..c8eab4cd60b 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/validator/EndpointValidatorDefinition.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/validator/EndpointValidatorDefinition.java
@@ -42,6 +42,20 @@ public class EndpointValidatorDefinition extends
ValidatorDefinition {
@XmlAttribute
private String uri;
+ public EndpointValidatorDefinition() {
+ }
+
+ public EndpointValidatorDefinition(EndpointValidatorDefinition source) {
+ super(source);
+ this.ref = source.ref;
+ this.uri = source.ref;
+ }
+
+ @Override
+ public EndpointValidatorDefinition copyDefinition() {
+ return new EndpointValidatorDefinition(this);
+ }
+
public String getRef() {
return ref;
}
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/validator/PredicateValidatorDefinition.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/validator/PredicateValidatorDefinition.java
index 5fc20ce06bb..d191827f0bc 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/validator/PredicateValidatorDefinition.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/validator/PredicateValidatorDefinition.java
@@ -41,6 +41,19 @@ public class PredicateValidatorDefinition extends
ValidatorDefinition {
@XmlElementRef
private ExpressionDefinition expression;
+ public PredicateValidatorDefinition() {
+ }
+
+ protected PredicateValidatorDefinition(PredicateValidatorDefinition
source) {
+ super(source);
+ this.expression = source.expression != null ?
source.expression.copyDefinition() : null;
+ }
+
+ @Override
+ public ValidatorDefinition copyDefinition() {
+ return new PredicateValidatorDefinition(this);
+ }
+
public ExpressionDefinition getExpression() {
return expression;
}
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/validator/ValidatorDefinition.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/validator/ValidatorDefinition.java
index 8e81a61bc77..f16b3b920dd 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/validator/ValidatorDefinition.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/validator/ValidatorDefinition.java
@@ -21,6 +21,7 @@ import jakarta.xml.bind.annotation.XmlAccessorType;
import jakarta.xml.bind.annotation.XmlAttribute;
import jakarta.xml.bind.annotation.XmlType;
+import org.apache.camel.model.CopyableDefinition;
import org.apache.camel.model.InputTypeDefinition;
import org.apache.camel.model.OutputTypeDefinition;
import org.apache.camel.spi.DataType;
@@ -40,7 +41,7 @@ import org.apache.camel.spi.Validator;
@Metadata(label = "validation")
@XmlType(name = "validator")
@XmlAccessorType(XmlAccessType.FIELD)
-public abstract class ValidatorDefinition {
+public abstract class ValidatorDefinition implements
CopyableDefinition<ValidatorDefinition> {
@XmlAttribute
private String type;
@@ -49,6 +50,13 @@ public abstract class ValidatorDefinition {
return type;
}
+ public ValidatorDefinition() {
+ }
+
+ protected ValidatorDefinition(ValidatorDefinition source) {
+ this.type = source.type;
+ }
+
/**
* Set the data type name. If you specify 'xml:XYZ', the validator will be
picked up if message type is 'xml:XYZ'.
* If you specify just 'xml', the validator matches with all of 'xml'
message type like 'xml:ABC' or 'xml:DEF'.
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/validator/ValidatorsDefinition.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/validator/ValidatorsDefinition.java
index be66537eb0a..1831b119333 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/validator/ValidatorsDefinition.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/validator/ValidatorsDefinition.java
@@ -24,6 +24,7 @@ import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlElements;
import jakarta.xml.bind.annotation.XmlRootElement;
+import org.apache.camel.model.ProcessorDefinitionHelper;
import org.apache.camel.spi.Metadata;
/**
@@ -40,6 +41,13 @@ public class ValidatorsDefinition {
@XmlElement(name = "customValidator", type =
CustomValidatorDefinition.class) })
private List<ValidatorDefinition> validators;
+ public ValidatorsDefinition() {
+ }
+
+ protected ValidatorsDefinition(ValidatorsDefinition source) {
+ this.validators =
ProcessorDefinitionHelper.deepCopyDefinitions(source.validators);
+ }
+
/**
* The configured transformers
*/
diff --git
a/core/camel-core/src/test/java/org/apache/camel/model/RouteTemplateDefinitionTest.java
b/core/camel-core/src/test/java/org/apache/camel/model/RouteTemplateDefinitionTest.java
index 0b8d0130f89..20beee2cd94 100644
---
a/core/camel-core/src/test/java/org/apache/camel/model/RouteTemplateDefinitionTest.java
+++
b/core/camel-core/src/test/java/org/apache/camel/model/RouteTemplateDefinitionTest.java
@@ -62,8 +62,7 @@ class RouteTemplateDefinitionTest {
}
private static final class CopyableDefinitionProcessDefinition
- extends ProcessorDefinition<CopyableDefinitionProcessDefinition>
- implements CopyableDefinition {
+ extends ProcessorDefinition<CopyableDefinitionProcessDefinition> {
public CopyableDefinitionProcessDefinition() {
setId(randomUUID().toString());