Camel от smb — комбинация delete=true и фильтрация по имени файла

Мне нужно преобразовать файлы из расширения A в B, соответствующие только определенному имени файла. Файл с исходным расширением должен быть удален при обработке. Однако другие файлы в каталоге удалять не следует. Я использую Apache Camel 2.17.2 (и, к сожалению, не могу обновиться до более новой версии).

Я пробовал комбинировать флаг delete=true с файловыми фильтрами, но он удаляет все файлы, хотя фильтр работает.

from("smb://myDirectory?delete=true&password=xxxxxx&username=zzzz"). .filter(PredicateBuilder.and(header(Exchange.FILE_NAME).startsWith("Report"), PredicateBuilder.not(header(Exchange.FILE_NAME).endsWith("zip"))))

Это решение сначала преобразует исходные файлы в желаемый формат, не преобразует преобразованный файл снова, как ожидалось, но затем также удаляет преобразованный файл из-за флага delete=true, который, как я понимаю, имеет приоритет над фильтром.

Я также попытался поместить все это в параметры маршрута:

from("smb://myDirectory?delete=true&fileName=Report*.csv&password=xxxxxx&username=zzzz")

Но тогда регулярное выражение не совпадает - я не могу понять почему - и, кроме того, я думаю, что проблема может быть той же, даже если бы я мог заставить регулярное выражение работать. Пример имени файла: Report_Financial_20190201.csv.

Единственное, что я могу сейчас придумать, это условие .choice().when(), которое проверяло бы имя файла и расширение и либо конвертировало бы его, либо нет, и помещало бы его в целевую папку... что потенциально приводит к бесконечному циклу и обычно кажется ужасным взломом .

Каков предлагаемый подход к проблеме? Примечание. Я не могу использовать временную папку или что-то подобное из-за ограничений требований.


person AlgorithmFromHell    schedule 01.02.2019    source источник


Ответы (1)


Действительно, эти флаги можно комбинировать. Мне просто нужно было использовать опцию include вместо filename. Этот ответ помог мне: КАК: Apache Camel, файлы сопоставления Regex Теперь моя конечная точка выглядит так:

from("smb://myDirectory?delete=true&include=Report.*\\.csv&password=xxxxxx&username=zzzz")

person AlgorithmFromHell    schedule 01.02.2019
comment
Я собирался порекомендовать объединить параметры после прочтения See File for more options as all the options from File is inherited. в документации по компоненту SMB. - person ShellDragon; 01.02.2019