This is an automated email from the ASF dual-hosted git repository. acosentino pushed a commit to branch sandbox/camel-3.x in repository https://gitbox.apache.org/repos/asf/camel.git
commit 47559028cb151fd2aed8a81352251ad0759f46f3 Author: Dmitry Volodin <[email protected]> AuthorDate: Tue Nov 13 16:43:59 2018 +0300 CAMEL-12908: Cannot start route using rest dsl due to a mysterious duplicate route id Conflicts: camel-core/src/main/java/org/apache/camel/model/RouteDefinitionHelper.java --- .../apache/camel/model/RouteDefinitionHelper.java | 33 +++++++++++++++++++++- .../apache/camel/model/rest/RestDefinition.java | 6 +++- .../apache/camel/model/rest/VerbDefinition.java | 2 +- 3 files changed, 38 insertions(+), 3 deletions(-) diff --git a/camel-core/src/main/java/org/apache/camel/model/RouteDefinitionHelper.java b/camel-core/src/main/java/org/apache/camel/model/RouteDefinitionHelper.java index 2d544b7..95f6c0b 100644 --- a/camel-core/src/main/java/org/apache/camel/model/RouteDefinitionHelper.java +++ b/camel-core/src/main/java/org/apache/camel/model/RouteDefinitionHelper.java @@ -19,16 +19,20 @@ package org.apache.camel.model; import java.io.UnsupportedEncodingException; import java.net.URISyntaxException; import java.util.ArrayList; +import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashSet; import java.util.List; +import java.util.Map; import java.util.Set; import org.apache.camel.CamelContext; import org.apache.camel.ErrorHandlerFactory; import org.apache.camel.RuntimeCamelException; import org.apache.camel.builder.ErrorHandlerBuilder; +import org.apache.camel.model.rest.RestDefinition; +import org.apache.camel.model.rest.VerbDefinition; import org.apache.camel.support.CamelContextHelper; import org.apache.camel.support.EndpointHelper; import org.apache.camel.util.ObjectHelper; @@ -147,10 +151,11 @@ public final class RouteDefinitionHelper { for (final RouteDefinition route : routes) { if (route.getId() == null) { // keep assigning id's until we find a free name + boolean done = false; String id = null; while (!done) { - id = context.getNodeIdFactory().createId(route); + id = route.idOrCreate(context.getNodeIdFactory()); done = !customIds.contains(id); } route.setId(id); @@ -164,6 +169,32 @@ public final class RouteDefinitionHelper { route.setCustomId(false); customIds.add(route.getId()); } + RestDefinition rest = route.getRestDefinition(); + if (rest != null && route.isRest()) { + for (VerbDefinition verb : rest.getVerbs()) { + String id = verb.idOrCreate(context.getNodeIdFactory()); + if (!verb.getUsedForGeneratingNodeId()) { + id = route.getId(); + } + verb.setRouteId(id); + } + List<FromDefinition> fromDefinitions = route.getInputs(); + + if (ObjectHelper.isNotEmpty(fromDefinitions)) { + FromDefinition fromDefinition = fromDefinitions.get(0); + String endpointUri = fromDefinition.getEndpointUri(); + if (ObjectHelper.isNotEmpty(endpointUri)) { + Map<String, Object> options = new HashMap<String, Object>(); + options.put("routeId", route.getId()); + endpointUri = URISupport.appendParametersToURI(endpointUri, options); + + // replace uri with new routeId + fromDefinition.setUri(endpointUri); + fromDefinitions.set(0, fromDefinition); + route.setInputs(fromDefinitions); + } + } + } } } diff --git a/camel-core/src/main/java/org/apache/camel/model/rest/RestDefinition.java b/camel-core/src/main/java/org/apache/camel/model/rest/RestDefinition.java index 3402f1d..dd7ddc0 100644 --- a/camel-core/src/main/java/org/apache/camel/model/rest/RestDefinition.java +++ b/camel-core/src/main/java/org/apache/camel/model/rest/RestDefinition.java @@ -854,6 +854,7 @@ public class RestDefinition extends OptionalIdentifiedDefinition<RestDefinition> options.put("outType", outType); } // if no route id has been set, then use the verb id as route id + /* if (!route.hasCustomIdAssigned()) { // use id of verb as route id String id = verb.getId(); @@ -861,7 +862,9 @@ public class RestDefinition extends OptionalIdentifiedDefinition<RestDefinition> route.setId(id); } } + */ + /* String routeId = verb.idOrCreate(camelContext.getNodeIdFactory()); if (!verb.getUsedForGeneratingNodeId()) { @@ -870,6 +873,7 @@ public class RestDefinition extends OptionalIdentifiedDefinition<RestDefinition> verb.setRouteId(routeId); options.put("routeId", routeId); + */ if (component != null && !component.isEmpty()) { options.put("componentName", component); } @@ -963,7 +967,7 @@ public class RestDefinition extends OptionalIdentifiedDefinition<RestDefinition> // the route should be from this rest endpoint route.fromRest(from); - route.routeId(routeId); + //route.routeId(routeId); route.setRestDefinition(this); answer.add(route); } diff --git a/camel-core/src/main/java/org/apache/camel/model/rest/VerbDefinition.java b/camel-core/src/main/java/org/apache/camel/model/rest/VerbDefinition.java index 75ae044..19c39df 100644 --- a/camel-core/src/main/java/org/apache/camel/model/rest/VerbDefinition.java +++ b/camel-core/src/main/java/org/apache/camel/model/rest/VerbDefinition.java @@ -141,7 +141,7 @@ public class VerbDefinition extends OptionalIdentifiedDefinition<VerbDefinition> /** * Sets swagger operation response messages. */ - public void setResponseMsgs(List<RestOperationResponseMsgDefinition> params) { + public void setResponseMsgs(List<RestOperationResponseMsgDefinition> responseMsgs) { this.responseMsgs = responseMsgs; }
