From 8aab61a7a286f6c0ed34433c068ca065084dc67d Mon Sep 17 00:00:00 2001 From: Claus Ibsen Date: Thu, 14 Mar 2024 14:38:23 +0100 Subject: [PATCH] CAMEL-20545: Using replaceFromWith with camel-test and having route templates can lead to duplicate consumer on starutp error. (#13485) --- .../org/apache/camel/model/FromDefinition.java | 16 ++++++++++++++++ .../camel/model/RouteTemplateDefinition.java | 3 ++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/FromDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/FromDefinition.java index dc5d4b95665b4..4117dc5efc15a 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/FromDefinition.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/FromDefinition.java @@ -66,6 +66,22 @@ public FromDefinition(EndpointConsumerBuilder endpointConsumerBuilder) { setEndpointConsumerBuilder(endpointConsumerBuilder); } + FromDefinition copy() { + FromDefinition copy = new FromDefinition(); + copy.parent = this.parent; + copy.endpoint = this.endpoint; + copy.endpointConsumerBuilder = this.endpointConsumerBuilder; + copy.uri = this.uri; + copy.variableReceive = this.variableReceive; + copy.setCamelContext(this.getCamelContext()); + copy.setId(this.getId()); + copy.setCustomId(this.getCustomId()); + copy.setDescription(this.getDescription()); + copy.setLineNumber(this.getLineNumber()); + copy.setLocation(this.getLocation()); + return copy; + } + @Override public String toString() { return "From[" + getLabel() + "]"; 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 44802872d58e0..baeecddbff1f8 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 @@ -410,7 +410,8 @@ public RouteDefinition asRouteDefinition() { copy.setDelayer(route.getDelayer()); copy.setGroup(route.getGroup()); copy.setInheritErrorHandler(route.isInheritErrorHandler()); - copy.setInput(route.getInput()); + // make a defensive copy of the input as input can be adviced during testing or other changes + copy.setInput(route.getInput().copy()); copy.setInputType(route.getInputType()); copy.setLogMask(route.getLogMask()); copy.setMessageHistory(route.getMessageHistory());