java - 独立 Apache Camel 应用程序无法运行

标签 java apache-camel

我遇到了这个问题:无法让我的 apache Camel 批量运行。这是代码:

import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.main.Main;

public class Launch {

private Main main;

public static void main(String[] args) {
    Launch l = new Launch();
    System.out.println(System.getProperty("from") +" -> "+System.getProperty("to"));
    try {
        l.execute();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

public void execute() throws Exception {
    main = new Main();
    main.enableHangupSupport();
    main.addRouteBuilder(new FromFileToFile());
    main.run();
}

private static class FromFileToFile extends RouteBuilder {

    @Override
    public void configure() throws Exception {
        onException(Exception.class).handled(true).process(new Processor() {
            public void process(Exchange arg0) throws Exception {
                arg0.getException().printStackTrace();
            }
        });
        from(System.getProperty("from") + "")
                .filter(body().contains("DOTHIS"))
                .process(new Processor() {

                    public void process(Exchange arg0) throws Exception {
                        System.out.println(arg0.getIn().getBody()
                                .toString());
                    }
                }).to(System.getProperty("to"))
                .to(System.getProperty("to") + ".BAK");
        }
    }
}

我不想使用Thread.sleep(...)解决方法。我只是复制并修改了 this 上发布的源代码官方文档页面。当我使用 Eclipse 运行我的虚拟程序时,应用程序只是挂起。我不知道出了什么问题。

最佳答案

您的应用程序可能不会挂起,它只是不会执行任何操作。 :)

您已经定义了过滤器来检查Camel消息正文是否包含单词“DOTHIS”。当您使用文件消费者使用文件时,主体将是 GenericFile 类型。然后,当您的过滤器检查该字符串时,它肯定找不到它,因为主体不是字符串。

解决方案:首先将文件正文转换为字符串,然后您的过滤器将起作用并获得您期望的结果。转换可以这样完成

from(System.getProperty("from") + "")        
    .convertBodyTo(String.class, "UTF-8")
    .filter(body().contains("DOTHIS"))

您可能还想提高日志记录级别,以便了解 route 发生的情况。

关于java - 独立 Apache Camel 应用程序无法运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32540313/

相关文章:

java - 如何使用 helidon-se 读取表单参数

java - Camel : Adding Properties to a message in Spring DSL

apache-camel - 如何将参数传递给 Camel 路线?

spring - “没有端点适配器”异常 - 带有 spring-boot 和 spring-ws 的 apache-camel

java - 在 Karaf 中使用 Oracle 驱动程序和 Apache Camel SQL 组件

java - Hibernate 或 HQL 选择另一个 SELECT 的结果

java - 如何切换二维数组中的两个字符串

jackson - 调用 Camel-jackson API 时操作数堆栈上的类型错误

java - 在 Java 小程序中可视化输入符号(字体或图形?)

java - 无法弄清楚 URIException