Example usage for org.springframework.beans.factory.config BeanDefinition getResourceDescription

List of usage examples for org.springframework.beans.factory.config BeanDefinition getResourceDescription

Introduction

In this page you can find the example usage for org.springframework.beans.factory.config BeanDefinition getResourceDescription.

Prototype

@Nullable
String getResourceDescription();

Source Link

Document

Return a description of the resource that this bean definition came from (for the purpose of showing context in case of errors).

Usage

From source file:com.sourceallies.beanoh.spring.wrapper.BeanohApplicationContext.java

/**
 * This will fail if there are duplicate beans in the Spring context. Beans
 * that are configured in the bootstrap context will not be considered
 * duplicate beans./*from  ww  w  .j  av  a2s  .c  o  m*/
 */
public void assertUniqueBeans(Set<String> ignoredDuplicateBeanNames) {
    for (BeanohBeanFactoryMethodInterceptor callback : callbacks) {
        Map<String, List<BeanDefinition>> beanDefinitionMap = callback.getBeanDefinitionMap();
        for (String key : beanDefinitionMap.keySet()) {
            if (!ignoredDuplicateBeanNames.contains(key)) {
                List<BeanDefinition> definitions = beanDefinitionMap.get(key);
                List<String> resourceDescriptions = new ArrayList<String>();
                for (BeanDefinition definition : definitions) {
                    String resourceDescription = definition.getResourceDescription();
                    if (resourceDescription == null) {
                        resourceDescriptions.add(definition.getBeanClassName());
                    } else if (!resourceDescription.endsWith("-BeanohContext.xml]")) {
                        if (!resourceDescriptions.contains(resourceDescription)) {
                            resourceDescriptions.add(resourceDescription);
                        }
                    }
                }
                if (resourceDescriptions.size() > 1) {
                    throw new DuplicateBeanDefinitionException("Bean '" + key + "' was defined "
                            + resourceDescriptions.size() + " times.\n"
                            + "Either remove duplicate bean definitions or ignore them with the 'ignoredDuplicateBeanNames' method.\n"
                            + "Configuration locations:" + messageUtil.list(resourceDescriptions));
                }
            }
        }
    }
}

From source file:com.arondor.common.reflection.parser.spring.XMLBeanDefinitionParser.java

private ObjectConfiguration parseBeanDefinition(BeanDefinition beanDefinition) {
    LOGGER.debug("Resource description : " + beanDefinition.getResourceDescription());
    ObjectConfiguration objectConfiguration = objectConfigurationFactory.createObjectConfiguration();
    objectConfiguration.setClassName(hashHelper.hashClassName(beanDefinition.getBeanClassName()));
    objectConfiguration.setSingleton(beanDefinition.isSingleton());

    Map<String, ElementConfiguration> fields = new LinkedHashMap<String, ElementConfiguration>();
    objectConfiguration.setFields(fields);

    for (PropertyValue ppt : beanDefinition.getPropertyValues().getPropertyValueList()) {
        try {//  w w  w . ja v  a2s. co  m
            ElementConfiguration fieldConfiguration = beanPropertyParser.parseProperty(ppt.getValue());
            fields.put(hashHelper.hashFieldName(beanDefinition.getBeanClassName(), ppt.getName()),
                    fieldConfiguration);
        } catch (Exception e) {
            LOGGER.error("The value " + ppt.getValue() + " of property " + ppt + " cannot be parsed", e);
        }
    }

    List<ElementConfiguration> constructorArguments = new ArrayList<ElementConfiguration>();
    objectConfiguration.setConstructorArguments(constructorArguments);
    for (ValueHolder va : beanDefinition.getConstructorArgumentValues().getGenericArgumentValues()) {
        ElementConfiguration constructorAgrument = beanPropertyParser.parseProperty(va.getValue());
        constructorArguments.add(constructorAgrument);
    }
    return objectConfiguration;
}

From source file:org.apache.servicemix.document.factory.DocumentFactory.java

public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactoryToProcess) throws BeansException {
    BeanDefinitionVisitor visitor = new BundleExtUrlBeanDefinitionVisitor();
    String[] beanNames = beanFactoryToProcess.getBeanDefinitionNames();
    for (int i = 0; i < beanNames.length; i++) {
        // Check that we're not parsing our own bean definition,
        // to avoid failing on unresolvable placeholders in properties file locations.
        if (!(beanNames[i].equals(this.beanName) && beanFactoryToProcess.equals(this.beanFactory))) {
            BeanDefinition bd = beanFactoryToProcess.getBeanDefinition(beanNames[i]);
            try {
                visitor.visitBeanDefinition(bd);
            } catch (BeanDefinitionStoreException ex) {
                throw new BeanDefinitionStoreException(bd.getResourceDescription(), beanNames[i],
                        ex.getMessage());
            }/*www.  j av  a2  s  .  c  o  m*/
        }
    }
}

From source file:org.ff4j.spring.placeholder.FF4jPropertiesPlaceHolderConfigurer.java

/** {@inheritDoc} */
public final void postProcessBeanFactory(final ConfigurableListableBeanFactory beanFactory) {
    try {/*  w w  w. j  av a 2  s . c o m*/
        // 1) Retrieve properties from ff4j
        BeanDefinitionVisitor visitor = new PropertiesPlaceHolderBeanDefinitionVisitor(ff4j);

        // 2) Inject property & features value
        String[] beanNames = beanFactory.getBeanDefinitionNames();
        for (int i = 0; i < beanNames.length; i++) {
            if (beanNames[i].equals(beanName)) {
                continue;
            }
            BeanDefinition bd = beanFactory.getBeanDefinition(beanNames[i]);
            try {
                visitor.visitBeanDefinition(bd);
            } catch (BeanDefinitionStoreException ex) {
                throw new BeanDefinitionStoreException(bd.getResourceDescription(), beanNames[i],
                        ex.getMessage());
            }
        }
    } catch (Exception e) {
        LOGGER.error("Cannot handle placeholding through ff4j : ", e);
        throw new BeanInitializationException("An error occured during substition", e);
    }
}

From source file:com.photon.phresco.configuration.XmlPropertyPlaceholderConfigurer.java

@Override
protected void processProperties(ConfigurableListableBeanFactory beanFactoryToProcess, Properties props)
        throws BeansException {

    org.springframework.util.StringValueResolver valueResolver = new PlaceholderResolvingStringValueResolver(
            props);/*from w  w  w . j  a v  a  2 s.  com*/
    org.springframework.beans.factory.config.BeanDefinitionVisitor visitor = new org.springframework.beans.factory.config.BeanDefinitionVisitor(
            valueResolver);

    String[] beanNames = beanFactoryToProcess.getBeanDefinitionNames();
    for (int i = 0; i < beanNames.length; i++) {
        // Check that we're not parsing our own bean definition,
        // to avoid failing on unresolvable placeholders in properties file locations.
        if (!(beanNames[i].equals(this.beanName) && beanFactoryToProcess.equals(this.beanFactory))) {
            BeanDefinition bd = beanFactoryToProcess.getBeanDefinition(beanNames[i]);
            try {
                visitor.visitBeanDefinition(bd);
            } catch (BeanDefinitionStoreException ex) {
                throw new BeanDefinitionStoreException(bd.getResourceDescription(), beanNames[i],
                        ex.getMessage());
            }
        }
    }

    // New in Spring 2.5: resolve placeholders in alias target names and aliases as well.
    beanFactoryToProcess.resolveAliases(valueResolver);
}

From source file:com.devbury.desktoplib.spring.LogFilterPropertyPlaceholderConfigurer.java

public void postProcessBeanFactory(ConfigurableListableBeanFactory bf) throws BeansException {
    BeanDefinitionVisitor visitor = newVisitor();
    String[] beanNames = bf.getBeanDefinitionNames();
    for (int i = 0; i < beanNames.length; i++) {
        // Check that we're not parsing our own bean definition,
        // to avoid failing on unresolvable placeholders in properties file
        // locations.
        if (!(beanNames[i].equals(beanName))) {
            BeanDefinition bd = bf.getBeanDefinition(beanNames[i]);
            try {
                visitor.visitBeanDefinition(bd);
            } catch (BeanDefinitionStoreException ex) {
                throw new BeanDefinitionStoreException(bd.getResourceDescription(), beanNames[i],
                        ex.getMessage());
            }/*from w  w w.j a  va 2 s.  c o m*/
        }
    }
}

From source file:de.acosix.alfresco.mtsupport.repo.subsystems.TenantAwareSubsystemPlaceholderConfigurer.java

/**
 * {@inheritDoc}/*w w w .  j a va 2s.  c  om*/
 */
@Override
protected void doProcessProperties(final ConfigurableListableBeanFactory beanFactoryToProcess,
        final StringValueResolver valueResolver) {
    final BeanDefinitionVisitor visitor = new BeanDefinitionVisitor(valueResolver) {

        /**
         * {@inheritDoc}
         */
        @Override
        protected Object resolveValue(final Object value) {
            Object result = value;

            // TODO Report bug with Spring
            // TypedStringValue may be reused as result of cloneBeanDefinition and thus should not be mutated

            if (value instanceof TypedStringValue) {
                final TypedStringValue typedStringValue = (TypedStringValue) value;
                final String stringValue = typedStringValue.getValue();
                if (stringValue != null) {
                    final String visitedString = this.resolveStringValue(stringValue);
                    if (!stringValue.equals(visitedString)) {
                        result = typedStringValue.hasTargetType()
                                ? new TypedStringValue(visitedString, typedStringValue.getTargetType())
                                : new TypedStringValue(visitedString);
                    }
                }
            } else {
                result = super.resolveValue(value);
            }

            return result;
        }
    };

    final String[] beanNames = beanFactoryToProcess.getBeanDefinitionNames();
    for (final String curName : beanNames) {
        // Check that we're not parsing our own bean definition,
        // to avoid failing on unresolvable placeholders in properties file locations.
        if (!(curName.equals(this.beanName) && beanFactoryToProcess.equals(this.beanFactory))) {
            final String tenantDomain;
            if (curName.contains(TenantBeanUtils.TENANT_BEAN_NAME_PATTERN)) {
                tenantDomain = curName.substring(curName.indexOf(TenantBeanUtils.TENANT_BEAN_NAME_PATTERN)
                        + TenantBeanUtils.TENANT_BEAN_NAME_PATTERN.length());
                LOGGER.debug("[{}] Processing bean {} for tenant domain {}", this.beanName, curName,
                        tenantDomain);
            } else {
                LOGGER.debug("[{}] Processing bean {} without tenant domain", this.beanName, curName);
                tenantDomain = null;
            }

            final BeanDefinition bd = beanFactoryToProcess.getBeanDefinition(curName);
            TENANT_CONTEXT.set(tenantDomain);
            try {
                visitor.visitBeanDefinition(bd);
            } catch (final Exception ex) {
                throw new BeanDefinitionStoreException(bd.getResourceDescription(), curName, ex.getMessage());
            } finally {
                TENANT_CONTEXT.remove();
            }
        }
    }
    LOGGER.debug("[{}] Completed processing all beans", this.beanName);

    // New in Spring 2.5: resolve placeholders in alias target names and aliases as well.
    beanFactoryToProcess.resolveAliases(valueResolver);

    // New in Spring 3.0: resolve placeholders in embedded values such as annotation attributes.
    beanFactoryToProcess.addEmbeddedValueResolver(valueResolver);

}

From source file:org.brekka.stillingar.spring.pc.ConfigurationPlaceholderConfigurer.java

/**
 * Copied in its entirety from the {@link PropertyPlaceholderConfigurer} method of the same name. The only changes
 * are to the valueResolver and BeanDefinitionVisitor instances.
 *//*from www  .j  a  v  a 2  s  .c o  m*/
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactoryToProcess) throws BeansException {

    String[] beanNames = beanFactoryToProcess.getBeanDefinitionNames();
    for (String curName : beanNames) {
        CustomStringValueResolver valueResolver = new CustomStringValueResolver(this.placeholderParser,
                this.configurationSource, this.beanFactory);

        // Check that we're not parsing our own bean definition,
        // to avoid failing on unresolvable placeholders in properties file
        // locations.
        if (!(curName.equals(this.beanName) && beanFactoryToProcess.equals(this.beanFactory))) {
            BeanDefinition beanDef = beanFactoryToProcess.getBeanDefinition(curName);
            try {
                BeanDefinitionVisitor visitor = new CustomBeanDefinitionVisitor(curName, beanDef.isSingleton(),
                        valueResolver);
                visitor.visitBeanDefinition(beanDef);
            } catch (Exception ex) {
                throw new BeanDefinitionStoreException(beanDef.getResourceDescription(), curName, ex);
            }
        }
    }

    StringValueResolver valueResolver = new CustomStringValueResolver(this.placeholderParser,
            this.configurationSource, this.beanFactory);

    // New in Spring 2.5: resolve placeholders in alias target names and
    // aliases as well.
    beanFactoryToProcess.resolveAliases(valueResolver);

    // New in Spring 3.0: resolve placeholders in embedded values such as
    // annotation attributes.
    beanFactoryToProcess.addEmbeddedValueResolver(valueResolver);
}

From source file:org.kuali.kfs.sys.context.DataDictionaryConfigurationTest.java

public void testAllParentBeansAreAbstract() throws Exception {
    Field f = dataDictionary.getClass().getDeclaredField("ddBeans");
    f.setAccessible(true);/* ww w  .j a  va 2  s .c om*/
    KualiDefaultListableBeanFactory ddBeans = (KualiDefaultListableBeanFactory) f.get(dataDictionary);
    List<String> failingBeanNames = new ArrayList<String>();
    for (String beanName : ddBeans.getBeanDefinitionNames()) {
        BeanDefinition beanDef = ddBeans.getMergedBeanDefinition(beanName);
        String beanClass = beanDef.getBeanClassName();
        // skip Rice classes
        if (beanClass != null && beanClass.startsWith("org.kuali.rice")) {
            continue;
        }
        if ((beanName.endsWith("-parentBean") || beanName.endsWith("-baseBean")) && !beanDef.isAbstract()) {
            failingBeanNames.add(beanName + " : " + beanDef.getResourceDescription() + "\n");
        }
    }
    assertEquals("The following parent beans are not defined as abstract:\n" + failingBeanNames, 0,
            failingBeanNames.size());
}

From source file:org.kuali.kfs.sys.context.DataDictionaryConfigurationTest.java

protected void somethingShouldHaveParentBeans(Class<?> baseClass, List<String> exclusions) throws Exception {
    Field f = dataDictionary.getClass().getDeclaredField("ddBeans");
    f.setAccessible(true);/*from  www  . j av  a  2  s  .  com*/
    KualiDefaultListableBeanFactory ddBeans = (KualiDefaultListableBeanFactory) f.get(dataDictionary);
    List<String> failingBeanNames = new ArrayList<String>();

    for (String beanName : ddBeans.getBeanDefinitionNames()) {
        if (doesBeanNameMatchList(beanName, exclusions)) {
            continue;
        }
        BeanDefinition beanDef = ddBeans.getMergedBeanDefinition(beanName);
        String beanClass = beanDef.getBeanClassName();
        if (beanClass == null) {
            System.err.println("ERROR: Bean " + beanName + " has a null class.");
        }
        if (!beanDef.isAbstract() && beanClass != null
                && baseClass.isAssignableFrom(Class.forName(beanClass))) {
            try {
                BeanDefinition parentBean = ddBeans.getBeanDefinition(beanName + "-parentBean");
            } catch (NoSuchBeanDefinitionException ex) {
                failingBeanNames.add(beanName + " : " + beanDef.getResourceDescription() + "\n");
            }
        }
    }
    assertEquals("The following " + baseClass.getSimpleName() + " beans do not have \"-parentBean\"s:\n"
            + failingBeanNames, 0, failingBeanNames.size());
}