Apache camel 为什么骆驼路线失败

Apache camel 为什么骆驼路线失败,apache-camel,Apache Camel,我有一段非常简单的camel代码 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();

我有一段非常简单的camel代码

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”目录中查找文件。日志消息表明

orders文件夹的内容是一个文件:

但是,当我尝试使用路由的to部分将这些文件复制到文件夹时,我看到以下失败

我用相对路径和绝对路径(/home/dsargrad/order\u processed)尝试了这一点。我已经验证了这两条路径的存在。相对路径是相对于我运行java应用程序的位置定义的

以下是有效的绝对路径。

以下是绝对路径的故障

下图显示了来自独立FTP客户端的orders文件夹的内容。这告诉我FTP服务和用户名/密码都很好


这是运行带有依赖项的“uber”jar时的常见错误。一些Maven插件(例如,
Maven assembly plugin
)排除了一些类型转换正确功能所需的
META-INF
条目。请参阅此常见问题解答条目:

我建议使用
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>

org.apache.maven.plugins
maven阴影插件
3.2.1
包裹
阴凉处
真的
可执行jar
my.package.main类
META-INF/services/org/apache/camel/TypeConverterLoader

这是运行带有依赖项的“uber”jar时的常见错误。一些Maven插件(例如,
Maven assembly plugin
)排除了一些类型转换正确功能所需的
META-INF
条目。请参阅此常见问题解答条目:

我建议使用
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>

org.apache.maven.plugins
maven阴影插件
3.2.1
包裹
阴凉处
真的
可执行jar
my.package.main类
META-INF/services/org/apache/camel/TypeConverterLoader

真正奇怪的是,如果我用from(文件:)替换from(sftp)并使用相同的to(文件),那么路由工作正常。请帮助我理解调用堆栈的以下部分“没有可从…RemoteFile转换为…InputStream的类型转换器”,真正奇怪的是如果我替换from(sftp)使用from(文件:)并使用相同的to(文件),则路由工作正常。请帮助我理解调用堆栈的以下部分“没有可从…RemoteFile转换为…InputStream的类型转换器”贝德拉,谢谢你的反馈。我会阅读你建议的链接,我也会尝试你建议的maven插件。很高兴收到社区的反馈。我只创建了一个“优步”jar,因为我认为这是最简单的方法。显然,我在这个过程中制造了问题。运行包含骆驼应用程序的非优步jar的正确方法是什么?是的,也可以看到这个常见问题:谢谢@ClausIbsenBedla,谢谢你的反馈。我会阅读你建议的链接,我还会尝试你建议的maven插件。所以,gla我只是创建了一个“优步”jar,因为我认为这是最简单的方法。显然,我在这个过程中制造了问题。运行一个包含骆驼应用程序的非优步jar的正确方法是什么?是的,也看到这个常见问题:谢谢@ClausIbsen