/** * Create a new message with the given payload. * @param payload the message payload (never {@code null}) */ public GenericMessage(T payload) { this(payload, new MessageHeaders(null)); }
/** * Create a new message with the given payload and headers. * The content of the given header map is copied. * @param payload the message payload (never {@code null}) * @param headers message headers to use for initialization */ public GenericMessage(T payload, Map<String, Object> headers) { this(payload, new MessageHeaders(headers)); }
/** * Return a copy of the underlying header values as a {@link MessageHeaders} object. * <p>This method can be invoked many times, with modifications in between * where each new call returns a fresh copy of the current header values. * @since 4.1 */ public MessageHeaders toMessageHeaders() { return new MessageHeaders(this.headers); }
@Test(expected = InvalidMimeTypeException.class) public void resolveInvalidStringContentType() { Map<String, Object> map = new HashMap<>(); map.put(MessageHeaders.CONTENT_TYPE, "invalidContentType"); MessageHeaders headers = new MessageHeaders(map); this.resolver.resolve(headers); }
@Test(expected = IllegalArgumentException.class) public void testHeaderValueAccessWithIncorrectType() { Integer value = new Integer(123); Map<String, Object> map = new HashMap<>(); map.put("test", value); MessageHeaders headers = new MessageHeaders(map); assertEquals(value, headers.get("test", String.class)); }
@Test public void testIdOverwritten() throws Exception { MessageHeaders headers1 = new MessageHeaders(null); MessageHeaders headers2 = new MessageHeaders(headers1); assertNotSame(headers1.getId(), headers2.getId()); }
@Test public void resolveStringContentType() { Map<String, Object> map = new HashMap<>(); map.put(MessageHeaders.CONTENT_TYPE, MimeTypeUtils.APPLICATION_JSON_VALUE); MessageHeaders headers = new MessageHeaders(map); assertEquals(MimeTypeUtils.APPLICATION_JSON, this.resolver.resolve(headers)); }
@Test public void testTimestampProvidedNullValue() throws Exception { Map<String, Object> input = Collections.<String, Object>singletonMap(MessageHeaders.TIMESTAMP, 1L); MessageHeaders headers = new MessageHeaders(input, null, null); assertNotNull(headers.getTimestamp()); }
@Test public void testIdProvided() { UUID id = new UUID(0L, 25L); MessageHeaders headers = new MessageHeaders(null, id, null); assertEquals(id, headers.getId()); }
@Test public void testNullHeaderValue() { Map<String, Object> map = new HashMap<>(); MessageHeaders headers = new MessageHeaders(map); assertNull(headers.get("nosuchattribute")); }
@Test public void testNullHeaderValueWithTypedAccess() { Map<String, Object> map = new HashMap<>(); MessageHeaders headers = new MessageHeaders(map); assertNull(headers.get("nosuchattribute", String.class)); }
@Test public void toMessageWithPayloadAndHeaders() { MessageHeaders headers = new MessageHeaders(Collections.<String, Object>singletonMap("foo", "bar")); Message<?> message = this.converter.toMessage("payload", headers); assertEquals("payload", message.getPayload()); assertEquals("bar", message.getHeaders().get("foo")); }
@Test public void toMessageUtf16() { MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter(); MimeType contentType = new MimeType("application", "json", StandardCharsets.UTF_16BE); Map<String, Object> map = new HashMap<>(); map.put(MessageHeaders.CONTENT_TYPE, contentType); MessageHeaders headers = new MessageHeaders(map); String payload = "H\u00e9llo W\u00f6rld"; Message<?> message = converter.toMessage(payload, headers); assertEquals("\"" + payload + "\"", new String((byte[]) message.getPayload(), StandardCharsets.UTF_16BE)); assertEquals(contentType, message.getHeaders().get(MessageHeaders.CONTENT_TYPE)); }
@Test public void testTimestampProvided() throws Exception { MessageHeaders headers = new MessageHeaders(null, null, 10L); assertEquals(10L, (long) headers.getTimestamp()); }
@Test public void testIdNone() { MessageHeaders headers = new MessageHeaders(null, MessageHeaders.ID_VALUE_NONE, null); assertNull(headers.getId()); }
@Test public void testTimestamp() { MessageHeaders headers = new MessageHeaders(null); assertNotNull(headers.getTimestamp()); }
@Test public void testTimestampNone() throws Exception { MessageHeaders headers = new MessageHeaders(null, null, -1L); assertNull(headers.getTimestamp()); }
@Test public void resolveDefaultMimeType() { this.resolver.setDefaultMimeType(MimeTypeUtils.APPLICATION_JSON); MessageHeaders headers = new MessageHeaders(Collections.<String, Object>emptyMap()); assertEquals(MimeTypeUtils.APPLICATION_JSON, this.resolver.resolve(headers)); }
@Test(expected = MessageConversionException.class) public void convertAndSendNoMatchingConverter() { MessageConverter converter = new CompositeMessageConverter( Arrays.<MessageConverter>asList(new MappingJackson2MessageConverter())); this.template.setMessageConverter(converter); this.headers.put(MessageHeaders.CONTENT_TYPE, MimeTypeUtils.APPLICATION_XML); this.template.convertAndSend("home", "payload", new MessageHeaders(this.headers)); }
@Test public void serializeWithAllSerializableHeaders() throws Exception { Map<String, Object> map = new HashMap<>(); map.put("name", "joe"); map.put("age", 42); MessageHeaders input = new MessageHeaders(map); MessageHeaders output = (MessageHeaders) SerializationTestUtils.serializeAndDeserialize(input); assertEquals("joe", output.get("name")); assertEquals(42, output.get("age")); assertEquals("joe", input.get("name")); assertEquals(42, input.get("age")); }