Example usage for org.springframework.messaging.support MessageHeaderAccessor isMutable

List of usage examples for org.springframework.messaging.support MessageHeaderAccessor isMutable

Introduction

In this page you can find the example usage for org.springframework.messaging.support MessageHeaderAccessor isMutable.

Prototype

public boolean isMutable() 

Source Link

Document

Whether the underlying headers can still be modified.

Usage

From source file:org.eclipse.hawkbit.event.BusProtoStuffMessageConverter.java

private static boolean isAccessorMutable(final MessageHeaders headers) {
    final MessageHeaderAccessor accessor = MessageHeaderAccessor.getAccessor(headers,
            MessageHeaderAccessor.class);
    return accessor != null && accessor.isMutable();
}

From source file:org.springframework.messaging.converter.AbstractMessageConverter.java

@Override
@Nullable/*from   w  w  w  .j  av a2s  . c  o  m*/
public final Message<?> toMessage(Object payload, @Nullable MessageHeaders headers,
        @Nullable Object conversionHint) {
    if (!canConvertTo(payload, headers)) {
        return null;
    }

    Object payloadToUse = convertToInternal(payload, headers, conversionHint);
    if (payloadToUse == null) {
        return null;
    }

    MimeType mimeType = getDefaultContentType(payloadToUse);
    if (headers != null) {
        MessageHeaderAccessor accessor = MessageHeaderAccessor.getAccessor(headers,
                MessageHeaderAccessor.class);
        if (accessor != null && accessor.isMutable()) {
            if (mimeType != null) {
                accessor.setHeaderIfAbsent(MessageHeaders.CONTENT_TYPE, mimeType);
            }
            return MessageBuilder.createMessage(payloadToUse, accessor.getMessageHeaders());
        }
    }

    MessageBuilder<?> builder = MessageBuilder.withPayload(payloadToUse);
    if (headers != null) {
        builder.copyHeaders(headers);
    }
    if (mimeType != null) {
        builder.setHeaderIfAbsent(MessageHeaders.CONTENT_TYPE, mimeType);
    }
    return builder.build();
}

From source file:org.springframework.messaging.core.GenericMessagingTemplate.java

protected final void doSend(MessageChannel channel, Message<?> message, long timeout) {
    Assert.notNull(channel, "MessageChannel is required");

    Message<?> messageToSend = message;
    MessageHeaderAccessor accessor = MessageHeaderAccessor.getAccessor(message, MessageHeaderAccessor.class);
    if (accessor != null && accessor.isMutable()) {
        accessor.removeHeader(this.sendTimeoutHeader);
        accessor.removeHeader(this.receiveTimeoutHeader);
        accessor.setImmutable();// w  w w  .j  a v  a  2s.  c o  m
    } else if (message.getHeaders().containsKey(this.sendTimeoutHeader)
            || message.getHeaders().containsKey(this.receiveTimeoutHeader)) {
        messageToSend = MessageBuilder.fromMessage(message).setHeader(this.sendTimeoutHeader, null)
                .setHeader(this.receiveTimeoutHeader, null).build();
    }

    boolean sent = (timeout >= 0 ? channel.send(messageToSend, timeout) : channel.send(messageToSend));

    if (!sent) {
        throw new MessageDeliveryException(message,
                "Failed to send message to channel '" + channel + "' within timeout: " + timeout);
    }
}

From source file:org.springframework.messaging.simp.annotation.support.SimpAnnotationMethodMessageHandler.java

@Override
protected void handleMatch(SimpMessageMappingInfo mapping, HandlerMethod handlerMethod,
        String lookupDestination, Message<?> message) {

    Set<String> patterns = mapping.getDestinationConditions().getPatterns();
    if (!CollectionUtils.isEmpty(patterns)) {
        String pattern = patterns.iterator().next();
        Map<String, String> vars = getPathMatcher().extractUriTemplateVariables(pattern, lookupDestination);
        if (!CollectionUtils.isEmpty(vars)) {
            MessageHeaderAccessor mha = MessageHeaderAccessor.getAccessor(message, MessageHeaderAccessor.class);
            Assert.state(mha != null && mha.isMutable(), "Mutable MessageHeaderAccessor required");
            mha.setHeader(DestinationVariableMethodArgumentResolver.DESTINATION_TEMPLATE_VARIABLES_HEADER,
                    vars);/*w  ww  .  jav a  2  s  . c  o  m*/
        }
    }

    try {
        SimpAttributesContextHolder.setAttributesFromMessage(message);
        super.handleMatch(mapping, handlerMethod, lookupDestination, message);
    } finally {
        SimpAttributesContextHolder.resetAttributes();
    }
}

From source file:org.springframework.messaging.support.MessageHeaderAccessor.java

/**
 * Return a mutable {@code MessageHeaderAccessor} for the given message attempting
 * to match the type of accessor used to create the message headers, or otherwise
 * wrapping the message with a {@code MessageHeaderAccessor} instance.
 * <p>This is for cases where a header needs to be updated in generic code
 * while preserving the accessor type for downstream processing.
 * @return an accessor of the required type, never {@code null}.
 * @since 4.1//w  w w  . java2s . com
 */
public static MessageHeaderAccessor getMutableAccessor(Message<?> message) {
    if (message.getHeaders() instanceof MutableMessageHeaders) {
        MutableMessageHeaders mutableHeaders = (MutableMessageHeaders) message.getHeaders();
        MessageHeaderAccessor accessor = mutableHeaders.getMessageHeaderAccessor();
        if (accessor != null) {
            return (accessor.isMutable() ? accessor : accessor.createAccessor(message));
        }
    }
    return new MessageHeaderAccessor(message);
}