Is it possible to get exportedItems of page in resource type servlet?
I have a simple resourceType servlet through which I want to fetch the path of the experience fragment present in the present in the page.
currently I am getting only default properties but I want to see all the properties exported by .model.json extension but inside the servlet.
below is the code I am using.
instead of com.day.cq.wcm.api.Page if somehow I am able to adapt to com.adobe.cq.wcm.core.components.models.Page then I can use getExportedItems to get the child components . Please let me know how to achieve that
import com.adobe.cq.sites.ui.designfield.datasources.Children;
import com.day.cq.commons.jcr.JcrConstants;
import com.day.cq.wcm.api.Page;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.my.aem.project.core.models.HelloWorldModel;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ValueMap;
import org.apache.sling.api.servlets.HttpConstants;
import org.apache.sling.api.servlets.SlingAllMethodsServlet;
import org.apache.sling.api.servlets.SlingSafeMethodsServlet;
import org.apache.sling.servlets.annotations.SlingServletResourceTypes;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.propertytypes.ServiceDescription;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.servlet.Servlet;
import javax.servlet.ServletException;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Objects;
@Component(service = { Servlet.class })
@SlingServletResourceTypes(
resourceTypes="my-project/components/page",
methods={HttpConstants.METHOD_POST,HttpConstants.METHOD_GET},
selectors="s1",
extensions="json")
@ServiceDescription("Simple Demo Servlet")
public class SimpleServlet extends SlingSafeMethodsServlet {
private static final Logger LOGGER = LoggerFactory.getLogger(SimpleServlet.class);
// private static final long serialVersionUID = 1L;
@9944223
protected void doGet(final SlingHttpServletRequest req,
final SlingHttpServletResponse resp) throws ServletException, IOException {
ObjectMapper objectMapper = new ObjectMapper();
final Resource page = req.getResource();
ResourceResolver resourceResolver = req.getResourceResolver();
final String currentPagePath = page.getPath().substring(0, page.getPath().lastIndexOf('/'));
Resource resource = resourceResolver.getResource(currentPagePath);
if (Objects.nonNull(resource) && resource.isResourceType("cq:Page")) {
Page currentPage = resource.adaptTo(Page.class);
LOGGER.info("----------- Properties:-------------");
LOGGER.info(objectMapper.writeValueAsString(currentPage.getProperties()));
Resource pageContentResource = currentPage.getContentResource();
com.adobe.cq.wcm.core.components.models.Page pageContentResourcePage = currentPage.adaptTo(com.adobe.cq.wcm.core.components.models.Page.class);
LOGGER.info(objectMapper.writeValueAsString(Objects.isNull(pageContentResourcePage))); // gives result true
LOGGER.info(objectMapper.writeValueAsString(pageContentResource.getResourceType()));
LOGGER.info("----------- pageResource:-------------");
}
resp.getWriter().write("Title = " + resource.getValueMap().get(JcrConstants.JCR_TITLE));
}
}