public void setIdAndTimestamp() { if (!isMutable()) { return; } if (getId() == null) { IdGenerator idGenerator = (MessageHeaderAccessor.this.idGenerator != null ? MessageHeaderAccessor.this.idGenerator : MessageHeaders.getIdGenerator()); UUID id = idGenerator.generateId(); if (id != null && id != MessageHeaders.ID_VALUE_NONE) { getRawHeaders().put(ID, id); } } if (getTimestamp() == null) { if (MessageHeaderAccessor.this.enableTimestamp) { getRawHeaders().put(TIMESTAMP, System.currentTimeMillis()); } } }
@Test public void testBuildMessageWithoutIdAndTimestamp() { MessageHeaderAccessor headerAccessor = new MessageHeaderAccessor(); headerAccessor.setIdGenerator(new IdGenerator() { @Override public UUID generateId() { return MessageHeaders.ID_VALUE_NONE; } }); Message<?> message = MessageBuilder.createMessage("foo", headerAccessor.getMessageHeaders()); assertNull(message.getHeaders().getId()); assertNull(message.getHeaders().getTimestamp()); }
@Test public void idGeneratorCustom() { final UUID id = new UUID(0L, 23L); MessageHeaderAccessor accessor = new MessageHeaderAccessor(); accessor.setIdGenerator(new IdGenerator() { @Override public UUID generateId() { return id; } }); assertSame(id, accessor.getMessageHeaders().getId()); }
@Test public void idTimestampWithMutableHeaders() { MessageHeaderAccessor accessor = new MessageHeaderAccessor(); accessor.setIdGenerator(new IdGenerator() { @Override public UUID generateId() { return MessageHeaders.ID_VALUE_NONE; } }); accessor.setEnableTimestamp(false); accessor.setLeaveMutable(true); MessageHeaders headers = accessor.getMessageHeaders(); assertNull(headers.getId()); assertNull(headers.getTimestamp()); final UUID id = new UUID(0L, 23L); accessor.setIdGenerator(new IdGenerator() { @Override public UUID generateId() { return id; } }); accessor.setEnableTimestamp(true); accessor.setImmutable(); assertSame(id, accessor.getMessageHeaders().getId()); assertNotNull(headers.getTimestamp()); }
protected static IdGenerator getIdGenerator() { return (idGenerator != null ? idGenerator : defaultIdGenerator); }
/** * Return the configured {@code IdGenerator}, if any. */ public IdGenerator getIdGenerator() { return this.idGenerator; }
/** * Configure the IdGenerator strategy to initialize {@code MessageHeaderAccessor} * instances with. * <p>By default this property is set to {@code null} in which case the default * IdGenerator of {@link org.springframework.messaging.MessageHeaders} is used. * <p>To have no id's generated at all, see {@link #setDisableIdGeneration()}. */ public void setIdGenerator(IdGenerator idGenerator) { this.idGenerator = idGenerator; }
/** * A package-private mechanism to configure the IdGenerator strategy to use. * <p>By default this property is not set in which case the default IdGenerator * in {@link org.springframework.messaging.MessageHeaders} is used. * @see IdTimestampMessageHeaderInitializer */ void setIdGenerator(IdGenerator idGenerator) { this.idGenerator = idGenerator; }