【发布时间】:2018-01-30 01:23:41
【问题描述】:
我有一个接收文件并将其发送到 Camel 路由的服务。在这条路线上,我想使用 BeanIO 解组该文件,但它无法识别 InputStream 类型的输入。
@RestController
@RequestMapping(value = "/file")
public class FileController {
@Autowired
private CamelContext camelContext;
@RequestMapping(value = "/upload", method = RequestMethod.POST)
public void upload(@RequestParam("file") MultipartFile multipartFile) throws IOException {
ProducerTemplate template = camelContext.createProducerTemplate();
template.sendBody("direct:routeTest", new ByteArrayInputStream(multipartFile.getBytes()));
}
}
@Component
public class SampleRouter extends RouteBuilder {
@Override
public void configure() throws Exception {
from("direct:routeTest")
.log("${body}")
.to("dataformat:beanio:unmarshal?mapping=mapping.xml&streamName=testFile")
.process(msg -> msg.getIn()
.getBody(List.class)
.forEach(o -> {...}))
.end();
}
}
我已经测试了一个使用 File 组件读取文件并将结果发送到 BeanIO 组件的路由。在这种情况下它可以工作。
如何在 Apache Camel 上将 BeanIO 与 InputStream 类型的输入一起使用?是否有任何组件可以将我的 InputStream 转换为与 BeanIO 组件兼容的东西?
【问题讨论】:
-
你有什么异常吗?您在
log("${body}")上收到任何输出消息吗? -
没有例外。
.log("${body}")给了我文件的内容。事实证明,问题正是那条线。我以为.log("${body}")会将正文的内容返回到下一条路线,但它没有返回任何内容。当我删除这条线时,它起作用了。 -
是的,当您在 InputStream 上调用
.log("${body}")时,它会读取流,然后位置位于流的末尾。
标签: java apache-camel bean-io