Browse Source

Ensure StompEncoder never writes content-length twice

Issue: SPR-11984
pull/565/merge
Rossen Stoyanchev 12 years ago
parent
commit
b318880661
  1. 6
      spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompEncoder.java
  2. 11
      spring-messaging/src/test/java/org/springframework/messaging/simp/stomp/StompCodecTests.java

6
spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompEncoder.java

@ -112,8 +112,12 @@ public final class StompEncoder { @@ -112,8 +112,12 @@ public final class StompEncoder {
for (Entry<String, List<String>> entry : nativeHeaders.entrySet()) {
byte[] key = encodeHeaderString(entry.getKey(), shouldEscape);
if (command.requiresContentLength() && "content-length".equals(entry.getKey())) {
continue;
}
List<String> values = entry.getValue();
if (StompHeaderAccessor.STOMP_PASSCODE_HEADER.equals(entry.getKey())) {
if (StompCommand.CONNECT.equals(command) &&
StompHeaderAccessor.STOMP_PASSCODE_HEADER.equals(entry.getKey())) {
values = Arrays.asList(StompHeaderAccessor.getPasscode(headers));
}
for (String value : values) {

11
spring-messaging/src/test/java/org/springframework/messaging/simp/stomp/StompCodecTests.java

@ -290,6 +290,17 @@ public class StompCodecTests { @@ -290,6 +290,17 @@ public class StompCodecTests {
new Reactor11StompCodec().encoder().apply(frame).asString());
}
@Test
public void encodeFrameWithContentLengthPresent() {
StompHeaderAccessor headers = StompHeaderAccessor.create(StompCommand.SEND);
headers.setContentLength(12);
Message<byte[]> frame = MessageBuilder.createMessage("Message body".getBytes(), headers.getMessageHeaders());
assertEquals("SEND\ncontent-length:12\n\nMessage body\0",
new Reactor11StompCodec().encoder().apply(frame).asString());
}
private void assertIncompleteDecode(String partialFrame) {
Buffer buffer = Buffer.wrap(partialFrame);
assertNull(decode(buffer));

Loading…
Cancel
Save