Я создал веб-сокет, используя STOMP внутри Spring. Конечная точка работает как шарм при использовании с библиотеками javascript, однако, когда я использую любое из простых расширений google chrome для веб-сокетов (например, простой клиент веб-сокета, умный клиент веб-сокета, клиент веб-сокета), spring выдает сообщение «Неполное сообщение содержимого кадра STOMP». код, я смог увидеть, что причина этого в том, что я не могу вставить нулевой символ / u0000 с помощью любого из этих инструментов. Я предполагаю, что все фреймворки java-скриптов делают это по умолчанию. Кто-то нашел обходной путь для этого, поэтому что я могу использовать любой клиент веб-сокета с Spring STOMP?
Код Stomp находится здесь: https://github.com/spring-projects/spring-framework/blob/master/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompDecoder.java
В [в настоящее время] строках 308-320 существует приведенный ниже код. Этот метод возвращает null, поскольку byteBuffer.remaining не превышает длину содержимого (оба равны 0). Существует исключение StompSubProtocolHandler, которое срабатывает впоследствии. Я попытался изучить все обработчики и перехватчики, но, похоже, нет способа перехватывать вещи на этом уровне, не переписывая почти все. Я хотел просто ввести "\0" в полезную нагрузку...
if (contentLength != null && contentLength >= 0) {
if (byteBuffer.remaining() > contentLength) {
byte[] payload = new byte[contentLength];
byteBuffer.get(payload);
if (byteBuffer.get() != 0) {
throw new StompConversionException("Frame must be terminated with a null octet");
}
return payload;
}
else {
return null;
}
}