Skip to content

Commit d972911

Browse files
committed
Merge branch '5.1.x'
2 parents ee03a18 + 1d92755 commit d972911

File tree

2 files changed

+34
-7
lines changed

2 files changed

+34
-7
lines changed

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

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2018 the original author or authors.
2+
* Copyright 2002-2019 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -256,12 +256,9 @@ private StompHeaderAccessor createHeaderAccessor(StompCommand command) {
256256
private Message<byte[]> createMessage(StompHeaderAccessor accessor, @Nullable Object payload) {
257257
accessor.updateSimpMessageHeadersFromStompHeaders();
258258
Message<byte[]> message;
259-
if (payload == null) {
259+
if (isEmpty(payload)) {
260260
message = MessageBuilder.createMessage(EMPTY_PAYLOAD, accessor.getMessageHeaders());
261261
}
262-
else if (payload instanceof byte[]) {
263-
message = MessageBuilder.createMessage((byte[]) payload, accessor.getMessageHeaders());
264-
}
265262
else {
266263
message = (Message<byte[]>) getMessageConverter().toMessage(payload, accessor.getMessageHeaders());
267264
accessor.updateStompHeadersFromSimpMessageHeaders();
@@ -274,6 +271,11 @@ else if (payload instanceof byte[]) {
274271
return message;
275272
}
276273

274+
private boolean isEmpty(@Nullable Object payload) {
275+
return payload == null || StringUtils.isEmpty(payload) ||
276+
(payload instanceof byte[] && ((byte[]) payload).length == 0);
277+
}
278+
277279
private void execute(Message<byte[]> message) {
278280
if (logger.isTraceEnabled()) {
279281
StompHeaderAccessor accessor = MessageHeaderAccessor.getAccessor(message, StompHeaderAccessor.class);

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

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package org.springframework.messaging.simp.stomp;
1818

1919
import java.nio.charset.StandardCharsets;
20+
import java.util.Arrays;
2021
import java.util.Date;
2122
import java.util.Map;
2223
import java.util.concurrent.ScheduledFuture;
@@ -32,6 +33,8 @@
3233

3334
import org.springframework.messaging.Message;
3435
import org.springframework.messaging.MessageDeliveryException;
36+
import org.springframework.messaging.converter.ByteArrayMessageConverter;
37+
import org.springframework.messaging.converter.CompositeMessageConverter;
3538
import org.springframework.messaging.converter.MessageConversionException;
3639
import org.springframework.messaging.converter.StringMessageConverter;
3740
import org.springframework.messaging.simp.stomp.StompSession.Receiptable;
@@ -83,7 +86,9 @@ public class DefaultStompSessionTests {
8386
public void setUp() {
8487
this.connectHeaders = new StompHeaders();
8588
this.session = new DefaultStompSession(this.sessionHandler, this.connectHeaders);
86-
this.session.setMessageConverter(new StringMessageConverter());
89+
this.session.setMessageConverter(
90+
new CompositeMessageConverter(
91+
Arrays.asList(new StringMessageConverter(), new ByteArrayMessageConverter())));
8792

8893
SettableListenableFuture<Void> future = new SettableListenableFuture<>();
8994
future.set(null);
@@ -111,7 +116,7 @@ public void afterConnected() {
111116
@Test // SPR-16844
112117
public void afterConnectedWithSpecificVersion() {
113118
assertThat(this.session.isConnected()).isFalse();
114-
this.connectHeaders.setAcceptVersion(new String[] {"1.1"});
119+
this.connectHeaders.setAcceptVersion("1.1");
115120

116121
this.session.afterConnected(this.connection);
117122

@@ -390,6 +395,26 @@ public void sendWithReceipt() {
390395
assertThat(accessor.getReceipt()).isEqualTo("my-receipt");
391396
}
392397

398+
@Test // gh-23358
399+
public void sendByteArray() {
400+
this.session.afterConnected(this.connection);
401+
assertThat(this.session.isConnected());
402+
403+
String destination = "/topic/foo";
404+
String payload = "sample payload";
405+
this.session.send(destination, payload.getBytes(StandardCharsets.UTF_8));
406+
407+
Message<byte[]> message = this.messageCaptor.getValue();
408+
StompHeaderAccessor accessor = MessageHeaderAccessor.getAccessor(message, StompHeaderAccessor.class);
409+
410+
StompHeaders stompHeaders = StompHeaders.readOnlyStompHeaders(accessor.getNativeHeaders());
411+
assertThat(stompHeaders.size()).as(stompHeaders.toString()).isEqualTo(2);
412+
413+
assertThat(stompHeaders.getDestination()).isEqualTo(destination);
414+
assertThat(stompHeaders.getContentType()).isEqualTo(MimeTypeUtils.APPLICATION_OCTET_STREAM);
415+
assertThat(new String(message.getPayload(), StandardCharsets.UTF_8)).isEqualTo(payload);
416+
}
417+
393418
@Test
394419
public void sendWithConversionException() {
395420
this.session.afterConnected(this.connection);

0 commit comments

Comments
 (0)