Example usage for org.w3c.dom Element hasAttribute

List of usage examples for org.w3c.dom Element hasAttribute

Introduction

In this page you can find the example usage for org.w3c.dom Element hasAttribute.

Prototype

public boolean hasAttribute(String name);

Source Link

Document

Returns true when an attribute with a given name is specified on this element or has a default value, false otherwise.

Usage

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);

}