次のメソッド シグネチャを持つスプリング統合スプリッターがあります。
@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 の使用