protected void handleInboundMessage(Message<?> message) { if (this.isRemoteClientSession) { this.outboundChannel.send(message); } }
private void sendInternal(Message<?> message) { String destination = SimpMessageHeaderAccessor.getDestination(message.getHeaders()); Assert.notNull(destination, "Destination header required"); long timeout = this.sendTimeout; boolean sent = (timeout >= 0 ? this.messageChannel.send(message, timeout) : this.messageChannel.send(message)); if (!sent) { throw new MessageDeliveryException(message, "Failed to send message to destination '" + destination + "' within timeout: " + timeout); } }
@Override public void handleMessage(Message<?> message) throws MessagingException { MessageChannel replyChannel = (MessageChannel) message.getHeaders().getReplyChannel(); replyChannel.send(new GenericMessage<>("response")); } });
private Message<String> startSession(String id) { this.messageHandler.start(); Message<String> connectMessage = createConnectMessage(id, new TestPrincipal("joe"), null); this.messageHandler.setTaskScheduler(this.taskScheduler); this.messageHandler.handleMessage(connectMessage); verify(this.clientOutChannel, times(1)).send(this.messageCaptor.capture()); reset(this.clientOutChannel); return connectMessage; }
@Before public void setup() { this.protocolHandler = new StompSubProtocolHandler(); this.channel = Mockito.mock(MessageChannel.class); this.messageCaptor = ArgumentCaptor.forClass(Message.class); when(this.channel.send(any())).thenReturn(true); this.session = new TestWebSocketSession(); this.session.setId("s1"); this.session.setPrincipal(new TestPrincipal("joe")); }
@Before public void setUp() throws Exception { MockitoAnnotations.initMocks(this); when(this.brokerChannel.send(any())).thenReturn(true); this.converter = new MappingJackson2MessageConverter(); SimpMessagingTemplate brokerTemplate = new SimpMessagingTemplate(this.brokerChannel); brokerTemplate.setMessageConverter(this.converter); this.localRegistry = mock(SimpUserRegistry.class); this.multiServerRegistry = new MultiServerUserRegistry(this.localRegistry); this.handler = new UserRegistryMessageHandler(this.multiServerRegistry, brokerTemplate, "/topic/simp-user-registry", this.taskScheduler); }
@Test public void jsonView() throws Exception { given(this.messageChannel.send(any(Message.class))).willReturn(true); String sessionId = "sess1"; Message<?> inputMessage = createMessage(sessionId, "sub1", "/app", "/dest", null); this.jsonHandler.handleReturnValue(handleAndSendToJsonView(), this.jsonViewReturnType, inputMessage); verify(this.messageChannel).send(this.messageCaptor.capture()); Message<?> message = this.messageCaptor.getValue(); assertNotNull(message); String bytes = new String((byte[]) message.getPayload(), StandardCharsets.UTF_8); assertEquals("{\"withView1\":\"with\"}", bytes); }
@Test // SPR-14238 public void sendToUserWithSendToDefaultOverride() throws Exception { given(this.messageChannel.send(any(Message.class))).willReturn(true); Class<?> clazz = SendToUserWithSendToOverrideTestBean.class; Method method = clazz.getDeclaredMethod("handleAndSendToDefaultDestination"); MethodParameter parameter = new SynthesizingMethodParameter(method, -1); String sessionId = "sess1"; Message<?> inputMessage = createMessage(sessionId, "sub1", null, null, null); this.handler.handleReturnValue(PAYLOAD, parameter, inputMessage); verify(this.messageChannel, times(1)).send(this.messageCaptor.capture()); assertResponse(parameter, sessionId, 0, "/user/sess1/dest-default"); }
@Test public void sendToNoAnnotations() throws Exception { given(this.messageChannel.send(any(Message.class))).willReturn(true); String sessionId = "sess1"; Message<?> inputMessage = createMessage(sessionId, "sub1", "/app", "/dest", null); this.handler.handleReturnValue(PAYLOAD, this.noAnnotationsReturnType, inputMessage); verify(this.messageChannel, times(1)).send(this.messageCaptor.capture()); assertResponse(this.noAnnotationsReturnType, sessionId, 0, "/topic/dest"); }
@Test public void sendToUserClassDefaultNoAnnotation() throws Exception { given(this.messageChannel.send(any(Message.class))).willReturn(true); String sessionId = "sess1"; Message<?> inputMessage = createMessage(sessionId, "sub1", null, null, null); this.handler.handleReturnValue(PAYLOAD, this.userDefaultNoAnnotation, inputMessage); verify(this.messageChannel, times(1)).send(this.messageCaptor.capture()); assertResponse(this.userDefaultNoAnnotation, sessionId, 0, "/user/sess1/dest-default"); }
@Test public void sendToClassDefaultNoAnnotation() throws Exception { given(this.messageChannel.send(any(Message.class))).willReturn(true); String sessionId = "sess1"; Message<?> inputMessage = createMessage(sessionId, "sub1", null, null, null); this.handler.handleReturnValue(PAYLOAD, this.defaultNoAnnotation, inputMessage); verify(this.messageChannel, times(1)).send(this.messageCaptor.capture()); assertResponse(this.defaultNoAnnotation, sessionId, 0, "/dest-default"); }
@Test public void sendToClassDefaultEmptyAnnotation() throws Exception { given(this.messageChannel.send(any(Message.class))).willReturn(true); String sessionId = "sess1"; Message<?> inputMessage = createMessage(sessionId, "sub1", null, null, null); this.handler.handleReturnValue(PAYLOAD, this.defaultEmptyAnnotation, inputMessage); verify(this.messageChannel, times(1)).send(this.messageCaptor.capture()); assertResponse(this.defaultEmptyAnnotation, sessionId, 0, "/dest-default"); }
@Test public void sendToDefaultDestination() throws Exception { given(this.messageChannel.send(any(Message.class))).willReturn(true); String sessionId = "sess1"; Message<?> inputMessage = createMessage(sessionId, "sub1", "/app", "/dest", null); this.handler.handleReturnValue(PAYLOAD, this.sendToDefaultDestReturnType, inputMessage); verify(this.messageChannel, times(1)).send(this.messageCaptor.capture()); assertResponse(this.sendToDefaultDestReturnType, sessionId, 0, "/topic/dest"); }
@Test public void sendToUserClassDefaultEmptyAnnotation() throws Exception { given(this.messageChannel.send(any(Message.class))).willReturn(true); String sessionId = "sess1"; Message<?> inputMessage = createMessage(sessionId, "sub1", null, null, null); this.handler.handleReturnValue(PAYLOAD, this.userDefaultEmptyAnnotation, inputMessage); verify(this.messageChannel, times(1)).send(this.messageCaptor.capture()); assertResponse(this.userDefaultEmptyAnnotation, sessionId, 0, "/user/sess1/dest-default"); }
@Test public void sendToClassDefaultOverride() throws Exception { given(this.messageChannel.send(any(Message.class))).willReturn(true); String sessionId = "sess1"; Message<?> inputMessage = createMessage(sessionId, "sub1", null, null, null); this.handler.handleReturnValue(PAYLOAD, this.defaultOverrideAnnotation, inputMessage); verify(this.messageChannel, times(2)).send(this.messageCaptor.capture()); assertResponse(this.defaultOverrideAnnotation, sessionId, 0, "/dest3"); assertResponse(this.defaultOverrideAnnotation, sessionId, 1, "/dest4"); }
@Test // SPR-14238 public void sendToUserWithSendToOverride() throws Exception { given(this.messageChannel.send(any(Message.class))).willReturn(true); Class<?> clazz = SendToUserWithSendToOverrideTestBean.class; Method method = clazz.getDeclaredMethod("handleAndSendToOverride"); MethodParameter parameter = new SynthesizingMethodParameter(method, -1); String sessionId = "sess1"; Message<?> inputMessage = createMessage(sessionId, "sub1", null, null, null); this.handler.handleReturnValue(PAYLOAD, parameter, inputMessage); verify(this.messageChannel, times(2)).send(this.messageCaptor.capture()); assertResponse(parameter, sessionId, 0, "/dest3"); assertResponse(parameter, sessionId, 1, "/dest4"); }
@Test public void sendTo() throws Exception { given(this.messageChannel.send(any(Message.class))).willReturn(true); String sessionId = "sess1"; Message<?> inputMessage = createMessage(sessionId, "sub1", null, null, null); this.handler.handleReturnValue(PAYLOAD, this.sendToReturnType, inputMessage); verify(this.messageChannel, times(2)).send(this.messageCaptor.capture()); assertResponse(this.sendToReturnType, sessionId, 0, "/dest1"); assertResponse(this.sendToReturnType, sessionId, 1, "/dest2"); }
@Test public void sendToUserClassDefaultOverride() throws Exception { given(this.messageChannel.send(any(Message.class))).willReturn(true); String sessionId = "sess1"; Message<?> inputMessage = createMessage(sessionId, "sub1", null, null, null); this.handler.handleReturnValue(PAYLOAD, this.userDefaultOverrideAnnotation, inputMessage); verify(this.messageChannel, times(2)).send(this.messageCaptor.capture()); assertResponse(this.userDefaultOverrideAnnotation, sessionId, 0, "/user/sess1/dest3"); assertResponse(this.userDefaultOverrideAnnotation, sessionId, 1, "/user/sess1/dest4"); }
@Test public void sendToDefaultDestinationWhenUsingDotPathSeparator() throws Exception { given(this.messageChannel.send(any(Message.class))).willReturn(true); Message<?> inputMessage = createMessage("sess1", "sub1", "/app/", "dest.foo.bar", null); this.handler.handleReturnValue(PAYLOAD, this.sendToDefaultDestReturnType, inputMessage); verify(this.messageChannel, times(1)).send(this.messageCaptor.capture()); SimpMessageHeaderAccessor accessor = getCapturedAccessor(0); assertEquals("/topic/dest.foo.bar", accessor.getDestination()); }
@Test public void sendToUserDefaultDestinationWhenUsingDotPathSeparator() throws Exception { given(this.messageChannel.send(any(Message.class))).willReturn(true); TestUser user = new TestUser(); Message<?> inputMessage = createMessage("sess1", "sub1", "/app/", "dest.foo.bar", user); this.handler.handleReturnValue(PAYLOAD, this.sendToUserDefaultDestReturnType, inputMessage); verify(this.messageChannel, times(1)).send(this.messageCaptor.capture()); SimpMessageHeaderAccessor accessor = getCapturedAccessor(0); assertEquals("/user/" + user.getName() + "/queue/dest.foo.bar", accessor.getDestination()); }