Raymond created CAMEL-20890:
-------------------------------
Summary: Use Step ID's in routeTemplate
Key: CAMEL-20890
URL: https://issues.apache.org/jira/browse/CAMEL-20890
Project: Camel
Issue Type: Bug
Components: camel-core
Affects Versions: 4.6.0
Reporter: Raymond
I like to use steps in my routeTemplates. This works, however when I want to
specify the ID I cannot use template parameter:
{code:java}
<routeTemplates id="camel" xmlns="http://camel.apache.org/schema/spring">
<!-- create a route template with the given name -->
<routeTemplate id="myTemplate">
<!-- here we define the required input parameters (can have default
values) -->
<templateParameter name="name"/>
<templateParameter name="greeting"/>
<templateParameter name="myPeriod" defaultValue="3s"/>
<route>
<from uri="timer:{{name}}?period={{myPeriod}}"/>
<step id="{{name}}">
<setBody>
<simple>{{greeting}} {{name}}</simple>
</setBody>
<log message="${body}"/>
</step>
</route>
</routeTemplate>
</routeTemplates> {code}
When I create 2 routes with the above template I get the following error:
{code:java}
java.lang.reflect.InvocationTargetException
at jdk.internal.reflect.DirectMethodHandleAccessor.invoke
(DirectMethodHandleAccessor.java:118)
at java.lang.reflect.Method.invoke (Method.java:580)
at org.apache.camel.maven.RunMojo$1.run (RunMojo.java:402)
at java.lang.Thread.run (Thread.java:1583)
Caused by: org.apache.camel.FailedToCreateRouteFromTemplateException: Failed to
create route deux from template myTemplate because of duplicate id detected:
{{name}}. Please correct ids to be unique among all your routes.
at org.apache.camel.impl.DefaultModel.addRouteFromTemplate
(DefaultModel.java:518)
at org.apache.camel.impl.DefaultModel.addRouteFromTemplatedRoute
(DefaultModel.java:566)
at org.apache.camel.impl.DefaultCamelContext.addRouteFromTemplatedRoute
(DefaultCamelContext.java:384)
at org.apache.camel.model.Model.addRouteFromTemplatedRoutes (Model.java:275)
at org.apache.camel.builder.RouteBuilder.populateTemplatedRoutes
(RouteBuilder.java:822)
at org.apache.camel.builder.RouteBuilder.addTemplatedRoutesToCamelContext
(RouteBuilder.java:678)
at org.apache.camel.impl.engine.AbstractCamelContext.addTemplatedRoutes
(AbstractCamelContext.java:993)
at org.apache.camel.main.RoutesConfigurer.addDiscoveredRoutes
(RoutesConfigurer.java:259)
at org.apache.camel.main.RoutesConfigurer.configureRoutes
(RoutesConfigurer.java:236)
at org.apache.camel.main.BaseMainSupport.configureRoutes
(BaseMainSupport.java:613)
at org.apache.camel.main.BaseMainSupport.postProcessCamelContext
(BaseMainSupport.java:693)
at org.apache.camel.main.MainSupport.initCamelContext (MainSupport.java:339)
at org.apache.camel.main.Main.doInit (Main.java:133)
at org.apache.camel.support.service.BaseService.init (BaseService.java:78)
at org.apache.camel.main.MainSupport.run (MainSupport.java:84)
at org.apache.camel.main.MainCommandLineSupport.run
(MainCommandLineSupport.java:237)
at org.apache.camel.example.MyApplication.main (MyApplication.java:41)
at jdk.internal.reflect.DirectMethodHandleAccessor.invoke
(DirectMethodHandleAccessor.java:103)
at java.lang.reflect.Method.invoke (Method.java:580)
at org.apache.camel.maven.RunMojo$1.run (RunMojo.java:402)
at java.lang.Thread.run (Thread.java:1583)
{code}
The step ID doesn't get interpolated and is used a the literal "\{{name}}". I
need to set the step id myself to get information about the specific route.
Note that I run into when I was using kamelets with the step EIP, but this is a
smaller example.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)