diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/messaging/SubProtocolWebSocketHandler.java b/spring-websocket/src/main/java/org/springframework/web/socket/messaging/SubProtocolWebSocketHandler.java index 21bc2fd183..6e80e7c0e1 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/messaging/SubProtocolWebSocketHandler.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/messaging/SubProtocolWebSocketHandler.java @@ -19,8 +19,10 @@ package org.springframework.web.socket.messaging; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.TreeMap; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicInteger; @@ -86,7 +88,7 @@ public class SubProtocolWebSocketHandler implements WebSocketHandler, private final Map protocolHandlerLookup = new TreeMap(String.CASE_INSENSITIVE_ORDER); - private final List protocolHandlers = new ArrayList(); + private final Set protocolHandlers = new HashSet(); private SubProtocolHandler defaultProtocolHandler; @@ -129,7 +131,7 @@ public class SubProtocolWebSocketHandler implements WebSocketHandler, } public List getProtocolHandlers() { - return new ArrayList(this.protocolHandlerLookup.values()); + return new ArrayList(this.protocolHandlers); } @@ -288,7 +290,7 @@ public class SubProtocolWebSocketHandler implements WebSocketHandler, handler = this.defaultProtocolHandler; } else if (this.protocolHandlers.size() == 1) { - handler = this.protocolHandlers.get(0); + handler = this.protocolHandlers.iterator().next(); } else { throw new IllegalStateException("Multiple protocol handlers configured and " + diff --git a/spring-websocket/src/test/java/org/springframework/web/socket/config/annotation/WebMvcStompEndpointRegistryTests.java b/spring-websocket/src/test/java/org/springframework/web/socket/config/annotation/WebMvcStompEndpointRegistryTests.java index 77f93e0730..604303df73 100644 --- a/spring-websocket/src/test/java/org/springframework/web/socket/config/annotation/WebMvcStompEndpointRegistryTests.java +++ b/spring-websocket/src/test/java/org/springframework/web/socket/config/annotation/WebMvcStompEndpointRegistryTests.java @@ -84,6 +84,9 @@ public class WebMvcStompEndpointRegistryTests { this.endpointRegistry.addEndpoint("/stompOverWebSocket"); this.endpointRegistry.addEndpoint("/stompOverSockJS").withSockJS(); + //SPR-12403 + assertEquals(1, this.webSocketHandler.getProtocolHandlers().size()); + hm = (SimpleUrlHandlerMapping) this.endpointRegistry.getHandlerMapping(); assertEquals(2, hm.getUrlMap().size()); assertNotNull(hm.getUrlMap().get("/stompOverWebSocket"));