2016-11-06 8 views
0

는 여기에 내가 스플리터 다음과 같이 클래스가 내 문제입니다 : 그렇지 않으면 I을 차단에서분할 후 메시지를 수정하거나 다른 교환에서 헤더를 검색 할 수인가요

<split strategyRef="someClassStrategy"> 
    <method ref="mySplitterBean" method="splitMessage" /> 
    <choice> 
    <when> 
    <simple>${property.CamelSplitIndex} == 0</simple> 
    <!-- 1. calculate something and store result in header, for example set header test=12345 --> 
    </when> 
    <otherwise> 
    <!-- 2. now how can I retrieve "test" header from above exchange (from splitIndex 0) --> 
    </otherwise> 
    </choice> 
</split> 

:

public class MySplitterBean { 

    public List<Message> splitMessage(Message m) { 
     List<Message> answer = new ArrayList<Message>(); 
     for (int i=0; i<3; i++) { 
      DefaultMessage message = new DefaultMessage(); 
      message.setHeaders(m.getHeaders()); 
      message.setBody(m.getBody()); 
      answer.add(message); 
     } 
     return answer; 
    } 
} 

그리고 경로에를 MySplitterBean에 의해 복사 된 메시지 개체가 있지만 어떻게 든 splint 인덱스 0을 처리하는 동안 분할 후에 만들어진 "test"헤더를 얻고 싶습니다. 그래서 내 질문은 가능한 경우, 어떻게 작동 시키는가?

답변

1

분할 작업 전에 더미 개체로 속성 값을 설정할 수 있습니다. 각 교환 객체는 참조에 의한 호출을 통해이 객체에 액세스 할 수 있습니다. 값에 따라 같은 개체에 액세스 할 수 있음을 보장하기 위해 목록과 같은 추가 컨테이너가 필요합니다.

+0

그래, 그 트릭을해야한다고 생각해. 고마워! – nbaplaya

0

분할 색인이 0이면 블록에 액세스 할 수 없으며이 경우 동일한 교환기에서 "test"헤더를 검색 할 수 없습니다. 선택 블록 밖에서 액세스 할 수 있습니다.

+0

나는 그것의 세트가 선택 블록 이후에 알지만, 그것은 나를 위해 늦었고 split index 1과 2에 대해이 헤더가 필요하다. – nbaplaya

+0

완전한 경로를 볼 필요가 있지만, 같은 교환 인 경우에 헤더를 설정할 수있다. 속성에 액세스하고 다음 번에 액세스하십시오. –

+0

그 안의 것이 다른 새로운 블록을 차단하고 있습니다 : ( – nbaplaya