У меня есть простой маршрут, который опрашивает zip-файлы с FTP-сервера. ZIP-файл состоит из одного файла, требующего обработки, и нескольких вложений. Я пытаюсь использовать ZipFileDataFormat для разделения, и я могу разделить и направить элементы по желанию, т.е. отправить файл обработки в процессор, а другие файлы в конечную точку агрегатора.
Маршрут выглядит следующим образом:
from(sftp://username@server/folder/path?password=password&delay=600000)
.unmarshal(getZipFileDataFormat()).split(body(Iterator.class)).streaming()
.log("CamelSplitComplete :: ${header.CamelSplitComplete}")
.log("Split Size :: ${header.CamelSplitSize}")
.choice()
.when(header(MyConstants.CAMEL_FILE_NAME_HEADER).contains(".json"))
.to(JSON_ENDPOINT).endChoice()
.otherwise()
.to(AGGREGATOR_ENDPOINT)
.endChoice()
.end();
getZipFileDataFormat
private ZipFileDataFormat getZipFileDataFormat() {
ZipFileDataFormat zipFile = new ZipFileDataFormat();
zipFile.setUsingIterator(true);
return zipFile;
}
Разделение работает нормально. Однако в журналах я вижу, что два заголовка CamelSplitComplete и CamelSplitSize установлены неправильно. Там, где CamelSplitComplete всегда ложно, CamelSplitSize не имеет никакого значения.
Из-за этого я не могу агрегировать на основе размера. Я использую eagerCheckCompletion() для получения входного обмена на маршруте агрегатора. Маршрут моего агрегатора выглядит следующим образом.
from(AGGREGATOR_ENDPOINT).aggregate(new ZipAggregationStrategy()).constant(true)
.eagerCheckCompletion().completionSize(header("CamelSplitSize"))to("file:///tmp/").end();
Я прочитал документацию Apache, что эти заголовки всегда установлены. Я что-то пропустил здесь? Любой указатель в правильном направлении был бы очень полезен.
CamelSplitSize
, когда вы используете потоковый режим на разветвителе, как задокументировано. Однако завершенное должно быть там. - person Claus Ibsen   schedule 29.06.2017from(AGGREGATOR_ENDPOINT).log("Aggregated File Count :: ${header.totalFileCount}").log("Incoming File Name :: ${header.incomingFileName}").aggregate(header("incomingFileName"), new ZipAggregationStrategy()).completionSize(header("totalFileCount")).to("file:///tmp/").end();
Любые указатели на то, почему не создается zip-файл? - person Kabira Speaking   schedule 30.06.2017