У меня есть следующий маршрут:
from("INPUT_QUEUE")
.routeId("Test")
.beanRef("logService", "save")
.beanRef("deserialiser", "deserialise")
Метод "save" в LogService возвращает целое число. Я не хочу, чтобы это целое число передавалось методу десериализации. Мне нужен json, исходящий из входной очереди для передачи.
Любая помощь приветствуется и извиняется за простой вопрос, поскольку я новичок в верблюде.
Используйте шаблон многоадресной рассылки, который позволяет маршрутизировать одно и то же сообщение на несколько конечных точек и обрабатывать их по-другому:
from("INPUT_QUEUE")
.routeId("Test")
.multicast()
.beanRef("logService", "save")
.beanRef("deserialiser", "deserialise")
.end();
Компонент bean не будет использовать возвращаемое значение метода в качестве нового тела сообщения.
Однако вы можете использовать компонент языка и настроить его на не преобразование, что-то вроде
.to("language:bean:logService.save?transform=false")
Я не могу вспомнить точный синтаксис, но я думаю, вы можете использовать точку для разделения имени метода для вызова, как показано выше
Вы можете определить свой save(), чтобы иметь такой аргумент, как обмен Exchange
save(yourExistingArguments, Exchange exchange){
//performYourOperations and get your integer
//However, do not set the integer in the exchange body.
// exchange.getIn().setBody(integer)
// Do not return the integer. Set the integer as state and make it accessible through getter and setter
Вот и все. Ваше сообщение передается, так как оно не имеет целого числа