Почему верблюд, чтобы потерпеть неудачу - PullRequest
0 голосов
/ 27 января 2020

У меня есть очень простой кусок верблюжьего кода.

public class MainApp2 {

    /**
     * A main() so we can easily run these routing rules in our IDE
     */
    public static void main(String... args) throws Exception {
        CamelContext context = new DefaultCamelContext();

        context.addRoutes(new RouteBuilder() {
            public void configure() {
                from("sftp://ghana.corp.sensis.com:22/orders/?username=dsargrad&password=xxx")
                        .log("Received order: ${header.CamelFileName}")
                        //.to("file:///home/dsargrad/order_processed")
                        .to("file:data/outbox")
                        ;
            }
        });

        context.start();
        Thread.sleep(1000000);

        context.stop();

    }

}

«От» части маршрута работает нормально. Я могу подключиться к FTP-серверу и найти файлы в каталоге «orders». Сообщение журнала указывает на это.

Содержимое папки заказов представляет собой один файл: enter image description here

Однако при попытке скопировать эти файлы в папку, используя часть to маршрут, я вижу следующую ошибку

enter image description here

Я пробовал это как с относительным путем, так и с абсолютным путем (/ home / dsargrad / order_processed ). Я проверил существование обоих путей. Относительный путь определяется относительно места, в котором я запускаю приложение java.

Ниже приведен действительный абсолютный путь. enter image description here

Ниже приведен сбой с абсолютным путем.

enter image description here

На следующем рисунке показано содержимое папки заказов от независимого FTP-клиента. Это говорит мне, что служба FTP и имя пользователя / пароль в порядке.

enter image description here

1 Ответ

2 голосов
/ 27 января 2020

Это распространенная ошибка при запуске jar "uber" с зависимостями. Некоторые плагины Maven (например, maven-assembly-plugin) исключают некоторые записи META-INF, которые необходимы для правильной функции преобразования типов. См. Этот раздел часто задаваемых вопросов: Как создать исполняемый файл JAR для проекта Camel-Main .

Я предлагаю использовать maven-shade-plugin со следующей конфигурацией:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>3.2.1</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <shadedArtifactAttached>true</shadedArtifactAttached>
                <shadedClassifierName>executable-jar</shadedClassifierName>
                <transformers>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                        <mainClass>my.package.MainClass</mainClass> <!-- Change main class here -->
                    </transformer>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                        <resource>META-INF/services/org/apache/camel/TypeConverterLoader</resource>
                    </transformer>
                </transformers>
            </configuration>
        </execution>
    </executions>
</plugin>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...