📄 dwrnamespacehandler.java
字号:
for (Iterator i = signatureElements.iterator(); i.hasNext();) { Element signatureElement = (Element) i.next(); decorate(signatureElement, new BeanDefinitionHolder(beanDefinition, DEFAULT_SPRING_CONFIGURATOR_ID), parserContext); } return beanDefinition; } } protected class ControllerBeanDefinitionParser implements BeanDefinitionParser { public BeanDefinition parse(Element element, ParserContext parserContext) { BeanDefinitionBuilder dwrController = BeanDefinitionBuilder.rootBeanDefinition(DwrController.class); List configurators = new ManagedList(); configurators.add(new RuntimeBeanReference(DEFAULT_SPRING_CONFIGURATOR_ID)); dwrController.addPropertyValue("configurators", configurators); String debug = element.getAttribute("debug"); if (StringUtils.hasText(debug)) { dwrController.addPropertyValue("debug", debug); } String beanName = element.getAttribute(BeanDefinitionParserDelegate.ID_ATTRIBUTE); String nameAttr = element.getAttribute(BeanDefinitionParserDelegate.NAME_ATTRIBUTE); String[] aliases = null; if (!StringUtils.hasText(beanName)) { beanName = element.getAttribute("name"); } else { String aliasName = element.getAttribute("name"); if (StringUtils.hasText(aliasName)) { aliases = StringUtils.tokenizeToStringArray(nameAttr, BeanDefinitionParserDelegate.BEAN_NAME_DELIMITERS); } } parseControllerParameters(dwrController, element); BeanDefinitionHolder holder = new BeanDefinitionHolder(dwrController.getBeanDefinition(), beanName, aliases); BeanDefinitionReaderUtils.registerBeanDefinition(holder, parserContext.getRegistry()); return dwrController.getBeanDefinition(); } protected void parseControllerParameters(BeanDefinitionBuilder dwrControllerDefinition, Element parent) { NodeList children = parent.getChildNodes(); Map params = new HashMap(); for (int i = 0; i < children.getLength(); i++) { Node node = children.item(i); if (node.getNodeType() == Node.TEXT_NODE || node.getNodeType() == Node.COMMENT_NODE) { continue; } Element child = (Element) node; if (child.getNodeName().equals("dwr:config-param")) { String paramName = child.getAttribute("name"); String value = child.getAttribute("value"); params.put(paramName, value); } else { throw new RuntimeException("an unknown dwr:controller sub node was found: " + node.getNodeName()); } } dwrControllerDefinition.addPropertyValue("configParams", params); } } protected class RemoteBeanDefinitionDecorator implements BeanDefinitionDecorator { /** * Registers an <dwr:remote ... /> element. */ public BeanDefinitionHolder decorate(Node node, BeanDefinitionHolder definition, ParserContext parserContext) { Element element = (Element) node; String javascript = element.getAttribute("javascript"); BeanDefinitionBuilder beanCreator = BeanDefinitionBuilder.rootBeanDefinition(BeanCreator.class); try { String beanClassName = resolveBeanClassname(definition.getBeanDefinition(), parserContext.getRegistry()); if (beanClassName == null) { throw new FatalBeanException("Unabled to find type for beanName '" + definition.getBeanName() + "'. " + "Check your bean has a correctly configured parent or provide a class for " + " the bean definition"); } beanCreator.addPropertyValue("beanClass", ClassUtils.forName(beanClassName)); } catch (ClassNotFoundException e) { throw new FatalBeanException("Unable to create DWR bean creator for '" + definition.getBeanName() + "'.", e); } String name = definition.getBeanName(); if (name.startsWith("scopedTarget.")) { name = name.substring(name.indexOf(".") + 1); } beanCreator.addPropertyValue("beanId", name); beanCreator.addPropertyValue("javascript", javascript); BeanDefinitionBuilder creatorConfig = BeanDefinitionBuilder.rootBeanDefinition(CreatorConfig.class); creatorConfig.addPropertyValue("creator", beanCreator.getBeanDefinition()); registerCreator(parserContext.getRegistry(), javascript, creatorConfig, new HashMap(), node.getChildNodes()); return definition; } /** * Try getting the beanClassName from the definition and if that fails try to get it from * the parent (and even parent BeanFactory if we have to). * * @param definition * @param registry * @return class name or null if not found */ private String resolveBeanClassname(BeanDefinition definition, BeanDefinitionRegistry registry) { String beanClassName = definition.getBeanClassName(); if (!StringUtils.hasText(beanClassName)) { while (definition instanceof ChildBeanDefinition ) { String parentName = ((ChildBeanDefinition)definition).getParentName(); BeanDefinition parentDefinition = findParentDefinition(parentName, registry); if (parentDefinition == null) { if (log.isDebugEnabled()) { log.debug("No parent bean named '" + parentName + "' could be found in the " + "hierarchy of BeanFactorys. Check you've defined a bean called '" + parentName + "'"); } break; } beanClassName = parentDefinition.getBeanClassName(); if (StringUtils.hasText(beanClassName )) { // found the class name we were looking for break; } definition = parentDefinition; } } return beanClassName; } private BeanDefinition findParentDefinition(String parentName, BeanDefinitionRegistry registry) { if (registry != null) { if (registry.containsBeanDefinition(parentName)) { return registry.getBeanDefinition(parentName); } else if (registry instanceof HierarchicalBeanFactory) { // Try to get parent definition from the parent BeanFactory. This could return null BeanFactory parentBeanFactory = ((HierarchicalBeanFactory)registry).getParentBeanFactory(); return findParentDefinition(parentName, (BeanDefinitionRegistry)parentBeanFactory); } } // we've exhausted all possibilities return null; } } protected class ConverterBeanDefinitionDecorator implements BeanDefinitionDecorator { public BeanDefinitionHolder decorate(Node node, BeanDefinitionHolder definition, ParserContext parserContext) { Element element = (Element) node; String type = element.getAttribute("type"); String className = element.getAttribute("class"); String javascriptClassName = element.getAttribute("javascript"); BeanDefinitionRegistry registry = parserContext.getRegistry(); ConverterConfig converterConfig = new ConverterConfig(); converterConfig.setType(type); converterConfig.setJavascriptClassName(javascriptClassName); parseConverterSettings(converterConfig, element); lookupConverters(registry).put(className, converterConfig); return definition; } } protected void parseConverterSettings(ConverterConfig converterConfig, Element parent) { NodeList children = parent.getChildNodes(); // check to see if there are any nested elements here for (int i = 0; i < children.getLength(); i++) { Node node = children.item(i); if (node.getNodeType() == Node.TEXT_NODE || node.getNodeType() == Node.COMMENT_NODE) { continue; } Element child = (Element) node; if (child.getNodeName().equals("dwr:include")) { converterConfig.addInclude(child.getAttribute("method")); } else if (child.getNodeName().equals("dwr:exclude")) { converterConfig.addExclude(child.getAttribute("method")); } /* TODO Why is this only a property of ObjectConverter? else if (child.getNodeName().equals("dwr:force")) { converterConfig.setForce(Boolean.parseBoolean(child.getAttribute("value"))); } */ else { throw new RuntimeException("an unknown dwr:remote sub node was found: " + node.getNodeName()); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -