我有一个带有以下方法签名的弹簧集成拆分器:
@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