To create a page in AEM using the PageManager API in Java, you need to follow these steps:
- Parse the JSON file to extract the necessary details.
- Use the AEM APIs to create a new page in the.
Here is an example code snippet that demonstrates how to achieve this:
PageCreationService.java : create an OSGi service for handling the page creation logic.
import com.day.cq.wcm.api.Page;
import com.day.cq.wcm.api.PageManager;
import com.day.cq.wcm.api.PageManagerFactory;
import com.day.cq.wcm.api.WCMException;
import com.google.gson.JsonObject;
import org.apache.sling.api.resource.LoginException;
import org.apache.sling.api.resource.PersistenceException;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ResourceResolverFactory;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
import java.util.HashMap;
import java.util.Map;
@Component(service = PageCreationService.class)
public class PageCreationService {
@3214626
private ResourceResolverFactory resourceResolverFactory;
@3214626
private PageManagerFactory pageManagerFactory;
public void createPageFromJson(JsonObject jsonObject) throws PersistenceException, LoginException {
ResourceResolver resourceResolver = null;
try {
Map<String, Object> param = new HashMap<>();
param.put(ResourceResolverFactory.SUBSERVICE, "writeService");
resourceResolver = resourceResolverFactory.getServiceResourceResolver(param);
String pagePath = jsonObject.get("page_path").getAsString();
String pageName = jsonObject.get("page_name").getAsString();
String pageTemplate = jsonObject.get("page_template").getAsString();
String pageTitle = jsonObject.get("page_title").getAsString();
createPage(resourceResolver, pagePath, pageName, pageTemplate, pageTitle);
} finally {
if (resourceResolver != null && resourceResolver.isLive()) {
resourceResolver.close();
}
}
}
private void createPage(ResourceResolver resourceResolver, String pagePath, String pageName, String pageTemplate, String pageTitle) throws PersistenceException {
PageManager pageManager = pageManagerFactory.getPageManager(resourceResolver);
try {
Page page = pageManager.create(pagePath, pageName, pageTemplate, pageTitle);
if (page != null) {
System.out.println("Page created successfully at: " + page.getPath());
} else {
System.out.println("Failed to create page at: " + pagePath + "/" + pageName);
}
} catch (WCMException e) {
throw new PersistenceException("Error creating page: " + e.getMessage(), e);
}
}
}
PageCreationServlet.java: create a Sling servlet to call the PageCreationService.
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.servlets.SlingAllMethodsServlet;
import org.apache.sling.servlets.annotations.SlingServletPaths;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
import org.apache.sling.api.resource.PersistenceException;
import org.apache.sling.api.resource.LoginException;
import javax.servlet.Servlet;
import java.io.BufferedReader;
import java.io.IOException;
@Component(service = { Servlet.class })
@SlingServletPaths("/bin/createPage")
public class PageCreationServlet extends SlingAllMethodsServlet {
@3214626
private PageCreationService pageCreationService;
@9944223
protected void doPost(SlingHttpServletRequest request, SlingHttpServletResponse response) throws IOException {
BufferedReader reader = request.getReader();
JsonObject jsonObject = JsonParser.parseReader(reader).getAsJsonObject();
try {
pageCreationService.createPageFromJson(jsonObject);
response.setStatus(SlingHttpServletResponse.SC_OK);
response.getWriter().write("Page creation initiated.");
} catch (PersistenceException | LoginException e) {
response.setStatus(SlingHttpServletResponse.SC_INTERNAL_SERVER_ERROR);
response.getWriter().write("Error creating page: " + e.getMessage());
}
}
}
Note: This is non tested example code with hardcoded values. You may need to refactor it further, make it configurable, and adapt it according to your business logic.