Example usage for org.springframework.util.xml DomUtils getChildElementsByTagName

List of usage examples for org.springframework.util.xml DomUtils getChildElementsByTagName

Introduction

In this page you can find the example usage for org.springframework.util.xml DomUtils getChildElementsByTagName.

Prototype

public static List<Element> getChildElementsByTagName(Element ele, String childEleName) 

Source Link

Document

Retrieves all child elements of the given DOM element that match the given element name.

Usage

From source file:org.springframework.beans.factory.xml.DefaultXmlBeanDefinitionParser.java

/**
 * Parse replaced-method sub-elements of the given bean element.
 *//*from   www . ja v  a 2s. c  o m*/
protected void parseReplacedMethodSubElements(Element beanEle, String beanName, MethodOverrides overrides)
        throws BeanDefinitionStoreException {

    NodeList nl = beanEle.getChildNodes();
    for (int i = 0; i < nl.getLength(); i++) {
        Node node = nl.item(i);
        if (node instanceof Element && REPLACED_METHOD_ELEMENT.equals(node.getNodeName())) {
            Element replacedMethodEle = (Element) node;
            String name = replacedMethodEle.getAttribute(NAME_ATTRIBUTE);
            String callback = replacedMethodEle.getAttribute(REPLACER_ATTRIBUTE);
            ReplaceOverride replaceOverride = new ReplaceOverride(name, callback);
            // Look for arg-type match elements.
            List argTypeEles = DomUtils.getChildElementsByTagName(replacedMethodEle, ARG_TYPE_ELEMENT);
            for (Iterator it = argTypeEles.iterator(); it.hasNext();) {
                Element argTypeEle = (Element) it.next();
                replaceOverride.addTypeIdentifier(argTypeEle.getAttribute(ARG_TYPE_MATCH_ATTRIBUTE));
            }
            overrides.addOverride(replaceOverride);
        }
    }
}

From source file:org.springframework.beans.factory.xml.DefaultXmlBeanDefinitionParser.java

/**
 * Parse a map element.//from  w  w  w  . jav a2 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.beans.factory.xml.DefaultXmlBeanDefinitionParser.java

/**
 * Parse a props element.//www. j a v a 2 s. com
 */
protected Properties parsePropsElement(Element propsEle, String beanName) throws BeanDefinitionStoreException {
    Properties props = new Properties();
    List propEles = DomUtils.getChildElementsByTagName(propsEle, PROP_ELEMENT);
    for (Iterator it = propEles.iterator(); it.hasNext();) {
        Element propEle = (Element) it.next();
        String key = propEle.getAttribute(KEY_ATTRIBUTE);
        // Trim the text value to avoid unwanted whitespace
        // caused by typical XML formatting.
        String value = DomUtils.getTextValue(propEle).trim();
        props.setProperty(key, value);
    }
    return props;
}

From source file:org.springframework.data.gemfire.config.AbstractRegionParser.java

protected void doParseCommonRegionConfiguration(Element element, ParserContext parserContext,
        BeanDefinitionBuilder regionBuilder, BeanDefinitionBuilder regionAttributesBuilder, boolean subRegion) {

    mergeTemplateRegionAttributes(element, parserContext, regionBuilder, regionAttributesBuilder);

    String resolvedCacheRef = ParsingUtils.resolveCacheReference(element.getAttribute("cache-ref"));

    if (!subRegion) {
        regionBuilder.addPropertyReference("cache", resolvedCacheRef);
        ParsingUtils.setPropertyValue(element, regionBuilder, "close");
        ParsingUtils.setPropertyValue(element, regionBuilder, "destroy");
    }//from w ww . j av  a2  s.  co  m

    ParsingUtils.setPropertyValue(element, regionBuilder, "name");
    ParsingUtils.setPropertyValue(element, regionBuilder, "ignore-if-exists", "lookupEnabled");
    ParsingUtils.setPropertyValue(element, regionBuilder, "data-policy");
    ParsingUtils.setPropertyValue(element, regionBuilder, "persistent");
    ParsingUtils.setPropertyValue(element, regionBuilder, "shortcut");

    if (StringUtils.hasText(element.getAttribute("disk-store-ref"))) {
        ParsingUtils.setPropertyValue(element, regionBuilder, "disk-store-ref", "diskStoreName");
        regionBuilder.addDependsOn(element.getAttribute("disk-store-ref"));
    }

    ParsingUtils.parseOptionalRegionAttributes(parserContext, element, regionAttributesBuilder);
    ParsingUtils.parseSubscription(parserContext, element, regionAttributesBuilder);
    ParsingUtils.parseStatistics(element, regionAttributesBuilder);
    ParsingUtils.parseMembershipAttributes(parserContext, element, regionAttributesBuilder);
    ParsingUtils.parseExpiration(parserContext, element, regionAttributesBuilder);
    ParsingUtils.parseEviction(parserContext, element, regionAttributesBuilder);
    ParsingUtils.parseCompressor(parserContext, element, regionAttributesBuilder);

    String enableGateway = element.getAttribute("enable-gateway");
    String hubId = element.getAttribute("hub-id");

    // Factory will enable gateway if it is not set and hub-id is set.
    if (StringUtils.hasText(enableGateway)) {
        if (GemfireUtils.isGemfireVersion7OrAbove()) {
            log.warn("'enable-gateway' has been deprecated since Gemfire 7.0");
        }
    }

    ParsingUtils.setPropertyValue(element, regionBuilder, "enable-gateway");

    if (StringUtils.hasText(hubId)) {
        if (GemfireUtils.isGemfireVersion7OrAbove()) {
            log.warn("'hub-id' has been deprecated since Gemfire 7.0");
        }
        if (!CollectionUtils.isEmpty(DomUtils.getChildElementsByTagName(element, "gateway-sender"))) {
            parserContext.getReaderContext().error("specifying both 'hub-id' and 'gateway-sender' is invalid",
                    element);
        }
    }

    ParsingUtils.setPropertyValue(element, regionBuilder, "hub-id");

    parseCollectionOfCustomSubElements(element, parserContext, regionBuilder, AsyncEventQueue.class.getName(),
            "async-event-queue", "asyncEventQueues");

    parseCollectionOfCustomSubElements(element, parserContext, regionBuilder, GatewaySender.class.getName(),
            "gateway-sender", "gatewaySenders");

    List<Element> subElements = DomUtils.getChildElements(element);

    for (Element subElement : subElements) {
        if (subElement.getLocalName().equals("cache-listener")) {
            regionBuilder.addPropertyValue("cacheListeners",
                    ParsingUtils.parseRefOrNestedBeanDeclaration(parserContext, subElement, regionBuilder));
        } else if (subElement.getLocalName().equals("cache-loader")) {
            regionBuilder.addPropertyValue("cacheLoader", ParsingUtils
                    .parseRefOrSingleNestedBeanDeclaration(parserContext, subElement, regionBuilder));
        } else if (subElement.getLocalName().equals("cache-writer")) {
            regionBuilder.addPropertyValue("cacheWriter", ParsingUtils
                    .parseRefOrSingleNestedBeanDeclaration(parserContext, subElement, regionBuilder));
        }
    }

    if (!subRegion) {
        parseSubRegions(element, parserContext, resolvedCacheRef);
    }
}

From source file:org.springframework.ide.eclipse.osgi.blueprint.internal.BlueprintParser.java

/**
 * Parse a props element.//from ww w  . java  2  s  .c o m
 */
public Properties parsePropsElement(Element propsEle) {
    ManagedProperties props = new OrderedManagedProperties();
    props.setSource(extractSource(propsEle));
    props.setMergeEnabled(parseMergeAttribute(propsEle));

    List<Element> propEles = DomUtils.getChildElementsByTagName(propsEle,
            BeanDefinitionParserDelegate.PROP_ELEMENT);
    for (Iterator<Element> it = propEles.iterator(); it.hasNext();) {
        Element propEle = it.next();
        String key = propEle.getAttribute(BeanDefinitionParserDelegate.KEY_ATTRIBUTE);
        // Trim the text value to avoid unwanted whitespace
        // caused by typical XML formatting.
        String value = DomUtils.getTextValue(propEle).trim();

        TypedStringValue keyHolder = new TypedStringValue(key);
        keyHolder.setSource(extractSource(propEle));
        TypedStringValue valueHolder = new TypedStringValue(value);
        valueHolder.setSource(extractSource(propEle));
        props.put(keyHolder, valueHolder);
    }

    return props;
}

From source file:org.springframework.integration.config.xml.ChainParser.java

private void validateChild(Element element, ParserContext parserContext) {

    final Object source = parserContext.extractSource(element);

    final String order = element.getAttribute(IntegrationNamespaceUtils.ORDER);

    if (StringUtils.hasText(order)) {
        parserContext.getReaderContext().error(IntegrationNamespaceUtils.createElementDescription(element)
                + " must not define " + "an 'order' attribute when used within a chain.", source);
    }//ww w  . j a va2s  .  c  o  m

    final List<Element> pollerChildElements = DomUtils.getChildElementsByTagName(element, "poller");

    if (!pollerChildElements.isEmpty()) {
        parserContext.getReaderContext().error(IntegrationNamespaceUtils.createElementDescription(element)
                + " must not define " + "a 'poller' sub-element when used within a chain.", source);
    }
}

From source file:org.springframework.integration.jdbc.config.StoredProcParserUtils.java

/**
 * @param storedProcComponent/*from  w w w  . j av  a2s  .co  m*/
 * @param parserContext
 */
public static ManagedList<BeanDefinition> getSqlParameterDefinitionBeanDefinitions(Element storedProcComponent,
        ParserContext parserContext) {
    List<Element> sqlParameterDefinitionChildElements = DomUtils.getChildElementsByTagName(storedProcComponent,
            "sql-parameter-definition");
    ManagedList<BeanDefinition> sqlParameterList = new ManagedList<BeanDefinition>();

    for (Element childElement : sqlParameterDefinitionChildElements) {

        String name = childElement.getAttribute("name");
        String sqlType = childElement.getAttribute("type");
        String direction = childElement.getAttribute("direction");
        String scale = childElement.getAttribute("scale");
        String typeName = childElement.getAttribute("type-name");
        String returnType = childElement.getAttribute("return-type");

        if (StringUtils.hasText(typeName) && StringUtils.hasText(scale)) {
            parserContext.getReaderContext().error("'type-name' and 'scale' attributes are mutually exclusive "
                    + "for 'sql-parameter-definition' element.", storedProcComponent);
        }

        if (StringUtils.hasText(returnType) && StringUtils.hasText(scale)) {
            parserContext.getReaderContext().error("'returnType' and 'scale' attributes are mutually exclusive "
                    + "for 'sql-parameter-definition' element.", storedProcComponent);
        }

        final BeanDefinitionBuilder parameterBuilder;

        if ("OUT".equalsIgnoreCase(direction)) {
            parameterBuilder = BeanDefinitionBuilder.genericBeanDefinition(SqlOutParameter.class);
        } else if ("INOUT".equalsIgnoreCase(direction)) {
            parameterBuilder = BeanDefinitionBuilder.genericBeanDefinition(SqlInOutParameter.class);
        } else {
            parameterBuilder = BeanDefinitionBuilder.genericBeanDefinition(SqlParameter.class);
            if (StringUtils.hasText(returnType)) {
                parserContext.getReaderContext().error("'return-type' attribute can't be provided "
                        + "for IN 'sql-parameter-definition' element.", storedProcComponent);
            }
        }

        if (StringUtils.hasText(name)) {
            parameterBuilder.addConstructorArgValue(name);
        } else {
            parserContext.getReaderContext().error(
                    "The 'name' attribute must be set for the Sql parameter element.", storedProcComponent);
        }

        if (StringUtils.hasText(sqlType)) {

            JdbcTypesEnum jdbcTypeEnum = JdbcTypesEnum.convertToJdbcTypesEnum(sqlType);

            if (jdbcTypeEnum != null) {
                parameterBuilder.addConstructorArgValue(jdbcTypeEnum.getCode());
            } else {
                parameterBuilder.addConstructorArgValue(sqlType);
            }

        } else {
            parameterBuilder.addConstructorArgValue(Types.VARCHAR);
        }

        if (StringUtils.hasText(typeName)) {
            parameterBuilder.addConstructorArgValue(typeName);
        } else if (StringUtils.hasText(scale)) {
            parameterBuilder.addConstructorArgValue(new TypedStringValue(scale, Integer.class));
        } else {
            parameterBuilder.addConstructorArgValue(null);
        }

        if (StringUtils.hasText(returnType)) {
            parameterBuilder.addConstructorArgReference(returnType);
        }

        sqlParameterList.add(parameterBuilder.getBeanDefinition());
    }
    return sqlParameterList;
}

From source file:org.springframework.integration.jdbc.config.StoredProcParserUtils.java

/**
 * @param storedProcComponent//  w ww  . j av a  2  s. c om
 * @param parserContext
 */
public static ManagedList<BeanDefinition> getProcedureParameterBeanDefinitions(Element storedProcComponent,
        ParserContext parserContext) {

    ManagedList<BeanDefinition> procedureParameterList = new ManagedList<BeanDefinition>();

    List<Element> parameterChildElements = DomUtils.getChildElementsByTagName(storedProcComponent, "parameter");

    for (Element childElement : parameterChildElements) {

        BeanDefinitionBuilder parameterBuilder = BeanDefinitionBuilder
                .genericBeanDefinition(ProcedureParameter.class);

        String name = childElement.getAttribute("name");
        String expression = childElement.getAttribute("expression");
        String value = childElement.getAttribute("value");
        String type = childElement.getAttribute("type");

        if (StringUtils.hasText(name)) {
            parameterBuilder.addPropertyValue("name", name);
        }

        if (StringUtils.hasText(expression)) {
            parameterBuilder.addPropertyValue("expression", expression);
        }

        if (StringUtils.hasText(value)) {

            if (!StringUtils.hasText(type)) {

                if (LOGGER.isInfoEnabled()) {
                    LOGGER.info(String.format("Type attribute not set for Store "
                            + "Procedure parameter '%s'. Defaulting to " + "'java.lang.String'.", value));
                }

                parameterBuilder.addPropertyValue("value", new TypedStringValue(value, String.class));

            } else {
                parameterBuilder.addPropertyValue("value", new TypedStringValue(value, type));
            }

        }

        procedureParameterList.add(parameterBuilder.getBeanDefinition());
    }

    return procedureParameterList;

}

From source file:org.springframework.integration.jdbc.config.StoredProcParserUtils.java

/**
 * @param storedProcComponent/* w  ww  .j  a v  a  2s . c o  m*/
 * @param parserContext
 */
public static ManagedMap<String, BeanDefinition> getReturningResultsetBeanDefinitions(
        Element storedProcComponent, ParserContext parserContext) {

    List<Element> returningResultsetChildElements = DomUtils.getChildElementsByTagName(storedProcComponent,
            "returning-resultset");

    ManagedMap<String, BeanDefinition> returningResultsetMap = new ManagedMap<String, BeanDefinition>();

    for (Element childElement : returningResultsetChildElements) {

        String name = childElement.getAttribute("name");
        String rowMapperAsString = childElement.getAttribute("row-mapper");

        BeanDefinitionBuilder rowMapperBuilder = BeanDefinitionBuilder.genericBeanDefinition(rowMapperAsString);

        returningResultsetMap.put(name, rowMapperBuilder.getBeanDefinition());
    }

    return returningResultsetMap;

}

From source file:org.springframework.integration.jpa.config.xml.JpaParserUtils.java

/**
 * Create a {@link ManagedList} of {@link BeanDefinition}s containing parsed
 * JPA Parameters.//www  . j ava  2 s  . c o  m
 *
 * @param jpaComponent Must not be null
 * @param parserContext Must not be null
 *
 * @return {@link ManagedList} of {@link BeanDefinition}s
 */
public static ManagedList<BeanDefinition> getJpaParameterBeanDefinitions(Element jpaComponent,
        ParserContext parserContext) {

    Assert.notNull(jpaComponent, "The provided element must not be null.");
    Assert.notNull(parserContext, "The provided parserContext must not be null.");

    final ManagedList<BeanDefinition> parameterList = new ManagedList<BeanDefinition>();

    final List<Element> parameterChildElements = DomUtils.getChildElementsByTagName(jpaComponent, "parameter");

    for (Element childElement : parameterChildElements) {

        final BeanDefinitionBuilder parameterBuilder = BeanDefinitionBuilder
                .genericBeanDefinition(JpaParameter.class);

        String name = childElement.getAttribute("name");
        String expression = childElement.getAttribute("expression");
        String value = childElement.getAttribute("value");
        String type = childElement.getAttribute("type");

        if (StringUtils.hasText(name)) {
            parameterBuilder.addPropertyValue("name", name);
        }

        if (StringUtils.hasText(expression)) {
            parameterBuilder.addPropertyValue("expression", expression);
        }

        if (StringUtils.hasText(value)) {

            if (!StringUtils.hasText(type)) {

                if (logger.isInfoEnabled()) {
                    logger.info(String.format(
                            "Type attribute not set for parameter '%s'. Defaulting to " + "'java.lang.String'.",
                            value));
                }

                parameterBuilder.addPropertyValue("value", new TypedStringValue(value, String.class));

            } else {
                parameterBuilder.addPropertyValue("value", new TypedStringValue(value, type));
            }

        }

        parameterList.add(parameterBuilder.getBeanDefinition());
    }

    return parameterList;

}