我正在尝试添加属性“集合”以显示在hybris B2C Accelerator的前端办公室。
到目前为止,我已经在我的projectName-Spring.xml文件中声明了以下Bean:
<alias name="defaultProductSpecialPopulator" alias="productSpecialPopulator" />
<bean id="defaultProductSpecialPopulator" class="de.hybris.electronics.facades.populators.ProductSpecialPopulator" scope="prototype">
<property name="modelService" ref="modelService" />
</bean>
<alias name="defaultProductConfiguredPopulator" alias="productConfiguredPopulator" />
<bean id="defaultProductConfiguredPopulator" class="de.hybris.platform.commercefacades.converter.impl.DefaultConfigurablePopulator">
<property name="populators">
<map key-type="de.hybris.platform.commercefacades.product.ProductOption">
<entry key="SPECIAL" value-ref="productSpecialPopulator" />
</map>
</property>
</bean>
在我的ProjectName-core.xml文件中,添加了属性集合:
<typegroup name="Product">
<itemtype code="Product" autocreate="false" generate="false">
<description>Pending description...</description>
<attributes>
<attribute qualifier="collection" type="java.lang.String">
<description>Pending description...</description>
<persistence type="property"></persistence>
</attribute>
</attributes>
</itemtype>
</typegroup>
但是,当我实现填充器时,出现以下错误:
绑定不匹配:TARGET类型不能替代
类型的有界参数
抽象产品人口
这是有问题的填充器:
package de.hybris.electronics.facades.populators;
import de.hybris.electronics.facades.product.data.ProductData;
import de.hybris.platform.commercefacades.product.converters.populator.AbstractProductPopulator;
import de.hybris.platform.core.model.product.ProductModel;
import de.hybris.platform.servicelayer.dto.converter.ConversionException;
public class ProductSpecialPopulator<SOURCE extends ProductModel, TARGET extends ProductData>
extends AbstractProductPopulator<SOURCE, TARGET>
{
@Override
public void populate(final ProductModel source, final ProductData target) throws ConversionException
{
target.setCollection(source.getCollection());
}
}
错误本身由TARGET在此行中引发:
extends AbstractProductPopulator<SOURCE, TARGET>
这是AbstractProductPopulator的定义:
public abstract class AbstractProductPopulator<SOURCE extends ProductModel, TARGET extends ProductData>
implements Populator<SOURCE, TARGET>
最佳答案
我认为问题是由ProductSpecialPopulator使用de.hybris.electronics.facades.product.data.ProductData引起的
而AbstractProductPopulator最有可能使用de.hybris.platform.commercefacades.product.data.ProductData,
因此,这是两个不同的类(程序包不同,但名称相同,即ProductData相同)导致错误。
最有可能存在一个extensionName-beans.xml文件,其中定义了用于ProductData的bean,例如此类=“ de.hybris.electronics.facades.product.data.ProductData”
而不是class =“ de.hybris.platform.commercefacades.product.data.ProductData”,这应该是向现有的hybris产品数据中添加属性的正确方法