Java 8 и Camel 2.19.x здесь.У меня есть следующий маршрут Camel:
<route id="widgetProcessing">
<from uri="activemq:inputQueue"/>
<to uri="{{widgetFetcher}}"/>
</route>
И процессор widgetFetcher
:
@Component("widgetFetcher")
public class WidgetFetcher {
private WidgetDao widgetDao;
public WidgetFetcher(WidgetDao widgetDao) {
this.widgetDao = widgetDao;
}
public Widget getWidgetToProcess() {
// get the next widget id from the database
final Integer firstWidgetId = widgetDao.getFirstSubmittedWidgetId();
// Do lots of stuff with 'firstWidgetId' down here...
}
}
Я хотел бы создать свойство exchange после <from>
и до WidgetFetcher
и установите начальное значение этого свойства на null
;а затем условно устанавливает его значение на что-то еще внутри WidgetFetcher
.Кроме того, я бы хотел, чтобы это переназначенное значение «прилипало» к оставшейся части маршрута / обработки.Так что-то вроде:
<route id="widgetProcessing">
<from uri="activemq:inputQueue"/>
<setProperty propertyName="fizzId">
<constant>null</constant>
</setProperty>
<to uri="{{widgetFetcher}}"/>
<log message="fizzId = ${property[fizzId]}" loggingLevel="ERROR"/>
</route>
А потом:
public Widget getWidgetToProcess(@ExchangeProperty("fizzId") final String fizzId) {
// get the next widget id from the database
final Integer firstWidgetId = widgetDao.getFirstSubmittedWidgetId();
if (someMethodReturnsTrue()) {
// Does this actually get saved outside the
log.info("About to update fizzId...")
fizzId = UUID.randomUUID().toString();
}
// Do lots of stuff with 'firstWidgetId' down here...
}
Однако во время выполнения локальное назначение fizzId = ...
, похоже, не принимает, так как вывод журнала показывает:
About to update fizzId...
fizzId = null
Так что я думаю, что мой процессор получает копию свойства fizzId
exchange, но повторное присвоение его значения inline фактически не изменяет фактическое значение для остальной части маршрута. Есть идеи, как это сделать?