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;
     }
 

Reply via email to