Get the XF Page source code in Java | Community
Skip to main content
Level 2
September 6, 2023
Solved

Get the XF Page source code in Java

  • September 6, 2023
  • 2 replies
  • 1109 views

Hi All,

anyone know how to get the source code of XF 

below i tried but its giving an null pointer error  .

private String getExperienceFragmentHtml(SlingHttpServletRequest request) throws ServletException, IOException { ResourceResolver resourceResolver = request.getResourceResolver(); Resource xfResource = request.getResource(); String xfPath = xfResource.getPath(); Page xfPage = resourceResolver.getResource(xfPath).adaptTo(Page.class); String html = ""; if (xfPage != null) { try { // Create a StringWriter to capture the HTML source code StringWriter writer = new StringWriter(); // Create a PrintWriter with the StringWriter PrintWriter printWriter = new PrintWriter(writer); // Create a new HtmlLibraryManager instance HtmlLibraryManager htmlLibraryManager = resourceResolver.adaptTo(HtmlLibraryManager.class); HtmlLibrary xfHtmlLibrary = htmlLibraryManager.getLibrary(xfPage, request); xfHtmlLibrary.include(request, printWriter, true); // Get the HTML source code from the StringWriter html = writer.toString(); } catch (Exception e) { // Handle any exceptions e.printStackTrace(); } } LOG.info("HTML" + html); return html; }

 

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

Hi @test566 ,

You can use service user to get the session so that resource can able access path, we had the same issue.

Thank,

Sanjay 

 

2 replies

Saravanan_Dharmaraj
Community Advisor
Community Advisor
September 6, 2023

@test566 You can try like below

 

public class AemResourceResolutionServlet extends SlingSafeMethodsServlet { /** Service to create HTTP Servlet requests and responses */ @Reference private RequestResponseFactory requestResponseFactory; /** Service to process requests through Sling */ @Reference private SlingRequestProcessor requestProcessor; @Override protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException { /* The resource path to resolve. Use any selectors or extension. */ String requestPath = "<XF path>"; /* Setup request */ HttpServletRequest req = requestResponseFactory.createRequest("GET", requestPath); WCMMode.DISABLED.toRequest(req); /* Setup response */ ByteArrayOutputStream out = new ByteArrayOutputStream(); HttpServletResponse resp = requestResponseFactory.createResponse(out); /* Process request through Sling */ requestProcessor.processRequest(req, resp, request.getResourceResolver()); String html = out.toString(); } }
test566Author
Level 2
September 7, 2023

Hi @saravanan_dharmaraj ,

Thanks for your input.

 I tried but it is not working gives below WARN and nothing in the response

org.apache.sling.engine.impl.request.RequestData SlingRequestProgressTracker not found in request attributes

code snippet 

import com.day.cq.contentsync.handler.util.RequestResponseFactory;
import com.day.cq.wcm.api.NameConstants;
import com.day.cq.wcm.api.Page;
import com.day.cq.wcm.api.WCMMode;

import org.apache.commons.io.output.ByteArrayOutputStream;
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.servlets.HttpConstants;
import org.apache.sling.api.servlets.SlingAllMethodsServlet;
import org.apache.sling.api.servlets.SlingSafeMethodsServlet;
import org.apache.sling.engine.SlingRequestProcessor;
import org.apache.sling.servlets.annotations.SlingServletResourceTypes;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
import org.osgi.service.component.propertytypes.ServiceDescription;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.servlet.Servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;

@Component(service = {Servlet.class}, name = "MFE Servlet", immediate = true)
@SlingServletResourceTypes(
resourceTypes = "poc/components/structure/xfpage",
methods = {HttpConstants.METHOD_GET},
extensions = "js",
selectors = "public.mfe")

public class MFEServlet extends SlingAllMethodsServlet {
private static final Logger LOG = LoggerFactory.getLogger(MFEServlet.class);
@Reference
private RequestResponseFactory requestResponseFactory;
@Reference
private SlingRequestProcessor requestProcessor;

@Override
protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response)
throws ServletException, IOException {

// Get the HTML source code of the Experience Fragment
String html = getExperienceFragmentHtml(request);
LOG.info("HTML in do get method" + html);
// Set the response content type to JavaScript
response.setContentType("application/javascript");
// Write the HTML source code to the response output stream
PrintWriter out = response.getWriter();
out.write(html);
out.flush();
out.close();
}

private String getExperienceFragmentHtml(SlingHttpServletRequest request) throws ServletException, IOException {
ResourceResolver resourceResolver = request.getResourceResolver();
Resource xfResource = request.getResource();
String xfPath = xfResource.getPath();
Page xfPage = resourceResolver.getResource(xfPath).adaptTo(Page.class);
String html = "";
HttpServletRequest req = requestResponseFactory.createRequest("GET", xfPath);
WCMMode.DISABLED.toRequest(req);
/* Setup response */
ByteArrayOutputStream out = new ByteArrayOutputStream();
HttpServletResponse resp = requestResponseFactory.createResponse(out);

/* Process request through Sling */
requestProcessor.processRequest(req, resp, request.getResourceResolver());
html = out.toString();
LOG.info("HTML" + html);
return html;

}
}

 

Sanjay_Bangar
Community Advisor
Sanjay_BangarCommunity AdvisorAccepted solution
Community Advisor
September 7, 2023

Hi @test566 ,

You can use service user to get the session so that resource can able access path, we had the same issue.

Thank,

Sanjay