Is It Possible To Send Binary Data With STOMP Over WebSockets Using Spring-WebSockets?
Solution 1:
It seems that org.springframework.web.socket.TextMessage is always used within org.springframework.web.socket.messaging.StompSubProtocolHandler rather than org.springframework.web.socket.BinaryMessage. I've raised a feature request for this SPR-12301 which has been accepted.
message = MessageBuilder.withPayload(message.getPayload()).setHeaders(headers).build();
byte[] bytes = this.stompEncoder.encode((Message<byte[]>) message);
synchronized(session) {
session.sendMessage(new TextMessage(new String(bytes, UTF8_CHARSET)));
}
Update
Solution 2:
Try to configure you Server just with ByteArrayMessageConverter
:
@Configuration
@EnableWebSocketMessageBroker
public class MyWebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
@Override
public boolean configureMessageConverters(List<MessageConverter> messageConverters) {
messageConverters.add(new ByteArrayMessageConverter());
return false;
}
}
UPDATE
Ah! I see that. Thanks:
public TextMessage(byte[] payload) {
super(new String(payload, UTF_8));
this.bytes = payload;
}
From other side from STOMP spec:
The body of a STOMP message must be a String. If you want to send and receive JSON objects, ...
According to the ArrayBuffer
:
Getting an array buffer from existing data
- From a Base64 string
- From a local file
So, I think you don't have a chioce rather than provide you some custom MessageConverter
, which converts your byte[]
to Base64 String and send it.
On the JavaScript side you should decode that string to the ArrayBuffer
somehow.
Post a Comment for "Is It Possible To Send Binary Data With STOMP Over WebSockets Using Spring-WebSockets?"