Spring Integration @Splitter,我修改过的标头值发生了什么变化?

时间:2010-08-24 01:01:44

标签: spring-integration

我有一个带有以下方法签名的spring integration splitter:

@Splitter
public List<Message<String[]>> splitCsvIntoSeperateMessages(Message<List<String[]>> message)

消息有效负载是String []的ArrayList。拆分器读取List中的每一行,创建一个新的Message设置有效负载到List中的数据项,将CorrelationId,SequenceNumber和SequenceSize添加到头部,最后返回消息的ArrayList。

问题是当每个单独的消息被发送到下一个通道时,CorrelationId,SequenceNumber和SequenceSize都被新值覆盖。这是预期的行为,还是我错过了什么?

下面的代码片段:


@Splitter
public List<Message<String[]>> splitCsvIntoSeperateMessages(Message<List<String[]>> message) {

 List<Message<String[]>> returnVal = new ArrayList<Message<String[]>>();
 String headerId = null;
 int sequenceSize = 0;
 int sequenceNumber = 0;
 for(String[] payload : message.getPayload()){

  if(payload[0].equals("HEAD")){
   headerId = UUID.randomUUID().toString();
   sequenceSize = Integer.parseInt(payload[payload.length-1]);
   sequenceNumber=0;
  }
  sequenceNumber++;
  Message<String[]> msg = 
   MessageBuilder
        .withPayload(payload)
     .setCorrelationId(headerId)
     .setSequenceSize(sequenceSize)
     .setSequenceNumber(sequenceNumber)
     .build();

  returnVal.add(msg);
 }
 return returnVal;
}

使用Spring Integration 2.0 M6

1 个答案:

答案 0 :(得分:2)

高达2.0.0.M6,拆分器默认设置相关键,序列号和序列大小。我们已经讨论了nested splitting之类的用例,您可能会在该讨论中进行标记。

此功能已添加到2.0.0.M7中。在以后的版本中不应该出现此问题。