Выполнять маршрут только при вызове прямого компонента - PullRequest
0 голосов
/ 15 февраля 2019

Я хочу разархивировать файлы всякий раз, когда вызывается «прямой» маршрут.Имя файла, которое я получаю по другому прямому маршруту.

from("direct:unZipFile")
                .from("file:C:\\MYFILES\\File\\Unzipped\\?fileName=${header.fileName}&idempotent=true")
                .split(new ZipSplitter())
                .streaming()
                .to("file:C:\\MYFILES\\File\\Unzipped\\")
                .split(body().convertToString().tokenize("\n"))
                .transform()
                .simple("${in.body}")
                .end();

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

Ответы [ 3 ]

0 голосов
/ 15 февраля 2019

Вы также можете попробовать использовать пыльцу

from("direct:unZipFile")
.pollEnrich.simple("file:C:\\MYFILES\\File\\Unzipped\\?fileName=${header.fileName}")
.split(new ZipSplitter())
.streaming()
...
0 голосов
/ 16 февраля 2019

Вы также можете просто установить тело сообщения с java.io.File, где вы вычисляете имя файла в нескольких строках Java-кода, но да, в противном случае pollEnrich является решением EIP-шаблона для этого.

0 голосов
/ 15 февраля 2019

Вы можете использовать customerTemplate

from("direct:unZipFile")
                .process(exchange -> { 
                    Exchange recvFiles = exchange.getContext().createConsumerTemplate().receive("file:C:\\MYFILES\\File\\Unzipped\\?fileName=${header.fileName}&idempotent=true");
exchange.getIn().setBody(recvFiles.getIn().getBody());
exchange.getIn().getHeaders().putAll(recvFiles.getIn().getHeaders());
})
                .split(new ZipSplitter())
                .streaming()
                .to("file:C:\\MYFILES\\File\\Unzipped\\")
                .split(body().convertToString().tokenize("\n"))
                .transform()
                .simple("${in.body}")
                .end();
...