private Message<?> createMessage(SimpMessageType messageType, String destination, Map<String, Object> headers) { SimpMessageHeaderAccessor accessor = SimpMessageHeaderAccessor.create(messageType); accessor.setSessionId("session1"); accessor.setSessionAttributes(new HashMap<>()); accessor.setDestination(destination); if (headers != null) { for (Map.Entry<String, Object> entry : headers.entrySet()) { accessor.setHeader(entry.getKey(), entry.getValue()); } } return MessageBuilder.withPayload(new byte[0]).setHeaders(accessor).build(); }
@Test public void simpScope() { Map<String, Object> sessionAttributes = new ConcurrentHashMap<>(); sessionAttributes.put("name", "value"); SimpMessageHeaderAccessor headers = SimpMessageHeaderAccessor.create(); headers.setSessionId("session1"); headers.setSessionAttributes(sessionAttributes); headers.setDestination("/pre/scope"); Message<?> message = MessageBuilder.withPayload(new byte[0]).setHeaders(headers).build(); this.messageHandler.registerHandler(this.testController); this.messageHandler.handleMessage(message); assertEquals("scope", this.testController.method); }
@Test public void clientOutboundChannelUsedByAnnotatedMethod() { ApplicationContext context = loadConfig(SimpleBrokerConfig.class); TestChannel channel = context.getBean("clientOutboundChannel", TestChannel.class); SimpAnnotationMethodMessageHandler messageHandler = context.getBean(SimpAnnotationMethodMessageHandler.class); StompHeaderAccessor headers = StompHeaderAccessor.create(StompCommand.SUBSCRIBE); headers.setSessionId("sess1"); headers.setSessionAttributes(new ConcurrentHashMap<>()); headers.setSubscriptionId("subs1"); headers.setDestination("/foo"); Message<?> message = MessageBuilder.withPayload(new byte[0]).setHeaders(headers).build(); messageHandler.handleMessage(message); message = channel.messages.get(0); headers = StompHeaderAccessor.wrap(message); assertEquals(SimpMessageType.MESSAGE, headers.getMessageType()); assertEquals("/foo", headers.getDestination()); assertEquals("bar", new String((byte[]) message.getPayload())); }
private Message<?> createMessage(SimpMessageType type, Principal user, String sessionId, String destination) { SimpMessageHeaderAccessor headers = SimpMessageHeaderAccessor.create(type); if (destination != null) { headers.setDestination(destination); } if (user != null) { headers.setUser(user); } if (sessionId != null) { headers.setSessionId(sessionId); } return MessageBuilder.withPayload(new byte[0]).setHeaders(headers).build(); }
@Test // SPR-11326 public void resolveArgumentNativeHeader() throws Exception { TestMessageHeaderAccessor headers = new TestMessageHeaderAccessor(); headers.setNativeHeader("param1", "foo"); Message<byte[]> message = MessageBuilder.withPayload(new byte[0]).setHeaders(headers).build(); assertEquals("foo", this.resolver.resolveArgument(this.paramRequired, message)); }
private Message<?> createWith(SimpMessageType type, String user, String sessionId, String destination) { SimpMessageHeaderAccessor headers = SimpMessageHeaderAccessor.create(type); if (destination != null) { headers.setDestination(destination); } if (user != null) { headers.setUser(new TestPrincipal(user)); } if (sessionId != null) { headers.setSessionId(sessionId); } return MessageBuilder.withPayload(new byte[0]).setHeaders(headers).build(); }
@Test public void testBuildMultipleMessages() { MessageHeaderAccessor headerAccessor = new MessageHeaderAccessor(); MessageBuilder<?> messageBuilder = MessageBuilder.withPayload("payload").setHeaders(headerAccessor); headerAccessor.setHeader("foo", "bar1"); Message<?> message1 = messageBuilder.build(); headerAccessor.setHeader("foo", "bar2"); Message<?> message2 = messageBuilder.build(); headerAccessor.setHeader("foo", "bar3"); Message<?> message3 = messageBuilder.build(); assertEquals("bar1", message1.getHeaders().get("foo")); assertEquals("bar2", message2.getHeaders().get("foo")); assertEquals("bar3", message3.getHeaders().get("foo")); } }
@Test public void globalException() throws Exception { SimpMessageHeaderAccessor headers = SimpMessageHeaderAccessor.create(); headers.setSessionId("session1"); headers.setSessionAttributes(new ConcurrentHashMap<>()); headers.setDestination("/exception"); Message<?> message = MessageBuilder.withPayload(new byte[0]).setHeaders(headers).build(); this.messageHandler.handleMessage(message); TestControllerAdvice controllerAdvice = this.applicationContext.getBean(TestControllerAdvice.class); assertTrue(controllerAdvice.isExceptionHandled()); }
private Message convertMessagingFromRocketMQMsg(MessageExt msg, Acknowledgement acknowledgement) { return MessageBuilder.withPayload(msg.getBody()) .setHeaders(new RocketMQMessageHeaderAccessor() .withAcknowledgment(acknowledgement).withTags(msg.getTags()) .withKeys(msg.getKeys()).withFlag(msg.getFlag()) .withRocketMessage(msg)) .build(); }
@Test public void resolveArgumentNativeHeaderAmbiguity() throws Exception { TestMessageHeaderAccessor headers = new TestMessageHeaderAccessor(); headers.setHeader("param1", "foo"); headers.setNativeHeader("param1", "native-foo"); Message<byte[]> message = MessageBuilder.withPayload(new byte[0]).setHeaders(headers).build(); assertEquals("foo", this.resolver.resolveArgument(this.paramRequired, message)); assertEquals("native-foo", this.resolver.resolveArgument(this.paramNativeHeader, message)); }
@Test public void sendMessageToBrokerAndReceiveReplyViaTopic() throws Exception { StompHeaderAccessor headers = StompHeaderAccessor.create(StompCommand.SUBSCRIBE); headers.setSubscriptionId("subs1"); headers.setDestination("/topic/foo"); Message<byte[]> message = MessageBuilder.withPayload(ByteBuffer.allocate(0).array()) .setHeaders(headers) .build(); headers = StompHeaderAccessor.create(StompCommand.SEND); headers.setSubscriptionId("subs1"); headers.setDestination("/topic/foo"); Message<Integer> message2 = MessageBuilder.withPayload(10).setHeaders(headers).build(); this.webSocketOutputChannel.send(message); waitForSubscribe("/topic/foo"); this.webSocketOutputChannel.send(message2); Message<?> receive = webSocketInputChannel.receive(20000); assertNotNull(receive); assertEquals("10", receive.getPayload()); }
@Test public void sendMessageToGateway() throws Exception { StompHeaderAccessor headers = StompHeaderAccessor.create(StompCommand.SUBSCRIBE); headers.setSubscriptionId("subs1"); headers.setDestination("/user/queue/answer"); Message<byte[]> message = MessageBuilder.withPayload(ByteBuffer.allocate(0).array()) .setHeaders(headers) .build(); headers = StompHeaderAccessor.create(StompCommand.SEND); headers.setSubscriptionId("subs1"); headers.setDestination("/app/greeting"); Message<String> message2 = MessageBuilder.withPayload("Bob").setHeaders(headers).build(); this.webSocketOutputChannel.send(message); waitForSubscribe("/queue/answer-user" + this.clientWebSocketContainer.getSession(null).getId()); this.webSocketOutputChannel.send(message2); Message<?> receive = webSocketInputChannel.receive(20000); assertNotNull(receive); assertEquals("Hello Bob", receive.getPayload()); }
@Test public void sendSubscribeToControllerAndReceiveReply() { String destHeader = "/app/number"; StompHeaderAccessor headers = StompHeaderAccessor.create(StompCommand.SUBSCRIBE); headers.setSubscriptionId("subs1"); headers.setDestination(destHeader); Message<byte[]> message = MessageBuilder.withPayload(ByteBuffer.allocate(0).array()) .setHeaders(headers) .build(); this.webSocketOutputChannel.send(message); Message<?> receive = webSocketInputChannel.receive(20000); assertNotNull(receive); StompHeaderAccessor stompHeaderAccessor = StompHeaderAccessor.wrap(receive); assertEquals("Expected STOMP destination=/app/number, got " + stompHeaderAccessor, destHeader, stompHeaderAccessor.getDestination()); Object payload = receive.getPayload(); assertEquals("Expected STOMP Payload=42, got " + payload, "42", payload); }
@Test public void sendMessageToController() throws Exception { StompHeaderAccessor headers = StompHeaderAccessor.create(StompCommand.CONNECT); this.webSocketOutputChannel.send(MessageBuilder.withPayload(new byte[0]).setHeaders(headers).build()); Message<?> receive = this.webSocketEvents.receive(20000); assertNotNull(receive); Object event = receive.getPayload(); assertThat(event, instanceOf(SessionConnectedEvent.class)); Message<?> connectedMessage = ((SessionConnectedEvent) event).getMessage(); headers = StompHeaderAccessor.wrap(connectedMessage); assertEquals(StompCommand.CONNECTED, headers.getCommand()); headers = StompHeaderAccessor.create(StompCommand.SEND); headers.setSubscriptionId("sub1"); headers.setDestination("/app/simple"); Message<String> message = MessageBuilder.withPayload("foo").setHeaders(headers).build(); this.webSocketOutputChannel.send(message); SimpleController controller = this.serverContext.getBean(SimpleController.class); assertTrue(controller.latch.await(20, TimeUnit.SECONDS)); assertEquals(StompCommand.SEND.name(), controller.stompCommand); }
headers.setSubscriptionId("subs1"); headers.setDestination("/queue/foo"); Message<byte[]> message = MessageBuilder.withPayload(ByteBuffer.allocate(0).array()).setHeaders(headers).build(); Message<String> message2 = MessageBuilder.withPayload("Spring").setHeaders(headers).build(); headers = StompHeaderAccessor.create(StompCommand.MESSAGE); headers.setDestination("/queue/foo"); message = MessageBuilder.withPayload(ByteBuffer.allocate(0).array()).setHeaders(headers).build(); MultiValueMap<String, String> subscriptions = subscriptionRegistry.findSubscriptions(message); assertFalse(subscriptions.isEmpty());
@Test public void handleExceptionAndSendToUser() throws Exception { String destHeader = "/user/queue/error"; StompHeaderAccessor headers = StompHeaderAccessor.create(StompCommand.SUBSCRIBE); headers.setSubscriptionId("subs1"); headers.setDestination(destHeader); Message<byte[]> message = MessageBuilder.withPayload(ByteBuffer.allocate(0).array()) .setHeaders(headers) .build(); headers = StompHeaderAccessor.create(StompCommand.SEND); headers.setSubscriptionId("subs1"); headers.setDestination("/app/exception"); Message<String> message2 = MessageBuilder.withPayload("foo").setHeaders(headers).build(); this.webSocketOutputChannel.send(message); waitForSubscribe("/queue/error-user" + this.clientWebSocketContainer.getSession(null).getId()); this.webSocketOutputChannel.send(message2); Message<?> receive = webSocketInputChannel.receive(20000); assertNotNull(receive); StompHeaderAccessor stompHeaderAccessor = StompHeaderAccessor.wrap(receive); assertEquals("Expected STOMP destination=/user/queue/error, got " + stompHeaderAccessor, destHeader, stompHeaderAccessor.getDestination()); assertEquals("Got error: Bad input", receive.getPayload()); }
StompHeaderAccessor headers = StompHeaderAccessor.create(StompCommand.SEND); headers.setDestination("/app/simple"); Message<String> message = MessageBuilder.withPayload("foo").setHeaders(headers).build(); this.webSocketOutputChannel.send(message); message = MessageBuilder.withPayload("bar").setHeaders(headers).build(); this.webSocketOutputChannel.send(message);
headers.setReceipt("myReceipt"); Message<byte[]> message = MessageBuilder.withPayload(ByteBuffer.allocate(0).array()) .setHeaders(headers) .build(); headers.setSubscriptionId("subs1"); headers.setDestination("/app/increment"); Message<Integer> message2 = MessageBuilder.withPayload(5).setHeaders(headers).build();
@Test public void testWebSocketOutboundMessageHandler() throws Exception { StompHeaderAccessor headers = StompHeaderAccessor.create(StompCommand.SEND); headers.setMessageId("mess0"); headers.setSubscriptionId("sub0"); headers.setDestination("/foo"); String payload = "Hello World"; Message<String> message = MessageBuilder.withPayload(payload).setHeaders(headers).build(); this.messageHandler.handleMessage(message); Message<?> received = this.clientInboundChannel.receive(10000); assertNotNull(received); StompHeaderAccessor receivedHeaders = StompHeaderAccessor.wrap(received); assertEquals("mess0", receivedHeaders.getMessageId()); assertEquals("sub0", receivedHeaders.getSubscriptionId()); assertEquals("/foo", receivedHeaders.getDestination()); Object receivedPayload = received.getPayload(); assertThat(receivedPayload, instanceOf(byte[].class)); assertArrayEquals((byte[]) receivedPayload, payload.getBytes()); }
public Message<Todo> send(String destinationName, Todo todo, final String randomId) { MessageHeaderAccessor accessor = new MessageHeaderAccessor(); accessor.setHeader("jms_priority", 5); // Add jms_priority to 5 accessor.setHeader("randomId", randomId); Message<Todo> todoMessage = MessageBuilder .withPayload(todo) .setHeaders(accessor).build(); jmsMessagingTemplate.convertAndSend(destinationName, todoMessage); Message<Todo> message = (Message<Todo>)jmsMessagingTemplate.receive("Reply" + destinationName); return message; }