Browse Source

Fix NPE in DefaultSimpUserRegistry

pull/808/head
Rossen Stoyanchev 10 years ago
parent
commit
c48e8708a7
  1. 9
      spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/DefaultStompSession.java
  2. 6
      spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompClientSupport.java
  3. 2
      spring-websocket/src/main/java/org/springframework/web/socket/messaging/DefaultSimpUserRegistry.java
  4. 15
      spring-websocket/src/test/java/org/springframework/web/socket/messaging/DefaultSimpUserRegistryTests.java

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

@ -34,7 +34,7 @@ import org.springframework.messaging.Message; @@ -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 { @@ -82,7 +82,7 @@ public class DefaultStompSession implements ConnectionHandlingStompSession {
private final SettableListenableFuture<StompSession> sessionFuture = new SettableListenableFuture<StompSession>();
private MessageConverter converter = new StringMessageConverter();
private MessageConverter converter = new SimpleMessageConverter();
private TaskScheduler taskScheduler;
@ -141,7 +141,7 @@ public class DefaultStompSession implements ConnectionHandlingStompSession { @@ -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.
* <p>By default, {@link StringMessageConverter} is configured.
* <p>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 { @@ -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);
}

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

@ -18,7 +18,7 @@ package org.springframework.messaging.simp.stomp; @@ -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; @@ -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 { @@ -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.
* <p>By default, {@link StringMessageConverter} is configured.
* <p>By default, {@link SimpleMessageConverter} is configured.
* @param messageConverter the message converter to use
*/
public void setMessageConverter(MessageConverter messageConverter) {

2
spring-websocket/src/main/java/org/springframework/web/socket/messaging/DefaultSimpUserRegistry.java

@ -178,7 +178,7 @@ public class DefaultSimpUserRegistry implements SimpUserRegistry, SmartApplicati @@ -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

15
spring-websocket/src/test/java/org/springframework/web/socket/messaging/DefaultSimpUserRegistryTests.java

@ -162,6 +162,21 @@ public class DefaultSimpUserRegistryTests { @@ -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<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) {
return createMessage(type, sessionId, null, null);
}

Loading…
Cancel
Save