Nice. We've just moved to 2.16 earlier this year! Ср, 7 вер. 2016 15:05 користувач Claus Ibsen <claus.ib...@gmail.com> пише:
> 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 >