List of usage examples for org.w3c.dom Element hasAttribute
public boolean hasAttribute(String name);
true
when an attribute with a given name is specified on this element or has a default value, false
otherwise. From source file:org.springframework.beans.factory.xml.DefaultXmlBeanDefinitionParser.java
/** * Parse the BeanDefinition itself, without regard to name or aliases. *///from w w w. j ava2 s.c o m protected BeanDefinition parseBeanDefinitionElement(Element ele, String beanName) throws BeanDefinitionStoreException { String className = null; if (ele.hasAttribute(CLASS_ATTRIBUTE)) { className = ele.getAttribute(CLASS_ATTRIBUTE).trim(); } String parent = null; if (ele.hasAttribute(PARENT_ATTRIBUTE)) { parent = ele.getAttribute(PARENT_ATTRIBUTE); } try { ConstructorArgumentValues cargs = parseConstructorArgElements(ele, beanName); MutablePropertyValues pvs = parsePropertyElements(ele, beanName); AbstractBeanDefinition bd = BeanDefinitionReaderUtils.createBeanDefinition(className, parent, cargs, pvs, getBeanDefinitionReader().getBeanClassLoader()); if (ele.hasAttribute(DEPENDS_ON_ATTRIBUTE)) { String dependsOn = ele.getAttribute(DEPENDS_ON_ATTRIBUTE); bd.setDependsOn(StringUtils.tokenizeToStringArray(dependsOn, BEAN_NAME_DELIMITERS)); } if (ele.hasAttribute(FACTORY_METHOD_ATTRIBUTE)) { bd.setFactoryMethodName(ele.getAttribute(FACTORY_METHOD_ATTRIBUTE)); } if (ele.hasAttribute(FACTORY_BEAN_ATTRIBUTE)) { bd.setFactoryBeanName(ele.getAttribute(FACTORY_BEAN_ATTRIBUTE)); } String dependencyCheck = ele.getAttribute(DEPENDENCY_CHECK_ATTRIBUTE); if (DEFAULT_VALUE.equals(dependencyCheck)) { dependencyCheck = getDefaultDependencyCheck(); } bd.setDependencyCheck(getDependencyCheck(dependencyCheck)); String autowire = ele.getAttribute(AUTOWIRE_ATTRIBUTE); if (DEFAULT_VALUE.equals(autowire)) { autowire = getDefaultAutowire(); } bd.setAutowireMode(getAutowireMode(autowire)); if (ele.hasAttribute(INIT_METHOD_ATTRIBUTE)) { String initMethodName = ele.getAttribute(INIT_METHOD_ATTRIBUTE); if (!"".equals(initMethodName)) { bd.setInitMethodName(initMethodName); } } else { if (getDefaultInitMethod() != null) { bd.setInitMethodName(getDefaultInitMethod()); bd.setEnforceInitMethod(false); } } if (ele.hasAttribute(DESTROY_METHOD_ATTRIBUTE)) { String destroyMethodName = ele.getAttribute(DESTROY_METHOD_ATTRIBUTE); if (!"".equals(destroyMethodName)) { bd.setDestroyMethodName(destroyMethodName); } } else { if (getDefaultDestroyMethod() != null) { bd.setDestroyMethodName(getDefaultDestroyMethod()); bd.setEnforceDestroyMethod(false); } } parseLookupOverrideSubElements(ele, beanName, bd.getMethodOverrides()); parseReplacedMethodSubElements(ele, beanName, bd.getMethodOverrides()); bd.setResourceDescription(getResource().getDescription()); if (ele.hasAttribute(ABSTRACT_ATTRIBUTE)) { bd.setAbstract(TRUE_VALUE.equals(ele.getAttribute(ABSTRACT_ATTRIBUTE))); } if (ele.hasAttribute(SINGLETON_ATTRIBUTE)) { bd.setSingleton(TRUE_VALUE.equals(ele.getAttribute(SINGLETON_ATTRIBUTE))); } String lazyInit = ele.getAttribute(LAZY_INIT_ATTRIBUTE); if (DEFAULT_VALUE.equals(lazyInit) && bd.isSingleton()) { // Just apply default to singletons, as lazy-init has no meaning for prototypes. lazyInit = getDefaultLazyInit(); } bd.setLazyInit(TRUE_VALUE.equals(lazyInit)); return bd; } catch (BeanDefinitionStoreException ex) { throw ex; } catch (ClassNotFoundException ex) { throw new BeanDefinitionStoreException(getResource(), beanName, "Bean class [" + className + "] not found", ex); } catch (NoClassDefFoundError err) { throw new BeanDefinitionStoreException(getResource(), beanName, "Class that bean class [" + className + "] depends on not found", err); } catch (Throwable ex) { throw new BeanDefinitionStoreException(getResource(), beanName, "Unexpected failure during bean definition parsing", ex); } }
From source file:org.springframework.beans.factory.xml.DefaultXmlBeanDefinitionParser.java
/** * Get the value of a property element. May be a list etc. * Also used for constructor arguments, "propertyName" being null in this case. *///w w w . j a v a2 s. co m protected Object parsePropertyValue(Element ele, String beanName, String propertyName) throws BeanDefinitionStoreException { String elementName = (propertyName != null) ? "<property> element for property '" + propertyName + "'" : "<constructor-arg> element"; // Should only have one child element: ref, value, list, etc. NodeList nl = ele.getChildNodes(); Element subElement = null; for (int i = 0; i < nl.getLength(); i++) { if (nl.item(i) instanceof Element) { Element candidateEle = (Element) nl.item(i); if (DESCRIPTION_ELEMENT.equals(candidateEle.getTagName())) { // Keep going: we don't use this value for now. } else { // Child element is what we're looking for. if (subElement != null) { throw new BeanDefinitionStoreException(getResource(), beanName, elementName + " must not contain more than one sub-element"); } subElement = candidateEle; } } } boolean hasRefAttribute = ele.hasAttribute(REF_ATTRIBUTE); boolean hasValueAttribute = ele.hasAttribute(VALUE_ATTRIBUTE); if ((hasRefAttribute && hasValueAttribute) || ((hasRefAttribute || hasValueAttribute)) && subElement != null) { throw new BeanDefinitionStoreException(getResource(), beanName, elementName + " is only allowed to contain either 'ref' attribute OR 'value' attribute OR sub-element"); } if (hasRefAttribute) { String refName = ele.getAttribute(REF_ATTRIBUTE); if (!StringUtils.hasText(refName)) { throw new BeanDefinitionStoreException(getResource(), beanName, elementName + " contains empty 'ref' attribute"); } return new RuntimeBeanReference(refName); } else if (hasValueAttribute) { return ele.getAttribute(VALUE_ATTRIBUTE); } if (subElement == null) { // Neither child element nor "ref" or "value" attribute found. throw new BeanDefinitionStoreException(getResource(), beanName, elementName + " must specify a ref or value"); } return parsePropertySubElement(subElement, beanName); }
From source file:org.springframework.beans.factory.xml.DefaultXmlBeanDefinitionParser.java
/** * Parse a value, ref or collection sub-element of a property or * constructor-arg element.//w ww.j a va2 s . c om * @param ele subelement of property element; we don't know which yet */ protected Object parsePropertySubElement(Element ele, String beanName) throws BeanDefinitionStoreException { if (ele.getTagName().equals(BEAN_ELEMENT)) { try { return parseBeanDefinitionElement(ele, true); } catch (BeanDefinitionStoreException ex) { throw new BeanDefinitionStoreException(getResource(), beanName, "Could not parse inner bean definition", ex); } } else if (ele.getTagName().equals(REF_ELEMENT)) { // A generic reference to any name of any bean. String refName = ele.getAttribute(BEAN_REF_ATTRIBUTE); boolean toParent = false; if (!StringUtils.hasLength(refName)) { // A reference to the id of another bean in the same XML file. refName = ele.getAttribute(LOCAL_REF_ATTRIBUTE); if (!StringUtils.hasLength(refName)) { // A reference to the id of another bean in a parent context. refName = ele.getAttribute(PARENT_REF_ATTRIBUTE); toParent = true; if (!StringUtils.hasLength(refName)) { throw new BeanDefinitionStoreException(getResource(), beanName, "'bean', 'local' or 'parent' is required for <ref> element"); } } } if (!StringUtils.hasText(refName)) { throw new BeanDefinitionStoreException(getResource(), beanName, "<ref> element contains empty target attribute"); } return new RuntimeBeanReference(refName, toParent); } else if (ele.getTagName().equals(IDREF_ELEMENT)) { // A generic reference to any name of any bean. String beanRef = ele.getAttribute(BEAN_REF_ATTRIBUTE); if (!StringUtils.hasLength(beanRef)) { // A reference to the id of another bean in the same XML file. beanRef = ele.getAttribute(LOCAL_REF_ATTRIBUTE); if (!StringUtils.hasLength(beanRef)) { throw new BeanDefinitionStoreException(getResource(), beanName, "Either 'bean' or 'local' is required for <idref> element"); } } return beanRef; } else if (ele.getTagName().equals(VALUE_ELEMENT)) { // It's a literal value. String value = DomUtils.getTextValue(ele); if (ele.hasAttribute(TYPE_ATTRIBUTE)) { String typeClassName = ele.getAttribute(TYPE_ATTRIBUTE); try { Class typeClass = ClassUtils.forName(typeClassName, this.beanDefinitionReader.getBeanClassLoader()); return new TypedStringValue(value, typeClass); } catch (ClassNotFoundException ex) { throw new BeanDefinitionStoreException(getResource(), beanName, "Type class [" + typeClassName + "] not found for <value> element", ex); } } return value; } else if (ele.getTagName().equals(NULL_ELEMENT)) { // It's a distinguished null value. return null; } else if (ele.getTagName().equals(LIST_ELEMENT)) { return parseListElement(ele, beanName); } else if (ele.getTagName().equals(SET_ELEMENT)) { return parseSetElement(ele, beanName); } else if (ele.getTagName().equals(MAP_ELEMENT)) { return parseMapElement(ele, beanName); } else if (ele.getTagName().equals(PROPS_ELEMENT)) { return parsePropsElement(ele, beanName); } throw new BeanDefinitionStoreException(getResource(), beanName, "Unknown property sub-element: <" + ele.getTagName() + ">"); }
From source file:org.springframework.beans.factory.xml.DefaultXmlBeanDefinitionParser.java
/** * Parse a map element.// www .ja v a 2 s. c o m */ protected Map parseMapElement(Element mapEle, String beanName) throws BeanDefinitionStoreException { List entryEles = DomUtils.getChildElementsByTagName(mapEle, ENTRY_ELEMENT); ManagedMap map = new ManagedMap(entryEles.size()); for (Iterator it = entryEles.iterator(); it.hasNext();) { Element entryEle = (Element) it.next(); // Should only have one value child element: ref, value, list, etc. // Optionally, there might be a key child element. NodeList entrySubNodes = entryEle.getChildNodes(); Element keyEle = null; Element valueEle = null; for (int j = 0; j < entrySubNodes.getLength(); j++) { if (entrySubNodes.item(j) instanceof Element) { Element candidateEle = (Element) entrySubNodes.item(j); if (candidateEle.getTagName().equals(KEY_ELEMENT)) { if (keyEle != null) { throw new BeanDefinitionStoreException(getResource(), beanName, "<entry> element is only allowed to contain one <key> sub-element"); } keyEle = candidateEle; } else { // Child element is what we're looking for. if (valueEle != null) { throw new BeanDefinitionStoreException(getResource(), beanName, "<entry> element must not contain more than one value sub-element"); } valueEle = candidateEle; } } } // Extract key from attribute or sub-element. Object key = null; boolean hasKeyAttribute = entryEle.hasAttribute(KEY_ATTRIBUTE); boolean hasKeyRefAttribute = entryEle.hasAttribute(KEY_REF_ATTRIBUTE); if ((hasKeyAttribute && hasKeyRefAttribute) || ((hasKeyAttribute || hasKeyRefAttribute)) && keyEle != null) { throw new BeanDefinitionStoreException(getResource(), beanName, "<entry> element is only allowed to contain either " + "a 'key' attribute OR a 'key-ref' attribute OR a <key> sub-element"); } if (hasKeyAttribute) { key = entryEle.getAttribute(KEY_ATTRIBUTE); } else if (hasKeyRefAttribute) { String refName = entryEle.getAttribute(KEY_REF_ATTRIBUTE); if (!StringUtils.hasText(refName)) { throw new BeanDefinitionStoreException(getResource(), beanName, "<entry> element contains empty 'key-ref' attribute"); } key = new RuntimeBeanReference(refName); } else if (keyEle != null) { key = parseKeyElement(keyEle, beanName); } else { throw new BeanDefinitionStoreException(getResource(), beanName, "<entry> element must specify a key"); } // Extract value from attribute or sub-element. Object value = null; boolean hasValueAttribute = entryEle.hasAttribute(VALUE_ATTRIBUTE); boolean hasValueRefAttribute = entryEle.hasAttribute(VALUE_REF_ATTRIBUTE); if ((hasValueAttribute && hasValueRefAttribute) || ((hasValueAttribute || hasValueRefAttribute)) && valueEle != null) { throw new BeanDefinitionStoreException(getResource(), beanName, "<entry> element is only allowed to contain either " + "'value' attribute OR 'value-ref' attribute OR <value> sub-element"); } if (hasValueAttribute) { value = entryEle.getAttribute(VALUE_ATTRIBUTE); } else if (hasValueRefAttribute) { String refName = entryEle.getAttribute(VALUE_REF_ATTRIBUTE); if (!StringUtils.hasText(refName)) { throw new BeanDefinitionStoreException(getResource(), beanName, "<entry> element contains empty 'value-ref' attribute"); } value = new RuntimeBeanReference(refName); } else if (valueEle != null) { value = parsePropertySubElement(valueEle, beanName); } else { throw new BeanDefinitionStoreException(getResource(), beanName, "<entry> element must specify a value"); } // Add final key and value to the Map. map.put(key, value); } return map; }
From source file:org.springframework.data.gemfire.config.AbstractRegionParser.java
protected void validateDataPolicyShortcutAttributesMutualExclusion(final Element element, final ParserContext parserContext) { if (element.hasAttribute("data-policy") && element.hasAttribute("shortcut")) { parserContext.getReaderContext() .error(String.format( "Only one of [data-policy, shortcut] may be specified with element '%1$s'.", element.getTagName()), element); }/* w w w.j a v a 2s .c om*/ }
From source file:org.springframework.data.gemfire.config.GemfireDataSourceParser.java
@Override protected AbstractBeanDefinition parseInternal(Element element, ParserContext parserContext) { BeanDefinition clientCacheDefinition = new ClientCacheParser().parse(element, parserContext); parserContext.getRegistry().registerBeanDefinition(GemfireConstants.DEFAULT_GEMFIRE_CACHE_NAME, clientCacheDefinition);//from w ww . j av a2 s.co m BeanDefinition poolDefinition = new PoolParser().parse(element, parserContext); MutablePropertyValues poolProperties = poolDefinition.getPropertyValues(); if (!element.hasAttribute(SUBSCRIPTION_ENABLED_ATTRIBUTE_NAME)) { poolProperties.add(SUBSCRIPTION_ENABLED_PROPERTY_NAME, true); } parserContext.getRegistry().registerBeanDefinition(GemfireConstants.DEFAULT_GEMFIRE_POOL_NAME, poolDefinition); if (log.isDebugEnabled()) { log.debug(String.format("Registered GemFire ClientCache bean [%1$s] of type [%2$s]%n", GemfireConstants.DEFAULT_GEMFIRE_CACHE_NAME, clientCacheDefinition.getBeanClassName())); } BeanDefinitionBuilder builder = BeanDefinitionBuilder .genericBeanDefinition(GemfireDataSourcePostProcessor.class); builder.addConstructorArgReference(GemfireConstants.DEFAULT_GEMFIRE_CACHE_NAME); BeanDefinitionReaderUtils.registerWithGeneratedName(builder.getBeanDefinition(), parserContext.getRegistry()); return null; }
From source file:org.springframework.data.gemfire.config.xml.AbstractRegionParser.java
protected void validateDataPolicyShortcutAttributesMutualExclusion(Element element, ParserContext parserContext) {/*from www . j av a2 s. co m*/ if (element.hasAttribute("data-policy") && element.hasAttribute("shortcut")) { parserContext.getReaderContext() .error(String.format( "Only one of [data-policy, shortcut] may be specified with element '%1$s'.", element.getTagName()), element); } }
From source file:org.springframework.data.gemfire.config.xml.GemfireDataSourceParser.java
/** * {@inheritDoc}//from ww w . j a va 2s .c o m */ @Override protected AbstractBeanDefinition parseInternal(Element element, ParserContext parserContext) { BeanDefinition clientCacheDefinition = new ClientCacheParser().parse(element, parserContext); parserContext.getRegistry().registerBeanDefinition(GemfireConstants.DEFAULT_GEMFIRE_CACHE_NAME, clientCacheDefinition); BeanDefinition poolDefinition = new PoolParser().parse(element, parserContext); MutablePropertyValues poolProperties = poolDefinition.getPropertyValues(); if (!element.hasAttribute(SUBSCRIPTION_ENABLED_ATTRIBUTE_NAME)) { poolProperties.add(SUBSCRIPTION_ENABLED_PROPERTY_NAME, true); } parserContext.getRegistry().registerBeanDefinition(GemfireConstants.DEFAULT_GEMFIRE_POOL_NAME, poolDefinition); if (log.isDebugEnabled()) { log.debug(String.format("Registered GemFire ClientCache bean [%1$s] of type [%2$s]%n", GemfireConstants.DEFAULT_GEMFIRE_CACHE_NAME, clientCacheDefinition.getBeanClassName())); } BeanDefinitionBuilder builder = BeanDefinitionBuilder .genericBeanDefinition(GemfireDataSourcePostProcessor.class); builder.addConstructorArgReference(GemfireConstants.DEFAULT_GEMFIRE_CACHE_NAME); BeanDefinitionReaderUtils.registerWithGeneratedName(builder.getBeanDefinition(), parserContext.getRegistry()); return null; }
From source file:org.springframework.data.jdbc.config.oracle.PoolingDataSourceBeanDefinitionParser.java
protected AbstractBeanDefinition parseInternal(Element element, ParserContext parserContext) { //ToDo look for username-connection-proxy boolean useWrapper = false; String connectionContextProviderRef = null; Element usernameConnectionProxyElement = DomUtils.getChildElementByTagName(element, USERNAME_CONNECTION_PROXY);// w ww . j a va 2 s. co m if (usernameConnectionProxyElement != null) { if (logger.isDebugEnabled()) { logger.debug("Using username-connection-proxy"); } if (usernameConnectionProxyElement.hasAttribute(CONNECTION_CONTEXT_PROVIDER)) { if (logger.isDebugEnabled()) { logger.debug(CONNECTION_CONTEXT_PROVIDER + ": " + usernameConnectionProxyElement.getAttribute(CONNECTION_CONTEXT_PROVIDER)); } connectionContextProviderRef = usernameConnectionProxyElement .getAttribute(CONNECTION_CONTEXT_PROVIDER); } useWrapper = true; //builder.addPropertyValue("connectionProperties", connProperties); } BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(); builder.getRawBeanDefinition().setBeanClassName(getBeanClassName(element)); builder.getRawBeanDefinition().setSource(parserContext.extractSource(element)); builder.getRawBeanDefinition().setDestroyMethodName("close"); if (parserContext.isNested()) { // Inner bean definition must receive same scope as containing bean. builder.setScope(parserContext.getContainingBeanDefinition().getScope()); } if (parserContext.isDefaultLazyInit()) { // Default-lazy-init applies to custom bean definitions as well. builder.setLazyInit(true); } doParse(element, parserContext, builder); if (useWrapper) { BeanDefinitionBuilder wrapper = BeanDefinitionBuilder.genericBeanDefinition(); wrapper.getRawBeanDefinition() .setBeanClassName("org.springframework.data.jdbc.support.oracle.ProxyDataSource"); wrapper.addConstructorArgValue(builder.getBeanDefinition()); if (connectionContextProviderRef == null) { wrapper.addConstructorArgValue(null); } else { wrapper.addConstructorArgReference(connectionContextProviderRef); } return wrapper.getBeanDefinition(); } else { return builder.getBeanDefinition(); } }
From source file:org.springframework.data.jdbc.config.oracle.RacFailoverInterceptorBeanDefinitionParser.java
protected void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) { //attributes//from w ww . jav a2s . co m List<Integer> recoverableErrorCodesList = new ArrayList<Integer>(); String recoverableErrorCodes = element.getAttribute(RECOVERABLE_ERROR_CODES_ATTRIBUTE); if (StringUtils.hasText(recoverableErrorCodes)) { String[] parsedRecoverableErrorCodes = StringUtils.tokenizeToStringArray(recoverableErrorCodes, ",", true, true); for (int i = 0; i < parsedRecoverableErrorCodes.length; i++) { try { recoverableErrorCodesList.add(new Integer(parsedRecoverableErrorCodes[i])); } catch (NumberFormatException e) { parserContext.getReaderContext().error("Error parsing recoverable error code list: \"" + recoverableErrorCodes + "\"; " + e.getClass().getName() + " - " + e.getMessage(), element); } } if (logger.isDebugEnabled()) { logger.debug( "Using provided " + RECOVERABLE_ERROR_CODES_ATTRIBUTE + ": " + recoverableErrorCodesList); } } String maxNumberOfRetries = element.getAttribute(MAX_NUMBER_OF_RETRIES_ATTRIBUTE); if (logger.isDebugEnabled()) { if (StringUtils.hasText(maxNumberOfRetries)) { logger.debug("Using provided " + MAX_NUMBER_OF_RETRIES_ATTRIBUTE + ": " + maxNumberOfRetries); } } String backOffPolicyRef = null; if (element.hasAttribute(BACK_OFF_POLICY_ATTRIBUTE)) { backOffPolicyRef = element.getAttribute(BACK_OFF_POLICY_ATTRIBUTE); if (logger.isDebugEnabled()) { logger.debug("Using provided " + BACK_OFF_POLICY_ATTRIBUTE + ": " + backOffPolicyRef); } } BeanDefinitionBuilder retryTemplateBuilder = BeanDefinitionBuilder.genericBeanDefinition(); retryTemplateBuilder.getRawBeanDefinition().setBeanClassName(RETRY_TEMPLATE_CLASS); BeanDefinitionBuilder racFailoverRetryPolicyBuilder = BeanDefinitionBuilder.genericBeanDefinition(); racFailoverRetryPolicyBuilder.getRawBeanDefinition().setBeanClassName(RAC_FAILOVER_RETRY_POLICY_CLASS); if (recoverableErrorCodesList.size() > 0) { racFailoverRetryPolicyBuilder.addPropertyValue(RECOVERABLE_ERROR_CODES_PROPERTY, recoverableErrorCodesList); } if (StringUtils.hasText(maxNumberOfRetries)) { racFailoverRetryPolicyBuilder.addPropertyValue(MAX_NUMBER_OF_RETRIES_PROPERTY, maxNumberOfRetries); } retryTemplateBuilder.addPropertyValue(RETRY_POLICY_PROPERTY, racFailoverRetryPolicyBuilder.getRawBeanDefinition()); if (StringUtils.hasText(backOffPolicyRef)) { retryTemplateBuilder.addPropertyReference(BACK_OFF_POLICY_PROPERTY, backOffPolicyRef); } builder.addPropertyValue(RETRY_OPERATIONS_PROPERTY, retryTemplateBuilder.getRawBeanDefinition()); if (logger.isDebugEnabled()) { logger.debug("Using retry policy: " + racFailoverRetryPolicyBuilder.getRawBeanDefinition().getBeanClassName()); } builder.setRole(BeanDefinition.ROLE_SUPPORT); }