2013-12-11 49 views
2

我想連接來自Apache Camel XPath結果的所有值並將其添加到消息上下文中。標題應該是這樣的:"|value1|value2|valueN|"具有節點列表的Apache Camel XPath

我的路線是這樣的:

from("direct:test") 
.setHeader("key").xpath("//Identifier", List.class) 
.to("mock:result") 

什麼是做的最好的方法?有沒有一種方法來實現自己的結果類型?

謝謝

+0

我不知道xquery是否可以做到這一點,因爲它具有比xpath更強的轉換能力。雖然你也可以分兩步進行。首先xpath獲取節點列表,然後用另一個元素添加|作爲分隔符,例如使用模板語言或java bean或其他。 –

+0

你可以編寫一個[Processor](http://camel.apache.org/processor.html)來自己完成轉換。 –

回答

0

正如威廉說,你必須編寫自己的處理器。

對於這樣的小東西,我喜歡的方式是在類中聲明函數包含路由定義返回一個匿名處理器這樣的:

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函數和代碼仍然很清楚。

相關問題