Как передать значение переменной экземпляра маршрута другому бобу в верблюде - PullRequest
0 голосов
/ 23 января 2019

У меня есть пример маршрута, как показано ниже, и мне нужно отправить значение outputStream в класс batchContentProcessor в метод getBatchConent. Что-то вроде ниже.

Ответы [ 2 ]

0 голосов
/ 23 января 2019

Я не уверен, что вы пытаетесь достичь, и я подозреваю, что понимание, которое даст мне больше шансов дать вам хороший ответ.

Ваш Java DSL не будет работать, потому что выпытаемся добавить значение "string" outputStream к URL-адресу, который не будет делать ничего полезного - он просто сделает URL-адрес недействительным.

Прочитайте инструкции по привязке bean-компонентов к тому, как работает процесс вызова bean-компонента: http://camel.apache.org/bean-binding.html

Так как вы уже назначили свой поток заголовку stream, я думаю, вы могли бы сделать ..

    from(DECRYPTION_ENDPOINT).routeId(CcsRoutes.DECRYPTION_ROUTE.name())
     .setHeader("stream", constant(outputStream)).log("About to write ${file:name}")
     .to("bean:batchContentProcessor?method=getBatchConent( ${header.stream} )");
0 голосов
/ 23 января 2019

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

Например:

class CamelBean {
    public String getBatchContent(String body, Exchange exchange) {
        ByteArrayOutputStream stream = exchange.getHeader("stream");
    }       
}
...