2012-07-26 2 views
0

foreach 구성 요소를 사용하고 있습니다. Foreach를 사용하여 컬렉션 개체를 반복하고 있습니다. ForEach 구성 요소 I에 대해, 컬렉션 페이로드를 입력으로 보내고 있습니다. Foreach는 컬렉션 페이로드를 반복합니다. 하지만 문제는 다음 구성 요소에서 반복되는 foreach 페이로드를 가져올 수 없다는 것입니다. Mule의 foreach 구성 요소에서 Payload를 가져 오는 데 문제가 있습니다.

가 여기에 내가 직접 foreach는 구성 요소의 페이로드를 얻을 수 아니에요으로 Snippnet

다음
<choice doc:name="Choice"> 
     <when expression="#[ognl:instance=='Lamp']"> 
      <processor-chain> 
       <message-properties-transformer scope="invocation" doc:name="Message Properties"> 
        <add-message-property key="loops" value="0"/> 
       </message-properties-transformer> 
       <component class="com.Lamp" doc:name="Java"/> 
       <foreach doc:name="Foreach"> 
        <component class="com.Candle" doc:name="Java"/> 
        <logger message="DDD #[message:payload]" level="INFO" doc:name="Logger"/> 
        <set-variable variableName="foreachPayload" value="#[message:payload]" doc:name="Payload"/> 
       </foreach> 
      </processor-chain> 
     </when> 

내 코드, 난 "foreachPayload"라는 변수에 그 페이로드를 설정하기 위해 노력했다. 그러나 다음 구성 요소에서 변수에 액세스하는 동안 반복 컬렉션 객체의 마지막 값에는 반복 컬렉션 객체의 전체 값이 없습니다.

다음은 세션 변수에 액세스하는 코드입니다.

eventContext.getMessage().getInvocationProperty("foreachPayload") 

여기의 문제 및 해결 방법을 알려주십시오. 아래 첨부

foreach 구성 요소가 set-variable 원래의 foreachPayload 값을 덮어 씁니다 후 내 메시지의 스크린 샷은 당신이 당신의 변수에 컬렉션의 마지막 값을 얻을 이유

http://i.stack.imgur.com/mm64s.jpg

답변

1

흐름이다 메시지. 이는 올바른 동작입니다. foreach 대신 collection-splitter을 사용해야 할 수도 있습니다. 컬렉션의 모든 요소를 ​​처리 한 후 collection-aggregator을 사용하십시오. 이렇게하면 결과 페이로드는 처리 된 값의 모음입니다.

<collection-splitter enableCorrelation="IF_NOT_SET"/> 
<component class="com.Candle" doc:name="Java"/> 
<collection-aggregator timeout="6000" failOnTimeout="false"/> 
+0

이 옵션이 작동 했습니까? 의견을 부탁합니다 –

관련 문제