2

我有一个带有以下方法签名的弹簧集成拆分器:

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

消息有效负载是 String[] 的 ArrayList。拆分器读取列表中的每一行,创建一个新消息,将有效负载设置为列表中的数据项,将 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

4

1 回答 1

2

直到 2.0.0.M6,拆分器默认设置关联键、序列号和序列大小。我们已经讨论了嵌套拆分之类的用例,您也许可以在该讨论中进行标记。

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

于 2010-08-25T18:12:50.927 回答