带节点列表的ApacheCamel XPath
我想连接来自ApacheCamelXPath结果的所有值,并将其添加到消息上下文中。标题应如下所示:带节点列表的ApacheCamel XPath,xpath,apache-camel,Xpath,Apache Camel,我想连接来自ApacheCamelXPath结果的所有值,并将其添加到消息上下文中。标题应如下所示:“|value1 | value2 | valueN |” 我的路线看起来像: from("direct:test") .setHeader("key").xpath("//Identifier", List.class) .to("mock:result") 最好的方法是什么?有没有办法实现自己的结果类型?正如Wi
“|value1 | value2 | valueN |”
我的路线看起来像:
from("direct:test")
.setHeader("key").xpath("//Identifier", List.class)
.to("mock:result")
最好的方法是什么?有没有办法实现自己的结果类型?正如Willem所说,您必须编写自己的处理器 对于这样一件小事,我最喜欢的方法是在包含路由定义的类中声明一个函数,返回一个匿名处理器,如下所示:
private Processor setHeaderWithIdentifiers() {
return exchange -> {
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);
};
}
专用处理器setHeaderWithiIdentifiers(){
返回交换->{
列表标识符=新的ArrayList();
NodeList nodes=XPathBuilder.xpath(“//标识符”).evaluate(exchange,NodeList.class);
对于(int i=0;i
这样,您就不需要找到任何复杂的XPath函数,只要处理器代码仍然很短,代码就仍然清晰易懂。您可以自己编写一个程序来进行转换。我想知道xquery是否可以做到这一点,因为它比XPath具有更强的转换能力。虽然你也可以分两步来做。首先使用xpath获取节点列表,然后使用另一个xpath以|作为分隔符附加元素,例如使用模板语言或JavaBean或其他方法。