2014-01-07 46 views
1

我需要問一個運營商的問題「選擇何時」在Apache駱駝路線。在以下示例中,如果我有兩個具有1,2值的soap-env:Order元素,那麼我想要創建兩個名爲output_1.xml和output_2.xml的xml文件。但是,代碼只能創建一個文件output_1.xml。 任何人都可以給我任何想法或提示嗎?謝謝你的幫助。駱駝:如何去所有「當」在「選擇何時」

public void configure() { 
    ... 
    from("direct:a") 
     .choice() 
      .when(ns.xpath("//soap-env:Envelope//soap-env:Order='1'")) 
       .to("file://data?fileName=output_1.xml") 
      .when(ns.xpath("//soap-env:Envelope//soap-env:Order='2'")) 
       .to("file://data?fileName=output_2.xml") 
      .when(ns.xpath("//soap-env:Envelope//soap-env:Order='3'")) 
       .to("file://data?fileName=output_3.xml") 
} 
+0

其他選項是使用分配器和每個Soapenv呼叫直接:a。 –

+0

嗨,獅子座,我用斯普利特和問題是我的輸入文件是根據條件拆分成幾條消息,但我想要一個完整的文件,以便我可以創建一個新的輸出文件。 –

回答

3

我的理解是基於內容的路由器實現「如果 - 否則,如果 - 否則」語義,這意味着只要一個測試結果爲真,那麼剩下的測試被跳過。如果您想爲返回true,任何情況下創建文件,那麼你就必須路線更改爲類似這樣:

from("direct:a") 
    .choice() 
     .when(ns.xpath("//soap-env:Envelope//soap-env:Order='1'")) 
      .to("file://data?fileName=output_1.xml") 
    .end() 
    .choice() 
     .when(ns.xpath("//soap-env:Envelope//soap-env:Order='2'")) 
      .to("file://data?fileName=output_2.xml") 
    .end() 
    .choice() 
     .when(ns.xpath("//soap-env:Envelope//soap-env:Order='3'")) 
      .to("file://data?fileName=output_3.xml") 
    .end() 
+0

也許'.choice()'塊也需要'.end()'? – vikingsteve

+0

@vikingsteve不知道。我對Java DSL不是很熟悉。 [基於內容的路由器](http://camel.apache.org/content-based-router.html)的文檔頁面沒有顯示它。如果你能確認這是必需的,我當然會更新答案。 – Ralf

+0

好的Ralf,我可以編輯你的答案嗎? (完成) – vikingsteve

0

沒有什麼錯的DSL和你dontt需要結束嵌段在這裏。我會查看你的數據,並追蹤爲什麼所有的呼叫都以同樣的方式結束。放幾條登錄線或啓用示蹤器並查看正在進行的交換。