I have a service that receives a file and send it to a Camel route. On that route, I’d like to unmarshal that file using BeanIO, but it doesn’t recognize inputs of type 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();
}
}
I have tested a route that reads the file using the File component, and sends the result to the BeanIO component. In that case it works.
How can I use BeanIO with inputs of type InputStream on Apache Camel? Is there any component that can transform my InputStream into something compatible with the BeanIO component?