Верблюд от smb - объединение «delete = true» и фильтрация по имени файла - PullRequest
0 голосов
/ 01 февраля 2019

Мне нужно преобразовать файлы с расширением 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(), которое проверяет имя файла и расширение и либо преобразует его, либо нет и помещает его в целевую папку.... что потенциально приводит к бесконечному циклу и обычно выглядит как ужасный хак.

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

1 Ответ

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

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

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

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