绑定不匹配错误

时间:2017-08-31 08:19:54

标签: java hybris

我正在尝试添加属性“Collection”以显示在hybris B2C Accelerator的前台。

到目前为止,我已经在projectName-Spring.xml文件中声明了以下Beans:

<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>

但是,当我实现populator时,我收到以下错误:

  

绑定不匹配:类型TARGET不是有效替代   有界参数的类型   AbstractProductPopulator

这是有问题的populator:

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>

1 个答案:

答案 0 :(得分:1)

我认为问题是由 ProductSpecialPopulator 使用 de.hybris.electronics.facades.product.data 这一事实引起的。 ProductData

AbstractProductPopulator 最有可能使用 de.hybris.platform.commercefacades.product.data ProductData

因此这些是两个不同的类(包不同但名称,即ProductData是相同的)导致错误。

很可能有一个extensionName-beans.xml文件,其中ProductData的bean定义如下 class =&#34; de.hybris.electronics.facades.product.data.ProductData&#34; < /强>  而不是 class =&#34; de.hybris.platform.commercefacades.product.data.ProductData&#34; ,这应该是向已经存在的hybris产品数据添加属性的正确方法< / p>