how to achieve the below result using any alternative in AEMaaCS??
HttpServletRequest request = requestResponseFactory.createRequest(HttpConstants.METHOD_GET, path);
can any one help me on this???
Solved! Go to Solution.
Topics help categorize Community content and increase your ability to discover relevant content.
Views
Replies
Total Likes
Try using Sling Internal Request to achieve your use case
Hi @KarthickVe ,
com.day.cq.contentsync.handler.util | This API is deprecated. Use Apache Sling Builders instead. |
Hope this helps!!!
Hello @sravs , thanks for input, i have tried the Builders not able to achive desired results,
HttpServletRequest request = requestResponseFactory.createRequest(HttpConstants.METHOD_GET, path);
could you please share any example implementation if you have??
i'm trying to get HttpServletRequest object here.
@KarthickVe , I don't have any examples using the sling builder. can you please explain bit more details so that I can provide an alternative method.
Are you making a request to any third party API? If yes try to use
org.apache.http.impl.client.HttpClients
CloseableHttpClient httpclient = HttpClients.createDefault(); try { HttpGet httpGet = new HttpGet("http://targethost/homepage"); CloseableHttpResponse response = httpclient.execute(httpGet); try { System.out.println(response.getStatusLine()); HttpEntity entity = response.getEntity(); // do something useful with the response body // and ensure it is fully consumed EntityUtils.consume(entity); } finally { response.close(); } } finally { httpclient.close(); }
Hello @sravs ,
i'm currently looking for a solution:
My useCase:
Fetch HTML content from a path from /content/dam/dom/abc/test.html within a AEMaaCS environment by simulating a GET request. It captures the response from the simulated request and returns the extracted HTML content as a String.
@KarthickVe , can you try this
SlingHttpServletRequestBuilder builder = Builders.newRequestBuilder(resolver.getResource("/content/dam/dom/abc/test"));
SlingHttpServletRequest httpServletRequest = builder.build();
@sravs , Thanks for your input, this is work well for simulating a GET request but not working for capturing the response from the simulated request and returns also not able extracted HTML content as a String.
Try using Sling Internal Request to achieve your use case
Hello @sravs , After implementing the above solution its build failed in AEMaaCS
its reported as critical issue:
The product interface org.apache.sling.api.request.RequestPathInfo annotated with @ProviderType should not be implemented by custom code. Detected in org.apache.sling.servlethelpers.MockRequestPathInfo contained in /apps/aem-code-packages/application/install/core-bocker.core-1.2.4-SNAPSHOT.jar
documentation:
https://www.adobe.com/go/aem_cmcq_cqbp-84_en |
I am not able to deploy the servlet into AEM SDK local instance. I have the maven pom.xml updated. Code compile and deployed. But bundle did not get Installed. Underlying issue is:
org.osgi.framework.BundleException: Unable to resolve aem-permissions-provider.core [747](R 747.0): missing requirement [aem-permissions-provider.core [747](R 747.0)] osgi.wiring.package; (&(osgi.wiring.package=org.apache.sling.servlethelpers.internalrequests)(version>=1.0.0)(!(version>=2.0.0))) Unresolved requirements: [[aem-permissions-provider.core [747](R 747.0)] osgi.wiring.package; (&(osgi.wiring.package=org.apache.sling.servlethelpers.internalrequests)(version>=1.0.0)(!(version>=2.0.0)))]
at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:4398)
at org.apache.felix.framework.Felix.startBundle(Felix.java:2308)
at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:1006)
at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:992)
at org.apache.sling.installer.core.impl.tasks.BundleStartTask.execute(BundleStartTask.java:97) [org.apache.sling.installer.core:3.14.0]
at org.apache.sling.installer.core.impl.OsgiInstallerImpl.doExecuteTasks(OsgiInstallerImpl.java:918) [org.apache.sling.installer.core:3.14.0]
at org.apache.sling.installer.core.impl.OsgiInstallerImpl.executeTasks(OsgiInstallerImpl.java:755) [org.apache.sling.installer.core:3.14.0]
at org.apache.sling.installer.core.impl.OsgiInstallerImpl.run(OsgiInstallerImpl.java:304) [org.apache.sling.installer.core:3.14.0]
at java.base/java.lang.Thread.run(Thread.java:834)
Views
Replies
Total Likes
According to documentation, https://sling.apache.org/documentation/bundles/servlet-helpers.html
Not all servlets and scripts are suitable to be called by the ServletInternalRequest, depending on their "environmental" requirements like Request attributes for example.
I was trying to use builders to load experience fragment master variation URL. My code looks like:
try {
/* Setup request */
SlingHttpServletRequestBuilder requestBuilder = Builders.newRequestBuilder(slingRequest.getResourceResolver().getResource("/content/experience-fragments/projects/experience-fragment-1/master"))
.withExtension("html")
.withRequestMethod("GET");
SlingHttpServletRequest req = requestBuilder.useRequestDispatcherFrom(slingRequest).build();
/* Setup response */
SlingHttpServletResponseBuilder responseBuilder = Builders.newResponseBuilder();
SlingHttpServletResponseResult resp = responseBuilder.build();
Servlet servlet = servletResolver.resolveServlet(req);
if (servlet != null) {
servlet.service(req, resp);
}
if(resp.getStatus() == HttpServletResponse.SC_OK) {
String html = resp.getOutputAsString();
logger.debug("response content : " + html);
if (StringUtils.isNotBlank(html)) {
Document document = Jsoup.parse(html);
html = document.select("div.root.container.responsivegrid").first().html();
response_object.addProperty("content", html);
}
}
} catch (ServletException | IOException e) {
response_object.addProperty("error_message", e.getMessage());
}
it doesnt seem to work at all. Looks like there is no way to export experience fragments without using the deprecated RequestResponseFactory which works fine for the same requirement.
Views
Replies
Total Likes
hI @KarthickVe
I second what @sravs said about using Apache Sling Builders.
Reference documentation:
Hello @gkalyan ,
This is RequestResponseFactory requestResponseFactory already deprecated.
I'm looking for Apache Sling Builders example implementation for the same.
HI @KarthickVe ,
To achieve the functionality provided by com.day.cq.contentsync.handler.util.RequestResponseFactory, which is deprecated, you can use the SlingHttpServletRequest object directly to create a request.
Here's how you can achieve the same result using SlingHttpServletRequest:
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.servlets.HttpConstants;
import org.apache.sling.api.wrappers.SlingHttpServletRequestWrapper;
// Inject SlingHttpServletRequest into your service or component
private SlingHttpServletRequest request;
// Create a wrapper around the existing SlingHttpServletRequest
SlingHttpServletRequestWrapper wrappedRequest = new SlingHttpServletRequestWrapper(request) {};
// Now, you can use the wrappedRequest to create your request
SlingHttpServletRequest getRequest = wrappedRequest.createRequest(HttpConstants.METHOD_GET, path);
In this code:
This approach should help you achieve similar functionality without relying on the deprecated RequestResponseFactory.
Views
Replies
Total Likes