2016-09-30 135 views
0

我有一个应用程序的问题分配器...问题与骆驼

当我劈4个部件的XML,然后我想在另一个XML把他们都弄到一起,但它会覆盖,只有最后一个站在

.split(body(String.class).tokenizePair("TITTLE", 
     "ISSN",false)).log("Line: ${body}") 
     .to("file:E:/tst") 
//method that I created for use AggregatorStrategy 
if (oldExchange == null) { 
     System.out.println(newExchange.getIn().getBody(String.class)); 
     return newExchange; 
    } 
    String oldBody = oldExchange.getIn().getBody(String.class); 
    String newBody = newExchange.getIn().getBody(String.class); 
    oldExchange.getIn().setBody(oldBody + "+ " + newBody); 
    System.out.println(oldExchange.getIn().getBody(String.class)); 
    return oldExchange; 
} 

的System.out.println返回此: Return

但在我的最终文件只有这个: Final File

任何人都可以,他LP我?

回答

1

您必须使用聚合器模式的分离器。

.split(body(String.class).tokenizePair("TITTLE", 
     "ISSN",false), new CustomAggregatorStrategy()).log("Line: ${body}") 
     .to("file:E:/tst") 

CustomAggregatorStrategy应该实现AggregationStrategy,它提供了新的交流和交换旧合计方法。

每次拆分器完成作业,然后汇总新的交换和旧的交换,最后您将获得拆分处理的所有输出的列表。

你的方法应该看起来像

public Exchange aggregate(Exchange oldExchange, Exchange newExchange) { 
       Message newIn = newExchange.getIn(); 
       Object newBody = newIn.getBody(); 
       ArrayList list = null; 
       if (oldExchange == null) { 
         list = new ArrayList(); 
         list.add(newBody); 
         newIn.setBody(list); 
         return newExchange; 
       } else { 
         Message in = oldExchange.getIn(); 
         list = in.getBody(ArrayList.class); 
         list.add(newBody); 
         return oldExchange; 
       } 
     } 
+0

你的方法给出了相同的回报是,我的...但在文件,只有最后一个信息 –

0

尝试。要( “文件:E:?/ TST fileExist =附加”)

+0

是的,但该文件将有许多旧信息和重复信息。你明白?谢谢 –