Process is already working nice E.g process(e-> e.setBody("aaa")) works fine.
Ср, 7 вер. 2016 10:44 користувач Luca Burgazzoli <lburgazz...@gmail.com> пише: > 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 > > > --- > 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 >