@Override public void init() { registerBeanDefinitionParser("handlers", new HandlersBeanDefinitionParser()); if (isSpringMessagingPresent) { registerBeanDefinitionParser("message-broker", new MessageBrokerBeanDefinitionParser()); } }
RuntimeBeanReference validatorRef = getValidator(messageBrokerElement, source, context); if (validatorRef != null) { beanDef.getPropertyValues().add("validator", validatorRef); values.add("customArgumentResolvers", extractBeanSubElements(resolversElement, context)); values.add("customReturnValueHandlers", extractBeanSubElements(handlersElement, context)); registerBeanDef(beanDef, context, source);
executor = getDefaultExecutorBeanDefinition(name); executor = getDefaultExecutorBeanDefinition(name); executor.getPropertyValues().add("threadNamePrefix", name + "-"); String executorName = name + "Executor"; registerBeanDefByName(executorName, executor, context, source); cargs.addIndexedArgumentValue(0, new RuntimeBeanReference(executorName)); channelDef.getPropertyValues().add("interceptors", interceptors); registerBeanDefByName(name, channelDef, context, source); return new RuntimeBeanReference(name);
RuntimeBeanReference inChannel = getMessageChannel("clientInboundChannel", channelElem, context, source); RuntimeBeanReference outChannel = getMessageChannel("clientOutboundChannel", channelElem, context, source); RuntimeBeanReference brokerChannel = getMessageChannel("brokerChannel", channelElem, context, source); RuntimeBeanReference userRegistry = registerUserRegistry(element, context, source); Object userDestHandler = registerUserDestHandler(element, userRegistry, inChannel, brokerChannel, context, source); RuntimeBeanReference converter = registerMessageConverter(element, context, source); RuntimeBeanReference template = registerMessagingTemplate(element, brokerChannel, converter, context, source); registerAnnotationMethodMessageHandler(element, inChannel, outChannel,converter, template, context, source); RootBeanDefinition broker = registerMessageBroker(element, inChannel, outChannel, brokerChannel, userDestHandler, template, userRegistry, context, source); ManagedMap<String, Object> urlMap = registerHandlerMapping(element, context, source); RuntimeBeanReference stompHandler = registerStompHandler(element, inChannel, outChannel, context, source); for (Element endpointElem : DomUtils.getChildElementsByTagName(element, "stomp-endpoint")) { RuntimeBeanReference requestHandler = registerRequestHandler(endpointElem, stompHandler, context, source); String pathAttribute = endpointElem.getAttribute("path"); Assert.hasText(pathAttribute, "Invalid <stomp-endpoint> (no path mapping)"); RootBeanDefinition scopeConfigurer = new RootBeanDefinition(CustomScopeConfigurer.class); scopeConfigurer.getPropertyValues().add("scopes", scopeMap); registerBeanDefByName("webSocketScopeConfigurer", scopeConfigurer, context, source); registerWebSocketMessageBrokerStats(broker, inChannel, outChannel, context, source);
private RuntimeBeanReference registerUserDestHandler(Element brokerElem, RuntimeBeanReference userRegistry, RuntimeBeanReference inChannel, RuntimeBeanReference brokerChannel, ParserContext context, @Nullable Object source) { Object userDestResolver = registerUserDestResolver(brokerElem, userRegistry, context, source); RootBeanDefinition beanDef = new RootBeanDefinition(UserDestinationMessageHandler.class); beanDef.getConstructorArgumentValues().addIndexedArgumentValue(0, inChannel); beanDef.getConstructorArgumentValues().addIndexedArgumentValue(1, brokerChannel); beanDef.getConstructorArgumentValues().addIndexedArgumentValue(2, userDestResolver); Element relayElement = DomUtils.getChildElementByTagName(brokerElem, "stomp-broker-relay"); if (relayElement != null && relayElement.hasAttribute("user-destination-broadcast")) { String destination = relayElement.getAttribute("user-destination-broadcast"); beanDef.getPropertyValues().add("broadcastDestination", destination); } String beanName = registerBeanDef(beanDef, context, source); return new RuntimeBeanReference(beanName); }
registerBeanDef(stompHandlerDef, context, source); registerBeanDefByName(WEB_SOCKET_HANDLER_BEAN_NAME, handlerDef, context, source); RuntimeBeanReference result = new RuntimeBeanReference(WEB_SOCKET_HANDLER_BEAN_NAME); ManagedList<Object> factories = extractBeanSubElements(factoriesElement, context); RootBeanDefinition factoryBean = new RootBeanDefinition(DecoratingFactoryBean.class); factoryBean.getConstructorArgumentValues().addIndexedArgumentValue(0, result); factoryBean.getConstructorArgumentValues().addIndexedArgumentValue(1, factories); result = new RuntimeBeanReference(registerBeanDef(factoryBean, context, source));
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")); if (multiServer) { RootBeanDefinition localRegistryBeanDef = new RootBeanDefinition(DefaultSimpUserRegistry.class); RootBeanDefinition beanDef = new RootBeanDefinition(MultiServerUserRegistry.class); beanDef.getConstructorArgumentValues().addIndexedArgumentValue(0, localRegistryBeanDef); String beanName = registerBeanDef(beanDef, context, source); return new RuntimeBeanReference(beanName); } else { RootBeanDefinition beanDef = new RootBeanDefinition(DefaultSimpUserRegistry.class); String beanName = registerBeanDef(beanDef, context, source); return new RuntimeBeanReference(beanName); } }
private static String registerBeanDef(RootBeanDefinition beanDef, ParserContext context, @Nullable Object source) { String name = context.getReaderContext().generateBeanName(beanDef); registerBeanDefByName(name, beanDef, context, source); return name; }
map.put(destination, registerUserRegistryMessageHandler(userRegistry, brokerTemplate, destination, context, source)); registerBeanDef(brokerDef, context, source); return brokerDef;
RuntimeBeanReference inChannel = getMessageChannel("clientInboundChannel", channelElem, context, source); RuntimeBeanReference outChannel = getMessageChannel("clientOutboundChannel", channelElem, context, source); RuntimeBeanReference brokerChannel = getMessageChannel("brokerChannel", channelElem, context, source); RuntimeBeanReference userRegistry = registerUserRegistry(element, context, source); Object userDestHandler = registerUserDestHandler(element, userRegistry, inChannel, brokerChannel, context, source); RuntimeBeanReference converter = registerMessageConverter(element, context, source); RuntimeBeanReference template = registerMessagingTemplate(element, brokerChannel, converter, context, source); registerAnnotationMethodMessageHandler(element, inChannel, outChannel,converter, template, context, source); RootBeanDefinition broker = registerMessageBroker(element, inChannel, outChannel, brokerChannel, userDestHandler, template, userRegistry, context, source); ManagedMap<String, Object> urlMap = registerHandlerMapping(element, context, source); RuntimeBeanReference stompHandler = registerStompHandler(element, inChannel, outChannel, context, source); for (Element endpointElem : DomUtils.getChildElementsByTagName(element, "stomp-endpoint")) { RuntimeBeanReference requestHandler = registerRequestHandler(endpointElem, stompHandler, context, source); String pathAttribute = endpointElem.getAttribute("path"); Assert.hasText(pathAttribute, "Invalid <stomp-endpoint> (no path mapping)"); RootBeanDefinition scopeConfigurer = new RootBeanDefinition(CustomScopeConfigurer.class); scopeConfigurer.getPropertyValues().add("scopes", scopeMap); registerBeanDefByName("webSocketScopeConfigurer", scopeConfigurer, context, source); registerWebSocketMessageBrokerStats(broker, inChannel, outChannel, context, source);
registerBeanDef(stompHandlerDef, context, source); registerBeanDefByName(WEB_SOCKET_HANDLER_BEAN_NAME, handlerDef, context, source); RuntimeBeanReference result = new RuntimeBeanReference(WEB_SOCKET_HANDLER_BEAN_NAME); ManagedList<Object> factories = extractBeanSubElements(factoriesElement, context); RootBeanDefinition factoryBean = new RootBeanDefinition(DecoratingFactoryBean.class); factoryBean.getConstructorArgumentValues().addIndexedArgumentValue(0, result); factoryBean.getConstructorArgumentValues().addIndexedArgumentValue(1, factories); result = new RuntimeBeanReference(registerBeanDef(factoryBean, context, source));
private RuntimeBeanReference registerUserDestResolver(Element brokerElem, RuntimeBeanReference userRegistry, ParserContext context, @Nullable Object source) { RootBeanDefinition beanDef = new RootBeanDefinition(DefaultUserDestinationResolver.class); beanDef.getConstructorArgumentValues().addIndexedArgumentValue(0, userRegistry); if (brokerElem.hasAttribute("user-destination-prefix")) { beanDef.getPropertyValues().add("userDestinationPrefix", brokerElem.getAttribute("user-destination-prefix")); } if (brokerElem.hasAttribute("path-matcher")) { String pathMatcherRef = brokerElem.getAttribute("path-matcher"); beanDef.getPropertyValues().add("pathMatcher", new RuntimeBeanReference(pathMatcherRef)); } return new RuntimeBeanReference(registerBeanDef(beanDef, context, source)); }
private RuntimeBeanReference registerMessagingTemplate(Element element, RuntimeBeanReference brokerChannel, RuntimeBeanReference messageConverter, ParserContext context, @Nullable Object source) { ConstructorArgumentValues cargs = new ConstructorArgumentValues(); cargs.addIndexedArgumentValue(0, brokerChannel); RootBeanDefinition beanDef = new RootBeanDefinition(SimpMessagingTemplate.class, cargs, null); if (element.hasAttribute("user-destination-prefix")) { beanDef.getPropertyValues().add("userDestinationPrefix", element.getAttribute("user-destination-prefix")); } beanDef.getPropertyValues().add("messageConverter", messageConverter); String name = MESSAGING_TEMPLATE_BEAN_NAME; registerBeanDefByName(name, beanDef, context, source); return new RuntimeBeanReference(name); }
private RuntimeBeanReference registerUserDestHandler(Element brokerElem, RuntimeBeanReference userRegistry, RuntimeBeanReference inChannel, RuntimeBeanReference brokerChannel, ParserContext context, @Nullable Object source) { Object userDestResolver = registerUserDestResolver(brokerElem, userRegistry, context, source); RootBeanDefinition beanDef = new RootBeanDefinition(UserDestinationMessageHandler.class); beanDef.getConstructorArgumentValues().addIndexedArgumentValue(0, inChannel); beanDef.getConstructorArgumentValues().addIndexedArgumentValue(1, brokerChannel); beanDef.getConstructorArgumentValues().addIndexedArgumentValue(2, userDestResolver); Element relayElement = DomUtils.getChildElementByTagName(brokerElem, "stomp-broker-relay"); if (relayElement != null && relayElement.hasAttribute("user-destination-broadcast")) { String destination = relayElement.getAttribute("user-destination-broadcast"); beanDef.getPropertyValues().add("broadcastDestination", destination); } String beanName = registerBeanDef(beanDef, context, source); return new RuntimeBeanReference(beanName); }
map.put(destination, registerUserRegistryMessageHandler(userRegistry, brokerTemplate, destination, context, source)); registerBeanDef(brokerDef, context, source); return brokerDef;
RuntimeBeanReference inChannel = getMessageChannel("clientInboundChannel", channelElem, context, source); RuntimeBeanReference outChannel = getMessageChannel("clientOutboundChannel", channelElem, context, source); RuntimeBeanReference brokerChannel = getMessageChannel("brokerChannel", channelElem, context, source); RuntimeBeanReference userRegistry = registerUserRegistry(element, context, source); Object userDestHandler = registerUserDestHandler(element, userRegistry, inChannel, brokerChannel, context, source); RuntimeBeanReference converter = registerMessageConverter(element, context, source); RuntimeBeanReference template = registerMessagingTemplate(element, brokerChannel, converter, context, source); registerAnnotationMethodMessageHandler(element, inChannel, outChannel,converter, template, context, source); RootBeanDefinition broker = registerMessageBroker(element, inChannel, outChannel, brokerChannel, userDestHandler, template, userRegistry, context, source); ManagedMap<String, Object> urlMap = registerHandlerMapping(element, context, source); RuntimeBeanReference stompHandler = registerStompHandler(element, inChannel, outChannel, context, source); for (Element endpointElem : DomUtils.getChildElementsByTagName(element, "stomp-endpoint")) { RuntimeBeanReference requestHandler = registerRequestHandler(endpointElem, stompHandler, context, source); String pathAttribute = endpointElem.getAttribute("path"); Assert.hasText(pathAttribute, "Invalid <stomp-endpoint> (no path mapping)"); RootBeanDefinition scopeConfigurer = new RootBeanDefinition(CustomScopeConfigurer.class); scopeConfigurer.getPropertyValues().add("scopes", scopeMap); registerBeanDefByName("webSocketScopeConfigurer", scopeConfigurer, context, source); registerWebSocketMessageBrokerStats(broker, inChannel, outChannel, context, source);
RuntimeBeanReference validatorRef = getValidator(messageBrokerElement, source, context); if (validatorRef != null) { beanDef.getPropertyValues().add("validator", validatorRef); values.add("customArgumentResolvers", extractBeanSubElements(resolversElement, context)); values.add("customReturnValueHandlers", extractBeanSubElements(handlersElement, context)); registerBeanDef(beanDef, context, source);
registerBeanDef(stompHandlerDef, context, source); registerBeanDefByName(WEB_SOCKET_HANDLER_BEAN_NAME, handlerDef, context, source); RuntimeBeanReference result = new RuntimeBeanReference(WEB_SOCKET_HANDLER_BEAN_NAME); ManagedList<Object> factories = extractBeanSubElements(factoriesElement, context); RootBeanDefinition factoryBean = new RootBeanDefinition(DecoratingFactoryBean.class); factoryBean.getConstructorArgumentValues().addIndexedArgumentValue(0, result); factoryBean.getConstructorArgumentValues().addIndexedArgumentValue(1, factories); result = new RuntimeBeanReference(registerBeanDef(factoryBean, context, source));
private ManagedMap<String, Object> registerHandlerMapping( Element element, ParserContext context, @Nullable Object source) { RootBeanDefinition handlerMappingDef = new RootBeanDefinition(WebSocketHandlerMapping.class); String orderAttribute = element.getAttribute("order"); int order = orderAttribute.isEmpty() ? DEFAULT_MAPPING_ORDER : Integer.valueOf(orderAttribute); handlerMappingDef.getPropertyValues().add("order", order); String pathHelper = element.getAttribute("path-helper"); if (StringUtils.hasText(pathHelper)) { handlerMappingDef.getPropertyValues().add("urlPathHelper", new RuntimeBeanReference(pathHelper)); } ManagedMap<String, Object> urlMap = new ManagedMap<>(); urlMap.setSource(source); handlerMappingDef.getPropertyValues().add("urlMap", urlMap); registerBeanDef(handlerMappingDef, context, source); return urlMap; }
private void registerWebSocketMessageBrokerStats(RootBeanDefinition broker, RuntimeBeanReference inChannel, RuntimeBeanReference outChannel, ParserContext context, @Nullable Object source) { RootBeanDefinition beanDef = new RootBeanDefinition(WebSocketMessageBrokerStats.class); RuntimeBeanReference webSocketHandler = new RuntimeBeanReference(WEB_SOCKET_HANDLER_BEAN_NAME); beanDef.getPropertyValues().add("subProtocolWebSocketHandler", webSocketHandler); if (StompBrokerRelayMessageHandler.class == broker.getBeanClass()) { beanDef.getPropertyValues().add("stompBrokerRelay", broker); } String name = inChannel.getBeanName() + "Executor"; if (context.getRegistry().containsBeanDefinition(name)) { beanDef.getPropertyValues().add("inboundChannelExecutor", context.getRegistry().getBeanDefinition(name)); } name = outChannel.getBeanName() + "Executor"; if (context.getRegistry().containsBeanDefinition(name)) { beanDef.getPropertyValues().add("outboundChannelExecutor", context.getRegistry().getBeanDefinition(name)); } Object scheduler = WebSocketNamespaceUtils.registerScheduler(SCHEDULER_BEAN_NAME, context, source); beanDef.getPropertyValues().add("sockJsTaskScheduler", scheduler); registerBeanDefByName("webSocketMessageBrokerStats", beanDef, context, source); }