Example usage for org.springframework.integration.jms DefaultJmsHeaderMapper DefaultJmsHeaderMapper

List of usage examples for org.springframework.integration.jms DefaultJmsHeaderMapper DefaultJmsHeaderMapper

Introduction

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

Prototype

DefaultJmsHeaderMapper

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;// w  ww .j  a  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;
        }
    });

}