Skip to content

Commit 1d92755

Browse files
committed
Remove custom handling of byte[] in DefaultStompSession
Closes gh-23358
1 parent 50a9099 commit 1d92755

File tree

2 files changed

+50
-10
lines changed

2 files changed

+50
-10
lines changed

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

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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: 44 additions & 6 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.
@@ -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;
@@ -34,6 +35,8 @@
3435

3536
import org.springframework.messaging.Message;
3637
import org.springframework.messaging.MessageDeliveryException;
38+
import org.springframework.messaging.converter.ByteArrayMessageConverter;
39+
import org.springframework.messaging.converter.CompositeMessageConverter;
3740
import org.springframework.messaging.converter.MessageConversionException;
3841
import org.springframework.messaging.converter.StringMessageConverter;
3942
import org.springframework.messaging.simp.stomp.StompSession.Receiptable;
@@ -46,10 +49,23 @@
4649
import org.springframework.util.MimeTypeUtils;
4750
import org.springframework.util.concurrent.SettableListenableFuture;
4851

49-
import static org.hamcrest.Matchers.*;
50-
import static org.junit.Assert.*;
52+
import static org.hamcrest.Matchers.containsInAnyOrder;
53+
import static org.junit.Assert.assertArrayEquals;
54+
import static org.junit.Assert.assertEquals;
55+
import static org.junit.Assert.assertFalse;
56+
import static org.junit.Assert.assertNotNull;
57+
import static org.junit.Assert.assertNull;
58+
import static org.junit.Assert.assertThat;
59+
import static org.junit.Assert.assertTrue;
5160
import static org.mockito.Mockito.any;
52-
import static org.mockito.Mockito.*;
61+
import static org.mockito.Mockito.eq;
62+
import static org.mockito.Mockito.mock;
63+
import static org.mockito.Mockito.notNull;
64+
import static org.mockito.Mockito.reset;
65+
import static org.mockito.Mockito.same;
66+
import static org.mockito.Mockito.verify;
67+
import static org.mockito.Mockito.verifyNoMoreInteractions;
68+
import static org.mockito.Mockito.when;
5369

5470
/**
5571
* Unit tests for {@link DefaultStompSession}.
@@ -82,7 +98,9 @@ public void setUp() {
8298
this.sessionHandler = mock(StompSessionHandler.class);
8399
this.connectHeaders = new StompHeaders();
84100
this.session = new DefaultStompSession(this.sessionHandler, this.connectHeaders);
85-
this.session.setMessageConverter(new StringMessageConverter());
101+
this.session.setMessageConverter(
102+
new CompositeMessageConverter(
103+
Arrays.asList(new StringMessageConverter(), new ByteArrayMessageConverter())));
86104

87105
SettableListenableFuture<Void> future = new SettableListenableFuture<>();
88106
future.set(null);
@@ -110,7 +128,7 @@ public void afterConnected() {
110128
@Test // SPR-16844
111129
public void afterConnectedWithSpecificVersion() {
112130
assertFalse(this.session.isConnected());
113-
this.connectHeaders.setAcceptVersion(new String[] {"1.1"});
131+
this.connectHeaders.setAcceptVersion("1.1");
114132

115133
this.session.afterConnected(this.connection);
116134

@@ -388,6 +406,26 @@ public void sendWithReceipt() {
388406
assertEquals("my-receipt", accessor.getReceipt());
389407
}
390408

409+
@Test // gh-23358
410+
public void sendByteArray() {
411+
this.session.afterConnected(this.connection);
412+
assertTrue(this.session.isConnected());
413+
414+
String destination = "/topic/foo";
415+
String payload = "sample payload";
416+
this.session.send(destination, payload.getBytes(StandardCharsets.UTF_8));
417+
418+
Message<byte[]> message = this.messageCaptor.getValue();
419+
StompHeaderAccessor accessor = MessageHeaderAccessor.getAccessor(message, StompHeaderAccessor.class);
420+
421+
StompHeaders stompHeaders = StompHeaders.readOnlyStompHeaders(accessor.getNativeHeaders());
422+
assertEquals(stompHeaders.toString(), 2, stompHeaders.size());
423+
424+
assertEquals(destination, stompHeaders.getDestination());
425+
assertEquals(MimeTypeUtils.APPLICATION_OCTET_STREAM, stompHeaders.getContentType());
426+
assertEquals(payload, new String(message.getPayload(), StandardCharsets.UTF_8));
427+
}
428+
391429
@Test
392430
public void sendWithConversionException() {
393431
this.session.afterConnected(this.connection);

0 commit comments

Comments
 (0)