2017-08-31 5 views
1

J'essaie d'ajouter un attribut "Collection" à afficher sur le front office de hybris B2C Accelerator.Erreur de concordance liée

Jusqu'à présent, j'ont déclaré les haricots suivants dans mon dossier projectName-Spring.xml:

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

Dans mon fichier ProjectName-core.xml, j'ai ajouté la collection d'attributs:

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

Mais ensuite, quand j'ai mis en place le populateur, j'ai l'erreur suivante:

Bound mismatch: The type TARGET is not a valid substitute for the bounded parameter of the type AbstractProductPopulator

Voici le populateur en question:

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()); 
    } 

} 

L'erreur lui-même est lancée par TARGET dans cette ligne:

 extends AbstractProductPopulator<SOURCE, TARGET> 

Et voici la définition du AbstractProductPopulator:

public abstract class AbstractProductPopulator<SOURCE extends ProductModel, TARGET extends ProductData> 
     implements Populator<SOURCE, TARGET> 
+0

Ce 'AbstractProductPopulator' n'est pas quelque chose de" public "pouvez-vous poster la définition de classe pour cela (c'est-à-dire la ligne 'abstract abstract class AbstractProductPopulator ...') –

+0

Bien sûr, je vais éditer le post pour inclure la définition du populateur abstrait. –

+0

Voir les espaces de noms de ProductData et celui de AbstractProductPopulator. Ils sont probablement différents. Je vous recommande de ne prolonger que ProductPopulator si vous êtes avec Hybris 6+ –

Répondre

1

Je crois que le problème est causé par le fait que ProductSpecialPopulator utilise de.hybris.electronics.facades.product.data. PRODUITFICHE

et la AbstractProductPopulator utilise probablement plus de.hybris.platform.commercefacades.product.data. PRODUITFICHE,

Ce sont donc deux classes différentes (le paquet est différent, mais le nom, i.e. PRODUITFICHE est le même) provoquant l'erreur.

Très probablement il y a un fichier extensionName-beans.xml dans lequel le haricot pour PRODUITFICHE est défini comme celui-ci class = « de.hybris.electronics.facades.product.data.ProductData » au lieu de class = "de.hybris.platform.commercefacades.product.data.ProductData", ce qui devrait être la bonne façon d'ajouter un attribut aux données de produit hybris déjà existantes

+0

Vous avez absolument raison. Dans le fichier electronicsfacades-beans.xml, la classe du bean collection a été pointée sur le mauvais chemin. Je l'ai changé et l'erreur a disparu après la construction. Merci beaucoup. –