如何解决 Spring 中的 FatalBeanException?

How to resolve FatalBeanException in Spring?

我得到以下异常:

org.springframework.beans.FatalBeanException: Context hybris Global Context Factory couldn't be created correctly due to, Error creating bean with name 'modifyPopulatorList$child#0' defined in class path resource [config/cmsfacades-cmsitems-spring.xml]: Initialization of bean failed;

Error creating bean with name 'ordermanagementOrderConverter' defined in class path resource [ordermanagementfacades-spring.xml]: Cannot resolve reference to bean 'ordermanagementOrderPopulator' while setting bean property 'populators' with key [0];

Error creating bean with name 'ordermanagementOrderPopulator' defined in class path resource [ordermanagementfacades-spring.xml]: Cannot resolve reference to bean 'ordermanagementOrderEntryConverter' while setting bean property 'orderEntryConverter';

Error creating bean with name 'ordermanagementOrderEntryConverter' defined in class path resource [ordermanagementfacades-spring.xml]: Cannot resolve reference to bean 'ordermanagementOrderEntryPopulator' while setting bean property 'populators' with key [0];

Error creating bean with name 'warehousingOrderEntryPopulator' defined in class path resource [warehousingfacades-spring.xml]: Cannot resolve reference to bean 'ordermanagementProductConverter' while setting bean property 'productConverter';

Error creating bean with name 'ordermanagementProductConverter' defined in class path resource [ordermanagementfacades-spring.xml]: Cannot resolve reference to bean 'ordermanagementProductPopulator' while setting bean property 'populators' with key [0];

Error creating bean with name 'ordermanagementProductPopulator' defined in class path resource [ordermanagementfacades-spring.xml]: Error setting property values;

Invalid property 'designerConverter' of bean class [de.hybris.platform.ordermanagementfacades.product.converters.populator.OrdermanagementProductBasicPopulator]: Bean property 'designerConverter' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?

这是我的 bean 注册:

   <alias name="defaultCustomProductBasicPopulator" alias="productBasicPopulator"/>
    <bean id="defaultCustomProductBasicPopulator" parent="defaultProductBasicPopulator"
    class="de.hybris.NagAcc.facades.product.converters.populator.CustomProductBasicPopulator">
        <property name="designerConverter" ref="designerConverter" />
    </bean>

这是 class :

public class CustomProductBasicPopulator<SOURCE extends ProductModel, TARGET extends ProductData> extends ProductBasicPopulator<SOURCE,TARGET> {

    private Converter<DesignerModel,DesignerData> designerConverter;

    public Converter<DesignerModel, DesignerData> getDesignerConverter() {
        return designerConverter;
    }

    public void setDesignerConverter(Converter<DesignerModel, DesignerData> designerConverter) {
        this.designerConverter = designerConverter;
    }

    @Override
    public void populate(SOURCE productModel, TARGET productData) throws ConversionException {
        super.populate(productModel, productData);
        if (productModel.getDesigner() != null)
        {
            DesignerData designerData = getDesignerConverter().convert(productModel.getDesigner());
            productData.setDesigner(designerData);
        }
    }


这是父 bean 定义:

<alias name="defaultProductBasicPopulator" alias="productBasicPopulator"/>
    <bean id="defaultProductBasicPopulator" parent="baseProductPopulator"
          class="de.hybris.platform.commercefacades.product.converters.populator.ProductBasicPopulator">
        <property name="productConfigurableChecker" ref="productConfigurableChecker"/>
    </bean>

完整的堆栈跟踪:

  org.springframework.beans.FatalBeanException: Context hybris Global Context Factory  couldn't  be created correctly due to, Error creating bean with name 'modifyPopulatorList$child#0' defined in class path resource [config/cmsfacades-cmsitems-spring.xml]: Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'ordermanagementOrderConverter' defined in class path resource [ordermanagementfacades-spring.xml]: Cannot resolve reference to bean 'ordermanagementOrderPopulator' while setting bean property 'populators' with key [0]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'ordermanagementOrderPopulator' defined in class path resource [ordermanagementfacades-spring.xml]: Cannot resolve reference to bean 'ordermanagementOrderEntryConverter' while setting bean property 'orderEntryConverter'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'ordermanagementOrderEntryConverter' defined in class path resource [ordermanagementfacades-spring.xml]: Cannot resolve reference to bean 'ordermanagementOrderEntryPopulator' while setting bean property 'populators' with key [0]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'warehousingOrderEntryPopulator' defined in class path resource [warehousingfacades-spring.xml]: Cannot resolve reference to bean 'ordermanagementProductConverter' while setting bean property 'productConverter'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'ordermanagementProductConverter' defined in class path resource [ordermanagementfacades-spring.xml]: Cannot resolve reference to bean 'ordermanagementProductPopulator' while setting bean property 'populators' with key [0]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'ordermanagementProductPopulator' defined in class path resource [ordermanagementfacades-spring.xml]: Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyException: Invalid property 'designerConverter' of bean class [de.hybris.platform.ordermanagementfacades.product.converters.populator.OrdermanagementProductBasicPopulator]: Bean property 'designerConverter' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?
        at de.hybris.platform.core.HybrisContextFactory.build(HybrisContextFactory.java:307)
        at de.hybris.platform.core.HybrisContextFactory$GlobalContextFactory.buildSelf(HybrisContextFactory.java:179)
        at de.hybris.platform.core.HybrisContextFactory$GlobalContextFactory.build(HybrisContextFactory.java:165)
        at de.hybris.platform.core.HybrisContextHolder.getGlobalInstanceCached(HybrisContextHolder.java:122)
        at de.hybris.platform.core.HybrisContextHolder.getGlobalInstance(HybrisContextHolder.java:101)
        at de.hybris.platform.core.HybrisContextHolder.getAppCtxFactory(HybrisContextHolder.java:152)
        at de.hybris.platform.core.HybrisContextHolder.getApplicationInstance(HybrisContextHolder.java:78)
        at de.hybris.platform.core.AbstractTenant.createCoreApplicationContext(AbstractTenant.java:758)
        at de.hybris.platform.core.AbstractTenant.doStartupSafe(AbstractTenant.java:799)
        ... 22 more

根据我的说法,所有的 getter 和 setter 都很好,我无法解决这个错误。请帮忙。

我无法访问 hybris 资源来查看(感谢上帝!),但我认为值得查看 Javadoc of OrdermanagementProductBasicPopulator:

public void populate​(ProductModel productModel, ProductData productData) Description copied from interface: Populator Populate the target instance with values from the source instance. Overrides: populate in class ProductBasicPopulator

所以我猜,class OrdermanagementProductBasicPopulator extends ProductBasicPopulator 但是 OrdermanagementProductBasicPopulatorbean 定义将您的 productBasicPopulator 作为父级,这意味着 spring 尝试注入您的 bean 定义的 属性,这不是 [=11 的继承链中的 属性 =].

如前所述,这只是一个猜测,因为我没有看到来源... 如果我的猜测是正确的,这取决于您的要求如何摆脱这个问题。您可以给 bean 一个新别名并在必要时修改填充器列表,或者相应地覆盖 OrdermanagementProductBasicPopulator 的 bean 别名。

如果那不是问题,请 post OrdermanagementProductBasicPopulator 的 bean 定义。