Camel文件移动到目录而不是文件

时间:2016-01-08 05:12:00

标签: apache-camel

我有一个文件路由,例如:

    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");

一旦调用,我就会出现意外行为。

2 个答案:

答案 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)

问题是我必须更改:2exchange.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