在apache camel中聚合后生成多个文件。

问题描述 投票:2回答:1

我创建了一个路由,该路由

  1. 读取xml文件
  2. 分开
  3. 聚合后,我收到了数组,即数组1代表类别1,数组2代表类别2。
  4. 当我写文件时,它的结果是从数据集中打印任意随机数组。

问题:如何根据数据集中的随机数组来打印多个文件?如何根据聚合器生成的数组数量打印多个文件?

                    from("file:C:\\Users\\Desktop?fileName=books.xml&noop=true")
                    .split(xpath("/books/book"))
                    .process(new MyProcessor())
                    .setHeader("category", xpath("/book/@category").stringResult())
                    .aggregate(header("category"), new SetAggregationStrategy()).completionTimeout(500)
                    .process(new MyProcessor())
                    .convertBodyTo(String.class)
                    .to("file:C:\\Users\\Desktop\\New")
                    .end();
java apache-camel
1个回答
0
投票

我想你只是 在每次聚合时,覆盖相同的文件。. 为了避免这种情况,你必须给每个aggregation另一个(动态)文件名来写入它。

例如,要设置 [categoryname].xml 作为每个聚合的文件名,你可以使用

.setHeader(Exchange.FILE_NAME, simple("${headers.category}.xml"))

Exchange.FILE_NAME是一个Camel常量,用于文件名头,并以 简单的表达语言 您可以将您在路由中设置为头的类别名称和一个静态文件后缀连接起来。

如果同一个类别被重复聚合,你必须进一步扩展文件名(否则一个类别会覆盖它之前的文件)。例如用时间戳或类似的方式。

© www.soinside.com 2019 - 2024. All rights reserved.