Could not yet find an adapter factory for the model class my_class from adaptable class org.apache.sling.testing.resourceresolver.MockResource | Adobe Higher Education
Skip to main content
Level 2
August 30, 2022
해결됨

Could not yet find an adapter factory for the model class my_class from adaptable class org.apache.sling.testing.resourceresolver.MockResource

  • August 30, 2022
  • 1 답변
  • 3210 조회

Hi All,

I coudln't able to adapt the resource to my Sling Model class,
getting the error 
Could not yet find an adapter factory for the model class my_class from adaptable class org.apache.sling.testing.resourceresolver.MockResource.

Attaching the Sling models and junit files here.
Model Interface

 

 

package com.mycore.core.models; import org.apache.commons.lang.StringUtils; public interface ConfiguratorPromptModel { default String getNameplateId() { return StringUtils.EMPTY; } }

 

 


Model Implementation

 

 

package com.mycore.core.internal.models.v1; import com.mycore.core.models.ConfiguratorPromptModel; import org.apache.sling.api.resource.Resource; import org.apache.sling.models.annotations.Model; import org.apache.sling.models.annotations.injectorspecific.InjectionStrategy; import org.apache.sling.models.annotations.injectorspecific.ValueMapValue; @Model(adaptables = Resource.class, adapters = {ConfiguratorPromptModel.class}) public class ConfiguratorPromptModelImpl implements ConfiguratorPromptModel { public String getNameplateId() { return nameplateId; } @ValueMapValue(injectionStrategy = InjectionStrategy.OPTIONAL) private String nameplateId; }

 

 


Test Case

 

 

package com.mycore.core.internal.models.v1; import com.mycore.core.models.ConfiguratorPromptModel; import io.wcm.testing.mock.aem.junit5.AemContext; import io.wcm.testing.mock.aem.junit5.AemContextExtension; import org.apache.sling.api.resource.Resource; import org.apache.sling.models.factory.ModelFactory; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import static org.junit.jupiter.api.Assertions.assertEquals; @ExtendWith(AemContextExtension.class) class ConfiguratorPromptModelImplTest { private ConfiguratorPromptModel configuratorPromptModel; @BeforeEach public void setUp(AemContext context) throws Exception { context.load().json("/content/configuratorprompt/configuratorprompt.json", "/content/configuratorprompt.html"); Resource resource = context.resourceResolver().getResource("/content/configuratorprompt.html"); this.configuratorPromptModel = context.getService(ModelFactory.class).createModel(resource, ConfiguratorPromptModelImpl.class); } void getNameplateId() { assertEquals("nameplate", configuratorPromptModel.getNameplateId()); } }

 

 


Thanks,
Gokulraj

 

 

이 주제는 답변이 닫혔습니다.
최고의 답변: BimmiSo

Check if you are using these imports and share the json file

 

import static org.junit.jupiter.api.Assertions.assertEquals;

import org.apache.sling.api.resource.Resource;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;

import io.wcm.testing.mock.aem.junit5.AemContext;
import io.wcm.testing.mock.aem.junit5.AemContextExtension;


Hi @rsgokulraj4 ,

{
	"jcr:primaryType": "cq:Page",
	"jcr:content": {
		"jcr:primaryType": "cq:PageContent",
		"jcr:title": "en",
		"cq:template": "/conf/we-retail/settings/wcm/templates/homepage",
		"cq:contextHubSegmentsPath": "/etc/segmentation/contexthub",
		"jcr:isCheckedOut": true,
		"pageTitle": "Test page",
		"jcr:uuid": "d2d32722-0ce4-4663-8873-1b11a8e34ceb",
		"sling:resourceType": "we-retail/components/page",
		"cq:contextHubPath": "/etc/cloudsettings/default/contexthub",
		"root": {
			"jcr:primaryType": "nt:unstructured",
			"layout": "responsiveGrid",
			"sling:resourceType": "we-retail/components/container",
			"container": {
				"jcr:primaryType": "nt:unstructured",
				"sling:resourceType": "we-retail/components/container",
				"container": {
					"jcr:primaryType": "nt:unstructured",
					"layout": "responsiveGrid",
					"sling:resourceType": "we-retail/components/container",
					"banner": {
						"jcr:primaryType": "nt:unstructured",
						"id": "1234",
						"type": "callbutton",
						"bannerText":"Banner Text",
						"sling:resourceType": "we-retail/components/banner",
						"cq:styleIds": [
							"1654672680483",
							"1654672784107"
						]
						
					}
				}
			}
		}
	}
}

Is this working now?

Thanks

1 답변

Adobe Employee
August 30, 2022

Hi @rsgokulraj4 ,

 

PFB example 

 

@ExtendWith(AemContextExtension.class)
public class BannerTest {
    /** The Constant RESOURCE_CONTENT. */
    private static final String RESOURCE_CONTENT = "/core/models/banner/banner.json";

    /** The Constant TEST_CONTENT_ROOT. */
    private static final String TEST_CONTENT_ROOT = "/content/we-retail/us/en";

    /** The Constant RESOURCE. */
    private static final String RESOURCE = TEST_CONTENT_ROOT + "/jcr:content/root/container/container/banner";

    /** The model. */
    private Banner model;

    /** The resource. */
    private Resource resource;

    /**
     * Sets the up.
     *
     * @param aemContext the new up
     */
    @BeforeEach
    public void setup(AemContext aemContext) {
        Class<Banner> modelClass = Banner.class;
        aemContext.load().json(RESOURCE_CONTENT, TEST_CONTENT_ROOT);
        aemContext.addModelsForClasses(modelClass);
        resource = aemContext.currentResource(RESOURCE);
        model = resource.adaptTo(modelClass);
    }

    /**
     * Simple load and getter test.
     */
    @Test
    public void simpleLoadAndGetterTest() {
        assertEquals("1234", model.getId());
        assertEquals("Banner Text", model.getBannerText());
    }

}

Hope this helps

 

Thanks

rsGokulraj4작성자
Level 2
August 30, 2022

Hi @bimmiso 
Thanks for the suggestion,
I tried the approach you have shared, but still getting the null exception on line.

 model = resource.adaptTo(modelClass); 

 

Adobe Employee
August 30, 2022

Check if you are using these imports and share the json file

 

import static org.junit.jupiter.api.Assertions.assertEquals;

import org.apache.sling.api.resource.Resource;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;

import io.wcm.testing.mock.aem.junit5.AemContext;
import io.wcm.testing.mock.aem.junit5.AemContextExtension;