Обмен / ссылка на тело внутри метода configure Java DSL RouteBuilder - PullRequest
0 голосов
/ 10 июня 2018

У меня есть код следующего маршрута с использованием Apache Camel версии 2.21.2.Есть также функция, которую я хочу использовать для регистрации тела.

Function<Object, String> returnSomethingInteresting = o -> {
    // ... compute something depending on the o class type
    return "the result based on the body";
};

@Override
public void configure() {
    from("timer://foo?fixedRate=true&period=15s") // every 15 seconds
        .setBody( Bdd.getVOs ) // I call the database to retrieve a List<MyResulSetObjectVO>
        .split().body() //split the list in its components

        .log( returnSomethingInteresting.apply( simple("${body}").evaluate(exchange, MyResulSetObjectVO.class))))     

        .to("..."); // continue the execution
}//configure

Сначала я получаю список vo из базы данных, используя поставщика.Затем я разбил Список на его элементы, чтобы обработать каждый из них по отдельности.

Но прежде чем обрабатывать их, я хотел бы записать его тело, но не само тело, а результат вызова функции с телом.в качестве параметра.

Но для оценки Expression требуется объект Exchange, но я не могу найти способ его получения.Есть ли полезная ссылка на объект обмена из метода configure через routeBuilder?

Я знаю, что есть альтернативы.

Как я могу использовать процессор (то есть, метод siganture процесса обеспечиваетобъект обмена) вместо оператора журнала.Но я предпочитаю делать это с журналом, потому что я нахожу код более понятным.

Или даже я могу вставить функцию в MyResultSetObjectVO и вызвать ее примерно так.Который работает отлично.Но эта функция является одной из множества разновидностей VO, и я не хочу писать ее в каждом VO, и при каждом обновлении кода копируйте и вставляйте ...

log("${body.returnSomethingInteresting }")

Есть ссылка наметод оценки, использующий объект обмена в этом другом стеке потока вопрос .Но ни один из контекстов не упоминается, поэтому я полагаю, что он находится внутри процессора, который я не хочу использовать.

Может быть, мне не нужно использовать метод оценки, и я могу получить ссылку на объект body, которыйтакже подойдет мне.

Итак, все сказано, я хотел бы знать, как я могу получить ссылку на объект exchange / body внутри метода configure для camel dsl routeBuilder?

Заранее большое спасибо.

1 Ответ

0 голосов
/ 11 июня 2018

Нельзя, метод configure предназначен для настройки маршрута (ов).Он вызывается только один раз во время запуска.

Как вы уже упоминали, вы можете использовать встроенный процессор для вызова функции.Простой язык также может вызывать bean-компоненты / методы и использовать привязку параметров bean-компонента, поэтому он может связывать данные из обмена с сигнатурой метода bean-компонента.Тогда вы можете использовать простой язык прямо в журнале EIP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...