Example usage for org.springframework.messaging.simp SimpMessageHeaderAccessor setLeaveMutable

List of usage examples for org.springframework.messaging.simp SimpMessageHeaderAccessor setLeaveMutable

Introduction

In this page you can find the example usage for org.springframework.messaging.simp SimpMessageHeaderAccessor setLeaveMutable.

Prototype

public void setLeaveMutable(boolean leaveMutable) 

Source Link

Document

By default when #getMessageHeaders() is called, "this" MessageHeaderAccessor instance can no longer be used to modify the underlying message headers and the returned MessageHeaders is immutable.

Usage

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

private MessageHeaders createHeaders(@Nullable String sessionId, String subscriptionId,
        MethodParameter returnType) {//from  ww w . ja va 2  s . c  om
    SimpMessageHeaderAccessor accessor = SimpMessageHeaderAccessor.create(SimpMessageType.MESSAGE);
    if (getHeaderInitializer() != null) {
        getHeaderInitializer().initHeaders(accessor);
    }
    if (sessionId != null) {
        accessor.setSessionId(sessionId);
    }
    accessor.setSubscriptionId(subscriptionId);
    accessor.setHeader(SimpMessagingTemplate.CONVERSION_HINT_HEADER, returnType);
    accessor.setLeaveMutable(true);
    return accessor.getMessageHeaders();
}

From source file:org.springframework.messaging.simp.broker.OrderedMessageSenderTests.java

@Test
public void test() throws InterruptedException {

    int start = 1;
    int end = 1000;

    AtomicInteger index = new AtomicInteger(start);
    AtomicReference<Object> result = new AtomicReference<>();
    CountDownLatch latch = new CountDownLatch(1);

    this.channel.subscribe(message -> {
        int expected = index.getAndIncrement();
        Integer actual = (Integer) message.getHeaders().getOrDefault("seq", -1);
        if (actual != expected) {
            result.set("Expected: " + expected + ", but was: " + actual);
            latch.countDown();//  w  w w  . ja  v  a  2  s  .  co  m
            return;
        }
        if (actual == 100 || actual == 200) {
            try {
                Thread.sleep(200);
            } catch (InterruptedException ex) {
                result.set(ex.toString());
                latch.countDown();
            }
        }
        if (actual == end) {
            result.set("Done");
            latch.countDown();
        }
    });

    for (int i = start; i <= end; i++) {
        SimpMessageHeaderAccessor accessor = SimpMessageHeaderAccessor.create(SimpMessageType.MESSAGE);
        accessor.setHeader("seq", i);
        accessor.setLeaveMutable(true);
        this.sender.send(MessageBuilder.createMessage("payload", accessor.getMessageHeaders()));
    }

    latch.await(10, TimeUnit.SECONDS);
    assertEquals("Done", result.get());
}

From source file:org.springframework.messaging.simp.user.UserDestinationMessageHandler.java

@Override
public void handleMessage(Message<?> message) throws MessagingException {
    Message<?> messageToUse = message;
    if (this.broadcastHandler != null) {
        messageToUse = this.broadcastHandler.preHandle(message);
        if (messageToUse == null) {
            return;
        }/*from w  w w.j  a  v  a  2  s. c  o m*/
    }

    UserDestinationResult result = this.destinationResolver.resolveDestination(messageToUse);
    if (result == null) {
        return;
    }

    if (result.getTargetDestinations().isEmpty()) {
        if (logger.isTraceEnabled()) {
            logger.trace("No active sessions for user destination: " + result.getSourceDestination());
        }
        if (this.broadcastHandler != null) {
            this.broadcastHandler.handleUnresolved(messageToUse);
        }
        return;
    }

    SimpMessageHeaderAccessor accessor = SimpMessageHeaderAccessor.wrap(messageToUse);
    initHeaders(accessor);
    accessor.setNativeHeader(SimpMessageHeaderAccessor.ORIGINAL_DESTINATION, result.getSubscribeDestination());
    accessor.setLeaveMutable(true);

    messageToUse = MessageBuilder.createMessage(messageToUse.getPayload(), accessor.getMessageHeaders());
    if (logger.isTraceEnabled()) {
        logger.trace("Translated " + result.getSourceDestination() + " -> " + result.getTargetDestinations());
    }
    for (String target : result.getTargetDestinations()) {
        this.messagingTemplate.send(target, messageToUse);
    }
}