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

Asutosh_Jena_
Community Advisor
Community Advisor
November 18, 2021

@Model(adaptables = SlingHttpServletRequest.class, adapters = { PageExporter.class,
ComponentExporter.class }, resourceType = PageExporterImpl.RESOURCE_TYPE)
@3484101(name = ExporterConstants.SLING_MODEL_EXPORTER_NAME,selector = "caas", extensions = ExporterConstants.SLING_MODEL_EXTENSION)
public class PageExporterImpl extends com.adobe.cq.wcm.core.components.internal.models.v1.PageImpl implements PageExporter{

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

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



@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
@9944223
protected void initModel() {
title = currentPage.getTitle();
description = currentPage.getDescription();
}

@9944223
@JsonIgnore
public String[] getExportedItemsOrder() {
return super.getExportedItemsOrder();
}

@9944223
public Map<String, ? extends ComponentExporter> getExportedItemsString() {
String response = "";
Map<String, ? extends ComponentExporter> componentMap = (Map<String, ? extends ComponentExporter>) super.getExportedItems();
Set<String> childKeyList = super.getExportedItems().keySet();
for (String childKey : childKeyList) {
ResponsiveGrid res= (ResponsiveGrid) componentMap.get(childKey);
Map<String, ? extends ComponentExporter> resMap = res.getExportedItems();
return resMap;
}
return null;

}

@JsonIgnore
@9944223
public Map<String, ? extends ComponentExporter> getExportedItems() {
return super.getExportedItems();
}

@9944223
@JsonIgnore
public String getExportedType() {
// TODO Auto-generated method stub
return null;
}

}


Can you try with the below and confirm?

 

@Model(adaptables = Resource.class, resourceType="/apps/contentservices/components/structure/page", defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL)

@3484101(name = "jackson", selector="caas", extensions = "json", options = { @ExporterOption(name = "SerializationFeature.WRITE_DATES_AS_TIMESTAMPS", value = "true") })

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