Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get html output from a jcr node in CQ5

Tags:

jcr

aem

sling

I wanted to know if there is a way to get the rendered HTML output of a Page node in CQ5 without hitting the actual url. I have the Page node and I want to get the rendered HTML output of that Page node programmatically in java and store it in a string without hitting the page URL.

Any help is appreciated, thanks in advance!

like image 436
Rakesh Avatar asked Sep 21 '15 08:09

Rakesh


2 Answers

Node itself it's just a data. Sling framework responsible for rendering this data. It use a bunch of rules to determine how this data should be rendered.Sling Script Resolution Cheet Sheet As Sling is web framework it renders data via http requests.

To emulate this request in CQ/AEM I suggest to use com.day.cq.contentsync.handler.util.RequestResponseFactory service

import org.apache.sling.engine.SlingRequestProcessor;
import com.day.cq.contentsync.handler.util.RequestResponseFactory;

@Reference
private RequestResponseFactory requestResponseFactory;

@Reference
private SlingRequestProcessor requestProcessor;

public String doStuff(){
    HttpServletRequest request = requestResponseFactory.createRequest("GET", "/path/to/your/node.html");
    request.setAttribute(WCMMode.REQUEST_ATTRIBUTE_NAME, WCMMode.DISABLED);

    ByteArrayOutputStream out = new ByteArrayOutputStream();
    HttpServletResponse response = requestResponseFactory.createResponse(out);

    requestProcessor.processRequest(request, response, resourceResolver);        
    return out.toString(response.getCharacterEncoding());
}

Hope it helps.

like image 79
Dzianis Sudas Avatar answered Oct 21 '22 11:10

Dzianis Sudas


You can access node by providing a correct view. As you need rendered html view, use .html with your node to get rendered html. So your node path will be

/content/path/to/page/jcr:content/par/node_name.html

Now to read html programmatically, you can make an http request to above path from your path, and save response as string.

like image 39
Mohit Bansal Avatar answered Oct 21 '22 09:10

Mohit Bansal