在apachecamel中聚合后生成多个文件

MYN*_*ame 6 java apache-camel

我创建了一条路线

  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();
Run Code Online (Sandbox Code Playgroud)

bur*_*rki 2

我认为你只是用每个新的聚合覆盖同一个文件。为了避免这种情况,您必须为每个聚合提供另一个(动态)文件名来将其写入。

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

.setHeader(Exchange.FILE_NAME, simple("${headers.category}.xml"))
Run Code Online (Sandbox Code Playgroud)

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

如果同一类别再次聚合,则必须进一步扩展文件名(否则类别会覆盖其先前的文件)。例如带有时间戳或类似的。