diff --git a/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompEncoder.java b/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompEncoder.java index beb5dd03bd..fa9ee29d75 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompEncoder.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompEncoder.java @@ -112,8 +112,12 @@ public final class StompEncoder { for (Entry> entry : nativeHeaders.entrySet()) { byte[] key = encodeHeaderString(entry.getKey(), shouldEscape); + if (command.requiresContentLength() && "content-length".equals(entry.getKey())) { + continue; + } List 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) { diff --git a/spring-messaging/src/test/java/org/springframework/messaging/simp/stomp/StompCodecTests.java b/spring-messaging/src/test/java/org/springframework/messaging/simp/stomp/StompCodecTests.java index 5e74b7e4c4..bfe8e9fe96 100644 --- a/spring-messaging/src/test/java/org/springframework/messaging/simp/stomp/StompCodecTests.java +++ b/spring-messaging/src/test/java/org/springframework/messaging/simp/stomp/StompCodecTests.java @@ -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 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));