2017-10-22 12 views
0

, Apache Camel : File to BeanIO and merge beanIO objects based on id아파치 카멜 : GroupedExchangeAggregationStrategy 그룹 대신 메시지 본문 그룹 GroupedExchangeAggregationStrategy를 사용 EmployeeDetails 시도 다른 스레드에 연속으로

아래의 DefaultExchange

from("seda:aggregate").aggregate(simple("${body.id}"), new 
MergeAggregationStrategy()).completionSize(3).log("Details - ${header.details}").to("seda:formList"); 

from("seda:formList").aggregate(new 
GroupedExchangeAggregationStrategy()).constant(true).completionTimeout(10) 
    .process(EmployeeDetailsBeanProcessor).log("Final list of groupedExchangeAggr ${body}") 
    .log("FILE PROCESSING COMPLETED"); 

EmployeeDetailsBeanProcessor :

public class EmployeeDetailsBeanProcessor implements Processor{ 
    public void process(Exchange exchange) throws Exception { 
     ArrayList<EmployeeDetails> rows = exchange.getIn().getBody(ArrayList.class); 
     for (EmployeeDetails record : rows)  { 
      System.out.println("----- Record:: ----- "+ 
       record.getId() + " "+ 
       record.getName() + " " + 
       record.getJob() +" "+ 
       record.getEmail() + " "+ 
       record.getCity()+" "+ 
       record.getCode()); 
     } 
    } 
} 

내 이해는 GroupExchangedAggregationStr ategy가 사용되면 현재 Exchange가 List에 추가되지만 테스트를 거치면 현재 Exchange 대신 EmployeeDetails가 DefaultExchange로 추가됩니다.

ERROR 4236 --- [eTimeoutChecker] o.a.camel.processor.DefaultErrorHandler : Failed delivery for (MessageId: ID-admin-PC-49678-1508604904882-0-30 on ExchangeId: ID-admin-PC-49678-1508604904882-0-29). Exhausted after delivery 
attempt: 1 caught: java.lang.ClassCastException: org.apache.camel.impl.DefaultExchange cannot be cast to com.test.EmployeeDetails 

교환을 그룹화하는 데 대한 몇 가지 예 또는 지침을 제공 할 수 있습니까? 미리 감사드립니다.

답변

0

아니요, 사용자의 EmployeeDetailsBeanProcessor에 잘못되었습니다. 본문의 교환은 목록이지 목록이 아닙니다.

사용 GroupedExchangeAggregationStrategy은 특수한 용도로만 사용되며 잘못된 전략을 사용하고있는 것 같습니다. 그룹을 List<EmployeeDetails>으로 지정하려면

을 사용하여 FlexibleAggregationStrategy 단위 테스트를 참조하십시오.