来自ByteArrayInputStream的Camel路由

时间:2014-09-03 19:12:52

标签: java streaming apache-camel bytearrayinputstream

根据Camel Stream文档,可以将消息路由到各种数据流中。

但是,在我的情况下,我希望byte[]中的数据(ByteArrayInputStream)被发送到Camel路由。问题是该组件似乎支持的唯一InputStreamFileInputStream,如此:

from("stream:file?fileName=/server/logs/server.log&scanStream=true&scanStreamDelay=1000").to("bean:logService?method=parseLogLine");

但看起来指定ByteArrayInputStream的唯一方法是使用stream:header URI,如下所示:

ByteArrayInputStream byteStream = new ByteArrayInputStream(someData);
from("direct:a").setHeader("stream", constant(byteStream)).to("stream:header");

但是如果你必须将自定义流指定为标题,我看不出你如何在from()子句中完成这样的事情。任何想法如何做到这一点?

1 个答案:

答案 0 :(得分:3)

stream:file用于将文件作为流读取。您无法将java对象发送到该端点。它只从文件系统中的文件中读取。

您可以使用Camel的类型转换器将有效负载转换为其他内容,例如byte[]

from("stream:file:...")
  .convertBodyTo(byte[].class)
  ...

您可以在此处阅读有关Camel类型转换器的信息:http://camel.apache.org/type-converter.html