Use the script EIP for that
http://camel.apache.org/script

On Wed, Sep 7, 2016 at 8:06 PM, Vitalii Tymchyshyn <v...@tym.im> wrote:
> Btw process with an expression would be a great feature even in xml.
> Now we have to use the next
> <transform><groovy>doSomething();request.body</groovy></transform>
> to ensure body left intact.
>
> Best regards, Vitalii Tymchyshyn
>
> Ср, 7 вер. 2016 14:01 користувач Claus Ibsen <claus.ib...@gmail.com> пише:
>
>> On Wed, Sep 7, 2016 at 4:44 PM, Luca Burgazzoli <lburgazz...@gmail.com>
>> wrote:
>> > Would it make sense to add also a ProcessClause (later on) to have
>> > something similar for process ?
>> >
>> >   process()
>> >       .exchange(e -> ...) // not needed but for consistency
>> >   process()
>> >       .message(m -> ...)
>> >   process()
>> >       .body(b -> ... ) // should return the body
>> >
>>
>> Yeah this allows to do inlined processors quickly. And sometimes you
>> just want to do a bit of code at that spot in the route.
>>
>> And even to do a system out println, and can't you do something like this
>> now?
>>
>> .body(System.out::println)
>>
>>
>>
>>
>> >
>> > ---
>> > Luca Burgazzoli
>> >
>> >
>> > On Wed, Sep 7, 2016 at 4:02 PM, Claus Ibsen <claus.ib...@gmail.com>
>> wrote:
>> >> On Wed, Sep 7, 2016 at 3:47 PM, Luca Burgazzoli <lburgazz...@gmail.com>
>> wrote:
>> >>> @Clauss
>> >>>
>> >>> - I've removed intermediate funtional interfaces like ExchangeFunction
>> >>> - added simple message(...)
>> >>>
>> >>> Result here:
>> >>>
>> https://github.com/lburgazzoli/apache-camel/blob/CAMEL-7831/examples/camel-example-dsl-java8/src/main/java/org/apache/camel/example/dsl/java8/MyRoute.java
>> >>>
>> >>
>> >> Yay looks much nicer and simpler.
>> >>
>> >>> @Vitalii
>> >>> It may be nice to support existing expressions, like:
>> >>>
>> >>>   transform().body(
>> >>>       String.class,
>> >>>       String::indexOf,
>> >>>       header("toFindHeader", String.class)
>> >>>   )
>> >>>
>> >>> Maybe this deserve an additional JIRA
>> >>>
>> >>
>> >> Yeah lets avoid making the first version too complex and to many bells
>> >> and whistles.
>> >> It just becomes too confusing with functional lambdas extreme here,
>> >> and then regular DSL with EIPs not as functional.
>> >>
>> >>
>> >>
>> >>
>> >>>
>> >>> ---
>> >>> Luca Burgazzoli
>> >>>
>> >>>
>> >>> On Wed, Sep 7, 2016 at 2:45 PM, Vitalii Tymchyshyn <v...@tym.im> wrote:
>> >>>> Sure, I really appreciate the effort, especially since I am now also
>> >>>> working on making Camel more J8-friendly (in the reactive programming
>> part).
>> >>>> Please don't forget ".mandatoryBody", it's extremely useful. It
>> produces
>> >>>> much nicer exception instead of just NPE if your body is of wrong
>> type or
>> >>>> null. I'd even vote for making .body(Class, Function) calling
>> mandatoryBody
>> >>>> on exchange, since .getBody(class) gives much confusion in error
>> cases when
>> >>>> body of a wrong  type, but I am not  sure if it would be consistent
>> with
>> >>>> existing code.
>> >>>> Also talking about BiFunctions, consider passing not only map, but
>> also
>> >>>> exact header or property as again it makes it very easy to use tons of
>> >>>> 2-parameter preexisting methods, may be even something like this can
>> be
>> >>>> done:
>> >>>> transform().body(BiFunction).withHeader("headerName")
>> >>>> transform().body(BiFunction).withProperty("propertyName")
>> >>>>
>> >>>> that would make something like the next possible:
>> >>>> transform().body(String::indexOf).withHeader("toFindHeader")
>> >>>>
>> >>>> BTW: It would be great to have async versions, like .asyncBody(Class,
>> >>>> Function<Object, CompletableStage>)
>> >>>>
>> >>>> Best regards, Vitalii Tymchyshyn
>> >>>>
>> >>>> Ср, 7 вер. 2016 о 08:22 Luca Burgazzoli <lburgazz...@gmail.com> пише:
>> >>>>
>> >>>>> Vitalii, it was the first iteration just to have some feedbacks ;)
>> >>>>>
>> >>>>> I've added something more now as experiment so your suggestions
>> should
>> >>>>> have been covered now.
>> >>>>> By extending ExpressionClause built-in body/inMessage/etc, we could
>> >>>>> have something like:
>> >>>>>
>> >>>>> from("timer:simple?period=503")
>> >>>>>     .id("simple-route")
>> >>>>>     .transform()
>> >>>>>         .exchange(this::dateToTime)
>> >>>>>     .choice()
>> >>>>>         .when()
>> >>>>>             .body(Integer.class, b ->  (b & 1) == 0)
>> >>>>>             .log("Received even number")
>> >>>>>         .when()
>> >>>>>             .body(Integer.class, (b, h) -> h.containsKey("skip") ?
>> >>>>> false : (b & 1) == 0)
>> >>>>>             .log("Received odd number")
>> >>>>>         .when()
>> >>>>>             .body(b -> b instanceof Number)
>> >>>>>             .log("Received a number number")
>> >>>>>         .when()
>> >>>>>             .inMessage(m -> m.getBody() == null)
>> >>>>>             .log("Received null body")
>> >>>>>         .when()
>> >>>>>             .body(Integer.class, b ->  (b & 1) == 0)
>> >>>>>             .log("Received odd number")
>> >>>>>         .endChoice();
>> >>>>>
>> >>>>>
>> >>>>>
>> >>>>> ---
>> >>>>> Luca Burgazzoli
>> >>>>>
>> >>>>>
>> >>>>> On Wed, Sep 7, 2016 at 2:16 PM, Vitalii Tymchyshyn <v...@tym.im>
>> wrote:
>> >>>>> > Hi.
>> >>>>> >
>> >>>>> > Why BodyFunction is a BiFunction? It would be great to have some
>> method
>> >>>>> to
>> >>>>> > pass any Functional interface (any function) that would receive
>> body as
>> >>>>> > parameter and result would be stored as an answer. This would
>> allow to
>> >>>>> use
>> >>>>> > tons of existing functional method.
>> >>>>> > E.g. something like this would be possible:
>> >>>>> > .transform(function(String.class, String::toUpperCase))
>> >>>>> > Another thing is that often body type is not needed, e.g.
>> >>>>> > .transform(onBody(String::toUpperCase)) looks more readable.
>> >>>>> > i'd also rename other "function" calls with something that gives
>> more
>> >>>>> > information like "onExchange", "onMessage" (or even simply body(),
>> >>>>> > exchange(), message()). This would also make casting unnesessary.
>> >>>>> >
>> >>>>> > Best regards, Vitalii Tymchyshyn
>> >>>>> >
>> >>>>> > Вт, 6 вер. 2016 о 11:38 Luca Burgazzoli <lburgazz...@gmail.com>
>> пише:
>> >>>>> >
>> >>>>> >> Hello everyone,
>> >>>>> >> I've started working on CAMEL-7831 to create a Java8 example to
>> use
>> >>>>> >> Expressions and I've ended up with a simple example - see [1].
>> >>>>> >> Of course it is only for demonstrative purpose.
>> >>>>> >>
>> >>>>> >> Java8 lambda support to Expressions has been added to
>> >>>>> >> - ExpressionClause to avoid adding overload method for every
>> method
>> >>>>> >> accepting an Expressions definition
>> >>>>> >> - ExpressionBuilder so you can use something like
>> transform(function(e
>> >>>>> ->
>> >>>>> >> ...))
>> >>>>> >>
>> >>>>> >> There are some additional functional interfaces to select the
>> argument
>> >>>>> >> of the lambda
>> >>>>> >> - ExchangeFunction
>> >>>>> >> - MessageFunction
>> >>>>> >> - BodyFunction
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> Any feedback would be really appreciated.
>> >>>>> >>
>> >>>>> >> Regards,
>> >>>>> >> Luca
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> [1]
>> >>>>> >>
>> >>>>>
>> https://github.com/lburgazzoli/apache-camel/blob/CAMEL-7831/examples/camel-example-dsl-java8/src/main/java/org/apache/camel/example/dsl/java8/MyRoute.java
>> >>>>> >>
>> >>>>> >>
>> >>>>> >> ---
>> >>>>> >> Luca Burgazzoli
>> >>>>> >>
>> >>>>>
>> >>
>> >>
>> >>
>> >> --
>> >> 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

Reply via email to