diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/messaging/StompSubProtocolHandler.java b/spring-websocket/src/main/java/org/springframework/web/socket/messaging/StompSubProtocolHandler.java index d79afe0ab0..f97970f5f0 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/messaging/StompSubProtocolHandler.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/messaging/StompSubProtocolHandler.java @@ -52,6 +52,8 @@ import org.springframework.messaging.support.MessageBuilder; import org.springframework.messaging.support.MessageHeaderAccessor; import org.springframework.messaging.support.MessageHeaderInitializer; import org.springframework.util.Assert; +import org.springframework.util.MimeType; +import org.springframework.util.MimeTypeUtils; import org.springframework.web.socket.BinaryMessage; import org.springframework.web.socket.CloseStatus; import org.springframework.web.socket.TextMessage; @@ -355,7 +357,12 @@ public class StompSubProtocolHandler implements SubProtocolHandler, ApplicationE } try { byte[] bytes = this.stompEncoder.encode(stompAccessor.getMessageHeaders(), (byte[]) message.getPayload()); - session.sendMessage(new TextMessage(bytes)); + if (MimeTypeUtils.APPLICATION_OCTET_STREAM.isCompatibleWith(stompAccessor.getContentType())) { + session.sendMessage(new BinaryMessage(bytes)); + } + else { + session.sendMessage(new TextMessage(bytes)); + } } catch (SessionLimitExceededException ex) { // Bad session, just get out 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 becb1b701d..8453e89d92 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 @@ -30,7 +30,6 @@ import java.util.concurrent.ScheduledFuture; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; - import org.springframework.core.NestedCheckedException; import org.springframework.util.Assert; import org.springframework.web.socket.CloseStatus; @@ -158,9 +157,7 @@ public abstract class AbstractSockJsSession implements SockJsSession { public final void sendMessage(WebSocketMessage message) throws IOException { Assert.state(!isClosed(), "Cannot send a message when session is closed"); - if (!(message instanceof TextMessage)) { - throw new IllegalArgumentException("Expected text message: " + message); - } + Assert.isInstanceOf(TextMessage.class, message, "SockJS supports text messages only: " + message); sendMessageInternal(((TextMessage) message).getPayload()); }