Apache camel 拆分xml文件,根据headeras关联键聚合,并创建多个文件,关联键作为文件名

Apache camel 拆分xml文件,根据headeras关联键聚合,并创建多个文件,关联键作为文件名,apache-camel,Apache Camel,我需要拆分一个xml文件,然后将具有类似DeptId的元素聚合为单独的文件,文件名为DeptId <Records> <Entry> <Id>1</Id> <Name>John Smith</Name> <DeptId>1</DeptId> </Entry> <Entry> <Id&g

我需要拆分一个xml文件,然后将具有类似DeptId的元素聚合为单独的文件,文件名为DeptId

<Records>
    <Entry>
        <Id>1</Id>
        <Name>John Smith</Name>
        <DeptId>1</DeptId>
    </Entry>
    <Entry>
        <Id>2</Id>
        <Name>Mike Nash</Name>
        <DeptId>3</DeptId>
    </Entry>
    <Entry>
        <Id>3</Id>
        <Name>Jane Smith</Name>
        <DeptId>3</DeptId>
    </Entry>
    <Entry>
        <Id>4</Id>
        <Name>Jack Ryan</Name>
        <DeptId>1</DeptId>
    </Entry>
    <Entry>
        <Id>5</Id>
        <Name>Mike Jordan</Name>
        <DeptId>1</DeptId>
    </Entry>
    <Entry>
        <Id>6</Id>
        <Name>Chris Evans</Name>
        <DeptId>2</DeptId>
    </Entry>
</Records>
我只得到了一个DeptId 2的文件


我做错了什么?如何修复它?

拆分完成消息只会发生一次。当整个XML文件已通过拆分器运行时。因此,您只能看到一个文件,该文件可能是拆分中的最后一项。在这种情况下,我应该如何设置completionpredicate?在您的情况下,您需要确切地知道每组有多少行。例如,有5行代码指向A组等。可能还有其他方法,但我真的不太了解数据,无法提出任何其他建议。
from("file:inbox")
    .split().tokenizeXML("Entry")
    .setHeader("deptid").xpath("Entry/DeptId", String.class)
    .log("${header.deptid}")
    .log("Sending ${body} with correlation key ${header.deptid}")
    .aggregate(header("deptid"), new HeaderAggregator())
        .completionPredicate(exchangeProperty(Exchange.SPLIT_COMPLETE).isEqualTo(true))
        .log("sending out ${body}")
        .to("file:outbox?fileName=${header.deptid}.txt")
    .end()
.end();