【问题标题】:Unmarshal InputStream using BeanIO and Apache Camel使用 BeanIO 和 Apache Camel 解组 InputStream
【发布时间】: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


【解决方案1】:

正如 mgyongyosi 所说,当.log("${body}") 读取流时,位置会转到它的末尾。为了解决这个问题,我们可以在读取后重置 InputStream 的位置:

from("direct:routeTest")
        .log("${body}")
        .process(exchange -> ((InputStream) exchange.getIn().getBody()).reset())
        .to("dataformat:beanio:unmarshal?mapping=mapping.xml&streamName=testFile")

或删除.log("${body}")这一行。

【讨论】:

    【解决方案2】:

    其他解决方案可以是在路由中添加.streamCaching()。然后你可以多次读取同一个流。 Official documentation

    【讨论】:

      猜你喜欢
      • 2018-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-23
      相关资源
      最近更新 更多