Apache camel 拆分xml文件,根据headeras关联键聚合,并创建多个文件,关联键作为文件名
我需要拆分一个xml文件,然后将具有类似DeptId的元素聚合为单独的文件,文件名为DeptIdApache 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
<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();