独立的 Apache Camel 应用程序没有' 运行
Standalone Apache Camel application doesn' run
我遇到了这个问题:无法获取我的 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" 的过滤器。当您使用 File consumer 使用文件时,正文将是 GenericFile 类型。然后,当您的过滤器检查该字符串时,它肯定找不到它,因为正文不是字符串。
解决方案:首先将文件主体转换为字符串,然后您的过滤器将起作用,您将得到您期望的结果。可以这样转换
from(System.getProperty("from") + "")
.convertBodyTo(String.class, "UTF-8")
.filter(body().contains("DOTHIS"))
您可能还想提高日志记录级别,以便了解路线中发生的事情。
是路径问题。我将参数作为选项传递,如下所示:
file://Users/francesco/..
当我使用 windows 时,我必须像这样指定 uri
file:///C:/Users/francesco/..
批处理不会挂起,它会继续轮询目录以查找要使用的新文件。
我遇到了这个问题:无法获取我的 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" 的过滤器。当您使用 File consumer 使用文件时,正文将是 GenericFile 类型。然后,当您的过滤器检查该字符串时,它肯定找不到它,因为正文不是字符串。
解决方案:首先将文件主体转换为字符串,然后您的过滤器将起作用,您将得到您期望的结果。可以这样转换
from(System.getProperty("from") + "")
.convertBodyTo(String.class, "UTF-8")
.filter(body().contains("DOTHIS"))
您可能还想提高日志记录级别,以便了解路线中发生的事情。
是路径问题。我将参数作为选项传递,如下所示:
file://Users/francesco/..
当我使用 windows 时,我必须像这样指定 uri
file:///C:/Users/francesco/..
批处理不会挂起,它会继续轮询目录以查找要使用的新文件。