1

I'm adding a new field to the ProductWSDTO and making the necessary additions to use this field on the spartacus frontend. But when I want to open PDP, I get the following error. How can I solve this problem?

de.hybris.platform.servicelayer.dto.converter.ConversionException: Max field set size exceeded. Reason of that can be : too generic configuration, lack of properly defined BASIC field set level for data class, reccurency in data structure

ERROR [hybrisHTTP8] [RestHandlerExceptionResolver] de.hybris.platform.servicelayer.dto.converter.ConversionException: Max field set size exceeded. Reason of that can be : too generic configuration, lack of properly defined BASIC field set level for data class, reccurency in data structure
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.addToFieldSet(DefaultFieldSetBuilder.java:536)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.parseField(DefaultFieldSetBuilder.java:522)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.parseComplexField(DefaultFieldSetBuilder.java:331)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.createFieldSetInternal(DefaultFieldSetBuilder.java:217)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.createFieldSetForLevel(DefaultFieldSetBuilder.java:286)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.createFieldSetInternal(DefaultFieldSetBuilder.java:211)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.parseField(DefaultFieldSetBuilder.java:517)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.parseComplexField(DefaultFieldSetBuilder.java:331)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.parseParametrizedTypeField(DefaultFieldSetBuilder.java:452)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.parseComplexField(DefaultFieldSetBuilder.java:319)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.createFieldSetInternal(DefaultFieldSetBuilder.java:217)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.createFieldSetForLevel(DefaultFieldSetBuilder.java:286)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.createFieldSetInternal(DefaultFieldSetBuilder.java:211)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.parseField(DefaultFieldSetBuilder.java:517)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.parseComplexField(DefaultFieldSetBuilder.java:331)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.parseParametrizedTypeField(DefaultFieldSetBuilder.java:452)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.parseComplexField(DefaultFieldSetBuilder.java:319)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.createFieldSetInternal(DefaultFieldSetBuilder.java:217)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.createFieldSetForLevel(DefaultFieldSetBuilder.java:286)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.createFieldSetInternal(DefaultFieldSetBuilder.java:211)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.parseField(DefaultFieldSetBuilder.java:517)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.parseComplexField(DefaultFieldSetBuilder.java:331)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.parseParametrizedTypeField(DefaultFieldSetBuilder.java:452)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.parseComplexField(DefaultFieldSetBuilder.java:319)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.createFieldSetInternal(DefaultFieldSetBuilder.java:217)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.createFieldSetForLevel(DefaultFieldSetBuilder.java:286)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.createFieldSetInternal(DefaultFieldSetBuilder.java:211)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.parseField(DefaultFieldSetBuilder.java:517)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.parseComplexField(DefaultFieldSetBuilder.java:331)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.parseParametrizedTypeField(DefaultFieldSetBuilder.java:452)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.parseComplexField(DefaultFieldSetBuilder.java:319)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.createFieldSetInternal(DefaultFieldSetBuilder.java:217)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.createFieldSetForLevel(DefaultFieldSetBuilder.java:286)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.createFieldSetInternal(DefaultFieldSetBuilder.java:211)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.parseField(DefaultFieldSetBuilder.java:517)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.parseComplexField(DefaultFieldSetBuilder.java:331)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.parseParametrizedTypeField(DefaultFieldSetBuilder.java:452)
at de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder.parseComplexField(DefaultFieldSetBuilder.java:319)
Rabia
  • 91
  • 6
  • I think you forgot to add field-level mapping for the new attribute. – Raushan Kumar Aug 05 '21 at 09:55
  • You have have an attribute which has deep levels or recursion. It could possibly be related to product data or category data. You will need to refine the fields you are returning. As of this time, it's simply too big. – geffchang Aug 08 '21 at 13:22

2 Answers2

1

@Rebia,

Below are the steps to avoid the above issue.

1.define a field mapper to fill up the new field in ProductWsDTO

enter image description here

  1. added new field in fieldSetLevelMapping:

entry key="BASIC" value="totalPageCount,catalog,totalProductCount,currentPage,products,version,myProperty"

  1. Inject right populator to populate value in WSDTO.
  2. It seems your DTO is too complex so do changes in this file. dto-level-mappings-v2-spring.xml enter image description here

Here try to change defaultMaxFieldSetSize to 80k

Raushan Kumar
  • 1,195
  • 12
  • 21
1

This error is related to handling 'fields' parameter :

Mapping mechanism in occ is based on Orika mapper. There is additional filter which check if currently mapped attribute is on the list of attributes which should be mapped. That list is created based on class definition and fieldSetLevelMappings by fieldSetBuilder (defined in dto-level-mappings-v2-spring.xml)

 <alias alias="fieldSetBuilder" name="defaultFieldSetBuilder"/>
     <bean id="defaultFieldSetBuilder"
           class="de.hybris.platform.webservicescommons.mapping.impl.DefaultFieldSetBuilder">
         <property name="defaultRecurrencyLevel" value="4"/>
         <property name="defaultMaxFieldSetSize" value="50000"/>
         <property name="fieldSetLevelHelper" ref="fieldSetLevelHelper"/>
     </bean>

There are two parameters which can influence how the field set builder works :

  • defaultRecurrencyLevel
  • defaultMaxFieldSetSize - If the limit is exceeded, an exception is thrown - this is exception you see. It looks like for request you try to do - response dto is too complex Verify if fieldsSetMapping for that dto class was defined properly.

If you don't specify any fields attribute in request - value is taken from DEFAULT fieldSetLevelMapping. Try to specify fields attribute for your call and verify if you still get that exception.

Check this thread in SAP community for detail.

Best Regards, Jerry

i042416
  • 356
  • 1
  • 3