Hi

You are using a bit old Camel version, try with 3.18.x as route template
and kamelets keep improving going forward.

The kamelet component will first look in camel content if a route template
with the given id exists, and use it as-is.
And if not, then it tries to load it via yaml kamelet files.

So in your use case if you manually load the templates and ensure it is all
correct then there is a chance that you can "misuse" the kamelet component.
But use latest version.

On Mon, Jul 25, 2022 at 8:21 AM ski n <raymondmees...@gmail.com> wrote:

> OK, thanks (this was more or less what I was trying to avoid :) )
>
> I thought that this is possible based on the documentation:
>
> https://camel.apache.org/components/next/kamelet-component.html
>
> " The Kamelet Component provides support for interacting with the Camel
> Route Template <https://camel.apache.org/manual/route-template.html>
> engine
> using Endpoint semantic. "
>
> And later it says:
>
> "Configuring components can be done with the Component DSL
> <https://camel.apache.org/manual/component-dsl.html>, in a configuration
> file (application.properties|yaml), or directly with Java code."
>
> For me, it's not really clear what 'interacting with the Camel Route
> Template' and 'configuring' means? Why do I need the extra initiation step
> in between?
> I thought I configure it directly by using it in a route through endpoint
> semantics?
>
> Are there plans to make it possible like I described in the previous post
> (thus without YAML)? I am already using the Java DSL and XML DSL and I
> don't want to use the YAML DSL as well.
>
> My goal is to define the template through the Java API
>
> and
>
> then let users write a route and call it to use only endpoint semantic. I
> do not know what values the user will use (that's why I parameterized them)
> and the user doesn't know anything about templates.
>
> I guess I could write a preprocessor, but that's a bit beyond the purpose
> of avoiding the current preprocessing (I have a web application and get the
> route configuration as JSON and then convert it to an XML route). The goal
> was to make this process easier :)
>
> Raymond
>
>
>
>
>
> On Mon, Jul 25, 2022 at 7:37 AM Claus Ibsen <claus.ib...@gmail.com> wrote:
>
> > Hi
> >
> > Kamelets and route templates are not 100% the same, so what you do is not
> > possible.
> >
> > The kamelet component (eg to("kamelet:xxx") is for kamelets, that are
> yaml
> > files with metadata and an embedded route template (flow)
> > https://github.com/apache/camel-kamelets
> >
> > With route templates, you need to use the java api, to add a route from a
> > template, and give it some id, and parameters.
> > And then from your route that wants to call then use direct:xxx to call
> the
> > new route.
> >
> >
> >
> > On Sun, Jul 24, 2022 at 11:19 PM ski n <raymondmees...@gmail.com> wrote:
> >
> > > Hi,
> > >
> > > I have a Camel routeTemplate like this:
> > >
> > > public class MyRouteTemplates extends RouteBuilder {
> > >
> > >     @Override
> > >     public void configure() throws Exception {
> > >         // create a route template with the given name
> > >         routeTemplate("myTemplate")
> > >             // here we define the required input parameters (can have
> > > default values)
> > >             .templateParameter("name")
> > >             .templateParameter("greeting")
> > >             .templateParameter("myPeriod", "3s")
> > >             // here comes the route in the template
> > >             // notice how we use {{name}} to refer to the template
> > > parameters
> > >             // we can also use {{propertyName}} to refer to property
> > > placeholders
> > >             .from("timer:{{name}}?period={{myPeriod}}")
> > >                 .setBody(simple("{{greeting}} ${body}"))
> > >                 .log("${body}");
> > >     }
> > > }
> > >
> > > And I like to call it from a route as a Kamelet like this:
> > >
> > > from("direct:a")
> > >   .to("kamelet:myTemplate?someparameters")
> > >
> > > How to make "myTemplate" available to the CamelContext?
> > >
> > >
> > > I saw in camel-examples that is using camel-main that you can do it
> like
> > > this:
> > >
> > >         Main main = new Main();
> > >         main.configure().addRoutesBuilder(MyRouteTemplates.class);
> > >
> > > However I am not using main, but Camel core. So I tried it like:
> > >
> > > MyRouteTemplates myRouteTemplates = new new MyRouteTemplates();
> > > myRouteTemplates.addRoutesToCamelContext(context);
> > >
> > > or
> > >
> > > context.addRoutes(myRouteTemplates);
> > >
> > >
> > > However I get
> > "org.apache.camel.component.kamelet.KameletNotFoundException:
> > > Kamelet with id myTemplate not found in locations:
> classpath:/kamelets".
> > >
> > > This was using Camel 3.14.4
> > >
> > > What is the correct way to register/load routeTemplate so they can used
> > by
> > > a Kamelet endpoint?
> > >
> > > Raymond
> > >
> >
> >
> > --
> > Claus Ibsen
> > -----------------
> > http://davsclaus.com @davsclaus
> > Camel in Action 2: https://www.manning.com/ibsen2
> >
>


-- 
Claus Ibsen
-----------------
http://davsclaus.com @davsclaus
Camel in Action 2: https://www.manning.com/ibsen2

Reply via email to