Skip to content

Commit 85c1750

Browse files
committed
Add missing handshake-interceptor namespace support
Issue: SPR-11845
1 parent 61e77ee commit 85c1750

File tree

9 files changed

+49
-13
lines changed

9 files changed

+49
-13
lines changed

spring-websocket/src/main/java/org/springframework/web/socket/config/MessageBrokerBeanDefinitionParser.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,12 +263,15 @@ private RuntimeBeanReference registerRequestHandler(Element element, RuntimeBean
263263
}
264264
else {
265265
RuntimeBeanReference handshakeHandler = WebSocketNamespaceUtils.registerHandshakeHandler(element, context, source);
266+
Element interceptorsElement = DomUtils.getChildElementByTagName(element, "handshake-interceptors");
267+
ManagedList<?> interceptors = WebSocketNamespaceUtils.parseBeanSubElements(interceptorsElement, context);
266268
ConstructorArgumentValues cavs = new ConstructorArgumentValues();
267269
cavs.addIndexedArgumentValue(0, subProtoHandler);
268270
if (handshakeHandler != null) {
269271
cavs.addIndexedArgumentValue(1, handshakeHandler);
270272
}
271273
beanDef = new RootBeanDefinition(WebSocketHttpRequestHandler.class, cavs, null);
274+
beanDef.getPropertyValues().add("handshakeInterceptors", interceptors);
272275
}
273276
return new RuntimeBeanReference(registerBeanDef(beanDef, context, source));
274277
}

spring-websocket/src/main/java/org/springframework/web/socket/config/WebSocketNamespaceUtils.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,11 @@ else if (handshakeHandler != null) {
9696
sockJsServiceDef.getConstructorArgumentValues().addIndexedArgumentValue(1, transportHandler);
9797
}
9898

99-
String attrValue = sockJsElement.getAttribute("name");
99+
Element interceptorsElement = DomUtils.getChildElementByTagName(element, "handshake-interceptors");
100+
ManagedList<?> interceptors = WebSocketNamespaceUtils.parseBeanSubElements(interceptorsElement, context);
101+
sockJsServiceDef.getPropertyValues().add("handshakeInterceptors", interceptors);
102+
103+
String attrValue = sockJsElement.getAttribute("name");
100104
if (!attrValue.isEmpty()) {
101105
sockJsServiceDef.getPropertyValues().add("name", attrValue);
102106
}

spring-websocket/src/main/resources/org/springframework/web/socket/config/spring-websocket-4.0.xsd

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -589,6 +589,7 @@
589589
<xsd:complexType>
590590
<xsd:sequence>
591591
<xsd:element name="handshake-handler" type="handshake-handler" minOccurs="0" maxOccurs="1"/>
592+
<xsd:element name="handshake-interceptors" type="handshake-interceptors" minOccurs="0" maxOccurs="1"/>
592593
<xsd:element name="sockjs" type="sockjs-service" minOccurs="0" maxOccurs="1"/>
593594
</xsd:sequence>
594595
<xsd:attribute name="path" type="xsd:string">

spring-websocket/src/main/resources/org/springframework/web/socket/config/spring-websocket-4.1.xsd

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -590,6 +590,7 @@
590590
<xsd:complexType>
591591
<xsd:sequence>
592592
<xsd:element name="handshake-handler" type="handshake-handler" minOccurs="0" maxOccurs="1"/>
593+
<xsd:element name="handshake-interceptors" type="handshake-interceptors" minOccurs="0" maxOccurs="1"/>
593594
<xsd:element name="sockjs" type="sockjs-service" minOccurs="0" maxOccurs="1"/>
594595
</xsd:sequence>
595596
<xsd:attribute name="path" type="xsd:string">

spring-websocket/src/test/java/org/springframework/web/socket/config/HandlersBeanDefinitionParserTests.java

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,9 @@
4848
import org.springframework.web.socket.server.support.WebSocketHttpRequestHandler;
4949
import org.springframework.web.socket.sockjs.SockJsService;
5050
import org.springframework.web.socket.sockjs.support.SockJsHttpRequestHandler;
51+
import org.springframework.web.socket.sockjs.transport.TransportHandler;
5152
import org.springframework.web.socket.sockjs.transport.TransportHandlingSockJsService;
53+
import org.springframework.web.socket.sockjs.transport.TransportType;
5254
import org.springframework.web.socket.sockjs.transport.handler.DefaultSockJsService;
5355
import org.springframework.web.socket.sockjs.transport.handler.EventSourceTransportHandler;
5456
import org.springframework.web.socket.sockjs.transport.handler.HtmlFileTransportHandler;
@@ -79,8 +81,8 @@ public void setup() {
7981
this.appContext = new GenericWebApplicationContext();
8082
}
8183

82-
@Test
8384

85+
@Test
8486
public void webSocketHandlers() {
8587
loadBeanDefinitions("websocket-config-handlers.xml");
8688

@@ -132,7 +134,6 @@ public void webSocketHandlersAttributes() {
132134
assertNotNull(handshakeHandler);
133135
assertTrue(handshakeHandler instanceof TestHandshakeHandler);
134136
List<HandshakeInterceptor> interceptors = handler.getHandshakeInterceptors();
135-
assertNotNull(interceptors);
136137
assertThat(interceptors, contains(instanceOf(FooTestInterceptor.class), instanceOf(BarTestInterceptor.class)));
137138

138139
handler = (WebSocketHttpRequestHandler) urlHandlerMapping.getUrlMap().get("/test");
@@ -142,7 +143,6 @@ public void webSocketHandlersAttributes() {
142143
assertNotNull(handshakeHandler);
143144
assertTrue(handshakeHandler instanceof TestHandshakeHandler);
144145
interceptors = handler.getHandshakeInterceptors();
145-
assertNotNull(interceptors);
146146
assertThat(interceptors, contains(instanceOf(FooTestInterceptor.class), instanceOf(BarTestInterceptor.class)));
147147

148148
}
@@ -171,7 +171,9 @@ public void sockJs() {
171171
assertThat(sockJsService, instanceOf(DefaultSockJsService.class));
172172
DefaultSockJsService defaultSockJsService = (DefaultSockJsService) sockJsService;
173173
assertThat(defaultSockJsService.getTaskScheduler(), instanceOf(ThreadPoolTaskScheduler.class));
174-
assertThat(defaultSockJsService.getTransportHandlers().values(),
174+
175+
Map<TransportType, TransportHandler> transportHandlers = defaultSockJsService.getTransportHandlers();
176+
assertThat(transportHandlers.values(),
175177
containsInAnyOrder(
176178
instanceOf(XhrPollingTransportHandler.class),
177179
instanceOf(XhrReceivingTransportHandler.class),
@@ -181,6 +183,12 @@ public void sockJs() {
181183
instanceOf(EventSourceTransportHandler.class),
182184
instanceOf(HtmlFileTransportHandler.class),
183185
instanceOf(WebSocketTransportHandler.class)));
186+
187+
WebSocketTransportHandler handler = (WebSocketTransportHandler) transportHandlers.get(TransportType.WEBSOCKET);
188+
assertEquals(TestHandshakeHandler.class, handler.getHandshakeHandler().getClass());
189+
190+
List<HandshakeInterceptor> interceptors = defaultSockJsService.getHandshakeInterceptors();
191+
assertThat(interceptors, contains(instanceOf(FooTestInterceptor.class), instanceOf(BarTestInterceptor.class)));
184192
}
185193

186194
@Test

spring-websocket/src/test/java/org/springframework/web/socket/config/MessageBrokerBeanDefinitionParserTests.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,16 +75,19 @@
7575
*
7676
* @author Brian Clozel
7777
* @author Artem Bilan
78+
* @author Rossen Stoyanchev
7879
*/
7980
public class MessageBrokerBeanDefinitionParserTests {
8081

8182
private GenericWebApplicationContext appContext;
8283

84+
8385
@Before
8486
public void setup() {
8587
this.appContext = new GenericWebApplicationContext();
8688
}
8789

90+
8891
@Test
8992
public void simpleBroker() {
9093
loadBeanDefinitions("websocket-config-broker-simple.xml");
@@ -103,6 +106,8 @@ public void simpleBroker() {
103106
HandshakeHandler handshakeHandler = wsHttpRequestHandler.getHandshakeHandler();
104107
assertNotNull(handshakeHandler);
105108
assertTrue(handshakeHandler instanceof TestHandshakeHandler);
109+
List<HandshakeInterceptor> interceptors = wsHttpRequestHandler.getHandshakeInterceptors();
110+
assertThat(interceptors, contains(instanceOf(FooTestInterceptor.class), instanceOf(BarTestInterceptor.class)));
106111

107112
WebSocketHandler wsHandler = unwrapWebSocketHandler(wsHttpRequestHandler.getWebSocketHandler());
108113
assertNotNull(wsHandler);
@@ -140,6 +145,9 @@ public void simpleBroker() {
140145
assertEquals(Runtime.getRuntime().availableProcessors(), scheduler.getScheduledThreadPoolExecutor().getCorePoolSize());
141146
assertTrue(scheduler.getScheduledThreadPoolExecutor().getRemoveOnCancelPolicy());
142147

148+
interceptors = defaultSockJsService.getHandshakeInterceptors();
149+
assertThat(interceptors, contains(instanceOf(FooTestInterceptor.class), instanceOf(BarTestInterceptor.class)));
150+
143151
UserSessionRegistry userSessionRegistry = this.appContext.getBean(UserSessionRegistry.class);
144152
assertNotNull(userSessionRegistry);
145153

spring-websocket/src/test/resources/org/springframework/web/socket/config/websocket-config-broker-simple.xml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,18 @@
1313

1414
<websocket:stomp-endpoint path=" /foo,/bar">
1515
<websocket:handshake-handler ref="myHandler"/>
16+
<websocket:handshake-interceptors>
17+
<bean class="org.springframework.web.socket.config.FooTestInterceptor"/>
18+
<ref bean="barTestInterceptor"/>
19+
</websocket:handshake-interceptors>
1620
</websocket:stomp-endpoint>
1721

1822
<websocket:stomp-endpoint path="/test,/sockjs">
1923
<websocket:handshake-handler ref="myHandler"/>
24+
<websocket:handshake-interceptors>
25+
<bean class="org.springframework.web.socket.config.FooTestInterceptor"/>
26+
<ref bean="barTestInterceptor"/>
27+
</websocket:handshake-interceptors>
2028
<websocket:sockjs/>
2129
</websocket:stomp-endpoint>
2230

@@ -29,5 +37,6 @@
2937
</bean>
3038

3139
<bean id="myHandler" class="org.springframework.web.socket.config.TestHandshakeHandler"/>
40+
<bean id="barTestInterceptor" class="org.springframework.web.socket.config.BarTestInterceptor"/>
3241

3342
</beans>

spring-websocket/src/test/resources/org/springframework/web/socket/config/websocket-config-handlers-sockjs-attributes.xml

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,8 @@
1717
</websocket:sockjs>
1818
</websocket:handlers>
1919

20-
<bean id="testHandler"
21-
class="org.springframework.web.socket.config.TestWebSocketHandler"/>
22-
23-
<bean id="xhrStreamingTransportHandler"
24-
class="org.springframework.web.socket.sockjs.transport.handler.XhrStreamingTransportHandler"/>
25-
26-
<bean id="testTaskScheduler"
27-
class="org.springframework.web.socket.config.TestTaskScheduler"/>
20+
<bean id="testHandler" class="org.springframework.web.socket.config.TestWebSocketHandler"/>
21+
<bean id="testTaskScheduler" class="org.springframework.web.socket.config.TestTaskScheduler"/>
22+
<bean id="xhrStreamingTransportHandler" class="org.springframework.web.socket.sockjs.transport.handler.XhrStreamingTransportHandler"/>
2823

2924
</beans>

spring-websocket/src/test/resources/org/springframework/web/socket/config/websocket-config-handlers-sockjs.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,17 @@
88
<websocket:handlers>
99
<websocket:mapping path="/test" handler="testHandler"/>
1010
<websocket:mapping path="/foo/" handler="fooHandler"/>
11+
<websocket:handshake-handler ref="testHandshakeHandler"/>
12+
<websocket:handshake-interceptors>
13+
<bean class="org.springframework.web.socket.config.FooTestInterceptor"/>
14+
<ref bean="barTestInterceptor"/>
15+
</websocket:handshake-interceptors>
1116
<websocket:sockjs/>
1217
</websocket:handlers>
1318

1419
<bean id="testHandler" class="org.springframework.web.socket.config.TestWebSocketHandler"/>
1520
<bean id="fooHandler" class="org.springframework.web.socket.config.FooWebSocketHandler"/>
21+
<bean id="testHandshakeHandler" class="org.springframework.web.socket.config.TestHandshakeHandler"/>
22+
<bean id="barTestInterceptor" class="org.springframework.web.socket.config.BarTestInterceptor"/>
1623

1724
</beans>

0 commit comments

Comments
 (0)