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 に答える