INT-1690: fix bugs in MessageBuilder re sequenceDetails

This commit is contained in:
Dave Syer
2010-12-16 10:21:04 +00:00
parent 5d668aaa8c
commit 70a5cd1c42
2 changed files with 47 additions and 4 deletions

View File

@@ -184,8 +184,8 @@ public final class MessageBuilder<T> {
else {
incomingSequenceDetails = new ArrayList<List<Object>>(incomingSequenceDetails);
}
incomingSequenceDetails.add(Arrays.asList(incomingCorrelationId, headers
.get(MessageHeaders.SEQUENCE_NUMBER), headers.get(MessageHeaders.SEQUENCE_SIZE)));
incomingSequenceDetails.add(Arrays.asList(incomingCorrelationId,
headers.get(MessageHeaders.SEQUENCE_NUMBER), headers.get(MessageHeaders.SEQUENCE_SIZE)));
incomingSequenceDetails = Collections.unmodifiableList(incomingSequenceDetails);
}
if (incomingSequenceDetails != null) {
@@ -207,13 +207,18 @@ public final class MessageBuilder<T> {
setCorrelationId(sequenceDetails.get(0));
Integer sequenceNumber = (Integer) sequenceDetails.get(1);
Integer sequenceSize = (Integer) sequenceDetails.get(2);
if (sequenceSize > 0) {
if (sequenceNumber != null) {
setSequenceNumber(sequenceNumber);
}
if (sequenceSize != null) {
setSequenceSize(sequenceSize);
}
if (!incomingSequenceDetails.isEmpty()) {
headers.put(MessageHeaders.SEQUENCE_DETAILS, incomingSequenceDetails);
}
else {
headers.remove(MessageHeaders.SEQUENCE_DETAILS);
}
return this;
}

View File

@@ -19,12 +19,12 @@ package org.springframework.integration.message;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotSame;
import static org.junit.Assert.assertTrue;
import java.util.Date;
import java.util.UUID;
import org.junit.Test;
import org.springframework.integration.Message;
import org.springframework.integration.MessageHeaders;
import org.springframework.integration.support.MessageBuilder;
@@ -163,5 +163,43 @@ public class MessageBuilderTests {
.build();
assertFalse(message2.getHeaders().containsKey("foo"));
}
@Test
public void testPushAndPopSequenceDetails() throws Exception {
Message<Integer> message1 = MessageBuilder.withPayload(1).pushSequenceDetails("foo", 1, 2).build();
assertFalse(message1.getHeaders().containsKey(MessageHeaders.SEQUENCE_DETAILS));
Message<Integer> message2 = MessageBuilder.fromMessage(message1).pushSequenceDetails("bar", 1, 1).build();
assertTrue(message2.getHeaders().containsKey(MessageHeaders.SEQUENCE_DETAILS));
Message<Integer> message3 = MessageBuilder.fromMessage(message2).popSequenceDetails().build();
assertFalse(message3.getHeaders().containsKey(MessageHeaders.SEQUENCE_DETAILS));
}
@Test
public void testPushAndPopSequenceDetailsWhenNoCorrelationId() throws Exception {
Message<Integer> message1 = MessageBuilder.withPayload(1).build();
assertFalse(message1.getHeaders().containsKey(MessageHeaders.SEQUENCE_DETAILS));
Message<Integer> message2 = MessageBuilder.fromMessage(message1).pushSequenceDetails("bar", 1, 1).build();
assertFalse(message2.getHeaders().containsKey(MessageHeaders.SEQUENCE_DETAILS));
Message<Integer> message3 = MessageBuilder.fromMessage(message2).popSequenceDetails().build();
assertFalse(message3.getHeaders().containsKey(MessageHeaders.SEQUENCE_DETAILS));
}
@Test
public void testPopSequenceDetailsWhenNotPopped() throws Exception {
Message<Integer> message1 = MessageBuilder.withPayload(1).build();
assertFalse(message1.getHeaders().containsKey(MessageHeaders.SEQUENCE_DETAILS));
Message<Integer> message2 = MessageBuilder.fromMessage(message1).popSequenceDetails().build();
assertFalse(message2.getHeaders().containsKey(MessageHeaders.SEQUENCE_DETAILS));
}
@Test
public void testPushAndPopSequenceDetailsWhenNoSequence() throws Exception {
Message<Integer> message1 = MessageBuilder.withPayload(1).setCorrelationId("foo").build();
assertFalse(message1.getHeaders().containsKey(MessageHeaders.SEQUENCE_DETAILS));
Message<Integer> message2 = MessageBuilder.fromMessage(message1).pushSequenceDetails("bar", 1, 1).build();
assertTrue(message2.getHeaders().containsKey(MessageHeaders.SEQUENCE_DETAILS));
Message<Integer> message3 = MessageBuilder.fromMessage(message2).popSequenceDetails().build();
assertFalse(message3.getHeaders().containsKey(MessageHeaders.SEQUENCE_DETAILS));
}
}