Apache Camel 2.23.1:to(file)创建一个空文件

时间:2019-03-01 18:32:30

标签: apache-camel

[JDK 8/11,骆驼2.23.1,Spring Boot 2.1.3]

嗨, 我目前正在学习骆驼,无法解决一个奇怪的问题。

我想将URL下载到文件中。

URL有效,例如http://localhost/date显示“ 11:59:00”。 目标文件已创建,但为空。为什么?

@Component
public class DownloadRoute extends RouteBuilder {
    @Override
    public void configure() throws Exception {
        String timer1 = "timer://foo?fixedRate=true&period=10000&delay=5000";
        String url = "http://localhost:8888/date";
        String file = "file:target/date";
        from(timer1).to(url).log("${id}->${body}").to(file);  // ID-Laptop-1551464093962-0-2->11:59:00, that's ok
    }
}

记录器输出正确的内容,例如

  

2019-03-01 19:15:00.421信息2984 --- [3-timer:// foo] route1
  :ID-Laptop-1551464093962-0-2-> 11:59:00

但是生成的文件(例如target / date / ID-Laptop-1551464093962-0-2)为空。

有什么想法吗?

解决方案(感谢Tache):

    from(timer1).to(url).to(file);  // without logging

OR

    from(timer1).to(url).convertBodyTo(String.class).log("${id}->${body}").to(file);    // with logging

1 个答案:

答案 0 :(得分:2)

http端点(http://localhost:8888/date)的输出可能是使用InputStream读取的流。这样的流只能读取一次。 可能的解决方案:

  • 删除您的日志语句
  • 在您的骆驼上下文或路由中启用流缓存
  • 在记录消息正文并将其发送到文件之前,将消息正文转换为字符串(.convertBodyTo(String.class)