headers.put(AmqpHeaders.CONTENT_LENGTH, contentLength); String contentType = amqpMessageProperties.getContentType(); if (StringUtils.hasText(contentType)) { headers.put(AmqpHeaders.CONTENT_TYPE, contentType);
String contentEncoding = messageProperties.getContentEncoding(); long contentLength = messageProperties.getContentLength(); String contentType = messageProperties.getContentType(); AmqpInboundGateway.this.headerMapper.fromHeadersToReply(reply.getHeaders(), messageProperties);
@Test public void fromHeadersWithContentTypeAsMediaType() { DefaultAmqpHeaderMapper headerMapper = DefaultAmqpHeaderMapper.inboundMapper(); Map<String, Object> headerMap = new HashMap<String, Object>(); MediaType contentType = MediaType.parseMediaType("text/html"); headerMap.put(AmqpHeaders.CONTENT_TYPE, contentType); MessageHeaders integrationHeaders = new MessageHeaders(headerMap); MessageProperties amqpProperties = new MessageProperties(); headerMapper.fromHeadersToRequest(integrationHeaders, amqpProperties); assertEquals("text/html", amqpProperties.getContentType()); headerMap.put(AmqpHeaders.CONTENT_TYPE, MimeTypeUtils.APPLICATION_JSON); integrationHeaders = new MessageHeaders(headerMap); amqpProperties = new MessageProperties(); headerMapper.fromHeadersToRequest(integrationHeaders, amqpProperties); assertEquals(MimeTypeUtils.APPLICATION_JSON_VALUE, amqpProperties.getContentType()); }
@Test public void fromHeadersWithContentTypeAsMimeType() { DefaultAmqpHeaderMapper headerMapper = DefaultAmqpHeaderMapper.inboundMapper(); Map<String, Object> headerMap = new HashMap<String, Object>(); MimeType contentType = MimeType.valueOf("text/html"); headerMap.put(AmqpHeaders.CONTENT_TYPE, contentType); MessageHeaders integrationHeaders = new MessageHeaders(headerMap); MessageProperties amqpProperties = new MessageProperties(); headerMapper.fromHeadersToRequest(integrationHeaders, amqpProperties); assertEquals("text/html", amqpProperties.getContentType()); }
@Test public void testHeaderMapperWinsAdapter() { ConnectionFactory connectionFactory = mock(ConnectionFactory.class); RabbitTemplate amqpTemplate = spy(new RabbitTemplate(connectionFactory)); AmqpOutboundEndpoint endpoint = new AmqpOutboundEndpoint(amqpTemplate); endpoint.setHeadersMappedLast(true); final AtomicReference<Message> amqpMessage = new AtomicReference<Message>(); willAnswer(invocation -> { amqpMessage.set(invocation.getArgument(2)); return null; }).given(amqpTemplate).send(isNull(), isNull(), any(Message.class), isNull()); org.springframework.messaging.Message<?> message = MessageBuilder.withPayload("foo") .setHeader(MessageHeaders.CONTENT_TYPE, "bar") .build(); endpoint.handleMessage(message); assertNotNull(amqpMessage.get()); assertEquals("bar", amqpMessage.get().getMessageProperties().getContentType()); }
assertEquals("test.contentEncoding", amqpProperties.getContentEncoding()); assertEquals(99L, amqpProperties.getContentLength()); assertEquals("test.contentType", amqpProperties.getContentType()); assertEquals(testCorrelationId, amqpProperties.getCorrelationId()); assertEquals(Integer.valueOf(1234), amqpProperties.getDelay());
org.springframework.amqp.core.Message mapped = MappingUtils.mapMessage(requestMessage, converter, headerMapper, defaultDeliveryMode, headersMappedLast); assertThat(mapped.getMessageProperties().getContentType(), equalTo("text/plain")); assertThat(mapped.getMessageProperties().getContentType(), equalTo("my/ct")); mapped = MappingUtils.mapMessage(requestMessage, ctdConverter, headerMapper, defaultDeliveryMode, headersMappedLast); assertThat(mapped.getMessageProperties().getContentType(), equalTo("my/ct")); assertThat(mapped.getMessageProperties().getContentType(), equalTo("text/plain"));
public MessageBuilderSupport<T> setContentTypeIfAbsentOrDefault(String contentType) { if (this.properties.getContentType() == null || this.properties.getContentType().equals(MessageProperties.DEFAULT_CONTENT_TYPE)) { this.properties.setContentType(contentType); } return this; }
@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)); }
@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 } }
assertEquals("application/json", received.getMessageProperties().getContentType()); assertEquals("java.lang.String", received.getMessageProperties().getHeaders() .get(JsonHeaders.TYPE_ID.replaceFirst(JsonHeaders.PREFIX, "")));
@Override public Message toMessage(Object object, MessageProperties messageProperties) { String contentType = messageProperties.getContentType(); return getConverterForContentType(contentType).toMessage(object, messageProperties); }
@Test public void fromHeadersWithContentTypeAsMediaType() { SimpleAmqpHeaderMapper headerMapper = new SimpleAmqpHeaderMapper(); Map<String, Object> headerMap = new HashMap<String, Object>(); headerMap.put(AmqpHeaders.CONTENT_TYPE, MimeTypeUtils.TEXT_HTML); MessageHeaders messageHeaders = new MessageHeaders(headerMap); MessageProperties amqpProperties = new MessageProperties(); headerMapper.fromHeaders(messageHeaders, amqpProperties); assertEquals("text/html", amqpProperties.getContentType()); }
@Test public void serializedObjectToMessage() throws Exception { SerializerMessageConverter converter = new SerializerMessageConverter(); TestBean testBean = new TestBean("foo"); Message message = converter.toMessage(testBean, new MessageProperties()); String contentType = message.getMessageProperties().getContentType(); byte[] body = message.getBody(); assertEquals("application/x-java-serialized-object", contentType); ByteArrayInputStream bais = new ByteArrayInputStream(body); Object deserializedObject = new ObjectInputStream(bais).readObject(); assertEquals(testBean, deserializedObject); }
@Test public void serializedObjectToMessage() throws Exception { SimpleMessageConverter converter = new SimpleMessageConverter(); TestBean testBean = new TestBean("foo"); Message message = converter.toMessage(testBean, new MessageProperties()); String contentType = message.getMessageProperties().getContentType(); byte[] body = message.getBody(); assertEquals("application/x-java-serialized-object", contentType); ByteArrayInputStream bais = new ByteArrayInputStream(body); Object deserializedObject = new ObjectInputStream(bais).readObject(); assertEquals(testBean, deserializedObject); }
@Test public void dontSetNullContentType() throws Exception { TestMarshaller marshaller = new TestMarshaller(); MarshallingMessageConverter converter = new MarshallingMessageConverter(marshaller); converter.afterPropertiesSet(); final String defaultContentType = new MessageProperties().getContentType(); Message message = converter.toMessage("marshal test", new MessageProperties()); assertEquals(defaultContentType, message.getMessageProperties().getContentType()); }
@Test public void toMessageWithTextMessage() { org.springframework.amqp.core.Message message = converter .toMessage(MessageBuilder.withPayload("Hello World").build(), new MessageProperties()); assertEquals(MessageProperties.CONTENT_TYPE_TEXT_PLAIN, message.getMessageProperties().getContentType()); assertEquals("Hello World", new String(message.getBody())); }
@Test public void stringToMessage() throws Exception { SimpleMessageConverter converter = new SimpleMessageConverter(); Message message = converter.toMessage("test", new MessageProperties()); String contentType = message.getMessageProperties().getContentType(); String content = new String(message.getBody(), message.getMessageProperties().getContentEncoding()); assertEquals("text/plain", contentType); assertEquals("test", content); }
@Test public void messageConversionExceptionForClassNotFound() throws Exception { SerializerMessageConverter converter = new SerializerMessageConverter(); TestBean testBean = new TestBean("foo"); Message message = converter.toMessage(testBean, new MessageProperties()); String contentType = message.getMessageProperties().getContentType(); assertEquals("application/x-java-serialized-object", contentType); byte[] body = message.getBody(); body[10] = 'z'; this.exception.expect(MessageConversionException.class); this.exception.expectCause(instanceOf(NestedIOException.class)); converter.fromMessage(message); }
@Test public void marshalIncludesContentType() throws Exception { TestMarshaller marshaller = new TestMarshaller(); MarshallingMessageConverter converter = new MarshallingMessageConverter(marshaller); converter.setContentType(MessageProperties.CONTENT_TYPE_XML); converter.afterPropertiesSet(); Message message = converter.toMessage("marshal test", new MessageProperties()); assertEquals("application/xml", message.getMessageProperties().getContentType()); }