You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by dm...@apache.org on 2018/11/16 09:06:15 UTC

[camel] 02/03: CAMEL-12908: Cannot start route using rest dsl due to a mysterious duplicate route id

This is an automated email from the ASF dual-hosted git repository.

dmvolod pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git

commit fb9df2dbed717517ca50994d15b74f34aa9e7e37
Author: Dmitry Volodin <dm...@gmail.com>
AuthorDate: Tue Nov 13 16:43:59 2018 +0300

    CAMEL-12908: Cannot start route using rest dsl due to a mysterious
    duplicate route id
---
 .../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 041bdc2..b005955 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,14 +19,18 @@ 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.builder.ErrorHandlerBuilder;
+import org.apache.camel.model.rest.RestDefinition;
+import org.apache.camel.model.rest.VerbDefinition;
 import org.apache.camel.util.CamelContextHelper;
 import org.apache.camel.util.EndpointHelper;
 import org.apache.camel.util.ObjectHelper;
@@ -145,10 +149,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);
@@ -162,6 +167,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 946fb76..a960827 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
@@ -903,6 +903,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();
@@ -910,7 +911,9 @@ public class RestDefinition extends OptionalIdentifiedDefinition<RestDefinition>
                     route.setId(id);
                 }
             }
+            */
 
+            /*
             String routeId = verb.idOrCreate(camelContext.getNodeIdFactory());
 
             if (!verb.getUsedForGeneratingNodeId()) {
@@ -919,6 +922,7 @@ public class RestDefinition extends OptionalIdentifiedDefinition<RestDefinition>
 
             verb.setRouteId(routeId);
             options.put("routeId", routeId);
+            */
             if (component != null && !component.isEmpty()) {
                 options.put("componentName", component);
             }
@@ -1012,7 +1016,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 bf56005..acbe38a 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;
     }