我有一个文件路由,例如:
from("file://" + inbox + "" +
"?delay=1000" +
"&preMove=/tmp/staging" +
"&move=/tmp/processed")
.bean(MyProcessor.class)
.marshal(listJacksonDataFormat)
.to("restlet:http://localhost:58080/new-greeting?restletMethod=POST");
收件箱中的给定文件是:mycalc.xls
在处理完路线后出于某种原因,驼峰会将mycalc.xls
移至名为/tmp/processed
的文件,而不是将其移至/tmp/processed/
目录< / strong>并保留原始文件名mycalc.xls
。
修改
这是我简化的MyProcessor类:
@Component
public class MyProcessor implements Processor {
@Override
public void process(Exchange exchange) throws Exception {
File file = exchange.getIn().getBody(File.class);
log.info("Processing file: " + file);
exchange.getOut().setBody("Hello World");
}
}
好的,我找到了问题行:
exchange.getOut().setBody("Hello World");
一旦调用,我就会出现意外行为。
答案 0 :(得分:0)
如Claus所述 - “move”和“preMove”选项通常期望目标文件名表达而不仅仅是目录名称(但它适用于像“.done”这样的目录名称)。因此,首先尝试将您的路线更改为:
from("file://" + inbox + "" +
"?delay=1000" +
"&preMove=/tmp/staging/${file:name}" +
"&move=/tmp/processed/${file:name}")
.bean(MyProcessor.class)
.marshal(listJacksonDataFormat)
.to("restlet:http://localhost:58080/new-greeting?restletMethod=POST");
答案 1 :(得分:0)
问题是我必须更改:2
到exchange.getOut().setBody("Hello World");
从我收集的内容中,我错误地使用In-Out(请求/回复)消息交换模式,通过在文件交换上显式回复。
为什么这不是正确的事情的原因是:
a。)首先没有必要这样做,因为默认情况下Camel会在Exchange上传递消息并且
b。)使用exchange.getIn().setBody("Hello World");
创建了一条新邮件,然后在以下Exchange中将其设置为IN,然后导致问题。
有关详细信息,请参阅:http://camel.apache.org/using-getin-or-getout-methods-on-exchange.html