On Thu, Sep 8, 2022 at 2:39 PM ski n <raymondmees...@gmail.com> wrote:
> Yes, that was, based on the documentation, the first thing I tried, but I > got: > > org.apache.camel.ResolveEndpointFailedException: Failed to resolve > endpoint: bean://MyProcessor-1?method=process) due to: No bean could be > found in the registry for: MyProcessor-1 > > That's why I started to register it manually. > > Now I added "-1" the templatedBean name itself but then I got: > > Failed to resolve endpoint: bean:{{MyProcessor}}?method=process) due to: > Property with key [MyProcessor] not found in properties from text: > bean:{{MyProcessor}}?method=process) > > This is logical because now {{MyProcessor-1}} is expected. However when I > provide that, it says " No bean could be found in the registry for: > MyProcessor-1-1" . So that's a kind of a deadlock. > > As a side note: From the user point of view wouldn't it by easy if this was > possible: > > .bean("mybean") > .parameter("{{first constructor parameter}}") > .parameter("{{second constructor parameter}}") > .method("mymethod") > .parameter("{{first method parameter}}") > .parameter("{{second method parameter}}") > > And the parameters in a routeTemplate can then be set with a normal > templateParameter. > > No the route template DSL is complex already as-is. See the docs where you can create the bean with inlined groovy or java (via java-joor). There you can use placeholders. You can also try with passing in the parameters as constructor via #class syntax .templateBean("MyProcessor").type("#class:com.foo.MyProcessor({{myProperty}})") > Raymond > > > On Thu, Sep 8, 2022 at 1:51 PM Claus Ibsen <claus.ib...@gmail.com> wrote: > > > You should NOT register the processor yourself, this is done by the > > template bean thingy automatically > > > > On Thu, Sep 8, 2022 at 1:39 PM ski n <raymondmees...@gmail.com> wrote: > > > > > OK, sorry, I actually read the documentation on bindings and did use > > > {{MyProcessor}} as the bean name. > > > > > > But it didn't work. > > > > > > I register my bean/processor as: > > > > > > registry.bind("MyProcessor", new MyProcessor("")); > > > > > > But when I run it, I got: > > > > > > Failed to resolve endpoint: bean://MyProcessor-1?method=process due to: > > No > > > bean could be found in the registry for: MyProcessor-1 > > > > > > Don't know where the "-1" comes from. However when I register it with > > that > > > > > > registry.bind("MyProcessor-1", new MyProcessor("")); > > > > > > Then the route works but not with the routetemplate parameter (because > > it's > > > already iniaitized. So I tried it with > > > > > > registry.bind("MyProcessor-1", MyProcessor.class); > > > > > > > > > Caused by: org.apache.camel.ResolveEndpointFailedException: Failed to > > > resolve endpoint: bean://MyProcessor-1?method=process due to: > > > java.lang.NoSuchMethodException: > > > > > > I also tried it with method parameters, instead of the constructor. I > > first > > > tried to put an extra parameter on the process method, but the > interface > > > for Processor doesn't allow that. So I tried to use method overloading, > > but > > > then it's unclear how to pass the exchange object as a parameter. > > > > > > Raymond > > > > > > > > > > > > > > > On Thu, Sep 8, 2022 at 12:06 PM Claus Ibsen <claus.ib...@gmail.com> > > wrote: > > > > > > > Hi > > > > > > > > No you cannot - you mix standard Java with Camel "parsing" the model > > when > > > > it calls the configure() method. > > > > It would be the same in regular Camel route. > > > > You basically do standard Java code with a new constructor and pass > in > > a > > > > string literal. Camel is not in use at that point. > > > > > > > > In your template bean example, then you need to use {{MyProcessor}} > as > > > the > > > > bean name. > > > > See the IMPORTANT note at: > > > > > > > > > > > > > > https://camel.apache.org/manual/route-template.html#_binding_beans_to_route_template > > > > > > > > > > > > > > > > On Thu, Sep 8, 2022 at 11:53 AM ski n <raymondmees...@gmail.com> > > wrote: > > > > > > > > > Hi, > > > > > > > > > > I have a routetemplate as follows: > > > > > > > > > > routeTemplate("processortemplate") > > > > > .templateParameter("out") > > > > > .from("direct:in") > > > > > .process("MyProcessor") > > > > > .to("{{out}}"); > > > > > > > > > > This works. > > > > > > > > > > The processor is registered an the called by reference. Now I > added a > > > > > constructor argument to the processor and I tried to call it like > > this: > > > > > > > > > > routeTemplate("processortemplate") > > > > > .templateParameter("processerParam") > > > > > .templateParameter("out") > > > > > .from("direct:in") > > > > > .process(new MyProcessor("{{processorParam}}")) > > > > > .to("{{out}}"); > > > > > > > > > > This doesn't work, because the parameter of the processor is parsed > > > > before > > > > > the template parameter is parsed. Result is that the parameter > > > > > {{myProcessorParam}} is passed as literal param. > > > > > > > > > > I tried to come with up something like this: > > > > > > > > > > routeTemplate("processortemplate") > > > > > .templateParameter("processerparam") > > > > > .templateParameter("out") > > > > > .templateBean("MyProcessor") > > > > > .typeClass("com.foo.MyProcessor") > > > > > .property("processerparam", "{{processerparam}}") > > > > > .end() > > > > > .from("direct:in") > > > > > .to("bean:MyProcessor?method=process") > > > > > .to("{{out}}"); > > > > > > > > > > But this didn't pass the parameter as well. As a workaround I set > > > > > constructor argument as a header and then get the header within the > > > > > processor. > > > > > > > > > > Question: > > > > > > > > > > Is there a way to pass constructor arguments to a processor in > > another > > > > way? > > > > > I couldn't find anything at the routeTemplate page on how to handle > > > > > processors. > > > > > > > > > > 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 > > > -- Claus Ibsen ----------------- http://davsclaus.com @davsclaus Camel in Action 2: https://www.manning.com/ibsen2