我有一个接收文件并将其发送到骆驼路线的服务。在这条路线上,我想使用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组件的路由。在这种情况下,它可以工作。
如何在Bean上使用BeanIO和InputStream类型的输入?是否有任何组件可以将我的InputStream转换为与BeanIO组件兼容的组件?
最佳答案
其他解决方案可以是将.streamCaching()
添加到路由。然后,您可以多次读取相同的流。 Official documentation