正如威廉說,你必須編寫自己的處理器。
對於這樣的小東西,我喜歡的方式是在類中聲明函數包含路由定義返回一個匿名處理器這樣的:
private Processor setHeaderWithIdentifiers() {
return new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
List<String> identifiers = new ArrayList<>();
NodeList nodes = XPathBuilder.xpath("//Identifier").evaluate(exchange, NodeList.class);
for (int i = 0; i < nodes.getLength(); i++) {
identifiers.add(nodes.item(i).getNodeValue());
}
// StringUtils from Apache Commons 3
String idAsString = StringUtils.join(identifiers, "|");
exchange.getIn().setHeader("key", idAsString);
}
};
}
就這樣,你不需要找任何複雜只要處理器代碼很短,Xpath函數和代碼仍然很清楚。
我不知道xquery是否可以做到這一點,因爲它具有比xpath更強的轉換能力。雖然你也可以分兩步進行。首先xpath獲取節點列表,然後用另一個元素添加|作爲分隔符,例如使用模板語言或java bean或其他。 –
你可以編寫一個[Processor](http://camel.apache.org/processor.html)來自己完成轉換。 –