@Override @Nullable protected Object resolveArgumentInternal(MethodParameter parameter, Message<?> message, String name) throws Exception { @SuppressWarnings("unchecked") Map<String, String> vars = (Map<String, String>) message.getHeaders().get(DESTINATION_TEMPLATE_VARIABLES_HEADER); return (vars != null ? vars.get(name) : null); }
@Test public void toMessageWithHeaders() { Map<String, Object> map = new HashMap<>(); map.put("foo", "bar"); MessageHeaders headers = new MessageHeaders(map); Message<?> message = this.converter.toMessage("ABC", headers); assertNotNull(message.getHeaders().getId()); assertNotNull(message.getHeaders().getTimestamp()); assertEquals(MimeTypeUtils.TEXT_PLAIN, message.getHeaders().get(MessageHeaders.CONTENT_TYPE)); assertEquals("bar", message.getHeaders().get("foo")); }
@Override public void afterMessageHandled( Message<?> msg, MessageChannel ch, MessageHandler handler, @Nullable Exception ex) { Runnable task = (Runnable) msg.getHeaders().get(OrderedMessageSender.COMPLETION_TASK_HEADER); if (task != null) { task.run(); } } }
@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")); }
@Test public void testNonTypedAccessOfHeaderValue() { 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")); }
@Test public void testTypedAccessOfHeaderValue() { 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", Integer.class)); }
@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 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 toMessageContentTypeHeader() { Message<?> message = this.converter.toMessage("ABC", null); assertEquals(MimeTypeUtils.TEXT_PLAIN, message.getHeaders().get(MessageHeaders.CONTENT_TYPE)); }
@Test public void testHeaderValues() { Message<String> message = MessageBuilder.withPayload("test") .setHeader("foo", "bar") .setHeader("count", 123) .build(); assertEquals("bar", message.getHeaders().get("foo", String.class)); assertEquals(new Integer(123), message.getHeaders().get("count", Integer.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 existingHeaders() throws InterruptedException { Map<String, Object> map = new HashMap<>(); map.put("foo", "bar"); map.put("bar", "baz"); GenericMessage<String> message = new GenericMessage<>("payload", map); MessageHeaderAccessor accessor = new MessageHeaderAccessor(message); MessageHeaders actual = accessor.getMessageHeaders(); assertEquals(3, actual.size()); assertEquals("bar", actual.get("foo")); assertEquals("baz", actual.get("bar")); }
@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 convertAndSendPayloadAndHeaders() { this.template.convertAndSend("myChannel", "payload", this.headers); assertSame(this.myChannel, this.template.messageChannel); assertNotNull(this.template.message); assertEquals("value", this.template.message.getHeaders().get("key")); assertEquals("payload", this.template.message.getPayload()); }
@Test public void toMessageWithPayloadAndMutableHeaders() { MessageHeaderAccessor accessor = new MessageHeaderAccessor(); accessor.setHeader("foo", "bar"); accessor.setLeaveMutable(true); MessageHeaders headers = accessor.getMessageHeaders(); Message<?> message = this.converter.toMessage("payload", headers); assertEquals("payload", message.getPayload()); assertSame(headers, message.getHeaders()); assertEquals("bar", message.getHeaders().get("foo")); } }
@Test public void createFromMessage() { Message<String> message1 = MessageBuilder.withPayload("test") .setHeader("foo", "bar").build(); Message<String> message2 = MessageBuilder.fromMessage(message1).build(); assertEquals("test", message2.getPayload()); assertEquals("bar", message2.getHeaders().get("foo")); }
@Test public void setNativeHeaderLazyInitNullValue() { NativeMessageHeaderAccessor headerAccessor = new NativeMessageHeaderAccessor(); headerAccessor.setNativeHeader("foo", null); assertNull(headerAccessor.getNativeHeader("foo")); assertNull(headerAccessor.getMessageHeaders().get(NativeMessageHeaderAccessor.NATIVE_HEADERS)); }
@Test public void testBuildMessageWithMutableHeaders() { MessageHeaderAccessor accessor = new MessageHeaderAccessor(); accessor.setLeaveMutable(true); MessageHeaders headers = accessor.getMessageHeaders(); Message<?> message = MessageBuilder.createMessage("payload", headers); accessor.setHeader("foo", "bar"); assertEquals("bar", headers.get("foo")); assertSame(accessor, MessageHeaderAccessor.getAccessor(message, MessageHeaderAccessor.class)); }
@Test public void leaveMutable() { MessageHeaderAccessor accessor = new MessageHeaderAccessor(); accessor.setHeader("foo", "bar"); accessor.setLeaveMutable(true); MessageHeaders headers = accessor.getMessageHeaders(); Message<?> message = MessageBuilder.createMessage("payload", headers); accessor.setHeader("foo", "baz"); assertEquals("baz", headers.get("foo")); assertSame(accessor, MessageHeaderAccessor.getAccessor(message, MessageHeaderAccessor.class)); }