private org.springframework.messaging.Message<Object> createMessage(Message message, Channel channel) { Object payload = AmqpInboundChannelAdapter.this.messageConverter.fromMessage(message); Map<String, Object> headers = AmqpInboundChannelAdapter.this.headerMapper .toHeadersFromRequest(message.getMessageProperties()); if (AmqpInboundChannelAdapter.this.messageListenerContainer.getAcknowledgeMode() == AcknowledgeMode.MANUAL) { headers.put(AmqpHeaders.DELIVERY_TAG, message.getMessageProperties().getDeliveryTag()); headers.put(AmqpHeaders.CHANNEL, channel); } if (AmqpInboundChannelAdapter.this.retryTemplate != null) { headers.put(IntegrationMessageHeaderAccessor.DELIVERY_ATTEMPT, new AtomicInteger()); } final org.springframework.messaging.Message<Object> messagingMessage = getMessageBuilderFactory() .withPayload(payload) .copyHeaders(headers) .build(); return messagingMessage; }
@Override public void onMessage(org.springframework.amqp.core.Message message) { Message<?> messageToSend = null; try { Object converted = this.converter.fromMessage(message); messageToSend = (converted instanceof Message<?>) ? (Message<?>) converted : buildMessage(message, converted); this.dispatcher.dispatch(messageToSend); } catch (MessageDispatchingException e) { String exceptionMessage = e.getMessage() + " for amqp-channel '" + this.channel.getFullChannelName() + "'."; if (this.isPubSub) { // log only for backwards compatibility with pub/sub if (this.logger.isWarnEnabled()) { this.logger.warn(exceptionMessage, e); } } else { throw new MessageDeliveryException(messageToSend, exceptionMessage, e); } } }
Object payload = null; try { payload = AmqpInboundGateway.this.amqpMessageConverter.fromMessage(message); headers = AmqpInboundGateway.this.headerMapper.toHeadersFromRequest(message.getMessageProperties()); if (AmqpInboundGateway.this.messageListenerContainer.getAcknowledgeMode() == AcknowledgeMode.MANUAL) {
protected AbstractIntegrationMessageBuilder<?> buildReply(MessageConverter converter, org.springframework.amqp.core.Message amqpReplyMessage) { Object replyObject = converter.fromMessage(amqpReplyMessage); AbstractIntegrationMessageBuilder<?> builder = (replyObject instanceof Message) ? this.getMessageBuilderFactory().fromMessage((Message<?>) replyObject) : this.getMessageBuilderFactory().withPayload(replyObject); Map<String, ?> headers = getHeaderMapper().toHeadersFromReply(amqpReplyMessage.getMessageProperties()); builder.copyHeadersIfAbsent(headers); return builder; }
/** * Extract the payload of the specified {@link org.springframework.amqp.core.Message}. * @param message the AMQP Message to extract {@code payload}. * @return the extracted {@code payload}. */ protected Object extractPayload(org.springframework.amqp.core.Message message) { return this.payloadConverter.fromMessage(message); }
@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()); }
@Test public void messageConversionTests() { RabbitTemplate amqpTemplate = new RabbitTemplate(this.connectionFactory); MessageConverter messageConverter = mock(MessageConverter.class); amqpTemplate.setMessageConverter(messageConverter); PointToPointSubscribableAmqpChannel channel = new PointToPointSubscribableAmqpChannel("testConvertFail", new SimpleMessageListenerContainer(this.connectionFactory), amqpTemplate); channel.afterPropertiesSet(); MessageListener listener = TestUtils.getPropertyValue(channel, "container.messageListener", MessageListener.class); willThrow(new MessageConversionException("foo", new IllegalStateException("bar"))) .given(messageConverter).fromMessage(any(org.springframework.amqp.core.Message.class)); this.exception.expect(MessageConversionException.class); this.exception.expectCause(instanceOf(IllegalStateException.class)); listener.onMessage(mock(org.springframework.amqp.core.Message.class)); }
protected Message<?> buildReturnedMessage(org.springframework.amqp.core.Message message, int replyCode, String replyText, String exchange, String routingKey, MessageConverter converter) { Object returnedObject = converter.fromMessage(message); AbstractIntegrationMessageBuilder<?> builder = (returnedObject instanceof Message) ? this.getMessageBuilderFactory().fromMessage((Message<?>) returnedObject) : this.getMessageBuilderFactory().withPayload(returnedObject); Map<String, ?> headers = getHeaderMapper().toHeadersFromReply(message.getMessageProperties()); if (this.errorMessageStrategy == null) { builder.copyHeadersIfAbsent(headers) .setHeader(AmqpHeaders.RETURN_REPLY_CODE, replyCode) .setHeader(AmqpHeaders.RETURN_REPLY_TEXT, replyText) .setHeader(AmqpHeaders.RETURN_EXCHANGE, exchange) .setHeader(AmqpHeaders.RETURN_ROUTING_KEY, routingKey); } Message<?> returnedMessage = builder.build(); if (this.errorMessageStrategy != null) { returnedMessage = this.errorMessageStrategy.buildErrorMessage(new ReturnedAmqpMessageException( returnedMessage, message, replyCode, replyText, exchange, routingKey), null); } return returnedMessage; }
/** * Extract the message body from the given Rabbit message. * @param message the Rabbit <code>Message</code> * @return the content of the message, to be passed into the listener method as argument */ protected Object extractMessage(Message message) { MessageConverter converter = getMessageConverter(); if (converter != null) { return converter.fromMessage(message); } return message; }
/** * Extract the message body from the given Rabbit message. * @param message the Rabbit <code>Message</code> * @return the content of the message, to be passed into the listener method as argument */ protected Object extractMessage(Message message) { MessageConverter converter = getMessageConverter(); if (converter != null) { return converter.fromMessage(message); } return message; }
@Override @Nullable public Object convertSendAndReceive(final String exchange, final String routingKey, final Object message, @Nullable final MessagePostProcessor messagePostProcessor, @Nullable final CorrelationData correlationData) throws AmqpException { Message replyMessage = convertSendAndReceiveRaw(exchange, routingKey, message, messagePostProcessor, correlationData); if (replyMessage == null) { return null; } return this.getRequiredMessageConverter().fromMessage(replyMessage); }
Map<String, Object> headers = this.headerMapper.toHeadersFromRequest(messageProperties); org.springframework.amqp.core.Message amqpMessage = new org.springframework.amqp.core.Message(resp.getBody(), messageProperties); Object payload = this.messageConverter.fromMessage(amqpMessage); AbstractIntegrationMessageBuilder<Object> builder = getMessageBuilderFactory().withPayload(payload) .copyHeaders(headers)
@Override @Nullable public Object convertSendAndReceive(final String exchange, final String routingKey, final Object message, @Nullable final MessagePostProcessor messagePostProcessor, @Nullable final CorrelationData correlationData) throws AmqpException { Message replyMessage = convertSendAndReceiveRaw(exchange, routingKey, message, messagePostProcessor, correlationData); if (replyMessage == null) { return null; } return this.getRequiredMessageConverter().fromMessage(replyMessage); }
@Nullable protected Message<?> convertAmqpMessage(@Nullable org.springframework.amqp.core.Message message) { if (message == null) { return null; } try { return (Message<?>) getAmqpMessageConverter().fromMessage(message); } catch (Exception ex) { throw new MessageConversionException("Could not convert '" + message + "'", ex); } }
Object payload = rabbitTemplate.getMessageConverter().fromMessage(message); Map<String, Object> headers = getInboundHeaderMapper() .toHeadersFromRequest(message.getMessageProperties());
@Override @Nullable public Object receiveAndConvert(String queueName, long timeoutMillis) throws AmqpException { Message response = timeoutMillis == 0 ? doReceiveNoWait(queueName) : receive(queueName, timeoutMillis); if (response != null) { return getRequiredMessageConverter().fromMessage(response); } return null; }
@Override @Nullable public Object receiveAndConvert(String queueName, long timeoutMillis) throws AmqpException { Message response = timeoutMillis == 0 ? doReceiveNoWait(queueName) : receive(queueName, timeoutMillis); if (response != null) { return getRequiredMessageConverter().fromMessage(response); } return null; }
/** * Removes a {@link Interceptor}. * * @param message {@link Message} */ @RabbitListener(queues = RabbitConstants.LISTENER_HEIMDALL_REMOVE_INTERCEPTORS) public void removeInterceptor(final Message message) { InterceptorFileDTO interceptor = (InterceptorFileDTO) rabbitTemplate.getMessageConverter().fromMessage(message); log.info("Removing Interceptor id: " + interceptor.getId()); interceptorFileService.removeFileInterceptor(interceptor); }
@Override public Object fromMessage(Message message) throws MessageConversionException { String contentType = message.getMessageProperties().getContentType(); return getConverterForContentType(contentType).fromMessage(message); }
@Test public void convertMessageConversionExceptionOnReceive() { org.springframework.amqp.core.Message message = createAmqpTextMessage(); MessageConverter messageConverter = mock(MessageConverter.class); willThrow(org.springframework.amqp.support.converter.MessageConversionException.class) .given(messageConverter).fromMessage(message); messagingTemplate.setAmqpMessageConverter(messageConverter); given(rabbitTemplate.receive("myQueue")).willReturn(message); thrown.expect(org.springframework.messaging.converter.MessageConversionException.class); messagingTemplate.receive("myQueue"); }