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