This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch 13162 in repository https://gitbox.apache.org/repos/asf/camel.git
commit 41d63701658778b03ea36f7c5c2f4a93ab446eec Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Tue Mar 19 10:22:13 2019 +0100 (fix) CAMEL-13162: Fixed rest-dsl advice-with using inlined route with route id and replacing from should not append routeId as uri parameter. --- .../apache/camel/model/RouteDefinitionHelper.java | 5 +- .../component/rest/FromRestAdviceWithTest.java | 75 ++++++++++++++++++++++ 2 files changed, 78 insertions(+), 2 deletions(-) diff --git a/core/camel-core/src/main/java/org/apache/camel/model/RouteDefinitionHelper.java b/core/camel-core/src/main/java/org/apache/camel/model/RouteDefinitionHelper.java index c9161e7..6476e6c 100644 --- a/core/camel-core/src/main/java/org/apache/camel/model/RouteDefinitionHelper.java +++ b/core/camel-core/src/main/java/org/apache/camel/model/RouteDefinitionHelper.java @@ -191,11 +191,12 @@ public final class RouteDefinitionHelper { verb.setRouteId(id); } + // if its the rest/rest-api endpoints then they should include the route id as well if (ObjectHelper.isNotEmpty(route.getInput())) { FromDefinition fromDefinition = route.getInput(); String endpointUri = fromDefinition.getEndpointUri(); - if (ObjectHelper.isNotEmpty(endpointUri)) { - Map<String, Object> options = new HashMap<String, Object>(); + if (ObjectHelper.isNotEmpty(endpointUri) && (endpointUri.startsWith("rest:") || endpointUri.startsWith("rest-api:"))) { + Map<String, Object> options = new HashMap<String, Object>(1); options.put("routeId", route.getId()); endpointUri = URISupport.appendParametersToURI(endpointUri, options); diff --git a/core/camel-core/src/test/java/org/apache/camel/component/rest/FromRestAdviceWithTest.java b/core/camel-core/src/test/java/org/apache/camel/component/rest/FromRestAdviceWithTest.java new file mode 100644 index 0000000..9534f2c --- /dev/null +++ b/core/camel-core/src/test/java/org/apache/camel/component/rest/FromRestAdviceWithTest.java @@ -0,0 +1,75 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.component.rest; + +import org.apache.camel.ContextTestSupport; +import org.apache.camel.builder.AdviceWithRouteBuilder; +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.impl.JndiRegistry; +import org.apache.camel.model.RouteDefinition; +import org.apache.camel.reifier.RouteReifier; +import org.junit.Test; + +public class FromRestAdviceWithTest extends ContextTestSupport { + + @Override + public boolean isUseRouteBuilder() { + return false; + } + + @Override + protected JndiRegistry createRegistry() throws Exception { + JndiRegistry jndi = super.createRegistry(); + jndi.bind("dummy-rest", new DummyRestConsumerFactory()); + return jndi; + } + + @Test + public void testAdviceWith() throws Exception { + context.addRoutes(new RouteBuilder() { + @Override + public void configure() throws Exception { + rest("/say/hello") + .get() + .route().routeId("myRoute") + .transform().constant("Bye World") + .to("direct:hello"); + + from("direct:hello") + .to("mock:hello"); + } + }); + + RouteDefinition route = context.getRouteDefinition("myRoute"); + RouteReifier.adviceWith(route, context, new AdviceWithRouteBuilder() { + @Override + public void configure() throws Exception { + replaceFromWith("direct:foo"); + } + }); + + context.start(); + + getMockEndpoint("mock:hello").expectedMessageCount(1); + + String out = template.requestBody("direct:foo", "I was here", String.class); + assertEquals("Bye World", out); + + assertMockEndpointsSatisfied(); + } + +}