КАК: файлы Apache Camel, Regex

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

что я получил так далеко:

    <route id="SVLFTPCOPY">
  <from uri="sftp://*****:*******@********/srv/test/?fileName=*2280.xls&amp;noop=true&amp;idempotent=false"/>
    <to uri="file:/srv/data/test/destination/"/>
    <to uri="activemq:queue:svl.ftp.copy"/>
    </route>

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

Есть идеи?,

4 ответа

Решение

Да, вам нужно использовать опцию include / exclude / filter, если вы хотите отфильтровать файлы на основе шаблонов. Опция fileName предназначена для одного файла.

Так что в вашем случае удалите опцию fileName и замените ее на include=.*2280.xsl, Имейте в виду, что включение основано на регулярных выражениях Java, поэтому мы используем точку-звездочку для обозначения подстановочного знака. Более подробная информация здесь: http://camel.apache.org/file2. Компонент ftp наследует 99% опций файлового компонента, поэтому я ссылаюсь на вики-страницу файла.

Использовать include опция, которая использует регулярное выражение Java:

include=.*2280\\.xsl

Пожалуйста, помните \\ перед точкой .

В качестве альтернативы используйте antInclude:

antInclude=*2280.xsl

Для такого рода фильтрации я рекомендую использовать GenericFileFilter

При реализации сопоставления имен используется следующий код:

if (ObjectHelper.isNotEmpty(endpoint.getInclude())) {
    if (!name.matches(endpoint.getInclude())) {
        return false;
    }
}

Таким образом, вы можете проверить, какое регулярное выражение вы должны использовать. В твоем случае, я думаю .*2280\\.xsl это то, что вы должны использовать.

Другие вопросы по тегам