diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/config/HandlersBeanDefinitionParser.java b/spring-websocket/src/main/java/org/springframework/web/socket/config/HandlersBeanDefinitionParser.java
index ca430f8cc70..4b973ee0a99 100644
--- a/spring-websocket/src/main/java/org/springframework/web/socket/config/HandlersBeanDefinitionParser.java
+++ b/spring-websocket/src/main/java/org/springframework/web/socket/config/HandlersBeanDefinitionParser.java
@@ -38,13 +38,13 @@ import org.springframework.web.socket.server.support.WebSocketHttpRequestHandler
import org.springframework.web.socket.sockjs.support.SockJsHttpRequestHandler;
/**
- * A {@link BeanDefinitionParser} that provides the configuration for the
- * {@code } namespace element. It registers a Spring MVC
- * {@link org.springframework.web.servlet.handler.SimpleUrlHandlerMapping}
- * to map HTTP WebSocket handshake requests to
- * {@link org.springframework.web.socket.WebSocketHandler}s.
+ * Parses the configuration for the {@code } namespace
+ * element. Registers a Spring MVC {@code SimpleUrlHandlerMapping} to map HTTP
+ * WebSocket handshake (or SockJS) requests to
+ * {@link org.springframework.web.socket.WebSocketHandler WebSocketHandler}s.
*
* @author Brian Clozel
+ * @author Rossen Stoyanchev
* @since 4.0
*/
class HandlersBeanDefinitionParser implements BeanDefinitionParser {
@@ -55,11 +55,10 @@ class HandlersBeanDefinitionParser implements BeanDefinitionParser {
@Override
- public BeanDefinition parse(Element element, ParserContext parserCxt) {
-
- Object source = parserCxt.extractSource(element);
+ public BeanDefinition parse(Element element, ParserContext context) {
+ Object source = context.extractSource(element);
CompositeComponentDefinition compDefinition = new CompositeComponentDefinition(element.getTagName(), source);
- parserCxt.pushContainingComponent(compDefinition);
+ context.pushContainingComponent(compDefinition);
String orderAttribute = element.getAttribute("order");
int order = orderAttribute.isEmpty() ? DEFAULT_MAPPING_ORDER : Integer.valueOf(orderAttribute);
@@ -68,128 +67,106 @@ class HandlersBeanDefinitionParser implements BeanDefinitionParser {
handlerMappingDef.setSource(source);
handlerMappingDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
handlerMappingDef.getPropertyValues().add("order", order);
- String handlerMappingName = parserCxt.getReaderContext().registerWithGeneratedName(handlerMappingDef);
+ String handlerMappingName = context.getReaderContext().registerWithGeneratedName(handlerMappingDef);
- RuntimeBeanReference handshakeHandler = WebSocketNamespaceUtils.registerHandshakeHandler(element, parserCxt, source);
- Element interceptorsElement = DomUtils.getChildElementByTagName(element, "handshake-interceptors");
- ManagedList> interceptors = WebSocketNamespaceUtils.parseBeanSubElements(interceptorsElement, parserCxt);
- RuntimeBeanReference sockJsServiceRef =
- WebSocketNamespaceUtils.registerSockJsService(element, SOCK_JS_SCHEDULER_NAME, parserCxt, source);
+ RuntimeBeanReference sockJsService = WebSocketNamespaceUtils.registerSockJsService(
+ element, SOCK_JS_SCHEDULER_NAME, context, source);
- HandlerMappingStrategy strategy = createHandlerMappingStrategy(sockJsServiceRef, handshakeHandler, interceptors);
+ HandlerMappingStrategy strategy;
+ if (sockJsService != null) {
+ strategy = new SockJsHandlerMappingStrategy(sockJsService);
+ }
+ else {
+ RuntimeBeanReference handshakeHandler = WebSocketNamespaceUtils.registerHandshakeHandler(element, context, source);
+ Element interceptorsElement = DomUtils.getChildElementByTagName(element, "handshake-interceptors");
+ ManagedList> interceptors = WebSocketNamespaceUtils.parseBeanSubElements(interceptorsElement, context);
+ strategy = new WebSocketHandlerMappingStrategy(handshakeHandler, interceptors);
+ }
- List mappingElements = DomUtils.getChildElementsByTagName(element, "mapping");
ManagedMap urlMap = new ManagedMap();
urlMap.setSource(source);
-
- for(Element mappingElement : mappingElements) {
- urlMap.putAll(strategy.createMappings(mappingElement, parserCxt));
+ for(Element mappingElement : DomUtils.getChildElementsByTagName(element, "mapping")) {
+ strategy.addMapping(mappingElement, urlMap, context);
}
handlerMappingDef.getPropertyValues().add("urlMap", urlMap);
- parserCxt.registerComponent(new BeanComponentDefinition(handlerMappingDef, handlerMappingName));
- parserCxt.popAndRegisterContainingComponent();
+ context.registerComponent(new BeanComponentDefinition(handlerMappingDef, handlerMappingName));
+ context.popAndRegisterContainingComponent();
return null;
}
private interface HandlerMappingStrategy {
- public ManagedMap createMappings(Element mappingElement, ParserContext parserContext);
+ void addMapping(Element mappingElement, ManagedMap map, ParserContext context);
+
}
- private HandlerMappingStrategy createHandlerMappingStrategy(
- RuntimeBeanReference sockJsServiceRef, RuntimeBeanReference handshakeHandlerRef,
- ManagedList extends Object> interceptorsList) {
+ private static class WebSocketHandlerMappingStrategy implements HandlerMappingStrategy {
- if(sockJsServiceRef != null) {
- SockJSHandlerMappingStrategy strategy = new SockJSHandlerMappingStrategy();
- strategy.setSockJsServiceRef(sockJsServiceRef);
- return strategy;
+ private final RuntimeBeanReference handshakeHandlerReference;
+
+ private final ManagedList> interceptorsList;
+
+
+ private WebSocketHandlerMappingStrategy(RuntimeBeanReference handshakeHandler, ManagedList> interceptors) {
+ this.handshakeHandlerReference = handshakeHandler;
+ this.interceptorsList = interceptors;
}
- else {
- WebSocketHandlerMappingStrategy strategy = new WebSocketHandlerMappingStrategy();
- strategy.setHandshakeHandlerReference(handshakeHandlerRef);
- strategy.setInterceptorsList(interceptorsList);
- return strategy;
- }
- }
-
- private class WebSocketHandlerMappingStrategy implements HandlerMappingStrategy {
-
- private RuntimeBeanReference handshakeHandlerReference;
-
- private ManagedList> interceptorsList;
-
- public void setHandshakeHandlerReference(RuntimeBeanReference handshakeHandlerReference) {
- this.handshakeHandlerReference = handshakeHandlerReference;
- }
-
- public void setInterceptorsList(ManagedList> interceptorsList) { this.interceptorsList = interceptorsList; }
@Override
- public ManagedMap createMappings(Element mappingElement, ParserContext parserContext) {
- ManagedMap urlMap = new ManagedMap();
- Object source = parserContext.extractSource(mappingElement);
-
- String path = mappingElement.getAttribute("path");
- List mappings = Arrays.asList(StringUtils.tokenizeToStringArray(path, ","));
- RuntimeBeanReference webSocketHandlerReference = new RuntimeBeanReference(mappingElement.getAttribute("handler"));
+ public void addMapping(Element element, ManagedMap urlMap, ParserContext context) {
+ String pathAttribute = element.getAttribute("path");
+ List mappings = Arrays.asList(StringUtils.tokenizeToStringArray(pathAttribute, ","));
+ RuntimeBeanReference handlerReference = new RuntimeBeanReference(element.getAttribute("handler"));
ConstructorArgumentValues cavs = new ConstructorArgumentValues();
- cavs.addIndexedArgumentValue(0, webSocketHandlerReference);
+ cavs.addIndexedArgumentValue(0, handlerReference);
if(this.handshakeHandlerReference != null) {
cavs.addIndexedArgumentValue(1, this.handshakeHandlerReference);
}
RootBeanDefinition requestHandlerDef = new RootBeanDefinition(WebSocketHttpRequestHandler.class, cavs, null);
- requestHandlerDef.setSource(source);
+ requestHandlerDef.setSource(context.extractSource(element));
requestHandlerDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
requestHandlerDef.getPropertyValues().add("handshakeInterceptors", this.interceptorsList);
- String requestHandlerName = parserContext.getReaderContext().registerWithGeneratedName(requestHandlerDef);
+ String requestHandlerName = context.getReaderContext().registerWithGeneratedName(requestHandlerDef);
RuntimeBeanReference requestHandlerRef = new RuntimeBeanReference(requestHandlerName);
- for(String mapping : mappings) {
+ for (String mapping : mappings) {
urlMap.put(mapping, requestHandlerRef);
}
-
- return urlMap;
}
}
- private class SockJSHandlerMappingStrategy implements HandlerMappingStrategy {
+ private static class SockJsHandlerMappingStrategy implements HandlerMappingStrategy {
- private RuntimeBeanReference sockJsServiceRef;
+ private final RuntimeBeanReference sockJsService;
- public void setSockJsServiceRef(RuntimeBeanReference sockJsServiceRef) {
- this.sockJsServiceRef = sockJsServiceRef;
+
+ private SockJsHandlerMappingStrategy(RuntimeBeanReference sockJsService) {
+ this.sockJsService = sockJsService;
}
@Override
- public ManagedMap createMappings(Element mappingElement, ParserContext parserContext) {
-
- ManagedMap urlMap = new ManagedMap();
- Object source = parserContext.extractSource(mappingElement);
-
- String pathValue = mappingElement.getAttribute("path");
- List mappings = Arrays.asList(StringUtils.tokenizeToStringArray(pathValue, ","));
- RuntimeBeanReference webSocketHandlerReference = new RuntimeBeanReference(mappingElement.getAttribute("handler"));
+ public void addMapping(Element element, ManagedMap urlMap, ParserContext context) {
+ String pathAttribute = element.getAttribute("path");
+ List mappings = Arrays.asList(StringUtils.tokenizeToStringArray(pathAttribute, ","));
+ RuntimeBeanReference handlerReference = new RuntimeBeanReference(element.getAttribute("handler"));
ConstructorArgumentValues cavs = new ConstructorArgumentValues();
- cavs.addIndexedArgumentValue(0, this.sockJsServiceRef, "SockJsService");
- cavs.addIndexedArgumentValue(1, webSocketHandlerReference, "WebSocketHandler");
+ cavs.addIndexedArgumentValue(0, this.sockJsService, "SockJsService");
+ cavs.addIndexedArgumentValue(1, handlerReference, "WebSocketHandler");
RootBeanDefinition requestHandlerDef = new RootBeanDefinition(SockJsHttpRequestHandler.class, cavs, null);
- requestHandlerDef.setSource(source);
+ requestHandlerDef.setSource(context.extractSource(element));
requestHandlerDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
- String requestHandlerName = parserContext.getReaderContext().registerWithGeneratedName(requestHandlerDef);
+ String requestHandlerName = context.getReaderContext().registerWithGeneratedName(requestHandlerDef);
RuntimeBeanReference requestHandlerRef = new RuntimeBeanReference(requestHandlerName);
- for(String path : mappings) {
- String pathPattern = path.endsWith("/") ? path + "**" : path + "/**";
+ for (String mapping : mappings) {
+ String pathPattern = (mapping.endsWith("/") ? mapping + "**" : mapping + "/**");
urlMap.put(pathPattern, requestHandlerRef);
}
-
- return urlMap;
}
}
diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/config/MessageBrokerBeanDefinitionParser.java b/spring-websocket/src/main/java/org/springframework/web/socket/config/MessageBrokerBeanDefinitionParser.java
index cb9456f1601..6027fc3c90a 100644
--- a/spring-websocket/src/main/java/org/springframework/web/socket/config/MessageBrokerBeanDefinitionParser.java
+++ b/spring-websocket/src/main/java/org/springframework/web/socket/config/MessageBrokerBeanDefinitionParser.java
@@ -50,7 +50,6 @@ import org.springframework.messaging.simp.user.UserDestinationMessageHandler;
import org.springframework.messaging.simp.stomp.StompBrokerRelayMessageHandler;
import org.springframework.messaging.support.ExecutorSubscribableChannel;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
-import org.springframework.util.AntPathMatcher;
import org.springframework.util.Assert;
import org.springframework.util.ClassUtils;
import org.springframework.util.MimeTypeUtils;
@@ -92,7 +91,7 @@ import org.springframework.web.socket.sockjs.support.SockJsHttpRequestHandler;
*/
class MessageBrokerBeanDefinitionParser implements BeanDefinitionParser {
- protected static final String SOCKJS_SCHEDULER_BEAN_NAME = "messageBrokerSockJsScheduler";
+ private static final String SOCKJS_SCHEDULER_BEAN_NAME = "messageBrokerSockJsScheduler";
private static final int DEFAULT_MAPPING_ORDER = 1;
@@ -101,142 +100,111 @@ class MessageBrokerBeanDefinitionParser implements BeanDefinitionParser {
@Override
- public BeanDefinition parse(Element element, ParserContext parserCxt) {
-
- Object source = parserCxt.extractSource(element);
+ public BeanDefinition parse(Element element, ParserContext context) {
+ Object source = context.extractSource(element);
CompositeComponentDefinition compDefinition = new CompositeComponentDefinition(element.getTagName(), source);
- parserCxt.pushContainingComponent(compDefinition);
+ context.pushContainingComponent(compDefinition);
String orderAttribute = element.getAttribute("order");
int order = orderAttribute.isEmpty() ? DEFAULT_MAPPING_ORDER : Integer.valueOf(orderAttribute);
-
ManagedMap urlMap = new ManagedMap();
urlMap.setSource(source);
-
RootBeanDefinition handlerMappingDef = new RootBeanDefinition(SimpleUrlHandlerMapping.class);
handlerMappingDef.getPropertyValues().add("order", order);
handlerMappingDef.getPropertyValues().add("urlMap", urlMap);
+ registerBeanDef(handlerMappingDef, context, source);
- String beanName = "clientInboundChannel";
Element channelElem = DomUtils.getChildElementByTagName(element, "client-inbound-channel");
- RuntimeBeanReference clientInChannel = getMessageChannel(beanName, channelElem, parserCxt, source);
+ RuntimeBeanReference inChannel = getMessageChannel("clientInboundChannel", channelElem, context, source);
- beanName = "clientOutboundChannel";
channelElem = DomUtils.getChildElementByTagName(element, "client-outbound-channel");
- RuntimeBeanReference clientOutChannel = getMessageChannel(beanName, channelElem, parserCxt, source);
+ RuntimeBeanReference outChannel = getMessageChannel("clientOutboundChannel", channelElem, context, source);
- RootBeanDefinition beanDef = new RootBeanDefinition(DefaultUserSessionRegistry.class);
- beanName = registerBeanDef(beanDef, parserCxt, source);
- RuntimeBeanReference userSessionRegistry = new RuntimeBeanReference(beanName);
+ RootBeanDefinition registryBeanDef = new RootBeanDefinition(DefaultUserSessionRegistry.class);
+ String registryBeanName = registerBeanDef(registryBeanDef, context, source);
+ RuntimeBeanReference sessionRegistry = new RuntimeBeanReference(registryBeanName);
- RuntimeBeanReference subProtocolHandlerDef = registerSubProtocolWebSocketHandler(
- element, clientInChannel, clientOutChannel, userSessionRegistry, parserCxt, source);
+ RuntimeBeanReference subProtoHandler = registerSubProtoHandler(element, inChannel, outChannel,
+ sessionRegistry, context, source);
- for(Element stompEndpointElem : DomUtils.getChildElementsByTagName(element, "stomp-endpoint")) {
-
- RuntimeBeanReference httpRequestHandler = registerHttpRequestHandler(
- stompEndpointElem, subProtocolHandlerDef, parserCxt, source);
-
- String pathAttribute = stompEndpointElem.getAttribute("path");
+ for (Element endpointElem : DomUtils.getChildElementsByTagName(element, "stomp-endpoint")) {
+ RuntimeBeanReference requestHandler = registerRequestHandler(endpointElem, subProtoHandler, context, source);
+ String pathAttribute = endpointElem.getAttribute("path");
Assert.state(StringUtils.hasText(pathAttribute), "Invalid (no path mapping)");
-
List paths = Arrays.asList(StringUtils.tokenizeToStringArray(pathAttribute, ","));
for(String path : paths) {
path = path.trim();
Assert.state(StringUtils.hasText(path), "Invalid path attribute: " + pathAttribute);
- if (DomUtils.getChildElementByTagName(stompEndpointElem, "sockjs") != null) {
+ if (DomUtils.getChildElementByTagName(endpointElem, "sockjs") != null) {
path = path.endsWith("/") ? path + "**" : path + "/**";
}
- urlMap.put(path, httpRequestHandler);
+ urlMap.put(path, requestHandler);
}
}
- registerBeanDef(handlerMappingDef, parserCxt, source);
-
- beanName = "brokerChannel";
channelElem = DomUtils.getChildElementByTagName(element, "broker-channel");
- RuntimeBeanReference brokerChannel = getMessageChannel(beanName, channelElem, parserCxt, source);
- RootBeanDefinition brokerDef = registerMessageBroker(element, clientInChannel,
- clientOutChannel, brokerChannel, parserCxt, source);
+ RuntimeBeanReference brokerChannel = getMessageChannel("brokerChannel", channelElem, context, source);
+ RootBeanDefinition broker = registerMessageBroker(element, inChannel, outChannel, brokerChannel, context, source);
- RuntimeBeanReference messageConverter = registerBrokerMessageConverter(element, parserCxt, source);
+ RuntimeBeanReference converter = registerMessageConverter(element, context, source);
+ RuntimeBeanReference template = registerMessagingTemplate(element, brokerChannel, converter, context, source);
+ registerAnnotationMethodMessageHandler(element, inChannel, outChannel,converter, template, context, source);
- RuntimeBeanReference messagingTemplate = registerBrokerMessagingTemplate(element, brokerChannel,
- messageConverter, parserCxt, source);
-
- registerAnnotationMethodMessageHandler(element, clientInChannel, clientOutChannel,
- messageConverter, messagingTemplate, parserCxt, source);
-
- RuntimeBeanReference userDestinationResolver = registerUserDestinationResolver(element,
- userSessionRegistry, parserCxt, source);
-
- registerUserDestinationMessageHandler(clientInChannel, clientOutChannel, brokerChannel,
- userDestinationResolver, parserCxt, source);
+ RuntimeBeanReference resolver = registerUserDestinationResolver(element, sessionRegistry, context, source);
+ registerUserDestinationMessageHandler(inChannel, brokerChannel, resolver, context, source);
Map scopeMap = Collections.singletonMap("websocket", new SimpSessionScope());
- RootBeanDefinition scopeConfigurerDef = new RootBeanDefinition(CustomScopeConfigurer.class);
- scopeConfigurerDef.getPropertyValues().add("scopes", scopeMap);
- registerBeanDefByName("webSocketScopeConfigurer", scopeConfigurerDef, parserCxt, source);
+ RootBeanDefinition scopeConfigurer = new RootBeanDefinition(CustomScopeConfigurer.class);
+ scopeConfigurer.getPropertyValues().add("scopes", scopeMap);
+ registerBeanDefByName("webSocketScopeConfigurer", scopeConfigurer, context, source);
- registerWebSocketMessageBrokerStats(subProtocolHandlerDef, brokerDef, clientInChannel,
- clientOutChannel, parserCxt, source);
-
- parserCxt.popAndRegisterContainingComponent();
+ registerWebSocketMessageBrokerStats(subProtoHandler, broker, inChannel, outChannel, context, source);
+ context.popAndRegisterContainingComponent();
return null;
}
- private RuntimeBeanReference getMessageChannel(String channelName, Element channelElement,
- ParserContext parserCxt, Object source) {
-
- RootBeanDefinition executorDef = null;
- if (channelElement == null) {
- executorDef = getDefaultExecutorBeanDefinition(channelName);
+ private RuntimeBeanReference getMessageChannel(String name, Element element, ParserContext context, Object source) {
+ RootBeanDefinition executor = null;
+ if (element == null) {
+ executor = getDefaultExecutorBeanDefinition(name);
}
else {
- Element executor = DomUtils.getChildElementByTagName(channelElement, "executor");
- if (executor == null) {
- executorDef = getDefaultExecutorBeanDefinition(channelName);
+ Element executorElem = DomUtils.getChildElementByTagName(element, "executor");
+ if (executorElem == null) {
+ executor = getDefaultExecutorBeanDefinition(name);
}
else {
- executorDef = new RootBeanDefinition(ThreadPoolTaskExecutor.class);
- String attrValue = executor.getAttribute("core-pool-size");
- if (!StringUtils.isEmpty(attrValue)) {
- executorDef.getPropertyValues().add("corePoolSize", attrValue);
+ executor = new RootBeanDefinition(ThreadPoolTaskExecutor.class);
+ if (executorElem.hasAttribute("core-pool-size")) {
+ executor.getPropertyValues().add("corePoolSize", executorElem.getAttribute("core-pool-size"));
}
- attrValue = executor.getAttribute("max-pool-size");
- if (!StringUtils.isEmpty(attrValue)) {
- executorDef.getPropertyValues().add("maxPoolSize", attrValue);
+ if (executorElem.hasAttribute("max-pool-size")) {
+ executor.getPropertyValues().add("maxPoolSize", executorElem.getAttribute("max-pool-size"));
}
- attrValue = executor.getAttribute("keep-alive-seconds");
- if (!StringUtils.isEmpty(attrValue)) {
- executorDef.getPropertyValues().add("keepAliveSeconds", attrValue);
+ if (executorElem.hasAttribute("keep-alive-seconds")) {
+ executor.getPropertyValues().add("keepAliveSeconds", executorElem.getAttribute("keep-alive-seconds"));
}
- attrValue = executor.getAttribute("queue-capacity");
- if (!StringUtils.isEmpty(attrValue)) {
- executorDef.getPropertyValues().add("queueCapacity", attrValue);
+ if (executorElem.hasAttribute("queue-capacity")) {
+ executor.getPropertyValues().add("queueCapacity", executorElem.getAttribute("queue-capacity"));
}
}
}
-
ConstructorArgumentValues argValues = new ConstructorArgumentValues();
- if (executorDef != null) {
- executorDef.getPropertyValues().add("threadNamePrefix", channelName + "-");
- String executorName = channelName + "Executor";
- registerBeanDefByName(executorName, executorDef, parserCxt, source);
+ if (executor != null) {
+ executor.getPropertyValues().add("threadNamePrefix", name + "-");
+ String executorName = name + "Executor";
+ registerBeanDefByName(executorName, executor, context, source);
argValues.addIndexedArgumentValue(0, new RuntimeBeanReference(executorName));
}
-
RootBeanDefinition channelDef = new RootBeanDefinition(ExecutorSubscribableChannel.class, argValues, null);
-
- if (channelElement != null) {
- Element interceptorsElement = DomUtils.getChildElementByTagName(channelElement, "interceptors");
- ManagedList> interceptorList = WebSocketNamespaceUtils.parseBeanSubElements(interceptorsElement, parserCxt);
- channelDef.getPropertyValues().add("interceptors", interceptorList);
+ if (element != null) {
+ Element interceptorsElement = DomUtils.getChildElementByTagName(element, "interceptors");
+ ManagedList> interceptors = WebSocketNamespaceUtils.parseBeanSubElements(interceptorsElement, context);
+ channelDef.getPropertyValues().add("interceptors", interceptors);
}
-
- registerBeanDefByName(channelName, channelDef, parserCxt, source);
- return new RuntimeBeanReference(channelName);
+ registerBeanDefByName(name, channelDef, context, source);
+ return new RuntimeBeanReference(name);
}
private RootBeanDefinition getDefaultExecutorBeanDefinition(String channelName) {
@@ -250,81 +218,71 @@ class MessageBrokerBeanDefinitionParser implements BeanDefinitionParser {
return executorDef;
}
- private RuntimeBeanReference registerSubProtocolWebSocketHandler(Element element,
- RuntimeBeanReference clientInChannel, RuntimeBeanReference clientOutChannel,
- RuntimeBeanReference userSessionRegistry, ParserContext parserCxt, Object source) {
+ private RuntimeBeanReference registerSubProtoHandler(Element element, RuntimeBeanReference inChannel,
+ RuntimeBeanReference outChannel, RuntimeBeanReference registry, ParserContext context, Object source) {
RootBeanDefinition stompHandlerDef = new RootBeanDefinition(StompSubProtocolHandler.class);
- stompHandlerDef.getPropertyValues().add("userSessionRegistry", userSessionRegistry);
- registerBeanDef(stompHandlerDef, parserCxt, source);
+ stompHandlerDef.getPropertyValues().add("userSessionRegistry", registry);
+ registerBeanDef(stompHandlerDef, context, source);
ConstructorArgumentValues cavs = new ConstructorArgumentValues();
- cavs.addIndexedArgumentValue(0, clientInChannel);
- cavs.addIndexedArgumentValue(1, clientOutChannel);
+ cavs.addIndexedArgumentValue(0, inChannel);
+ cavs.addIndexedArgumentValue(1, outChannel);
- RootBeanDefinition subProtocolWshDef = new RootBeanDefinition(SubProtocolWebSocketHandler.class, cavs, null);
- subProtocolWshDef.getPropertyValues().addPropertyValue("protocolHandlers", stompHandlerDef);
- String subProtocolWshName = registerBeanDef(subProtocolWshDef, parserCxt, source);
+ RootBeanDefinition beanDef = new RootBeanDefinition(SubProtocolWebSocketHandler.class, cavs, null);
+ beanDef.getPropertyValues().addPropertyValue("protocolHandlers", stompHandlerDef);
Element transportElem = DomUtils.getChildElementByTagName(element, "transport");
if (transportElem != null) {
- String messageSize = transportElem.getAttribute("message-size");
- if (messageSize != null) {
- stompHandlerDef.getPropertyValues().add("messageSizeLimit", messageSize);
+ if (transportElem.hasAttribute("message-size")) {
+ stompHandlerDef.getPropertyValues().add("messageSizeLimit", transportElem.getAttribute("message-size"));
}
- String sendTimeLimit = transportElem.getAttribute("send-timeout");
- if (sendTimeLimit != null) {
- subProtocolWshDef.getPropertyValues().add("sendTimeLimit", sendTimeLimit);
+ if (transportElem.hasAttribute("send-timeout")) {
+ beanDef.getPropertyValues().add("sendTimeLimit", transportElem.getAttribute("send-timeout"));
}
- String sendBufferSizeLimit = transportElem.getAttribute("send-buffer-size");
- if (sendBufferSizeLimit != null) {
- subProtocolWshDef.getPropertyValues().add("sendBufferSizeLimit", sendBufferSizeLimit);
+ if (transportElem.hasAttribute("send-buffer-size")) {
+ beanDef.getPropertyValues().add("sendBufferSizeLimit", transportElem.getAttribute("send-buffer-size"));
}
}
-
- return new RuntimeBeanReference(subProtocolWshName);
+ return new RuntimeBeanReference(registerBeanDef(beanDef, context, source));
}
- private RuntimeBeanReference registerHttpRequestHandler(Element stompEndpointElement,
- RuntimeBeanReference subProtocolWebSocketHandler, ParserContext parserCxt, Object source) {
+ private RuntimeBeanReference registerRequestHandler(Element element, RuntimeBeanReference subProtoHandler,
+ ParserContext context, Object source) {
- RootBeanDefinition httpRequestHandlerDef;
+ RootBeanDefinition beanDef;
RuntimeBeanReference sockJsService = WebSocketNamespaceUtils.registerSockJsService(
- stompEndpointElement, SOCKJS_SCHEDULER_BEAN_NAME, parserCxt, source);
+ element, SOCKJS_SCHEDULER_BEAN_NAME, context, source);
if (sockJsService != null) {
ConstructorArgumentValues cavs = new ConstructorArgumentValues();
cavs.addIndexedArgumentValue(0, sockJsService);
- cavs.addIndexedArgumentValue(1, subProtocolWebSocketHandler);
- httpRequestHandlerDef = new RootBeanDefinition(SockJsHttpRequestHandler.class, cavs, null);
+ cavs.addIndexedArgumentValue(1, subProtoHandler);
+ beanDef = new RootBeanDefinition(SockJsHttpRequestHandler.class, cavs, null);
}
else {
- RuntimeBeanReference handshakeHandler =
- WebSocketNamespaceUtils.registerHandshakeHandler(stompEndpointElement, parserCxt, source);
+ RuntimeBeanReference handshakeHandler = WebSocketNamespaceUtils.registerHandshakeHandler(element, context, source);
ConstructorArgumentValues cavs = new ConstructorArgumentValues();
- cavs.addIndexedArgumentValue(0, subProtocolWebSocketHandler);
- if(handshakeHandler != null) {
+ cavs.addIndexedArgumentValue(0, subProtoHandler);
+ if (handshakeHandler != null) {
cavs.addIndexedArgumentValue(1, handshakeHandler);
}
- httpRequestHandlerDef = new RootBeanDefinition(WebSocketHttpRequestHandler.class, cavs, null);
+ beanDef = new RootBeanDefinition(WebSocketHttpRequestHandler.class, cavs, null);
}
-
- String httpRequestHandlerBeanName = registerBeanDef(httpRequestHandlerDef, parserCxt, source);
- return new RuntimeBeanReference(httpRequestHandlerBeanName);
+ return new RuntimeBeanReference(registerBeanDef(beanDef, context, source));
}
- private RootBeanDefinition registerMessageBroker(Element messageBrokerElement, RuntimeBeanReference clientInChannelDef,
- RuntimeBeanReference clientOutChannelDef, RuntimeBeanReference brokerChannelDef,
- ParserContext parserCxt, Object source) {
+ private RootBeanDefinition registerMessageBroker(Element messageBrokerElement, RuntimeBeanReference inChannel,
+ RuntimeBeanReference outChannel, RuntimeBeanReference brokerChannel, ParserContext context, Object source) {
Element simpleBrokerElem = DomUtils.getChildElementByTagName(messageBrokerElement, "simple-broker");
Element brokerRelayElem = DomUtils.getChildElementByTagName(messageBrokerElement, "stomp-broker-relay");
ConstructorArgumentValues cavs = new ConstructorArgumentValues();
- cavs.addIndexedArgumentValue(0, clientInChannelDef);
- cavs.addIndexedArgumentValue(1, clientOutChannelDef);
- cavs.addIndexedArgumentValue(2, brokerChannelDef);
+ cavs.addIndexedArgumentValue(0, inChannel);
+ cavs.addIndexedArgumentValue(1, outChannel);
+ cavs.addIndexedArgumentValue(2, brokerChannel);
RootBeanDefinition brokerDef;
if (simpleBrokerElem != null) {
@@ -332,213 +290,177 @@ class MessageBrokerBeanDefinitionParser implements BeanDefinitionParser {
cavs.addIndexedArgumentValue(3, Arrays.asList(StringUtils.tokenizeToStringArray(prefix, ",")));
brokerDef = new RootBeanDefinition(SimpleBrokerMessageHandler.class, cavs, null);
if (messageBrokerElement.hasAttribute("path-matcher")) {
- brokerDef.getPropertyValues().add("pathMatcher",
- new RuntimeBeanReference(messageBrokerElement.getAttribute("path-matcher")));
+ String pathMatcherRef = messageBrokerElement.getAttribute("path-matcher");
+ brokerDef.getPropertyValues().add("pathMatcher", new RuntimeBeanReference(pathMatcherRef));
}
}
else if (brokerRelayElem != null) {
String prefix = brokerRelayElem.getAttribute("prefix");
cavs.addIndexedArgumentValue(3, Arrays.asList(StringUtils.tokenizeToStringArray(prefix, ",")));
- MutablePropertyValues mpvs = new MutablePropertyValues();
- String relayHost = brokerRelayElem.getAttribute("relay-host");
- if(!relayHost.isEmpty()) {
- mpvs.add("relayHost",relayHost);
+ MutablePropertyValues values = new MutablePropertyValues();
+ if (brokerRelayElem.hasAttribute("relay-host")) {
+ values.add("relayHost", brokerRelayElem.getAttribute("relay-host"));
}
- String relayPort = brokerRelayElem.getAttribute("relay-port");
- if(!relayPort.isEmpty()) {
- mpvs.add("relayPort", Integer.valueOf(relayPort));
+ if (brokerRelayElem.hasAttribute("relay-port")) {
+ values.add("relayPort", brokerRelayElem.getAttribute("relay-port"));
}
- String attrValue = brokerRelayElem.getAttribute("client-login");
- if(!attrValue.isEmpty()) {
- mpvs.add("clientLogin",attrValue);
+ if (brokerRelayElem.hasAttribute("client-login")) {
+ values.add("clientLogin", brokerRelayElem.getAttribute("client-login"));
}
- attrValue = brokerRelayElem.getAttribute("client-passcode");
- if(!attrValue.isEmpty()) {
- mpvs.add("clientPasscode", attrValue);
+ if (brokerRelayElem.hasAttribute("client-passcode")) {
+ values.add("clientPasscode", brokerRelayElem.getAttribute("client-passcode"));
}
- attrValue = brokerRelayElem.getAttribute("system-login");
- if(!attrValue.isEmpty()) {
- mpvs.add("systemLogin",attrValue);
+ if (brokerRelayElem.hasAttribute("system-login")) {
+ values.add("systemLogin", brokerRelayElem.getAttribute("system-login"));
}
- attrValue = brokerRelayElem.getAttribute("system-passcode");
- if(!attrValue.isEmpty()) {
- mpvs.add("systemPasscode", attrValue);
+ if (brokerRelayElem.hasAttribute("system-passcode")) {
+ values.add("systemPasscode", brokerRelayElem.getAttribute("system-passcode"));
}
- attrValue = brokerRelayElem.getAttribute("heartbeat-send-interval");
- if(!attrValue.isEmpty()) {
- mpvs.add("systemHeartbeatSendInterval", Long.parseLong(attrValue));
+ if (brokerRelayElem.hasAttribute("heartbeat-send-interval")) {
+ values.add("systemHeartbeatSendInterval", brokerRelayElem.getAttribute("heartbeat-send-interval"));
}
- attrValue = brokerRelayElem.getAttribute("heartbeat-receive-interval");
- if(!attrValue.isEmpty()) {
- mpvs.add("systemHeartbeatReceiveInterval", Long.parseLong(attrValue));
+ if (brokerRelayElem.hasAttribute("heartbeat-receive-interval")) {
+ values.add("systemHeartbeatReceiveInterval", brokerRelayElem.getAttribute("heartbeat-receive-interval"));
}
- attrValue = brokerRelayElem.getAttribute("virtual-host");
- if(!attrValue.isEmpty()) {
- mpvs.add("virtualHost", attrValue);
+ if (brokerRelayElem.hasAttribute("virtual-host")) {
+ values.add("virtualHost", brokerRelayElem.getAttribute("virtual-host"));
}
Class> handlerType = StompBrokerRelayMessageHandler.class;
- brokerDef = new RootBeanDefinition(handlerType, cavs, mpvs);
+ brokerDef = new RootBeanDefinition(handlerType, cavs, values);
}
else {
// Should not happen
throw new IllegalStateException("Neither nor elements found.");
}
- registerBeanDef(brokerDef, parserCxt, source);
+ registerBeanDef(brokerDef, context, source);
return brokerDef;
}
- private RuntimeBeanReference registerBrokerMessageConverter(Element element,
- ParserContext parserCxt, Object source) {
-
+ private RuntimeBeanReference registerMessageConverter(Element element, ParserContext context, Object source) {
Element convertersElement = DomUtils.getChildElementByTagName(element, "message-converters");
- ManagedList super Object> convertersDef = new ManagedList