diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/transport/session/AbstractSockJsSession.java b/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/transport/session/AbstractSockJsSession.java index 666dc6d254b..5b2f63d7b5b 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/transport/session/AbstractSockJsSession.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/transport/session/AbstractSockJsSession.java @@ -380,10 +380,16 @@ public abstract class AbstractSockJsSession implements SockJsSession { public void delegateMessages(String... messages) throws SockJsMessageDeliveryException { for (int i = 0; i < messages.length; i++) { try { - if (isClosed()) { - throw new SockJsMessageDeliveryException(this.id, getUndelivered(messages, i), "Session closed"); + if (!isClosed()) { + this.handler.handleMessage(this, new TextMessage(messages[i])); + } + else { + List undelivered = getUndelivered(messages, i); + if (undelivered.isEmpty()) { + return; + } + throw new SockJsMessageDeliveryException(this.id, undelivered, "Session closed"); } - this.handler.handleMessage(this, new TextMessage(messages[i])); } catch (Exception ex) { throw new SockJsMessageDeliveryException(this.id, getUndelivered(messages, i), ex); diff --git a/spring-websocket/src/test/java/org/springframework/web/socket/sockjs/transport/session/SockJsSessionTests.java b/spring-websocket/src/test/java/org/springframework/web/socket/sockjs/transport/session/SockJsSessionTests.java index dafe2e69cee..154a9bd8721 100644 --- a/spring-websocket/src/test/java/org/springframework/web/socket/sockjs/transport/session/SockJsSessionTests.java +++ b/spring-websocket/src/test/java/org/springframework/web/socket/sockjs/transport/session/SockJsSessionTests.java @@ -106,7 +106,7 @@ public class SockJsSessionTests extends AbstractSockJsSessionTests