2016-08-21 2 views
2

У меня есть файл, как этотверблюд completionSize с completionTimeout не работает должным образом в JUnit

line1 
line2 
line3 
line4 
line5 
line6 
line7 
line8 

И маршрут вроде этого:

.from("direct:start") 
.split().tokenize("\r\n").streaming() 
.process(new Processor() { 
    @Override 
    public void process(Exchange exchange) throws Exception { 
     System.out.println("Splitter:" + 
      exchange.getIn().getBody(String.class)); 
    } 
}) 
.aggregate(constant(true), new MyAggregationStrategy()) 
.completionSize(3).completionTimeout(10000) 
.process(new Processor() { 
    @Override 
    public void process(Exchange exchange) throws Exception { 
     int size = exchange.getIn().getBody(Set.class).size(); 
     System.out.println("Processor, Set size:" + size); 
    } 
}) 
.to("mock:end") 

MyAggregationStrategy создает набор с 3-х пунктов. Это хорошо работает в течение первых 6 строк, я получаю такой вывод:

Splitter:line 1 
Splitter:line 2 
Splitter:line 3 
... 
Processor, Set size:3 
... 
Splitter:line 4 
Splitter:line 5 
Splitter:line 6 
... 
Processor, Set size:3 
... 
Splitter:line 7 
Splitter:line 8 

Хотя линия 7 и линии 8 объединяются в oldExchange в MyAggregationStrategy процессора определяется впоследствии никогда не называют их. Также завершениеTimeout не работает. Код немедленно прекращается и не ждет 10 секунд для не существующей линии 9.

Любая идея? Я думал, что это рекомендуемый способ работы с оставшимися строками, которые не удовлетворяют CompleSize?

Поскольку мы привязаны к Java 6, мы используем версию верблюда 2.13.4.

ответ

2

Найден ответ!

Проблема, возникшая в JUnit, вызвана только тем, что finish.assertIsSatisfied() выполняется немедленно и не дожидается таймаута, указанного в completionTimeout.

Использование finish.assertIsSatisfied(long timeoutForEmptyEndpoints) со значением выше, чем в данной completionTimeout решить мою проблему

+0

Не могли бы вы принять ответ, так что вопрос не в списке без ответа? Благодаря! –

+1

Я хотел, но система говорит: «Вы можете принять свой собственный ответ за 21 час». – nick78

+0

Ах, 48-часовой период ожидания все равно должен быть на месте. Черт, прости. –

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