Expand my Community achievements bar.

Don’t miss the AEM Skill Exchange in SF on Nov 14—hear from industry leaders, learn best practices, and enhance your AEM strategy with practical tips.
SOLVED

Access Page Manager API with postman

Avatar

Level 2
I have AEM's instance hosted something like this https://author.dev.demo.adobecqms.net, this is AEM 6.5 version.

I want to create and delete pages on this author instance using AEM's page manager API with any automation tool like JMeter or RestAssured but I have no idea, how to do it.

After spending some time on the internet (hitting in the dark), I am able to at settings.xml in .m2/settings.xml from this post - https://www.aemquickstart.in/2017/04/cannot-create-maven-project.html 

Also, I have below posts

  1. Publish/Unpublish Adobe AEM page from Java AEM Replicator API
  2. Using PageManager API in AEM6/CQ5 page Manager API
  3. https://www.codota.com/code/java/methods/com.day.cq.wcm.api.Page/getParent page Manager API

But how do I implement them? I don't have any AEM coding experience.

Any reference, tutorial, GitHub project, sample code which can help me in understanding how to API APIs on hosted AEM application?

1 Accepted Solution

Avatar

Correct answer by
Level 8

Understanding PageManager API is difficult if you don't have any conceptual knowledge or hands-on experience on AEM, instead of that you can use POSTMAN and CURL commands to create pages.

Use the below command's to create pages, both will work.

curl -u admin:admin -F "jcr:primaryType=cq:Page" -F "jcr:content/jcr:primaryType=cq:PageContent" -F "jcr:content/jcr:title=keysandstrokes" -F "jcr:content/sling:resourceType=geometrixx/components/contentpage" http://localhost:4502/content/geometrixx/en/keysandstrokes

or 

 

curl -u admin:admin –F cmd="createPage" -F label="" -F parentPath="/content/geometrixx/en/company" -F template="/apps/geometrixx/templates/contentpage" -F title="new page" http://localhost:4502/bin/wcmcommand

 

Reference links for more curl commands:

http://www.coderss.in/aem-curl-commands/

https://hashimkhan.in/aem-adobecq5-code-templates/curl-aem-commands/

 

View solution in original post

6 Replies

Avatar

Community Advisor

Hi @iamjeeva ,

 

In order to create/delete a page in AEM programatically, take a look at Page Manager API

https://helpx.adobe.com/experience-manager/6-5/sites/developing/using/reference-materials/javadoc/co...

 

Code Snippet to create a page in AEM:

 

private void createPage (ResourceResolver resolver) throws Exception {

        String path      =  "/content/whatever" ;

        String pageName  = "testpage";

        String pageTitle = "Test Page";

        String template  = "/apps/sample/templates/test";

        Page testPage = null;

        PageManager pageManager = resolver.adaptTo(PageManager.class);

        if (pageManager != null) {

                testPage = pageManager.create(path, pageName, template, pageTitle);        

        }

}

 

 

 

Avatar

Level 2

Hey Chitra - I don't want to set it up on local (can you please trim the answer). 

 

I want to know how can I use PageManager API on my hosted AEM instance (not local instance) like this one https://author.dev.demo.adobecqms.net

 

Can I use this API with Postman? I mean, I fire a POST calls to the AEM REST API and get the pages created.

 

Thanks for the response, I appreciate it.

Avatar

Correct answer by
Level 8

Understanding PageManager API is difficult if you don't have any conceptual knowledge or hands-on experience on AEM, instead of that you can use POSTMAN and CURL commands to create pages.

Use the below command's to create pages, both will work.

curl -u admin:admin -F "jcr:primaryType=cq:Page" -F "jcr:content/jcr:primaryType=cq:PageContent" -F "jcr:content/jcr:title=keysandstrokes" -F "jcr:content/sling:resourceType=geometrixx/components/contentpage" http://localhost:4502/content/geometrixx/en/keysandstrokes

or 

 

curl -u admin:admin –F cmd="createPage" -F label="" -F parentPath="/content/geometrixx/en/company" -F template="/apps/geometrixx/templates/contentpage" -F title="new page" http://localhost:4502/bin/wcmcommand

 

Reference links for more curl commands:

http://www.coderss.in/aem-curl-commands/

https://hashimkhan.in/aem-adobecq5-code-templates/curl-aem-commands/

 

Avatar

Level 2

I tried both, in first curl command I am getting status 500 error

<html>
<head>
<title>Error while processing /libs/wcm/core/content/sites/content/demo-content-pages</title>
</head>
<body>
<h1>Error while processing /libs/wcm/core/content/sites/content/demo-content-pages</h1>
<table>
<tbody>
<tr>
<td>Status</td>
<td><div id="Status">500</div></td>
</tr>
<tr>
<td>Message</td>
<td><div id="Message">org.apache.sling.api.resource.PersistenceException: Unable to commit changes to session.</div></td>

 

and for the second curl command, I am getting below error

curl -u jeeva-admin:mypassword –F cmd="createPage" -F label="" -F parentPath="/content/content/demo-content-pages/en/newpages" -F template="/apps/demo/templates/defaultpage" -F title="new page curl" https://author.dev.demo.adobecqms.net/bin/wcmcommand

 

curl: (6) Could not resolve host: –F

curl: (6) Could not resolve host: cmd=createPage

 

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">

<html>

    <head><title>405 Method POST not supported</title></head>

    <body>

        <h1>Method POST not supported</h1>

        <p>Cannot serve request to /bin/wcmcommand in com.day.cq.wcm.core.impl.commands.WCMCommandServlet</p>

        

        <h3>Request Progress:</h3>

<pre>

      0 TIMER_START{Request Processing}

      1 COMMENT timer_end format is {&lt;elapsed microseconds&gt;,&lt;timer name&gt;} &lt;optional message&gt;

      6 LOG Method=POST, PathInfo=null

      7 TIMER_START{handleSecurity}

292179 TIMER_END{292171,handleSecurity} authenticator org.apache.sling.auth.core.impl.SlingAuthenticator@413fbfeb returns true

292526 TIMER_START{ResourceResolution}

292573 TIMER_END{46,ResourceResolution} URI=/bin/wcmcommand resolves to Resource=ServletResource, servlet=com.day.cq.wcm.core.impl.commands.WCMCommandServlet, path=/bin/wcmcommand

292579 LOG Resource Path Info: SlingRequestPathInfo: path=&apos;/bin/wcmcommand&apos;, selectorString=&apos;null&apos;, extension=&apos;null&apos;, suffix=&apos;null&apos;

292579 TIMER_START{ServletResolution}

292582 TIMER_START{resolveServlet(/bin/wcmcommand)}

292592 TIMER_END{9,resolveServlet(/bin/wcmcommand)} Using servlet com.day.cq.wcm.core.impl.commands.WCMCommandServlet

292595 TIMER_END{15,ServletResolution} URI=/bin/wcmcommand handled by Servlet=com.day.cq.wcm.core.impl.commands.WCMCommandServlet

292597 LOG Applying Requestfilters

292602 LOG Calling filter: com.adobe.granite.resourceresolverhelper.impl.ResourceResolverHelperImpl

292609 LOG Calling filter: org.apache.sling.security.impl.ContentDispositionFilter

292612 LOG Calling filter: com.adobe.granite.csrf.impl.CSRFFilter

292620 LOG Calling filter: org.apache.sling.i18n.impl.I18NFilter

292624 LOG Calling filter: com.adobe.granite.httpcache.impl.InnerCacheFilter

292628 LOG Calling filter: org.apache.sling.rewriter.impl.RewriterFilter

292632 LOG Calling filter: com.adobe.cq.history.impl.HistoryRequestFilter

292806 LOG Calling filter: com.day.cq.wcm.core.impl.WCMRequestFilter

292814 LOG Calling filter: com.adobe.fd.core.security.internal.CurrentUserServiceImpl

293054 LOG Calling filter: com.adobe.cq.wcm.core.components.internal.servlets.CoreFormHandlingServlet

293057 LOG Calling filter: com.adobe.granite.optout.impl.OptOutFilter

293064 LOG Calling filter: com.day.cq.wcm.foundation.forms.impl.FormsHandlingServlet

293067 LOG Calling filter: com.adobe.cq.social.commons.cors.CORSAuthenticationFilter

293070 LOG Calling filter: com.adobe.livecycle.dsc.clientsdk.internal.ResourceResolverHolderFilter

293073 LOG Calling filter: org.apache.sling.engine.impl.debug.RequestProgressTrackerLogFilter

293076 LOG Calling filter: com.adobe.livecycle.content.appcontext.impl.AppContextFilter

293080 LOG Calling filter: org.demo.core.filters.LoggingFilter

293136 LOG Calling filter: org.demo.core.filters.LoggingFilter

293148 LOG Calling filter: org.demo.core.filters.LoggingFilter

293159 LOG Calling filter: org.demo.core.filters.LoggingFilter

293171 LOG Calling filter: com.day.cq.wcm.mobile.core.impl.redirect.RedirectFilter

293174 LOG Calling filter: com.day.cq.wcm.core.impl.AuthoringUIModeServiceImpl

293572 LOG Calling filter: com.adobe.granite.rest.assets.impl.AssetContentDispositionFilter

293575 LOG Calling filter: com.adobe.granite.requests.logging.impl.RequestLoggerImpl

293579 LOG Calling filter: com.adobe.granite.rest.impl.servlet.ApiResourceFilter

293611 LOG Calling filter: com.day.cq.dam.core.impl.assetlinkshare.AdhocAssetShareAuthHandler

293614 LOG Calling filter: com.day.cq.dam.core.impl.servlet.ActivityRecordHandler

293625 LOG Calling filter: com.adobe.cq.social.ugcbase.security.impl.SaferSlingPostServlet

293630 LOG Calling filter: com.day.cq.wcm.core.impl.warp.TimeWarpFilter

293637 LOG Applying Componentfilters

293639 LOG Calling filter: com.day.cq.personalization.impl.TargetComponentFilter

293643 LOG Calling filter: com.day.cq.wcm.core.impl.page.PageLockFilter

293647 LOG Calling filter: com.day.cq.wcm.core.impl.WCMComponentFilter

293766 LOG Calling filter: com.day.cq.wcm.core.impl.WCMDebugFilter

293770 TIMER_START{com.day.cq.wcm.core.impl.commands.WCMCommandServlet#0}

293797 LOG Applying Error filters

293800 LOG Calling filter: org.apache.sling.i18n.impl.I18NFilter

293802 LOG Calling filter: org.apache.sling.rewriter.impl.RewriterFilter

293806 TIMER_START{handleError:status=405}

294527 TIMER_END{719,handleError:status=405} Using handler /apps/sling/servlet/errorhandler/default.jsp

306519 LOG Found processor for post processing ProcessorConfiguration: {contentTypes=[text/html], order=1, active=true, valid=true, processErrorResponse=true, pipeline=(generator=Config(type=htmlparser, config={}), transformers=(Config(type=linkchecker, config={}), Config(type=versioned-clientlibs, config={}), serializer=Config(type=htmlwriter, config={}))}

306709 TIMER_END{306708,Request Processing} Dumping SlingRequestProgressTracker Entries

</pre>

 

        

        <hr>

        <address>Apache Sling</address>

    </body>

</html>

 

Can you please help in finding, what wrong I am doing?

Avatar

Community Advisor

Hi @iamjeeva 

 

You can look into the Page manager api sample examples. Here is the refrence : https://www.programcreek.com/java-api-examples/?api=com.day.cq.wcm.api.PageManager

 

Thanks,

Nupur