Allow sending binary messages with STOMP
After this change the StompSubProtocolHandler sends STOMP frames with content-type=octet-stream as a binary WebSocket message. Issue: SPR-12475
This commit is contained in:
parent
6b3023c2aa
commit
670974d76a
|
@ -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
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue