Верблюд от 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()
условие, которое проверяет имя файла и расширение и либо конвертирует его, либо нет и помещает его в целевую папку... что потенциально приводит к бесконечному циклу и, как правило, выглядит как ужасный хак.
Какой предлагаемый подход к проблеме? Примечание: я не могу использовать временную папку или что-то подобное из-за ограничений требований.
1 ответ
Действительно, эти флаги можно комбинировать. Мне просто нужно было использовать include
вариант вместо filename
, Этот ответ помог мне: КАК: Apache Camel, файлы соответствия Regex Моя конечная точка теперь выглядит так:
from("smb://myDirectory?delete=true&include=Report.*\\.csv&password=xxxxxx&username=zzzz")