Add strategy for customizing ID/TIMESTAMP headers

Introduce MessageHeaderInitializer strategy for initializing a
MessageHeaderAccessor.

Add IdTimestampMessageHeaderInitializer implementation that provides
control over ID and timestamp header generation.

Disable ID and timestamp by default in SimpMessageHeaderAccessor and
therefore its sub-class StompHeaderAccessor.

Issue: SPR-11468
This commit is contained in:
Rossen Stoyanchev
2014-04-14 13:46:32 -04:00
parent 09248a0b37
commit 95e25d4e6f
11 changed files with 168 additions and 349 deletions

View File

@@ -26,6 +26,7 @@ import org.springframework.messaging.Message;
import org.springframework.messaging.MessageHeaders;
import org.springframework.messaging.simp.SimpMessageHeaderAccessor;
import org.springframework.messaging.simp.SimpMessageType;
import org.springframework.messaging.support.IdTimestampMessageHeaderInitializer;
import org.springframework.messaging.support.MessageBuilder;
import org.springframework.messaging.support.MessageHeaderAccessor;
import org.springframework.util.AlternativeJdkIdGenerator;
@@ -221,15 +222,15 @@ public class StompHeaderAccessorTests {
@Test
public void messageIdAndTimestampEnabled() {
DefaultStompHeaderAccessorFactory factory = new DefaultStompHeaderAccessorFactory();
factory.setIdGenerator(new AlternativeJdkIdGenerator());
factory.setEnableTimestamp(true);
IdTimestampMessageHeaderInitializer headerInitializer = new IdTimestampMessageHeaderInitializer();
headerInitializer.setIdGenerator(new AlternativeJdkIdGenerator());
headerInitializer.setEnableTimestamp(true);
StompHeaderAccessor headerAccessor = factory.create(StompCommand.SEND);
MessageHeaders headers = headerAccessor.getMessageHeaders();
StompHeaderAccessor headerAccessor = StompHeaderAccessor.create(StompCommand.SEND);
headerInitializer.initHeaders(headerAccessor);
assertNotNull(headers.getId());
assertNotNull(headers.getTimestamp());
assertNotNull(headerAccessor.getMessageHeaders().getId());
assertNotNull(headerAccessor.getMessageHeaders().getTimestamp());
}
@Test