Header values are optional in Stomp 1.1 and 1.2

master
Josh King 9 years ago committed by Rossen Stoyanchev
parent c41779f895
commit 11824893a9
  1. 6
      spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompDecoder.java
  2. 17
      spring-messaging/src/test/java/org/springframework/messaging/simp/stomp/StompCodecTests.java

@ -215,10 +215,10 @@ public class StompDecoder {
if (headerStream.size() > 0) {
String header = new String(headerStream.toByteArray(), UTF8_CHARSET);
int colonIndex = header.indexOf(':');
if (colonIndex <= 0 || colonIndex == header.length() - 1) {
if (buffer.remaining() > 0) {
if (colonIndex <= 0) {
if(buffer.remaining() > 0) {
throw new StompConversionException("Illegal header: '" + header +
"'. A header must be of the form <name>:<value>.");
"'. A header must be of the form <name>:[<value>].");
}
}
else {

@ -188,6 +188,23 @@ public class StompCodecTests {
assertEquals(StompCommand.DISCONNECT, StompHeaderAccessor.wrap(messages.get(1)).getCommand());
}
@Test
public void decodeFrameWithHeaderWithEmptyValue() {
String accept = "accept-version:1.1\n";
String valuelessKey = "key:\n";
Message<byte[]> frame = decode("CONNECT\n" + accept + valuelessKey + "\n\0");
StompHeaderAccessor headers = StompHeaderAccessor.wrap(frame);
assertEquals(StompCommand.CONNECT, headers.getCommand());
assertEquals(2, headers.toNativeHeaderMap().size());
assertEquals("1.1", headers.getFirstNativeHeader("accept-version"));
assertEquals("", headers.getFirstNativeHeader("key"));
assertEquals(0, frame.getPayload().length);
}
@Test
public void decodeFrameWithIncompleteCommand() {
assertIncompleteDecode("MESSAG");

Loading…
Cancel
Save