Example usage for org.springframework.integration.jms JmsHeaderMapper fromHeaders

List of usage examples for org.springframework.integration.jms JmsHeaderMapper fromHeaders

Introduction

In this page you can find the example usage for org.springframework.integration.jms JmsHeaderMapper fromHeaders.

Prototype

void fromHeaders(MessageHeaders headers, T target);

Source Link

Usage

From source file:org.springframework.cloud.stream.binder.jms.utils.RepublishMessageRecoverer.java

@Override
public void recover(Message undeliveredMessage, Throwable cause) {
    String deadLetterQueueName = queueProvisioner.provisionDeadLetterQueue();

    final JmsHeaderMapper mapper = new DefaultJmsHeaderMapper();
    MessageConverter converter = new SimpleMessageConverter();
    Object payload = null;//from   w w  w.ja v a2 s.  c  o  m

    try {
        payload = converter.fromMessage(undeliveredMessage);
    } catch (JMSException e) {
        logger.error("The message payload could not be retrieved. It will be lost.", e);
    }

    final Map<String, Object> headers = mapper.toHeaders(undeliveredMessage);
    headers.put(X_EXCEPTION_STACKTRACE, getStackTraceAsString(cause));
    headers.put(X_EXCEPTION_MESSAGE,
            cause.getCause() != null ? cause.getCause().getMessage() : cause.getMessage());
    try {
        headers.put(X_ORIGINAL_QUEUE, undeliveredMessage.getJMSDestination().toString());
    } catch (JMSException e) {
        logger.error("The message destination could not be retrieved", e);
    }
    Map<? extends String, ? extends Object> additionalHeaders = additionalHeaders(undeliveredMessage, cause);
    if (additionalHeaders != null) {
        headers.putAll(additionalHeaders);
    }

    jmsTemplate.convertAndSend(deadLetterQueueName, payload, new MessagePostProcessor() {
        @Override
        public Message postProcessMessage(Message message) throws JMSException {
            mapper.fromHeaders(new MessageHeaders(headers), message);
            return message;
        }
    });

}