You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by ski n <ra...@gmail.com> on 2022/09/06 14:46:06 UTC

Types in routeTemplates

I like to create a route template with a parameter of a specific Java type.

For example the following routetemplate:

routeTemplate("mypollenrich")
        .templateParameter("timeout","5000")
        .from("direct:in")
        .pollEnrich("myuri", "{{timeout}}","CurrentEnrichStrategy")
                .to("direct:out");

The above routetemplate is not accepted because the parameter "{{timeout}}"
is a String, while a long is expected. Is it possible to pass the parameter
as a long (and in general just any Java type)?

I now tried to parse the String as Long like this:

routeTemplate("mypollenrich")
        .templateParameter("timeout","5000")
        .from("direct:in")
        .pollEnrich("myuri",
Long.parseLong("{{timeout}}"),"CurrentEnrichStrategy")
                .to("direct:out");

But doesn't seem allowed. What is the correct way of doing it?

Raymond

Re: Types in routeTemplates

Posted by Claus Ibsen <cl...@gmail.com>.
Hi

Yes, it's intended to have string types that accept property placeholders.
But sometimes you need to add them manually.

A long term goal is to generate all DSLs from a canonical DSL meta-model,
then we can ensure a consistent way for all programming languages, eg Java,
Kotlin, Groovy etc.
But that is Camel 5 or beyond.



On Wed, Sep 7, 2022 at 9:33 AM ski n <ra...@gmail.com> wrote:

> That's nice.
>
> I already found out you can write for example the throttle as:
>
> .throttle(1).timePeriodMillis(1000)
>
> Thus with two longs as input, but it's also possible:
>
>
> .throttle(constant("{{maximumrequestcount}}")).timePeriodMillis("{{timeperiod}}")
>
> In the second case the first parameter is an expression and the second
> parameter a string.
>
> It's thus flexible that both our possible. Is this now a standard that
> object types will also become available as string or expression in the Java
> DSL?
>
> Raymond
>
> On Tue, Sep 6, 2022 at 6:29 PM Claus Ibsen <cl...@gmail.com> wrote:
>
> > Ah yeah we need a timeout that takes a string value
> >
> > .pollEnrich("myUrl).timeout("xxx")....
> >
> > I just added that to 3.19 and 3.18.x
> >
> >
> >
> > On Tue, Sep 6, 2022 at 4:46 PM ski n <ra...@gmail.com> wrote:
> >
> > > I like to create a route template with a parameter of a specific Java
> > type.
> > >
> > > For example the following routetemplate:
> > >
> > > routeTemplate("mypollenrich")
> > >         .templateParameter("timeout","5000")
> > >         .from("direct:in")
> > >         .pollEnrich("myuri", "{{timeout}}","CurrentEnrichStrategy")
> > >                 .to("direct:out");
> > >
> > > The above routetemplate is not accepted because the parameter
> > "{{timeout}}"
> > > is a String, while a long is expected. Is it possible to pass the
> > parameter
> > > as a long (and in general just any Java type)?
> > >
> > > I now tried to parse the String as Long like this:
> > >
> > > routeTemplate("mypollenrich")
> > >         .templateParameter("timeout","5000")
> > >         .from("direct:in")
> > >         .pollEnrich("myuri",
> > > Long.parseLong("{{timeout}}"),"CurrentEnrichStrategy")
> > >                 .to("direct:out");
> > >
> > > But doesn't seem allowed. What is the correct way of doing it?
> > >
> > > 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

Re: Types in routeTemplates

Posted by ski n <ra...@gmail.com>.
That's nice.

I already found out you can write for example the throttle as:

.throttle(1).timePeriodMillis(1000)

Thus with two longs as input, but it's also possible:

.throttle(constant("{{maximumrequestcount}}")).timePeriodMillis("{{timeperiod}}")

In the second case the first parameter is an expression and the second
parameter a string.

It's thus flexible that both our possible. Is this now a standard that
object types will also become available as string or expression in the Java
DSL?

Raymond

On Tue, Sep 6, 2022 at 6:29 PM Claus Ibsen <cl...@gmail.com> wrote:

> Ah yeah we need a timeout that takes a string value
>
> .pollEnrich("myUrl).timeout("xxx")....
>
> I just added that to 3.19 and 3.18.x
>
>
>
> On Tue, Sep 6, 2022 at 4:46 PM ski n <ra...@gmail.com> wrote:
>
> > I like to create a route template with a parameter of a specific Java
> type.
> >
> > For example the following routetemplate:
> >
> > routeTemplate("mypollenrich")
> >         .templateParameter("timeout","5000")
> >         .from("direct:in")
> >         .pollEnrich("myuri", "{{timeout}}","CurrentEnrichStrategy")
> >                 .to("direct:out");
> >
> > The above routetemplate is not accepted because the parameter
> "{{timeout}}"
> > is a String, while a long is expected. Is it possible to pass the
> parameter
> > as a long (and in general just any Java type)?
> >
> > I now tried to parse the String as Long like this:
> >
> > routeTemplate("mypollenrich")
> >         .templateParameter("timeout","5000")
> >         .from("direct:in")
> >         .pollEnrich("myuri",
> > Long.parseLong("{{timeout}}"),"CurrentEnrichStrategy")
> >                 .to("direct:out");
> >
> > But doesn't seem allowed. What is the correct way of doing it?
> >
> > Raymond
> >
>
>
> --
> Claus Ibsen
> -----------------
> http://davsclaus.com @davsclaus
> Camel in Action 2: https://www.manning.com/ibsen2
>

Re: Types in routeTemplates

Posted by Claus Ibsen <cl...@gmail.com>.
Ah yeah we need a timeout that takes a string value

.pollEnrich("myUrl).timeout("xxx")....

I just added that to 3.19 and 3.18.x



On Tue, Sep 6, 2022 at 4:46 PM ski n <ra...@gmail.com> wrote:

> I like to create a route template with a parameter of a specific Java type.
>
> For example the following routetemplate:
>
> routeTemplate("mypollenrich")
>         .templateParameter("timeout","5000")
>         .from("direct:in")
>         .pollEnrich("myuri", "{{timeout}}","CurrentEnrichStrategy")
>                 .to("direct:out");
>
> The above routetemplate is not accepted because the parameter "{{timeout}}"
> is a String, while a long is expected. Is it possible to pass the parameter
> as a long (and in general just any Java type)?
>
> I now tried to parse the String as Long like this:
>
> routeTemplate("mypollenrich")
>         .templateParameter("timeout","5000")
>         .from("direct:in")
>         .pollEnrich("myuri",
> Long.parseLong("{{timeout}}"),"CurrentEnrichStrategy")
>                 .to("direct:out");
>
> But doesn't seem allowed. What is the correct way of doing it?
>
> Raymond
>


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