private void handleDisconnect(String sessionId, @Nullable Principal user, @Nullable Message<?> origMessage) { this.sessions.remove(sessionId); this.subscriptionRegistry.unregisterAllSubscriptions(sessionId); SimpMessageHeaderAccessor accessor = SimpMessageHeaderAccessor.create(SimpMessageType.DISCONNECT_ACK); accessor.setSessionId(sessionId); if (user != null) { accessor.setUser(user); } if (origMessage != null) { accessor.setHeader(SimpMessageHeaderAccessor.DISCONNECT_MESSAGE_HEADER, origMessage); } initHeaders(accessor); Message<byte[]> message = MessageBuilder.createMessage(EMPTY_PAYLOAD, accessor.getMessageHeaders()); getClientOutboundChannel().send(message); }
private MessageHeaders createHeaders(@Nullable String sessionId, MethodParameter returnType) { SimpMessageHeaderAccessor headerAccessor = SimpMessageHeaderAccessor.create(SimpMessageType.MESSAGE); if (getHeaderInitializer() != null) { getHeaderInitializer().initHeaders(headerAccessor); } if (sessionId != null) { headerAccessor.setSessionId(sessionId); } headerAccessor.setHeader(SimpMessagingTemplate.CONVERSION_HINT_HEADER, returnType); headerAccessor.setLeaveMutable(true); return headerAccessor.getMessageHeaders(); }
private MessageHeaders createHeaders(@Nullable String sessionId, String subscriptionId, MethodParameter returnType) { 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(); }
private Message<?> createMessage(String destination) { SimpMessageHeaderAccessor accessor = SimpMessageHeaderAccessor.create(); accessor.setDestination(destination); return MessageBuilder.createMessage("", accessor.getMessageHeaders()); }
private Message<String> createMessage(String destination, String payload) { SimpMessageHeaderAccessor headers = SimpMessageHeaderAccessor.create(SimpMessageType.MESSAGE); headers.setDestination(destination); return MessageBuilder.createMessage(payload, headers.getMessageHeaders()); }
public static MessageExchangeBuilder send(String destination, String payload) { SimpMessageHeaderAccessor headers = SimpMessageHeaderAccessor.create(SimpMessageType.MESSAGE); headers.setDestination(destination); Message<?> message = MessageBuilder.createMessage(payload.getBytes(StandardCharsets.UTF_8), headers.getMessageHeaders()); return new MessageExchangeBuilder(message); }
@Override public void run() { try { SimpMessageHeaderAccessor accessor = SimpMessageHeaderAccessor.create(SimpMessageType.MESSAGE); accessor.setHeader(SimpMessageHeaderAccessor.IGNORE_ERROR, true); accessor.setLeaveMutable(true); Object payload = userRegistry.getLocalRegistryDto(); brokerTemplate.convertAndSend(getBroadcastDestination(), payload, accessor.getMessageHeaders()); } finally { userRegistry.purgeExpiredRegistries(); } } }
private Message<?> unsubscribeMessage(String sessionId, String subscriptionId) { SimpMessageHeaderAccessor accessor = SimpMessageHeaderAccessor.create(SimpMessageType.UNSUBSCRIBE); accessor.setSessionId(sessionId); accessor.setSubscriptionId(subscriptionId); return MessageBuilder.createMessage("", accessor.getMessageHeaders()); }
private Message<String> createConnectMessage(String sessionId, long[] heartbeat) { SimpMessageHeaderAccessor accessor = SimpMessageHeaderAccessor.create(SimpMessageType.CONNECT); accessor.setSessionId(sessionId); accessor.setHeader(SimpMessageHeaderAccessor.HEART_BEAT_HEADER, heartbeat); return MessageBuilder.createMessage("", accessor.getMessageHeaders()); }
@Test public void toNativeHeadersContentType() { SimpMessageHeaderAccessor simpHeaderAccessor = SimpMessageHeaderAccessor.create(); simpHeaderAccessor.setContentType(MimeType.valueOf("application/atom+xml")); Message<byte[]> message = MessageBuilder.createMessage(new byte[0], simpHeaderAccessor.getMessageHeaders()); StompHeaderAccessor stompHeaderAccessor = StompHeaderAccessor.wrap(message); Map<String, List<String>> map = stompHeaderAccessor.toNativeHeaderMap(); assertEquals("application/atom+xml", map.get(StompHeaderAccessor.STOMP_CONTENT_TYPE_HEADER).get(0)); }
private Message<String> createSubscriptionMessage(String sessionId, String subscriptionId, String destination) { SimpMessageHeaderAccessor headers = SimpMessageHeaderAccessor.create(SimpMessageType.SUBSCRIBE); headers.setSubscriptionId(subscriptionId); headers.setDestination(destination); headers.setSessionId(sessionId); return MessageBuilder.createMessage("", headers.getMessageHeaders()); }
private Message<String> createConnectMessage(String sessionId, Principal user, long[] heartbeat) { SimpMessageHeaderAccessor accessor = SimpMessageHeaderAccessor.create(SimpMessageType.CONNECT); accessor.setSessionId(sessionId); accessor.setUser(user); accessor.setHeader(SimpMessageHeaderAccessor.HEART_BEAT_HEADER, heartbeat); return MessageBuilder.createMessage("", accessor.getMessageHeaders()); }
@Test public void toMessageWithMutableMessageHeaders() { SimpMessageHeaderAccessor accessor = SimpMessageHeaderAccessor.create(SimpMessageType.MESSAGE); accessor.setHeader("foo", "bar"); accessor.setNativeHeader("fooNative", "barNative"); accessor.setLeaveMutable(true); MessageHeaders headers = accessor.getMessageHeaders(); Message<?> message = this.converter.toMessage("ABC", headers); assertSame(headers, message.getHeaders()); assertNull(message.getHeaders().getId()); assertNull(message.getHeaders().getTimestamp()); assertEquals(MimeTypeUtils.TEXT_PLAIN, message.getHeaders().get(MessageHeaders.CONTENT_TYPE)); }
private Message<byte[]> createMessage(SimpMessageType type, String sessionId, String subscriptionId, String destination) { SimpMessageHeaderAccessor accessor = SimpMessageHeaderAccessor.create(type); accessor.setSessionId(sessionId); if (destination != null) { accessor.setDestination(destination); } if (subscriptionId != null) { accessor.setSubscriptionId(subscriptionId); } return MessageBuilder.createMessage(new byte[0], accessor.getMessageHeaders()); }
private Message<?> subscribeMessage(String sessionId, String subscriptionId, String dest, String selector) { SimpMessageHeaderAccessor accessor = SimpMessageHeaderAccessor.create(SimpMessageType.SUBSCRIBE); accessor.setSessionId(sessionId); accessor.setSubscriptionId(subscriptionId); if (dest != null) { accessor.setDestination(dest); } if (selector != null) { accessor.setNativeHeader("selector", selector); } return MessageBuilder.createMessage("", accessor.getMessageHeaders()); }
@Test public void convertAndSendWithMutableSimpMessageHeaders() { SimpMessageHeaderAccessor accessor = SimpMessageHeaderAccessor.create(); accessor.setHeader("key", "value"); accessor.setNativeHeader("fooNative", "barNative"); accessor.setLeaveMutable(true); MessageHeaders headers = accessor.getMessageHeaders(); this.messagingTemplate.convertAndSend("/foo", "data", headers); List<Message<byte[]>> messages = this.messageChannel.getMessages(); Message<byte[]> message = messages.get(0); assertSame(headers, message.getHeaders()); assertFalse(accessor.isMutable()); }
@Test public void connect() { String id = "sess1"; Message<String> connectMessage = startSession(id); Message<?> connectAckMessage = this.messageCaptor.getValue(); SimpMessageHeaderAccessor connectAckHeaders = SimpMessageHeaderAccessor.wrap(connectAckMessage); assertEquals(connectMessage, connectAckHeaders.getHeader(SimpMessageHeaderAccessor.CONNECT_MESSAGE_HEADER)); assertEquals(id, connectAckHeaders.getSessionId()); assertEquals("joe", connectAckHeaders.getUser().getName()); assertArrayEquals(new long[] {10000, 10000}, SimpMessageHeaderAccessor.getHeartbeat(connectAckHeaders.getMessageHeaders())); }
@Test public void handleMessageToClientWithSimpHeartbeat() { SimpMessageHeaderAccessor accessor = SimpMessageHeaderAccessor.create(SimpMessageType.HEARTBEAT); accessor.setSessionId("s1"); accessor.setUser(new TestPrincipal("joe")); Message<byte[]> ackMessage = MessageBuilder.createMessage(EMPTY_PAYLOAD, accessor.getMessageHeaders()); this.protocolHandler.handleMessageToClient(this.session, ackMessage); assertEquals(1, this.session.getSentMessages().size()); TextMessage actual = (TextMessage) this.session.getSentMessages().get(0); assertEquals("\n", actual.getPayload()); }
@Test public void setAttributesFromMessageWithMissingSessionAttributes() { this.thrown.expect(IllegalStateException.class); this.thrown.expectMessage(startsWith("No session attributes in")); SimpMessageHeaderAccessor headerAccessor = SimpMessageHeaderAccessor.create(); headerAccessor.setSessionId("session1"); Message<?> message = MessageBuilder.createMessage("", headerAccessor.getMessageHeaders()); SimpAttributesContextHolder.setAttributesFromMessage(message); }
@Test public void destinationExcluded() throws Exception { this.brokerRelay.start(); SimpMessageHeaderAccessor headers = SimpMessageHeaderAccessor.create(SimpMessageType.MESSAGE); headers.setSessionId("sess1"); headers.setDestination("/user/daisy/foo"); this.brokerRelay.handleMessage(MessageBuilder.createMessage(new byte[0], headers.getMessageHeaders())); assertEquals(1, this.tcpClient.getSentMessages().size()); StompHeaderAccessor headers1 = this.tcpClient.getSentHeaders(0); assertEquals(StompCommand.CONNECT, headers1.getCommand()); assertEquals(StompBrokerRelayMessageHandler.SYSTEM_SESSION_ID, headers1.getSessionId()); }