Используйте Exchange Property в Camel DSL для

Я хочу установить свойство на Camel Exchange, а затем использовать это свойство при сохранении файла. В моем верблюде dsl у меня есть следующее:

.process(processorToSetExhangeProperty)  // sets the property <uid> on the exchange
.to("file:/tmp?fileName=file-" + property("uid") + ".xml")

Файл сохраняется как:

"file-property{uid}.xml" though

Мой процессор выглядит следующим образом:

@Override
public void process(Exchange exchange) throws Exception {
    UUID uuid = UUID.randomUUID();
    exchange.setProperty("uid", uuid.toString());
    exchange.setOut(exchange.getIn());
}

Любые мысли о том, что может идти не так или как я могу этого добиться?


person dev    schedule 25.04.2013    source источник


Ответы (2)


to в Camel не интерпретируется во время выполнения.

Вам следует использовать список получателей, если вы хотите создать свой URI динамически. См. https://camel.apache.org/manual/latest/faq/how-to-use-a-dynamic-uri-in-to.html

person Ben Goldin    schedule 20.02.2014

ОБНОВЛЕНО Новый ответ принят выше вместо предыдущего:


Ответ [был]:

.to("file:/tmp?fileName=file-${property.uid}") + ".xml")

Это простое выражение извлекает свойство обмена. Полный список того, что вы можете получить, см. в Справочнике по языку простых выражений.

person dev    schedule 25.04.2013
comment
Это частично неверно: как сказал В.Гольдин, компонент to() оценивается при построении маршрута. В вашем случае это работает частично, потому что uid, вероятно, вычисляется один раз. Если вы проверяете свой uid после более чем одного сообщения, вы должны заметить, что он, вероятно, никогда не меняется. - person рüффп; 01.12.2014