Предотвратить apache camel для перемещения не определенных файлов для перемещения в .camel - PullRequest
0 голосов
/ 04 сентября 2018

Я создаю простую утилиту для передачи файлов, в которой на основе пользовательского ввода я ищу файл в папке и передаю соответствующий файл в место назначения. Эта проблема is camel перемещает все файлы, которые не соответствуют папке .camel, я не хочу, чтобы это происходило ниже, это мой фрагмент.

        from("file:C:\\input?noop=true;").
        filter(header(Exchange.FILE_NAME)
       .contains("xyz")).split(body().tokenize("\n")).
        streaming().bean(LineParser.class, "process").
        to("file:"+ Constants.getMapping().get(argumentName)+"? 
         fileExist=Append");

Заранее спасибо !!

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018

Ознакомьтесь с опциями потребителя файлового компонента: http://camel.apache.org/file2.html. Вы должны иметь возможность использовать опцию «filter» или «filterFile» в from uri. Они будут фильтроваться в конечной точке, как упоминалось выше. FilterFile будет более кратким, если вы сможете использовать простой язык:

from("file:C:\\input?filterFile=...

В противном случае вы можете создать бин фильтра для обработки фильтрации и использовать опцию фильтра для ссылки на этот бин. Обратите внимание, что фильтр (). Contains () больше не нужен:

from("file:C:\\input?filter=#someFileFilter")
    .split(body().tokenize("\n"))
    .streaming()
    .bean(LineParser.class, "process")
    .to("file:"+ Constants.getMapping().get(argumentName)+"?fileExist=Append");

public class SomeFileFilter<T> implements GenericFileFilter<T> {
    @Override
    public boolean accept(GenericFile<T> file) {
        // return true if file should be included, false if excluded
    }
}
0 голосов
/ 04 сентября 2018

Удалите точку с запятой после noop = true, и свойство начнет работать, исключая перемещение обработанных файлов в .camel

Обработанные файлы - это все файлы, обработанные без исключения, поэтому даже совпадающие файлы останутся и в каталоге C: \ input. Когда вы используете noop = true, по умолчанию идемпотентный репозиторий находится в памяти. Поэтому после перезапуска вашего приложения уже обработанные файлы будут обработаны снова. Поэтому вам нужно создать свое собственное идемпотентное репо без памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...