Fix NPE in DefaultSimpUserRegistry
This commit is contained in:
parent
92bd7bba50
commit
c48e8708a7
|
@ -34,7 +34,7 @@ import org.springframework.messaging.Message;
|
||||||
import org.springframework.messaging.MessageDeliveryException;
|
import org.springframework.messaging.MessageDeliveryException;
|
||||||
import org.springframework.messaging.converter.MessageConversionException;
|
import org.springframework.messaging.converter.MessageConversionException;
|
||||||
import org.springframework.messaging.converter.MessageConverter;
|
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.MessageBuilder;
|
||||||
import org.springframework.messaging.support.MessageHeaderAccessor;
|
import org.springframework.messaging.support.MessageHeaderAccessor;
|
||||||
import org.springframework.messaging.tcp.TcpConnection;
|
import org.springframework.messaging.tcp.TcpConnection;
|
||||||
|
@ -82,7 +82,7 @@ public class DefaultStompSession implements ConnectionHandlingStompSession {
|
||||||
|
|
||||||
private final SettableListenableFuture<StompSession> sessionFuture = new SettableListenableFuture<StompSession>();
|
private final SettableListenableFuture<StompSession> sessionFuture = new SettableListenableFuture<StompSession>();
|
||||||
|
|
||||||
private MessageConverter converter = new StringMessageConverter();
|
private MessageConverter converter = new SimpleMessageConverter();
|
||||||
|
|
||||||
private TaskScheduler taskScheduler;
|
private TaskScheduler taskScheduler;
|
||||||
|
|
||||||
|
@ -141,7 +141,7 @@ public class DefaultStompSession implements ConnectionHandlingStompSession {
|
||||||
* Set the {@link MessageConverter} to use to convert the payload of incoming
|
* 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
|
* and outgoing messages to and from {@code byte[]} based on object type, or
|
||||||
* expected object type, and the "content-type" header.
|
* expected object type, and the "content-type" header.
|
||||||
* <p>By default, {@link StringMessageConverter} is configured.
|
* <p>By default, {@link SimpleMessageConverter} is configured.
|
||||||
* @param messageConverter the message converter to use
|
* @param messageConverter the message converter to use
|
||||||
*/
|
*/
|
||||||
public void setMessageConverter(MessageConverter messageConverter) {
|
public void setMessageConverter(MessageConverter messageConverter) {
|
||||||
|
@ -415,7 +415,8 @@ public class DefaultStompSession implements ConnectionHandlingStompSession {
|
||||||
Class<?> payloadType = ResolvableType.forType(type).getRawClass();
|
Class<?> payloadType = ResolvableType.forType(type).getRawClass();
|
||||||
Object object = getMessageConverter().fromMessage(message, payloadType);
|
Object object = getMessageConverter().fromMessage(message, payloadType);
|
||||||
if (object == null) {
|
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);
|
handler.handleFrame(stompHeaders, object);
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,7 +18,7 @@ package org.springframework.messaging.simp.stomp;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
import org.springframework.messaging.converter.MessageConverter;
|
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.scheduling.TaskScheduler;
|
||||||
import org.springframework.util.Assert;
|
import org.springframework.util.Assert;
|
||||||
|
|
||||||
|
@ -41,7 +41,7 @@ import org.springframework.util.Assert;
|
||||||
*/
|
*/
|
||||||
public abstract class StompClientSupport {
|
public abstract class StompClientSupport {
|
||||||
|
|
||||||
private MessageConverter messageConverter = new StringMessageConverter();
|
private MessageConverter messageConverter = new SimpleMessageConverter();
|
||||||
|
|
||||||
private TaskScheduler taskScheduler;
|
private TaskScheduler taskScheduler;
|
||||||
|
|
||||||
|
@ -54,7 +54,7 @@ public abstract class StompClientSupport {
|
||||||
* Set the {@link MessageConverter} to use to convert the payload of incoming
|
* 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 outgoing messages to and from {@code byte[]} based on object type
|
||||||
* and the "content-type" header.
|
* and the "content-type" header.
|
||||||
* <p>By default, {@link StringMessageConverter} is configured.
|
* <p>By default, {@link SimpleMessageConverter} is configured.
|
||||||
* @param messageConverter the message converter to use
|
* @param messageConverter the message converter to use
|
||||||
*/
|
*/
|
||||||
public void setMessageConverter(MessageConverter messageConverter) {
|
public void setMessageConverter(MessageConverter messageConverter) {
|
||||||
|
|
|
@ -178,7 +178,7 @@ public class DefaultSimpUserRegistry implements SimpUserRegistry, SmartApplicati
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public SimpSession getSession(String sessionId) {
|
public SimpSession getSession(String sessionId) {
|
||||||
return this.sessions.get(sessionId);
|
return (sessionId != null ? this.sessions.get(sessionId) : null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -162,6 +162,21 @@ public class DefaultSimpUserRegistryTests {
|
||||||
assertEquals(new HashSet<>(Arrays.asList("sub1", "sub2")), sessionIds);
|
assertEquals(new HashSet<>(Arrays.asList("sub1", "sub2")), sessionIds);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void nullSessionId() throws Exception {
|
||||||
|
|
||||||
|
DefaultSimpUserRegistry registry = new DefaultSimpUserRegistry();
|
||||||
|
|
||||||
|
TestPrincipal user = new TestPrincipal("joe");
|
||||||
|
Message<byte[]> 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<byte[]> createMessage(SimpMessageType type, String sessionId) {
|
private Message<byte[]> createMessage(SimpMessageType type, String sessionId) {
|
||||||
return createMessage(type, sessionId, null, null);
|
return createMessage(type, sessionId, null, null);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue