CAMEL-9426: rest-api route should only be added once
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/61aa28c9 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/61aa28c9 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/61aa28c9 Branch: refs/heads/master Commit: 61aa28c976d024eb5a4c3f760145a8a4565dc5d5 Parents: b437368 Author: Claus Ibsen <davscl...@apache.org> Authored: Wed Dec 16 09:28:13 2015 +0100 Committer: Claus Ibsen <davscl...@apache.org> Committed: Wed Dec 16 09:28:13 2015 +0100 ---------------------------------------------------------------------- .../org/apache/camel/builder/RouteBuilder.java | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/61aa28c9/camel-core/src/main/java/org/apache/camel/builder/RouteBuilder.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/builder/RouteBuilder.java b/camel-core/src/main/java/org/apache/camel/builder/RouteBuilder.java index 984e7cf..bc5b61f 100644 --- a/camel-core/src/main/java/org/apache/camel/builder/RouteBuilder.java +++ b/camel-core/src/main/java/org/apache/camel/builder/RouteBuilder.java @@ -26,6 +26,7 @@ import org.apache.camel.CamelContext; import org.apache.camel.Endpoint; import org.apache.camel.RoutesBuilder; import org.apache.camel.impl.DefaultCamelContext; +import org.apache.camel.model.FromDefinition; import org.apache.camel.model.InterceptDefinition; import org.apache.camel.model.InterceptFromDefinition; import org.apache.camel.model.InterceptSendToEndpointDefinition; @@ -446,8 +447,21 @@ public abstract class RouteBuilder extends BuilderSupport implements RoutesBuild // convert rests api-doc into routes so they are routes for runtime for (RestConfiguration config : camelContext.getRestConfigurations()) { if (config.getApiContextPath() != null) { - RouteDefinition route = RestDefinition.asRouteApiDefinition(camelContext, config); - routes.add(route); + // avoid adding rest-api multiple times, in case multiple RouteBuilder classes is added + // to the CamelContext, as we only want to setup rest-api once + // so we check all existing routes if they have rest-api route already added + boolean hasRestApi = false; + for (RouteDefinition route : camelContext.getRouteDefinitions()) { + FromDefinition from = route.getInputs().get(0); + if (from.getUri() != null && from.getUri().startsWith("rest-api:")) { + hasRestApi = true; + } + } + if (!hasRestApi) { + RouteDefinition route = RestDefinition.asRouteApiDefinition(camelContext, config); + log.debug("Adding routeId: {} as rest-api route", route.getId()); + routes.add(route); + } } }