Sling Model with custom selector not working in AEM 6.5 | Community
Skip to main content
Level 2
November 18, 2021

Sling Model with custom selector not working in AEM 6.5

  • November 18, 2021
  • 2 replies
  • 7793 views

Hi All,

 

I am using a Sling model exporter to export json data in AEM 6.5 and using the selector "caas". When the selector is "model" , it works perfectly. However with custom selector , it shows the below error.

 

Invalid recursion selector value 'caas'

Cannot serve request to /content/abc/internal/exportsite/en/clientaccess/help/secondlevela/level3.caas.json in org.apache.sling.servlets.get.DefaultGetServlet

 

Already tried the below:

check if this helps - Re: Sling Exporter with custom selector

This post is no longer active and is closed to new replies. Need help? Start a new post to ask your question.

2 replies

Asutosh_Jena_
Community Advisor
Community Advisor
November 18, 2021

Hi @vikrams57194913 

 

Is /content/abc/internal/exportsite/en/clientaccess/help/secondlevela/level3 a page?

Did you try with /content/abc/internal/exportsite/en/clientaccess/help/secondlevela/level3/jcr:content.caas.json?

 

Thanks!

Level 2
November 18, 2021

I am getting blank page with the above link also, only getting response from model.json

 

Thanks

Level 2
November 18, 2021

Hi @vikrams57194913,

Per the snippet you have shared, below highlighted in bold is the issue. This is OOTB Core Page Implementation which is internal and not allowed to use as is directly. (Bundle should have been in installed state)

If you are to use its method implementation or override, use Sling model delegation pattern. 

 

public class PageExporterImpl extends com.adobe.cq.wcm.core.components.internal.models.v1.PageImpl implements PageExporter{


No, that's not the issue, I have already tried that also. But getting the same error.

 

@Model(adaptables = SlingHttpServletRequest.class, adapters = { PageExporter.class,
ComponentExporter.class }, resourceType = PageExporterImpl.RESOURCE_TYPE)
@3484101(name = ExporterConstants.SLING_MODEL_EXPORTER_NAME,selector="mobile",extensions = ExporterConstants.SLING_MODEL_EXTENSION)
//@Model(adaptables = Resource.class, resourceType="/apps/contentservices/components/structure/page", defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL)
//
//@Exporter(name = "jackson", selector="caas", extensions = "json", options = { @ExporterOption(name = "SerializationFeature.WRITE_DATES_AS_TIMESTAMPS", value = "true") })
public class PageExporterImpl implements PageExporter{

protected static final String RESOURCE_TYPE = "contentservices/components/structure/page";

/** The logger. */
private final Logger logger = LoggerFactory.getLogger(PageExporterImpl.class);

/** The sling http servlet request. */
@1961677(injectionStrategy = InjectionStrategy.REQUIRED)
private SlingHttpServletRequest slingHttpServletRequest;

@ScriptVariable
protected com.day.cq.wcm.api.Page currentPage;

private Map<String, ComponentExporter> childModels = null;

protected String title;
protected String description;



@9944223
public String getTitle() {
return "title";
}
@9944223
public String getDescription() {
return description;
}

@9944223
public String getLanguage() {
return currentPage == null ? Locale.getDefault().toLanguageTag()
: currentPage.getLanguage(false).toLanguageTag();
}

@PostConstruct
protected void initModel() {
title = currentPage.getTitle();
description = currentPage.getDescription();

}

@9944223
@JsonIgnore
public String getExportedType() {
return null;
}

}

September 21, 2022

Hi Vikram, 

Add the caas.json.jsp file in the project and update its content as below: 

 

/apps/cq/Page/caas.json.jsp 

<%@include file="/libs/cq/Page/proxy.jsp" %>

 

Update the workspace filter so changes are picked up: 

<filter root="/apps/cq/Page">

 

This should work. You can add multiple selectors with this way. 

 

Another solution is to combine your custom selector with the OOTB model selector e.g model.caas