This conversation has been locked due to inactivity. Please create a new post.
This conversation has been locked due to inactivity. Please create a new post.
Hi all,
I have created registration form using Core form container. I need to save this data in a path based servlet. I have mentioned the servlet path but I'm getting only null values instead of the form fields. I have mentioned the correct name field for getting the parameter.
my servlet path:
my servlet code is :
package com.adobe.aem.FormsDemo.core.servlets;
import javax.servlet.Servlet;
import javax.servlet.ServletException;
import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.resource.ResourceResolverFactory;
import org.apache.sling.api.servlets.HttpConstants;
import org.apache.sling.api.servlets.SlingAllMethodsServlet;
import org.eclipse.jetty.http.MultiPartFormInputStream;
import org.eclipse.jetty.util.MultiPartWriter;
import org.jetbrains.annotations.NotNull;
import org.json.JSONException;
import org.json.JSONObject;
import org.osgi.framework.Constants;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
@Component(service = Servlet.class, property = {
Constants.SERVICE_DESCRIPTION + "=JSON path based servlet",
"sling.servlet.methods=" + HttpConstants.METHOD_POST,
"sling.servlet.methods=" + HttpConstants.METHOD_GET,
"sling.servlet.paths=" + "/bin/form" })
public class CustomServlet extends SlingAllMethodsServlet {
@Override
protected void doGet(@NotNull SlingHttpServletRequest request, @NotNull SlingHttpServletResponse response) throws IOException {
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
out.print(request.getRequestURL());
//out.print(request.getRequestParameter());
//request.getParameterById();
out.print("firstname is");
out.print(request.getParameter("firstname"));
out.print("lastname is");
out.print(request.getParameter("lastname"));
InputStream input = null;
try {
//String USER_AGENT = "Mozilla/5.0";
out.println("HTTP Post Request Test:-");
String url = "https://mocki.io/v1/bbb77b19-e2dc-454c-9b4d-a50db8fe99f6";
URL obj = new URL(url);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
//add request header
con.setRequestMethod("POST");
//con.setRequestProperty("User-Agent", USER_AGENT);
//con.setRequestProperty("Accept-Language", "en-US,en;q=0.5");
//Data to be posted
String fname = request.getParameter("firstname");
String lname = request.getParameter("lastname");
JSONObject json = new JSONObject();
json.put("firstname", fname);
json.put("lastname", lname);
out.print(fname);
out.print(lname);
//out.print(con.getResponseCode());
String urlParameters = "Firstname=" + fname + "&Lastname=" + lname;
// Send post request
con.setDoOutput(true);
DataOutputStream wr = new DataOutputStream(con.getOutputStream());
wr.writeBytes(String.valueOf(json));
wr.flush();
wr.close();
int responseCode = con.getResponseCode();
out.println("\nSending 'POST' request to URL : " + url);
out.println("Post parameters : " + json);
//out.println("Response Code : " + responseCode);
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer responseD = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
responseD.append(inputLine);
}
in.close();
//print result
out.println("Response From The URL: " + responseD.toString());
//response.sendRedirect("www.google.com");
} catch (IOException ex) {
ex.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
} finally {
if (input != null) {
try {
input.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
@Override
protected void doPost(@NotNull SlingHttpServletRequest req, @NotNull SlingHttpServletResponse res) throws IOException {
PrintWriter out = res.getWriter();
InputStream input = null;
try {
//String USER_AGENT = "Mozilla/5.0";
out.println("HTTP Post Request Test:-");
//add request header
// con.setRequestMethod("POST");
//Data to be posted
String fname = req.getParameter("firstname");
String lname = req.getParameter("lastname");
String urlParameters = "Firstname=" + fname + "&Lastname=" + lname;
CloseableHttpClient httpclient = HttpClients.createDefault();
try {
HttpPost httppost = new HttpPost("https://mocki.io/v1/bbb77b19-e2dc-454c-9b4d-a50db8fe99f6");
httppost.addHeader("firstname",fname);
httppost.addHeader("lastname",lname);
out.print(httppost);
CloseableHttpResponse response = httpclient.execute(httppost);
try {
out.print(response.getStatusLine());
HttpEntity resEntity = response.getEntity();
if (resEntity != null) {
out.println(resEntity.getContentLength());
}
EntityUtils.consume(resEntity);
} finally {
response.close();
}
} finally {
httpclient.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
/* private static final long serialVersionUID = 1L;
@Reference
private transient ResourceResolverFactory resourceResolverFactory;
private static final Logger LOG = LoggerFactory.getLogger(CustomServlet.class);
@Override
protected void doGet(final SlingHttpServletRequest request, final SlingHttpServletResponse response) {
response.setContentType("text/plain");
response.setCharacterEncoding("UTF-8");
LOG.info("Able to hit in");
response.setStatus(SlingHttpServletResponse.SC_OK);
}
@Override
protected void doPost(SlingHttpServletRequest req,
SlingHttpServletResponse resp) throws ServletException, IOException {
CloseableHttpClient httpClient = HttpClients.createDefault();
try {
resp.setContentType("text/plain");
resp.getWriter().write("Simple Post Test");
resp.sendRedirect("www.google.com");
req = (SlingHttpServletRequest) new HttpGet("https://mocki.io/v1/bbb77b19-e2dc-454c-9b4d-a50db8fe99f6");
String firstname = req.getParameter("firstname");
String lastname = req.getParameter("lastname");
int age = Integer.parseInt(req.getParameter(String.valueOf("age")));
String gender = req.getParameter("gender");
String address1 = req.getParameter("address1");
String address2 = req.getParameter("address2");
String city = req.getParameter("city");
String states = req.getParameter("states");
int pincode = Integer.parseInt(req.getParameter(String.valueOf("pincode")));
resp = httpClient.execute(req);
System.out.print(firstname);
LOG.info(firstname);
resp.getWriter().print("call");
resp.sendRedirect("www.google.com");
/* final Map<String, Object > param = Collections.singletonMap(ResourceResolverFactory.SUBSERVICE, (Object) "getResourceResolver");
ResourceResolver resourceResolver = null;
try {
resourceResolver = resourceResolverFactory.getServiceResourceResolver(param);
Resource myResource = (Resource) resourceResolver.getResource("/content/usergenerated/data");
// if(myResource==null){
Map<String, Object> properties3 = new HashMap<String, Object>();
properties3.put("firstname",firstname);
properties3.put("lastname",lastname);
properties3.put("email",email);
properties3.put("subject",subject);
}
}
}*/
Solved! Go to Solution.
Views
Replies
Total Likes
Probably need more information to answer the question, you can send what your browser network tab logs? You could verify the request that way to make sure everything is coming as expected to the servlet. Check headers and parameters.
I also noticed you are outputting the messages on the doGet method and not doPost, please review that form is submitting the right method your servlet is expecting for these messages to show properly.
One last thing I would suggest to test is using the getRequestParameter method instead of getParameter.
Probably need more information to answer the question, you can send what your browser network tab logs? You could verify the request that way to make sure everything is coming as expected to the servlet. Check headers and parameters.
I also noticed you are outputting the messages on the doGet method and not doPost, please review that form is submitting the right method your servlet is expecting for these messages to show properly.
One last thing I would suggest to test is using the getRequestParameter method instead of getParameter.
How are you submitting the form data to servlet? Are you submitting using ajax call on submit button or using the form post action? Check if the form data if passing in the request object that is making call to the servlet in the network tab.
Views
Likes
Replies
Views
Likes
Replies