messagebrokerbeandefinitionparser.java

来自「java 和flex的整合,主要是spring和flex的整合,不可多得啊」· Java 代码 · 共 505 行 · 第 1/2 页

JAVA
505
字号
        if (remotingServiceElement != null) {            ParsingUtils.mapAllAttributes(remotingServiceElement, remotingProcessorBuilder);        }        String brokerId = parent.getAttribute(ID_ATTRIBUTE);        ParsingUtils.registerInfrastructureComponent(source, parserContext, remotingProcessorBuilder, brokerId + BeanIds.REMOTING_PROCESSOR_SUFFIX);        configProcessors.add(new RuntimeBeanReference(brokerId + BeanIds.REMOTING_PROCESSOR_SUFFIX));        registerFlexRemotingAnnotationPostProcessorIfNecessary(source, parserContext);    }    @SuppressWarnings("unchecked")    private void configureSecurity(Element parent, ParserContext parserContext, ManagedSet configProcessors, ManagedList advisors,        ManagedSet translators, ManagedSet interceptors, Element securedElement) {        if (securedElement == null) {            return;        }        boolean perClientAuthentication = Boolean.parseBoolean(securedElement.getAttribute(PER_CLIENT_AUTHENTICATION_ATTR));        String authManager = securedElement.getAttribute(AUTH_MANAGER_ATTR);        if (!StringUtils.hasText(authManager)) {            authManager = org.springframework.security.config.BeanIds.AUTHENTICATION_MANAGER;        }        String accessManager = securedElement.getAttribute(ACCESS_MANAGER_ATTR);        if (!StringUtils.hasText(accessManager)) {            accessManager = org.springframework.security.config.BeanIds.ACCESS_MANAGER;        }        registerAuthenticationListenerIfNecessary(securedElement, parserContext);        String brokerId = parent.getAttribute(ID_ATTRIBUTE);        registerLoginCommand(brokerId, parserContext, configProcessors, securedElement, authManager, perClientAuthentication);        translators.add(new SecurityExceptionTranslator());        if (perClientAuthentication) {            interceptors.add(new PerClientAuthenticationInterceptor());        }        interceptors.add(new LoginMessageInterceptor());        registerEndpointInterceptorIfNecessary(securedElement, parserContext, interceptors, authManager, accessManager);    }    private Object parseConfigAttributeDefinition(String access) {        if (StringUtils.hasText(access)) {            return new ConfigAttributeDefinition(StringUtils.commaDelimitedListToStringArray(access));        } else {            return null;        }    }    private void registerAuthenticationListenerIfNecessary(Element securedElement, ParserContext parserContext) {        if (!parserContext.getRegistry().containsBeanDefinition(BeanIds.SESSION_FIXATION_PROTECTION_CONFIGURER)) {            BeanDefinitionBuilder configurerBuilder = BeanDefinitionBuilder.genericBeanDefinition(SESSION_FIXATION_CONFIGURER_CLASS_NAME);            ParsingUtils.registerInfrastructureComponent(securedElement, parserContext, configurerBuilder,                BeanIds.SESSION_FIXATION_PROTECTION_CONFIGURER);        }    }    @SuppressWarnings("unchecked")    private void registerConfigMapEditorIfNecessary(Element source, ParserContext parserContext) {        if (!parserContext.getRegistry().containsBeanDefinition(BeanIds.JSON_CONFIG_MAP_EDITOR_CONFIGURER)) {            BeanDefinitionBuilder configurerBuilder = BeanDefinitionBuilder.genericBeanDefinition(CUSTOM_EDITOR_CONFIGURER_CLASS_NAME);            ManagedMap editors = new ManagedMap();            editors.put(CONFIG_MAP_CLASS_NAME, JSON_CONFIG_MAP_EDITOR_CLASS_NAME);            configurerBuilder.addPropertyValue(CUSTOM_EDITORS_PROPERTY, editors);            ParsingUtils.registerInfrastructureComponent(source, parserContext, configurerBuilder, BeanIds.JSON_CONFIG_MAP_EDITOR_CONFIGURER);        }    }    @SuppressWarnings("unchecked")    private void registerCustomConfigProcessors(ParserContext parserContext, Set configProcessors, List configProcessorElements) {        if (!CollectionUtils.isEmpty(configProcessorElements)) {            Iterator i = configProcessorElements.iterator();            while (i.hasNext()) {                Element configProcessorElement = (Element) i.next();                configProcessors.add(new RuntimeBeanReference(configProcessorElement.getAttribute(REF_ATTR)));            }        }    }    @SuppressWarnings("unchecked")    private void registerEndpointInterceptorIfNecessary(Element securedElement, ParserContext parserContext, ManagedSet interceptors,        String authManager, String accessManager) {        if (securedElement.hasChildNodes()) {            BeanDefinitionBuilder interceptorBuilder = BeanDefinitionBuilder.genericBeanDefinition(ENDPOINT_INTERCEPTOR_CLASS_NAME);            interceptorBuilder.addPropertyReference(AUTH_MANAGER_PROPERTY, authManager);            interceptorBuilder.addPropertyReference(ACCESS_MANAGER_PROPERTY, accessManager);            BeanDefinitionBuilder endpointDefSourceBuilder = BeanDefinitionBuilder.genericBeanDefinition(ENDPOINT_DEFINITION_SOURCE_CLASS_NAME);            HashMap endpointMap = new HashMap();            List securedChannelElements = DomUtils.getChildElementsByTagName(securedElement, SECURED_CHANNEL_ELEMENT);            if (!CollectionUtils.isEmpty(securedChannelElements)) {                Iterator i = securedChannelElements.iterator();                while (i.hasNext()) {                    Element securedChannel = (Element) i.next();                    String access = securedChannel.getAttribute(ACCESS_ATTR);                    String channel = securedChannel.getAttribute(CHANNEL_ATTR);                    Object attributeDefinition = parseConfigAttributeDefinition(access);                    endpointMap.put(channel, attributeDefinition);                }            }            LinkedHashMap requestMap = new LinkedHashMap();            List securedEndpointPathElements = DomUtils.getChildElementsByTagName(securedElement, SECURED_ENDPOINT_PATH_ELEMENT);            if (!CollectionUtils.isEmpty(securedEndpointPathElements)) {                Iterator i = securedEndpointPathElements.iterator();                while (i.hasNext()) {                    Element securedPath = (Element) i.next();                    String access = securedPath.getAttribute(ACCESS_ATTR);                    RequestKey pattern = new RequestKey(securedPath.getAttribute(PATTERN_ATTR));                    Object attributeDefinition = parseConfigAttributeDefinition(access);                    requestMap.put(pattern, attributeDefinition);                }            }            endpointDefSourceBuilder.addConstructorArgValue(new AntUrlPathMatcher());            endpointDefSourceBuilder.addConstructorArgValue(requestMap);            endpointDefSourceBuilder.addConstructorArgValue(endpointMap);            String endpointDefSourceId = ParsingUtils.registerInfrastructureComponent(securedElement, parserContext, endpointDefSourceBuilder);            interceptorBuilder.addPropertyReference(OBJECT_DEF_SOURCE_PROPERTY, endpointDefSourceId);            String interceptorId = ParsingUtils.registerInfrastructureComponent(securedElement, parserContext, interceptorBuilder);            interceptors.add(new RuntimeBeanReference(interceptorId));        }    }    @SuppressWarnings("unchecked")    private void registerEndpointProcessor(ParserContext parserContext, ManagedSet configProcessors, ManagedList advisors, Element securedElement,        String brokerId) {        BeanDefinitionBuilder endpointProcessorBuilder = BeanDefinitionBuilder.genericBeanDefinition(ENDPOINT_PROCESSOR_CLASS_NAME);        endpointProcessorBuilder.addConstructorArgValue(advisors);        ParsingUtils.registerInfrastructureComponent(securedElement, parserContext, endpointProcessorBuilder, brokerId            + BeanIds.ENDPOINT_PROCESSOR_SUFFIX);        configProcessors.add(new RuntimeBeanReference(brokerId + BeanIds.ENDPOINT_PROCESSOR_SUFFIX));    }    @SuppressWarnings("unchecked")    private void registerExceptionTranslation(Element element, ParserContext parserContext, ManagedList advisors, ManagedSet translators,        List exceptionTranslatorElements) {        if (!CollectionUtils.isEmpty(exceptionTranslatorElements)) {            Iterator i = exceptionTranslatorElements.iterator();            while (i.hasNext()) {                Element exceptionTranslatorElement = (Element) i.next();                translators.add(new RuntimeBeanReference(exceptionTranslatorElement.getAttribute(REF_ATTR)));            }        }        BeanDefinitionBuilder advisorBuilder = BeanDefinitionBuilder.genericBeanDefinition(SERVICE_MESSAGE_ADVISOR_CLASS_NAME);        BeanDefinitionBuilder exceptionTranslationBuilder = BeanDefinitionBuilder.genericBeanDefinition(EXCEPTION_TRANSLATION_CLASS_NAME);        exceptionTranslationBuilder.addPropertyValue(EXCEPTION_TRANSLATORS_PROPERTY, translators);        String exceptionTranslationId = ParsingUtils.registerInfrastructureComponent(element, parserContext, exceptionTranslationBuilder);        advisorBuilder.addConstructorArgReference(exceptionTranslationId);        String advisorId = ParsingUtils.registerInfrastructureComponent(element, parserContext, advisorBuilder);        advisors.add(new RuntimeBeanReference(advisorId));    }    private void registerFlexRemotingAnnotationPostProcessorIfNecessary(Element source, ParserContext parserContext) {        if (!parserContext.getRegistry().containsBeanDefinition(BeanIds.REMOTING_ANNOTATION_PROCESSOR)) {            BeanDefinitionBuilder processorBuilder = BeanDefinitionBuilder.genericBeanDefinition(REMOTING_ANNOTATION_PROCESSOR_CLASS_NAME);            ParsingUtils.registerInfrastructureComponent(source, parserContext, processorBuilder, BeanIds.REMOTING_ANNOTATION_PROCESSOR);        }    }    private void registerHandlerAdapterIfNecessary(Element element, ParserContext parserContext) {        // Make sure we only ever register one MessageBrokerHandlerAdapter        if (!parserContext.getRegistry().containsBeanDefinition(BeanIds.MESSAGE_BROKER_HANDLER_ADAPTER)) {            BeanDefinitionBuilder handlerAdapterBuilder = BeanDefinitionBuilder.genericBeanDefinition(MESSAGE_BROKER_HANDLER_ADAPTER_CLASS_NAME);            ParsingUtils.registerInfrastructureComponent(element, parserContext, handlerAdapterBuilder, BeanIds.MESSAGE_BROKER_HANDLER_ADAPTER);        }    }    @SuppressWarnings("unchecked")    private void registerHandlerMappings(Element parent, ParserContext parserContext, List mappingPatternElements) {        BeanDefinitionBuilder handlerMappingBuilder = BeanDefinitionBuilder.genericBeanDefinition(DEFAULT_HANDLER_MAPPING_CLASS_NAME);        if (StringUtils.hasText(parent.getAttribute(MAPPING_ORDER_ATTR))) {            handlerMappingBuilder.addPropertyValue(ORDER_PROPERTY, Integer.parseInt(parent.getAttribute(MAPPING_ORDER_ATTR)));        }        Map mappings = new HashMap();        if (CollectionUtils.isEmpty(mappingPatternElements)) {            mappings.put(DEFAULT_MAPPING_PATH, parent.getAttribute(ID_ATTRIBUTE));        } else {            Iterator i = mappingPatternElements.iterator();            while (i.hasNext()) {                Element mappingElement = (Element) i.next();                mappings.put(mappingElement.getAttribute(PATTERN_ATTR), parent.getAttribute(ID_ATTRIBUTE));            }        }        handlerMappingBuilder.addPropertyValue(URL_MAP_PROPERTY, mappings);        ParsingUtils.registerInfrastructureComponent(parent, parserContext, handlerMappingBuilder, parent.getAttribute(ID_ATTRIBUTE)            + BeanIds.HANDLER_MAPPING_SUFFIX);    }    @SuppressWarnings("unchecked")    private void registerLoginCommand(String brokerId, ParserContext parserContext, ManagedSet configProcessors, Element securedElement,        String authManager, boolean perClientAuthentication) {        String loginCommandId = brokerId + BeanIds.LOGIN_COMMAND_SUFFIX;        BeanDefinitionBuilder loginCommandBuilder = BeanDefinitionBuilder.genericBeanDefinition(LOGIN_COMMAND_CLASS_NAME);        loginCommandBuilder.addConstructorArgReference(authManager);        loginCommandBuilder.addPropertyValue(PER_CLIENT_AUTHENTICATION_PROPERTY, perClientAuthentication);        ParsingUtils.registerInfrastructureComponent(securedElement, parserContext, loginCommandBuilder, loginCommandId);        configProcessors.add(new RuntimeBeanReference(loginCommandId));    }    @SuppressWarnings("unchecked")    private void registerMessageInterception(Element element, ParserContext parserContext, ManagedList advisors, ManagedSet interceptors,        List messageInterceptorElements) {        if (!CollectionUtils.isEmpty(messageInterceptorElements)) {            Iterator i = messageInterceptorElements.iterator();            while (i.hasNext()) {                Element messageProcessorElement = (Element) i.next();                interceptors.add(new RuntimeBeanReference(messageProcessorElement.getAttribute(REF_ATTR)));            }        }        BeanDefinitionBuilder advisorBuilder = BeanDefinitionBuilder.genericBeanDefinition(SERVICE_MESSAGE_ADVISOR_CLASS_NAME);        BeanDefinitionBuilder messageInterceptionBuilder = BeanDefinitionBuilder.genericBeanDefinition(MESSAGE_INTERCEPTION_CLASS_NAME);        messageInterceptionBuilder.addPropertyValue(MESSAGE_INTERCEPTORS_PROPERTY, interceptors);        String messageInterceptionId = ParsingUtils.registerInfrastructureComponent(element, parserContext, messageInterceptionBuilder);        advisorBuilder.addConstructorArgReference(messageInterceptionId);        String advisorId = ParsingUtils.registerInfrastructureComponent(element, parserContext, advisorBuilder);        advisors.add(new RuntimeBeanReference(advisorId));    }    private void validateMessageBroker(Element element, ParserContext parserContext) {        if (!FlexConfigurationManager.DEFAULT_CONFIG_PATH.equals(element.getAttribute(SERVICES_CONFIG_PATH_ATTR))            && StringUtils.hasText(element.getAttribute(CONFIGURATION_MANAGER_ATTR))) {            parserContext.getReaderContext().error(                "The " + SERVICES_CONFIG_PATH_ATTR + " cannot be set when using a custom " + CONFIGURATION_MANAGER_ATTR                    + " reference.  Set the configurationPath on the custom ConfigurationManager instead.", element);        }    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?