Apache Конечная точка файла верблюда: тест верблюда вызывает прямой маршрут компонента для копирования файлов из папки A в папку B - PullRequest
0 голосов
/ 30 марта 2020

Я новичок в apache верблюде и пишу тест на верблюдах для проверки маршрута. Мой пример использования:

  1. Из теста верблюда вызывайте маршрут, который копирует файлы из папки A в папку B.
  2. Маршрут верблюда вызывается с использованием прямого компонента из тестового маршрута.

Это не работает для меня,

from("direct:waitingForVideoFiles").routeId("waitingForVideoFiles")
                .to("file:E://folderA?noop=true")
                .to("file:D://folderB?FileName=ready-${file:name}")

Мой прямой компонент теста верблюда выглядит следующим образом:

template.sendBody("direct:waitingForVideoFiles",null);

Здесь я вижу, что CamelFileName имеет значение null.

Этот код работает для меня.

from("file:E://folderA?noop=true&include=.*.mov|.*.ts").routeId("VideoFilesAvailable")
                .setHeader("statusVideoFile", simple("failed"))
                .log(LoggingLevel.INFO, "header is ${headers}")
                .to("file:D://folderB")

файлы копируются без прямого компонента.

Ответы [ 2 ]

0 голосов
/ 31 марта 2020

Вам нужен PollEnrich:

from("direct:waitingForVideoFiles").routeId("waitingForVideoFiles")
.loopDoWhile(body().isNotNull())
  .pollEnrich("file:E://folderA?noop=true")
  .toD("file:D://folderB?FileName=ready-${file:name}")
.end();

Обратите внимание, что я изменил "на" на "toD" из-за "$ {file: name}".

Надеюсь, это поможет .

Р.

0 голосов
/ 30 марта 2020
  • вы передаете тело как ноль, попробуйте с некоторым содержимым
  • Если вы не упомянули fileName, верблюд создаст свой собственный файл с содержимым, которое вы передаете.

Я попробовал ваш пример, и он работает для меня

 @Test
    public void testSendMatchingMessage() throws Exception {
        template.sendBody("direct:waitingForVideoFiles", "some content");
    }

    @Override
    protected RouteBuilder createRouteBuilder() {
        return new RouteBuilder() {
            public void configure() {
                from("direct:waitingForVideoFiles")
                        .routeId("waitingForVideoFiles")
                        .to("file:///Users/sucheth.shivakumar/Desktop/folderA");
            }
        };
    }

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

template.sendBodyAndHeader("direct:waitingForVideoFiles", "some body content", Exchange.FILE_NAME, "such.txt");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...