struts-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Martin Gainty (JIRA)" <>
Subject [jira] Created: (WW-3147) com.opensymphony.xwork2.spring.SpringObjectFactory does'nt create bean when alwaysRespectAutowireStrategy=false
Date Tue, 02 Jun 2009 18:19:42 GMT
com.opensymphony.xwork2.spring.SpringObjectFactory does'nt create bean when alwaysRespectAutowireStrategy=false

                 Key: WW-3147
             Project: Struts 2
          Issue Type: Bug
          Components: Plugin - Spring
    Affects Versions: 2.1.6
         Environment: Struts-2.1.6
TC 6.0.14
J2SDK 6.0.14
            Reporter: Martin Gainty

//struts.objectFactory.spring.autoWire.alwaysRespect works fine when true 
//Whether the autowire strategy should always be used, or the framework should try to guess
the best strategy 

//code works perfect as long as alwaysRepect=true
//analyzing alternative alwaysRepect=false nosedives into else guesswork code which may returns

    /*** @param clazz
         * @param extraContext
         * @throws Exception*/
    public Object buildBean(Class clazz, Map<String, Object> extraContext) throws Exception
        Object bean;
        try {
//follow autowire strategy or use legacy approach which mixes injection strategies
            if (alwaysRespectAutowireStrategy) {
                // Leave the creation up to Spring
                bean = autoWiringFactory.createBean(clazz, autowireStrategy, false);
                return injectInternalBeans(bean);
            } else {
//wrong if you want type!="name"
//     autoWiringFactory = findAutoWiringBeanFactory(this.appContext); only in setContext
           bean = autoWiringFactory.autowire(clazz, AutowireCapableBeanFactory.AUTOWIRE_CONSTRUCTOR,

           bean = autoWiringFactory.applyBeanPostProcessorsBeforeInitialization(bean, bean.getClass().getName());
//only defined in org.springframework.beans.factory.config.AutowireCapableBeanFactory
// Object applyBeanPostProcessorsBeforeInitialization(Object existingBean, String beanName)

// We don't need to call the init-method since one won't be registered.
                bean = autoWiringFactory.applyBeanPostProcessorsAfterInitialization(bean,
//only defined in org.springframework.beans.factory.config.AutowireCapableBeanFactory
//    Object applyBeanPostProcessorsAfterInitialization(Object existingBean, String beanName)

                return autoWireBean(bean, autoWiringFactory);
//returns NULL
        } catch (UnsatisfiedDependencyException e) {
            if (LOG.isErrorEnabled())
                LOG.error("Error building bean", e);
            // Fall back
            return autoWireBean(super.buildBean(clazz, extraContext), autoWiringFactory);

    public Object autoWireBean(Object bean, AutowireCapableBeanFactory autoWiringFactory)
        if (autoWiringFactory != null) {
                    autowireStrategy, false);

        return bean;

    /*** Build a generic Java object of the given type.
     * @param clazz the type of Object to build
     * @param extraContext a Map of extra context which uses the same keys as the {@link com.opensymphony.xwork2.ActionContext}
    public Object buildBean(Class clazz, Map extraContext) throws Exception {
        return clazz.newInstance();

   private void injectApplicationContext(Object bean) {
        if (bean instanceof ApplicationContextAware) {
            ((ApplicationContextAware) bean).setApplicationContext(appContext);
    /*** @param obj */
    protected Object injectInternalBeans(Object obj) {
        if (obj != null && container != null) {
        return obj;

//a very good likelihood that the returned bean will be null in the else condition as it is
never created

This message is automatically generated by JIRA.
You can reply to this email to add a comment to the issue online.

View raw message