ファイルを受信してCamelルートに送信するサービスがあります。そのルートでは、BeanIOを使ってそのファイルを非整列化したいが、それはInputStream型の入力を認識しない。BeanIOとApache Camelを使用したUnmarshal 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でInputStream型の入力でBeanIOを使用するにはどうすればよいですか? InputStreamをBeanIOコンポーネントと互換性のあるものに変換できるコンポーネントはありますか?
例外はありますか? 'log(" $ {body} ")'で出力メッセージを受け取ったのですか? – mgyongyosi
例外はありません。 '.log(" $ {body} ")'私にファイルの内容を渡します。その問題はまさにその行であることが判明しました。私は '.log(" $ {body} ")'は本文の内容を次のルートに返しますが、何も返しません。私はこの行を削除すると、それは働いた。 –
これは、InputStreamで '.log(" $ {body} ")'を呼び出すとストリームを読み込んだ後、その位置がストリームの最後にあることを示しています。 – mgyongyosi