这有可能聚合多个小型XML文档:Apache的骆驼的Aggregator2 XML文档合并为一个巨大的文件
<doc><field name="XXX">fieldValue</field><doc>
使用aggregator2(骆驼2.7.0)组合成一个大文件
<result><doc>...</doc><doc>...</doc><doc>...</doc>...<doc>...</doc></result>
没有使用一些自定义聚合器处理器?我已经设法完成了创建自定义聚合器的工作,但现在我正在简化我的代码,所以如果骆驼支持开箱即用,那么我们就可以摆脱它。
我的自定义聚合的样子:
class DocsAggregator implements Processor {
void process(Exchange exchange) {
def builder = DocumentBuilderFactory.newInstance().newDocumentBuilder()
def Document parentDoc = builder.parse(new ByteArrayInputStream("<?xml version='1.0'?><add></add>".toString().bytes));
def groupedExchanges = exchange.properties.find {it.key == 'CamelGroupedExchange'}
groupedExchanges.value.each { Exchange x ->
def Document document = x.'in'.body
def bos = new ByteArrayOutputStream()
TransformerFactory.newInstance().newTransformer().transform(new DOMSource(document), new StreamResult(bos))
def node = document.documentElement.childNodes.find { Node it -> it.nodeType == Node.ELEMENT_NODE}
def cloned = parentDoc.adoptNode(node)
parentDoc.documentElement.appendChild(cloned)
}
exchange.in.body = parentDoc
}
}
感谢您的建议。这个解决方案真的看起来更好 – Archer 2011-04-29 09:31:55
我一直在用这个作为我自己的(第一次)聚合XML文档的指导。不幸的是,它看起来像TypeConverter不想转换我的XML,而是返回一个空对象。将类型更改为'String.class'确实打印完整的文档。 – Lilienthal 2013-05-06 11:42:39