2016-04-05 98 views
1

我有一些問題有以下途徑:Apache的駱駝EIP路線 - 如何停止分裂()

// from("cxf:....")... 
from("direct:start").process(startRequestProcessor) // STEP 1 
      .choice() 
       .when(body().isNull()) 
         .to("direct:finish") 
       .otherwise() 
        .split(body()) // STEP 2 
        .bean(TypeMapper.class) // STEP 3 
        .log("Goes to DynamicRouter:: routeByTypeHeader with header: ${headers.type}") 
        .recipientList().method(Endpoint1DynamicRouter.class, "routeByTypeHeader") // STEP 4 
        .ignoreInvalidEndpoints(); 

    from("direct:endpoint2") // STEP 6 
      .log("Goes to DynamicRouter::routeByCollectionHeader with header: ${headers.collection}") 
      .recipientList().method(Endpoint2DynamicRouter.class, "routeByCollectionHeader") 
      .ignoreInvalidEndpoints(); 

    from("direct:endpoint1.1") // STEP 5 
      .process(new DateRangeProcessor()) 
      .to("direct:collections"); 

    from("direct:endpoint1.2") // STEP 5 
      .process(new SingleProcessor()) 
      .to("direct:collections"); 


    from("direct:endpoint2.2") // STEP 7 
      .aggregate(header("collection" /** endpoint2.2 */), CollectionAggregationStrategy) 
      .completionSize(exchangeProperty("endpoint22")) 

      .process(new QueryBuilderProcessor()) 
      .bean(MyService, "getDbCriteria") 

      .setHeader("collection", constant("endpoint2.1")) 
      .to("direct:endpoint2.1").end(); 


    from("direct:endpoint2.1") // STEP 8 
      .aggregate(header("collection" /** endpoint2.1 */), CollectionAggregationStrategy) 
      .completionSize(exchangeProperty("CamelSplitSize")) 
      .to("direct:finish").end(); 

    from("direct:finish") 
      .process(new QueryBuilderProcessor()) 
      .bean(MyRepository, "findAll") 
      .log("ResponseData: ${body}"). 
      marshal().json(JsonLibrary.Gson).end(); 

路線

  1. 接收JSON字符串的轉換它列出的(HashSet的)一個JSONObjects。
  2. 將收到的列表拆分爲json對象。
  3. 設置根據對象內容
  4. 路線根據報頭中的消息以endpoint1.1或endpoint1.2
  5. 轉換消息的MongoDB標準和發送根據另一頭向端點2
  6. 端點2將消息路由報頭對應端點2.1或端點2.2。
  7. Endpoint2.2聚合所有收到的消息,對其進行處理以獲取mongodb Criteria並將其發送到端點2.1(completionSize在步驟2中計算並保存在屬性「endpoint22」中)。
  8. Enpoint2.1聚合所有消息(CamelSplitSize)將聚合消息轉換爲Query對象並將其發送到Repository以檢索數據。

我可以看到有效的響應對象的調試器,但無論如何我得到一個錯誤:

No message body writer has been found for class java.util.HashSet, ContentType: application/json

問題不響應對象作爲它的工作原理與其他路由,它不包含HashSets。

我的猜測是,路線發送到HashSet的創建達STEP 1的輸出...

我的問題是:

  • 什麼是錯在路由輸出?
  • 兩個recipientList()嘗試 郵件轉發到無效的端點(我必須使用.ignoreInvalidEndpoints(),以避免除外):

    org.apache.camel.NoSuchEndpointException: No endpoint could be found for: [email protected], please check your classpath contains the needed Camel component jar.

任何幫助,將不勝感激! 謝謝。

回答

2

我覺得很奇怪,但.aggregate()函數不回覆交換。它使用你的聚合策略,但總是回覆傳入的交換。閱讀文檔時這並不明確,但您必須使用聚合策略以及split()才能返回交換。