我有一个带有以下方法签名的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
答案 0 :(得分:2)
高达2.0.0.M6,拆分器默认设置相关键,序列号和序列大小。我们已经讨论了nested splitting之类的用例,您可能会在该讨论中进行标记。
此功能已添加到2.0.0.M7中。在以后的版本中不应该出现此问题。