Привязка верблюжьего боба: установить параметр из переменной - PullRequest
0 голосов
/ 15 мая 2018

Учитывая метод бина, который принимает параметр String:

public void emptyDirectory(String directory) {
   // code to empty give directory if it exists
}

как мне передать этот параметр? Метод вызывается здесь:

String to = configuration.getTo();

from(configuration.getFrom())
     .to("bean:splitFileByProductType?method=emptyDirectory(to)")
     ....

Это не работает, поскольку 'to' оценивается как "to", а не значение configuration.getTo () .

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

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

Ответы [ 4 ]

0 голосов
/ 23 мая 2018

Из документации : Единственные вещи, которые могут быть переданы в bean-компонент, - это простые токены, строковое значение, числовое значение, логическое значение или ноль.

Переменная из примера не может быть выражена с помощью Simple .То, что может быть выражено, это различные свойства обмена, прежде всего заголовки обмена, а также некоторые случайные вещи, такие как буквально случайные числа, текущая дата и так далее.Обратитесь к документации для получения дополнительной информации.

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

0 голосов
/ 15 мая 2018

Вы можете передать значение в качестве аргумента метода с $ {body}, $ {body.NAME}, $ {property.NAME} и $ {header.NAME}.

Примеры http://camel.apache.org/bean-binding.html

Итак, прежде всего вы должны поместить свою переменную в Camel exchange.

0 голосов
/ 18 мая 2018

Чтобы передать информацию из Camel Exchange в метод bean , вы не должны добавлять или изменять что-либо в маршруте.

Если у вас есть этот маршрут (из вашего вопроса).Обратите внимание, что если у компонента есть только один метод, вы можете опустить его имя.

from(whatever)
    .to("bean:splitFileByProductType?methodName=emptyDirectory")

Или альтернатива

from(whatever)
    .bean(splitFileByProductType, "emptyDirectory")

Вы можете аннотировать свой метод бобов, чтобы автоматически получать необходимую информацию о Exchange:

public void emptyDirectory(
    @Header("directory") String directory, 
    @Body String body
    ... [other stuff to be injected] ) {

// your method impl
}

См. Документы о верблюдах для получения дополнительной информации об этой функции.

0 голосов
/ 15 мая 2018

Вы можете присвоить параметр заголовку или свойству обмена, а затем использовать простой язык для передачи ему метода bean

   String to = configuration.getTo();

    from(configuration.getFrom())
            .setHeader("foo", constant(to))
            .to("bean:splitFileByProductType?method=emptyDirectory(${header.foo})")
            ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...