Polishing
This commit is contained in:
@@ -78,7 +78,7 @@ import org.springframework.web.socket.sockjs.support.SockJsHttpRequestHandler;
|
||||
* <p>Registers a Spring MVC {@link org.springframework.web.servlet.HandlerMapping}
|
||||
* with order 1 to map HTTP WebSocket handshake requests from STOMP/WebSocket clients.
|
||||
*
|
||||
* <p>Registers the following {@link org.springframework.messaging.MessageChannel org.springframework.messaging.MessageChannels}:
|
||||
* <p>Registers the following {@link org.springframework.messaging.MessageChannel MessageChannels}:
|
||||
* <ul>
|
||||
* <li>"clientInboundChannel" for receiving messages from clients (e.g. WebSocket clients)
|
||||
* <li>"clientOutboundChannel" for sending messages to clients (e.g. WebSocket clients)
|
||||
@@ -124,7 +124,6 @@ class MessageBrokerBeanDefinitionParser implements BeanDefinitionParser {
|
||||
|
||||
@Override
|
||||
public BeanDefinition parse(Element element, ParserContext context) {
|
||||
|
||||
Object source = context.extractSource(element);
|
||||
CompositeComponentDefinition compDefinition = new CompositeComponentDefinition(element.getTagName(), source);
|
||||
context.pushContainingComponent(compDefinition);
|
||||
@@ -155,13 +154,12 @@ class MessageBrokerBeanDefinitionParser implements BeanDefinitionParser {
|
||||
for (Element endpointElem : DomUtils.getChildElementsByTagName(element, "stomp-endpoint")) {
|
||||
RuntimeBeanReference requestHandler = registerRequestHandler(endpointElem, stompHandler, context, source);
|
||||
String pathAttribute = endpointElem.getAttribute("path");
|
||||
Assert.state(StringUtils.hasText(pathAttribute), "Invalid <stomp-endpoint> (no path mapping)");
|
||||
List<String> paths = Arrays.asList(StringUtils.tokenizeToStringArray(pathAttribute, ","));
|
||||
for (String path : paths) {
|
||||
Assert.hasText(pathAttribute, "Invalid <stomp-endpoint> (no path mapping)");
|
||||
for (String path : StringUtils.tokenizeToStringArray(pathAttribute, ",")) {
|
||||
path = path.trim();
|
||||
Assert.state(StringUtils.hasText(path), () -> "Invalid <stomp-endpoint> path attribute: " + pathAttribute);
|
||||
Assert.hasText(path, () -> "Invalid <stomp-endpoint> path attribute: " + pathAttribute);
|
||||
if (DomUtils.getChildElementByTagName(endpointElem, "sockjs") != null) {
|
||||
path = path.endsWith("/") ? path + "**" : path + "/**";
|
||||
path = (path.endsWith("/") ? path + "**" : path + "/**");
|
||||
}
|
||||
urlMap.put(path, requestHandler);
|
||||
}
|
||||
@@ -179,7 +177,6 @@ class MessageBrokerBeanDefinitionParser implements BeanDefinitionParser {
|
||||
}
|
||||
|
||||
private RuntimeBeanReference registerUserRegistry(Element element, ParserContext context, @Nullable Object source) {
|
||||
|
||||
Element relayElement = DomUtils.getChildElementByTagName(element, "stomp-broker-relay");
|
||||
boolean multiServer = (relayElement != null && relayElement.hasAttribute("user-registry-broadcast"));
|
||||
|
||||
@@ -197,8 +194,8 @@ class MessageBrokerBeanDefinitionParser implements BeanDefinitionParser {
|
||||
}
|
||||
}
|
||||
|
||||
private ManagedMap<String, Object> registerHandlerMapping(Element element,
|
||||
ParserContext context, @Nullable Object source) {
|
||||
private ManagedMap<String, Object> registerHandlerMapping(
|
||||
Element element, ParserContext context, @Nullable Object source) {
|
||||
|
||||
RootBeanDefinition handlerMappingDef = new RootBeanDefinition(WebSocketHandlerMapping.class);
|
||||
|
||||
@@ -247,6 +244,7 @@ class MessageBrokerBeanDefinitionParser implements BeanDefinitionParser {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ConstructorArgumentValues cargs = new ConstructorArgumentValues();
|
||||
if (executor != null) {
|
||||
executor.getPropertyValues().add("threadNamePrefix", name + "-");
|
||||
@@ -254,6 +252,7 @@ class MessageBrokerBeanDefinitionParser implements BeanDefinitionParser {
|
||||
registerBeanDefByName(executorName, executor, context, source);
|
||||
cargs.addIndexedArgumentValue(0, new RuntimeBeanReference(executorName));
|
||||
}
|
||||
|
||||
RootBeanDefinition channelDef = new RootBeanDefinition(ExecutorSubscribableChannel.class, cargs, null);
|
||||
ManagedList<? super Object> interceptors = new ManagedList<>();
|
||||
if (element != null) {
|
||||
@@ -327,13 +326,13 @@ class MessageBrokerBeanDefinitionParser implements BeanDefinitionParser {
|
||||
return result;
|
||||
}
|
||||
|
||||
private RuntimeBeanReference registerRequestHandler(Element element, RuntimeBeanReference subProtoHandler,
|
||||
ParserContext cxt, @Nullable Object source) {
|
||||
private RuntimeBeanReference registerRequestHandler(
|
||||
Element element, RuntimeBeanReference subProtoHandler, ParserContext ctx, @Nullable Object source) {
|
||||
|
||||
RootBeanDefinition beanDef;
|
||||
|
||||
RuntimeBeanReference sockJsService = WebSocketNamespaceUtils.registerSockJsService(
|
||||
element, SCHEDULER_BEAN_NAME, cxt, source);
|
||||
element, SCHEDULER_BEAN_NAME, ctx, source);
|
||||
|
||||
if (sockJsService != null) {
|
||||
ConstructorArgumentValues cargs = new ConstructorArgumentValues();
|
||||
@@ -342,12 +341,12 @@ class MessageBrokerBeanDefinitionParser implements BeanDefinitionParser {
|
||||
beanDef = new RootBeanDefinition(SockJsHttpRequestHandler.class, cargs, null);
|
||||
|
||||
// Register alias for backwards compatibility with 4.1
|
||||
cxt.getRegistry().registerAlias(SCHEDULER_BEAN_NAME, SOCKJS_SCHEDULER_BEAN_NAME);
|
||||
ctx.getRegistry().registerAlias(SCHEDULER_BEAN_NAME, SOCKJS_SCHEDULER_BEAN_NAME);
|
||||
}
|
||||
else {
|
||||
RuntimeBeanReference handler = WebSocketNamespaceUtils.registerHandshakeHandler(element, cxt, source);
|
||||
RuntimeBeanReference handler = WebSocketNamespaceUtils.registerHandshakeHandler(element, ctx, source);
|
||||
Element interceptElem = DomUtils.getChildElementByTagName(element, "handshake-interceptors");
|
||||
ManagedList<? super Object> interceptors = WebSocketNamespaceUtils.parseBeanSubElements(interceptElem, cxt);
|
||||
ManagedList<? super Object> interceptors = WebSocketNamespaceUtils.parseBeanSubElements(interceptElem, ctx);
|
||||
String allowedOrigins = element.getAttribute("allowed-origins");
|
||||
List<String> origins = Arrays.asList(StringUtils.tokenizeToStringArray(allowedOrigins, ","));
|
||||
interceptors.add(new OriginHandshakeInterceptor(origins));
|
||||
@@ -357,7 +356,7 @@ class MessageBrokerBeanDefinitionParser implements BeanDefinitionParser {
|
||||
beanDef = new RootBeanDefinition(WebSocketHttpRequestHandler.class, cargs, null);
|
||||
beanDef.getPropertyValues().add("handshakeInterceptors", interceptors);
|
||||
}
|
||||
return new RuntimeBeanReference(registerBeanDef(beanDef, cxt, source));
|
||||
return new RuntimeBeanReference(registerBeanDef(beanDef, ctx, source));
|
||||
}
|
||||
|
||||
private RootBeanDefinition registerMessageBroker(Element brokerElement,
|
||||
@@ -673,20 +672,20 @@ class MessageBrokerBeanDefinitionParser implements BeanDefinitionParser {
|
||||
context.registerComponent(new BeanComponentDefinition(beanDef, name));
|
||||
}
|
||||
|
||||
|
||||
private static final class DecoratingFactoryBean implements FactoryBean<WebSocketHandler> {
|
||||
|
||||
private final WebSocketHandler handler;
|
||||
|
||||
private final List<WebSocketHandlerDecoratorFactory> factories;
|
||||
|
||||
|
||||
private DecoratingFactoryBean(WebSocketHandler handler, List<WebSocketHandlerDecoratorFactory> factories) {
|
||||
public DecoratingFactoryBean(WebSocketHandler handler, List<WebSocketHandlerDecoratorFactory> factories) {
|
||||
this.handler = handler;
|
||||
this.factories = factories;
|
||||
}
|
||||
|
||||
@Override
|
||||
public WebSocketHandler getObject() throws Exception {
|
||||
public WebSocketHandler getObject() {
|
||||
WebSocketHandler result = this.handler;
|
||||
for (WebSocketHandlerDecoratorFactory factory : this.factories) {
|
||||
result = factory.decorate(result);
|
||||
|
||||
Reference in New Issue
Block a user