@Override public String get(MessageProperties carrier, String key) { return (String) carrier.getHeaders().get(key); }
TraceContextOrSamplingFlags extractAndClearHeaders(Message message) { MessageProperties messageProperties = message.getMessageProperties(); TraceContextOrSamplingFlags extracted = extractor.extract(messageProperties); Map<String, Object> headers = messageProperties.getHeaders(); clearHeaders(headers); return extracted; }
/** * Extract user-defined headers from an AMQP MessageProperties instance. */ @Override protected Map<String, Object> extractUserDefinedHeaders(MessageProperties amqpMessageProperties) { return amqpMessageProperties.getHeaders(); }
@Override protected void populateUserDefinedHeader(String headerName, Object headerValue, MessageProperties amqpMessageProperties) { // do not overwrite an existing header with the same key // TODO: do we need to expose a boolean 'overwrite' flag? if (!amqpMessageProperties.getHeaders().containsKey(headerName) && !AmqpHeaders.CONTENT_TYPE.equals(headerName)) { amqpMessageProperties.setHeader(headerName, headerValue); } }
Object value = amqpMessageProperties.getHeaders().get(jsonHeader.replaceFirst(JsonHeaders.PREFIX, "")); if (value instanceof String && StringUtils.hasText((String) value)) { headers.put(jsonHeader, value);
@Test public void messageTimestampNotMappedToAmqpProperties() { DefaultAmqpHeaderMapper headerMapper = DefaultAmqpHeaderMapper.inboundMapper(); Map<String, Object> headerMap = new HashMap<String, Object>(); headerMap.put(MessageHeaders.TIMESTAMP, 1234L); MessageHeaders integrationHeaders = new MessageHeaders(headerMap); MessageProperties amqpProperties = new MessageProperties(); headerMapper.fromHeadersToRequest(integrationHeaders, amqpProperties); assertNull(amqpProperties.getHeaders().get(MessageHeaders.TIMESTAMP)); }
@Test public void messageIdNotMappedToAmqpProperties() { DefaultAmqpHeaderMapper headerMapper = DefaultAmqpHeaderMapper.inboundMapper(); Map<String, Object> headerMap = new HashMap<String, Object>(); headerMap.put(MessageHeaders.ID, "msg-id"); MessageHeaders integrationHeaders = new MessageHeaders(headerMap); MessageProperties amqpProperties = new MessageProperties(); headerMapper.fromHeadersToRequest(integrationHeaders, amqpProperties); assertNull(amqpProperties.getHeaders().get(MessageHeaders.ID)); }
@Test // INT-2090 public void jsonTypeIdNotOverwritten() { DefaultAmqpHeaderMapper headerMapper = DefaultAmqpHeaderMapper.inboundMapper(); MessageConverter converter = new Jackson2JsonMessageConverter(); MessageProperties amqpProperties = new MessageProperties(); converter.toMessage("123", amqpProperties); Map<String, Object> headerMap = new HashMap<String, Object>(); headerMap.put("__TypeId__", "java.lang.Integer"); MessageHeaders integrationHeaders = new MessageHeaders(headerMap); headerMapper.fromHeadersToRequest(integrationHeaders, amqpProperties); assertEquals("java.lang.String", amqpProperties.getHeaders().get("__TypeId__")); Object result = converter.fromMessage(new Message("123".getBytes(), amqpProperties)); assertEquals(String.class, result.getClass()); }
MessageProperties amqpProperties = new MessageProperties(); amqpProperties.setReceivedDeliveryMode(MessageDeliveryMode.NON_PERSISTENT); amqpProperties.getHeaders().put("foo", "bar"); amqpProperties.getHeaders().put("x-foo", "bar"); Map<String, Object> headers = mapper.toHeadersFromRequest(amqpProperties); assertNull(headers.get(AmqpHeaders.DELIVERY_MODE)); mapper.fromHeadersToReply(new MessageHeaders(headers), amqpProperties); assertEquals(MessageDeliveryMode.NON_PERSISTENT, amqpProperties.getDeliveryMode()); assertEquals("bar", amqpProperties.getHeaders().get("foo")); assertNull(amqpProperties.getHeaders().get("x-foo")); assertEquals("bar", amqpProperties.getHeaders().get("foo")); assertNull(amqpProperties.getHeaders().get("x-foo"));
org.springframework.amqp.core.Message amqpRequestMessage = (org.springframework.amqp.core.Message) args[2]; MessageProperties properties = amqpRequestMessage.getMessageProperties(); assertNull(properties.getHeaders().get("foo"));
org.springframework.amqp.core.Message amqpMessage = (org.springframework.amqp.core.Message) args[2]; MessageProperties properties = amqpMessage.getMessageProperties(); assertEquals("foo", properties.getHeaders().get("foo")); assertEquals("foobar", properties.getHeaders().get("foobar")); assertNull(properties.getHeaders().get("bar")); assertEquals(shouldBePersistent.get() ? MessageDeliveryMode.PERSISTENT : MessageDeliveryMode.NON_PERSISTENT, properties.getDeliveryMode());
org.springframework.amqp.core.Message amqpRequestMessage = (org.springframework.amqp.core.Message) args[2]; MessageProperties properties = amqpRequestMessage.getMessageProperties(); assertNull(properties.getHeaders().get("foo"));
Message amqpReplyMessage = (Message) args[2]; MessageProperties properties = amqpReplyMessage.getMessageProperties(); assertEquals("bar", properties.getHeaders().get("bar")); return null; }).when(amqpTemplate).send(Mockito.any(String.class), Mockito.any(String.class),
MessageProperties amqpProperties = new MessageProperties(); headerMapper.fromHeadersToRequest(integrationHeaders, amqpProperties); Set<String> headerKeys = amqpProperties.getHeaders().keySet(); for (String headerKey : headerKeys) { if (headerKey.startsWith(AmqpHeaders.PREFIX) || headerKey.equals("contentType")) { assertEquals("test.userId", amqpProperties.getUserId()); assertNull(amqpProperties.getHeaders().get(MessageHeaders.ERROR_CHANNEL)); assertNull(amqpProperties.getHeaders().get(MessageHeaders.REPLY_CHANNEL));
org.springframework.amqp.core.Message amqpRequestMessage = (org.springframework.amqp.core.Message) args[2]; MessageProperties properties = amqpRequestMessage.getMessageProperties(); assertEquals("foo", properties.getHeaders().get("foo"));
org.springframework.amqp.core.Message message = invocation.getArgument(2); Map<String, Object> headers = message.getMessageProperties().getHeaders(); assertTrue(headers.containsKey(JsonHeaders.TYPE_ID.replaceFirst(JsonHeaders.PREFIX, ""))); assertNotEquals("foo", headers.get(JsonHeaders.TYPE_ID.replaceFirst(JsonHeaders.PREFIX, "")));
@Test public void testHeaderMapperWinsGateway() { ConnectionFactory connectionFactory = mock(ConnectionFactory.class); TestRabbitTemplate amqpTemplate = spy(new TestRabbitTemplate(connectionFactory)); AmqpOutboundEndpoint endpoint = new AmqpOutboundEndpoint(amqpTemplate); endpoint.setHeadersMappedLast(true); endpoint.setExpectReply(true); DefaultAmqpHeaderMapper mapper = DefaultAmqpHeaderMapper.inboundMapper(); mapper.setRequestHeaderNames("*"); endpoint.setHeaderMapper(mapper); final AtomicReference<Message> amqpMessage = new AtomicReference<Message>(); willAnswer(invocation -> { amqpMessage.set(invocation.getArgument(2)); return null; }).given(amqpTemplate) .doSendAndReceiveWithTemporary(isNull(), isNull(), any(Message.class), isNull()); org.springframework.messaging.Message<?> message = MessageBuilder.withPayload("foo") .setHeader(MessageHeaders.CONTENT_TYPE, "bar") .setReplyChannel(new QueueChannel()) .build(); endpoint.handleMessage(message); assertNotNull(amqpMessage.get()); assertEquals("bar", amqpMessage.get().getMessageProperties().getContentType()); assertNull(amqpMessage.get().getMessageProperties().getHeaders().get(MessageHeaders.REPLY_CHANNEL)); }
org.springframework.amqp.core.Message amqpRequestMessage = (org.springframework.amqp.core.Message) args[2]; MessageProperties properties = amqpRequestMessage.getMessageProperties(); assertEquals("foo", properties.getHeaders().get("foo")); assertEquals(shouldBePersistent.get() ? MessageDeliveryMode.PERSISTENT : MessageDeliveryMode.NON_PERSISTENT, properties.getDeliveryMode());
assertEquals("\"hello\"", new String(received.getBody(), "UTF-8")); assertEquals("application/json", received.getMessageProperties().getContentType()); assertEquals("java.lang.String", received.getMessageProperties().getHeaders() .get(JsonHeaders.TYPE_ID.replaceFirst(JsonHeaders.PREFIX, "")));
@Test public void adapterWithContentType() throws Exception { RabbitTemplate template = new RabbitTemplate(this.connectionFactory); template.setDefaultReceiveQueue(this.queue.getName()); while (template.receive() != null) { // drain } Message<?> message = MessageBuilder.withPayload("hello") .setHeader(AmqpHeaders.CONTENT_TYPE, "application/json") .build(); this.ctRequestChannel.send(message); org.springframework.amqp.core.Message m = receive(template); assertNotNull(m); assertEquals("\"hello\"", new String(m.getBody(), "UTF-8")); assertEquals("application/json", m.getMessageProperties().getContentType()); assertEquals("java.lang.String", m.getMessageProperties().getHeaders().get(JsonHeaders.TYPE_ID.replaceFirst(JsonHeaders.PREFIX, ""))); message = MessageBuilder.withPayload("hello") .build(); this.ctRequestChannel.send(message); m = receive(template); assertNotNull(m); assertEquals("hello", new String(m.getBody(), "UTF-8")); assertEquals("text/plain", m.getMessageProperties().getContentType()); while (template.receive() != null) { // drain } }