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 >>