2016-09-30 2 views
0

Я есть проблемы в приложении ...Проблемы Splitter с Camel

, когда я разбивают XML в 4-х частей, то я хочу, чтобы получить их все вместе в другой 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

Может кто он Что?

ответ

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

Try .TO ("файл: E:/TST FileExist = Append")

+0

да, но файл будет иметь много старых сведений и повторной информации. Вы понимаете? спасибо –

Смежные вопросы