我正在尝试添加属性“集合”以显示在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产品数据中添加属性的正确方法

07-26 05:34