Example usage for org.springframework.integration.history MessageHistory MessageHistory

List of usage examples for org.springframework.integration.history MessageHistory MessageHistory

Introduction

In this page you can find the example usage for org.springframework.integration.history MessageHistory MessageHistory.

Prototype

private MessageHistory(List<Properties> components) 

Source Link

Usage

From source file:org.springframework.integration.history.MessageHistory.java

@SuppressWarnings("unchecked")
public static <T> Message<T> write(Message<T> message, NamedComponent component,
        MessageBuilderFactory messageBuilderFactory) {
    Assert.notNull(message, "Message must not be null");
    Assert.notNull(component, "Component must not be null");
    Properties metadata = extractMetadata(component);
    if (!metadata.isEmpty()) {
        MessageHistory previousHistory = message.getHeaders().get(HEADER_NAME, MessageHistory.class);
        List<Properties> components = (previousHistory != null) ? new ArrayList<Properties>(previousHistory)
                : new ArrayList<Properties>();
        components.add(metadata);/*from  w w  w  . ja v a2s.  c om*/
        MessageHistory history = new MessageHistory(components);

        if (message instanceof MutableMessage) {
            message.getHeaders().put(HEADER_NAME, history);
        } else if (message instanceof ErrorMessage) {
            IntegrationMessageHeaderAccessor headerAccessor = new IntegrationMessageHeaderAccessor(message);
            headerAccessor.setHeader(HEADER_NAME, history);
            Throwable payload = ((ErrorMessage) message).getPayload();
            ErrorMessage errorMessage = new ErrorMessage(payload, headerAccessor.toMessageHeaders());
            message = (Message<T>) errorMessage;
        } else if (message instanceof AdviceMessage) {
            IntegrationMessageHeaderAccessor headerAccessor = new IntegrationMessageHeaderAccessor(message);
            headerAccessor.setHeader(HEADER_NAME, history);
            message = new AdviceMessage<T>(message.getPayload(), headerAccessor.toMessageHeaders(),
                    ((AdviceMessage<?>) message).getInputMessage());
        } else {
            if (!(message instanceof GenericMessage)
                    && (messageBuilderFactory instanceof DefaultMessageBuilderFactory
                            || messageBuilderFactory instanceof MutableMessageBuilderFactory)) {
                if (logger.isWarnEnabled()) {
                    logger.warn("MessageHistory rebuilds the message and produces the result of the ["
                            + messageBuilderFactory + "], not an instance of the provided type ["
                            + message.getClass() + "]. Consider to supply a custom MessageBuilderFactory "
                            + "to retain custom messages during MessageHistory tracking.");
                }
            }
            message = messageBuilderFactory.fromMessage(message).setHeader(HEADER_NAME, history).build();
        }
    }
    return message;
}