【发布时间】:2021-10-21 00:24:01
【问题描述】:
我得到以下异常:
org.springframework.beans.FatalBeanException: 无法正确创建上下文 hybris 全局上下文工厂,原因是在类路径资源 [config/cmsfacades-cmsitems-spring .xml]: bean 初始化失败;
在类路径资源 [ordermanagementfacades-spring.xml] 中定义名称为“ordermanagementOrderConverter”的 bean 创建时出错:使用键 [0] 设置 bean 属性“populators”时无法解析对 bean 'ordermanagementOrderPopulator' 的引用;
在类路径资源 [ordermanagementfacades-spring.xml] 中创建名称为“ordermanagementOrderPopulator”的 bean 时出错:在设置 bean 属性“orderEntryConverter”时无法解析对 bean“ordermanagementOrderEntryConverter”的引用;
在类路径资源 [ordermanagementfacades-spring.xml] 中创建名称为“ordermanagementOrderEntryConverter”的 bean 时出错:使用键 [0] 设置 bean 属性“populators”时无法解析对 bean 'ordermanagementOrderEntryPopulator' 的引用;
在类路径资源 [warehousingfacades-spring.xml] 中创建名称为“warehousingOrderEntryPopulator”的 bean 时出错:在设置 bean 属性“productConverter”时无法解析对 bean“ordermanagementProductConverter”的引用;
在类路径资源 [ordermanagementfacades-spring.xml] 中创建名称为“ordermanagementProductConverter”的 bean 时出错:使用键 [0] 设置 bean 属性“populators”时无法解析对 bean 'ordermanagementProductPopulator' 的引用;
在类路径资源 [ordermanagementfacades-spring.xml] 中定义名称为“ordermanagementProductPopulator”的 bean 创建错误:设置属性值时出错;
bean 类 [de.hybris.platform.ordermanagementfacades.product.converters.populator.OrdermanagementProductBasicPopulator] 的无效属性“designerConverter”:Bean 属性“designerConverter”不可写或具有无效的 setter 方法。 setter的参数类型和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>
这是课程:
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 都很好,我无法解决这个错误。请帮忙。
【问题讨论】:
-
似乎加载了错误的类
de.hybris.platform.ordermanagementfacades.product.converters.populator.OrdermanagementProductBasicPopulator。我假设这是您的父 bean 'defaultProductBasicPopulator' 的类。您可能需要至少发布父 bean 定义(在 hybris 内部的某个地方......)以获得更多帮助。我还认为您可能不需要 bean 定义中的 parent 属性。至少您的 Java 类继承自与 bean 定义完全不同的类(默认情况下这不是问题)。 -
发布了父 bean 定义。你现在可以检查吗?
-
不,bean id 'defaultProductPopulator' 属于我扩展的类。
-
将在几分钟内完成。请发布整个异常和堆栈跟踪?
-
异常消息的底部是否描述了问题? “bean类[de.hybris.platform.ordermanagementfacades.product.converters.populator.OrdermanagementProductBasicPopulator]的无效属性'designerConverter':Bean属性'designerConverter'不可写或具有无效的setter方法。setter的参数类型是否匹配getter 的返回类型?”
OrdermanagementProductBasicPopulator有一个名为designerConverter的属性,当 Spring 尝试设置它时,它是不可写的。
标签: spring dependency-injection hybris