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 >