diff --git a/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/DefaultStompSession.java b/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/DefaultStompSession.java index 1fd99869e3..6b378c3c36 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/DefaultStompSession.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/DefaultStompSession.java @@ -34,7 +34,7 @@ import org.springframework.messaging.Message; import org.springframework.messaging.MessageDeliveryException; import org.springframework.messaging.converter.MessageConversionException; import org.springframework.messaging.converter.MessageConverter; -import org.springframework.messaging.converter.StringMessageConverter; +import org.springframework.messaging.converter.SimpleMessageConverter; import org.springframework.messaging.support.MessageBuilder; import org.springframework.messaging.support.MessageHeaderAccessor; import org.springframework.messaging.tcp.TcpConnection; @@ -82,7 +82,7 @@ public class DefaultStompSession implements ConnectionHandlingStompSession { private final SettableListenableFuture sessionFuture = new SettableListenableFuture(); - private MessageConverter converter = new StringMessageConverter(); + private MessageConverter converter = new SimpleMessageConverter(); private TaskScheduler taskScheduler; @@ -141,7 +141,7 @@ public class DefaultStompSession implements ConnectionHandlingStompSession { * Set the {@link MessageConverter} to use to convert the payload of incoming * and outgoing messages to and from {@code byte[]} based on object type, or * expected object type, and the "content-type" header. - *

By default, {@link StringMessageConverter} is configured. + *

By default, {@link SimpleMessageConverter} is configured. * @param messageConverter the message converter to use */ public void setMessageConverter(MessageConverter messageConverter) { @@ -415,7 +415,8 @@ public class DefaultStompSession implements ConnectionHandlingStompSession { Class payloadType = ResolvableType.forType(type).getRawClass(); Object object = getMessageConverter().fromMessage(message, payloadType); if (object == null) { - throw new MessageConversionException("No suitable converter, payloadType=" + payloadType); + throw new MessageConversionException("No suitable converter, payloadType=" + payloadType + + ", handlerType=" + handler.getClass()); } handler.handleFrame(stompHeaders, object); } diff --git a/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompClientSupport.java b/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompClientSupport.java index ecd6d6c6ae..6cc90e9188 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompClientSupport.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompClientSupport.java @@ -18,7 +18,7 @@ package org.springframework.messaging.simp.stomp; import java.util.Arrays; import org.springframework.messaging.converter.MessageConverter; -import org.springframework.messaging.converter.StringMessageConverter; +import org.springframework.messaging.converter.SimpleMessageConverter; import org.springframework.scheduling.TaskScheduler; import org.springframework.util.Assert; @@ -41,7 +41,7 @@ import org.springframework.util.Assert; */ public abstract class StompClientSupport { - private MessageConverter messageConverter = new StringMessageConverter(); + private MessageConverter messageConverter = new SimpleMessageConverter(); private TaskScheduler taskScheduler; @@ -54,7 +54,7 @@ public abstract class StompClientSupport { * Set the {@link MessageConverter} to use to convert the payload of incoming * and outgoing messages to and from {@code byte[]} based on object type * and the "content-type" header. - *

By default, {@link StringMessageConverter} is configured. + *

By default, {@link SimpleMessageConverter} is configured. * @param messageConverter the message converter to use */ public void setMessageConverter(MessageConverter messageConverter) { diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/messaging/DefaultSimpUserRegistry.java b/spring-websocket/src/main/java/org/springframework/web/socket/messaging/DefaultSimpUserRegistry.java index e25a9b8d52..4cd575bdbb 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/messaging/DefaultSimpUserRegistry.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/messaging/DefaultSimpUserRegistry.java @@ -178,7 +178,7 @@ public class DefaultSimpUserRegistry implements SimpUserRegistry, SmartApplicati @Override public SimpSession getSession(String sessionId) { - return this.sessions.get(sessionId); + return (sessionId != null ? this.sessions.get(sessionId) : null); } @Override diff --git a/spring-websocket/src/test/java/org/springframework/web/socket/messaging/DefaultSimpUserRegistryTests.java b/spring-websocket/src/test/java/org/springframework/web/socket/messaging/DefaultSimpUserRegistryTests.java index a176e40a02..cbccc5a567 100644 --- a/spring-websocket/src/test/java/org/springframework/web/socket/messaging/DefaultSimpUserRegistryTests.java +++ b/spring-websocket/src/test/java/org/springframework/web/socket/messaging/DefaultSimpUserRegistryTests.java @@ -162,6 +162,21 @@ public class DefaultSimpUserRegistryTests { assertEquals(new HashSet<>(Arrays.asList("sub1", "sub2")), sessionIds); } + @Test + public void nullSessionId() throws Exception { + + DefaultSimpUserRegistry registry = new DefaultSimpUserRegistry(); + + TestPrincipal user = new TestPrincipal("joe"); + Message message = createMessage(SimpMessageType.CONNECT_ACK, "123"); + SessionConnectedEvent event = new SessionConnectedEvent(this, message, user); + registry.onApplicationEvent(event); + + SimpUser simpUser = registry.getUser("joe"); + assertNull(simpUser.getSession(null)); + } + + private Message createMessage(SimpMessageType type, String sessionId) { return createMessage(type, sessionId, null, null); }