Expand my Community achievements bar.

Learn about Edge Delivery Services in upcoming GEM session

AEM Custom Form Action

Avatar

Level 3

I am working on custom form action.

So far I am able to achieve the following points.

 

1. Added Custom Form Action.

2. Overlap Forward.jsp page.

3. From Forward.jsp able to successfully route to Custom SlingServlet.

4. In Custom Sling Servlet I have the following requirement.

     a. Get all request parameters

     b. Send the request to third part application by using HttpClient

     c. On response equals to 200 rout the servlet to Thank you page.

 

Right now I have 2 issues.

 

1. In HttpClient I am able to pass the request data if I hard code the value , but if I try to submit it by dynamically populated to NameValuePare Array even though values are there it is not getting processed.

 

2. Once I have response as 200 I am not able to route the servlet to "Thank you page" , but getting the following exception.

 

-----------------------------------------------

SlingServlet Code.

-----------------------------------------------

 

@Override
protected void doPost(SlingHttpServletRequest request,
   SlingHttpServletResponse response) throws ServletException,
   IOException {
  LOG.debug("Enter into doPost method");

 

  NameValuePair[] requestFormdata = null;
  ProcessHttpClientUtil processHttpClientUtil = null;
  int responseCode = -1;

  processHttpClientUtil = new ProcessHttpClientUtil();
  requestFormdata = postToApp(request);

  responseCode = processHttpClientUtil.processHttpClient(response, requestFormdata,
    formsConfigService, formsConfigService.getAppURL() );

 
  if (responseCode == HttpStatus.SC_OK){
 
   response.getWriter().print(" Request Successuflly Processed");
  
   request.getRequestDispatcher(request.getParameter(":redirect")).forward(request,response) ;

// :redirect is path of Thank you page "/content/aruba/na/us/n/thankyou.html".

 

}else
  {
   response.getWriter().print(" Request Failed to Processed");
  }
 
  LOG.debug("Exit from doPost method");
}

 

 

@SuppressWarnings("unchecked")
private NameValuePair[] postToApp(
   final SlingHttpServletRequest request) {

 

  Map<String, String> requestMap = null;
  Iterator<String> iterator = null;
  String parameterKey = null;
  NameValuePair[] data = null;
  int count = 0;
  int totalParam = 0;

  requestMap = request.getParameterMap();

  LOG.debug("Result from Iterator Map" + requestMap.size() + " "
    + requestMap);

  if (requestMap.keySet() != null) {
   iterator = requestMap.keySet().iterator();
   totalParam = requestMap.size();
  }

  data = new NameValuePair[totalParam + 1];

  if (iterator != null) {
   while (iterator.hasNext()) {
    parameterKey = (String) iterator.next();

    data[count] = new NameValuePair(parameterKey,
      request.getParameter(parameterKey));
    count++;


   }

   data[count] = new NameValuePair("encoding", "UTF-8");

   // Need to remove
   LOG.debug("Result from Iterator final length " + data.length);

   LOG.debug("Exit from postToSalesforce method");
  }


  return data;
}

 

 

NOTE : IN Exception Oid = 00D90000000b33A is highlighted it is nothing but the hidden parameters added in Start.jsp page.

Since I am calling RequestDispatcher and passing the request parameters these values are also getting passed to Thanks you page.

----------------------------------------------------------------------------------

EXCEPTION DETAILS ON ROUTING REQUEST TO THANK YOU PAGE

----------------------------------------------------------------------------------

Error while processing /content/aruba/na/us/n/thankyou

Status
500

Message
javax.jcr.nodetype.ConstraintViolationException: No matching property definition: Oid = 00D90000000b33A

Location /content/aruba/na/us/n/thankyou
Parent Location /content/aruba/na/us/n
Path
/content/aruba/na/us/n/thankyou

Referer http://localhost:4504/content/aruba/na/us/n/salesforce.html
ChangeLog
<pre></pre>

 

-------------------------------------

From ERRO LOG File.

 

01.10.2014 12:22:10.288 *ERROR* [0:0:0:0:0:0:0:1 [1412146328863] POST /content/aruba/na/us/n/salesforce.html HTTP/1.1] org.apache.sling.servlets.post.impl.operations.ModifyOperation Exception during response processing.

javax.jcr.nodetype.ConstraintViolationException: No matching property definition: Oid = 00D90000000b33A

at org.apache.jackrabbit.oak.jcr.delegate.NodeDelegate.setProperty(NodeDelegate.java:522)

at org.apache.jackrabbit.oak.jcr.session.NodeImpl$35.perform(NodeImpl.java:1305)

at org.apache.jackrabbit.oak.jcr.session.NodeImpl$35.perform(NodeImpl.java:1294)

at org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate.perform(SessionDelegate.java:308)

at org.apache.jackrabbit.oak.jcr.session.ItemImpl.perform(ItemImpl.java:113)

at org.apache.jackrabbit.oak.jcr.session.NodeImpl.internalSetProperty(NodeImpl.java:1294)

at org.apache.jackrabbit.oak.jcr.session.NodeImpl.setProperty(NodeImpl.java:422)

at org.apache.sling.servlets.post.impl.helper.SlingPropertyValueHandler.store(SlingPropertyV alueHandler.java:592)

at org.apache.sling.servlets.post.impl.helper.SlingPropertyValueHandler.setPropertyAsIs(Slin gPropertyValueHandler.java:305)

at org.apache.sling.servlets.post.impl.helper.SlingPropertyValueHandler.setProperty(SlingPro pertyValueHandler.java:159)

at org.apache.sling.servlets.post.impl.operations.ModifyOperation.writeContent(ModifyOperati on.java:411)

at org.apache.sling.servlets.post.impl.operations.ModifyOperation.doRun(ModifyOperation.java :101)

at org.apache.sling.servlets.post.AbstractPostOperation.run(AbstractPostOperation.java:92)

at org.apache.sling.servlets.post.impl.SlingPostServlet.doPost(SlingPostServlet.java:200)

at org.apache.sling.api.servlets.SlingAllMethodsServlet.mayService(SlingAllMethodsServlet.ja va:148)

at org.apache.sling.api.servlets.SlingSafeMethodsServlet.service(SlingSafeMethodsServlet.jav a:344)

at org.apache.sling.api.servlets.SlingSafeMethodsServlet.service(SlingSafeMethodsServlet.jav a:375)

at org.apache.sling.engine.impl.request.RequestData.service(RequestData.java:511)

at org.apache.sling.engine.impl.filter.SlingComponentFilterChain.render(SlingComponentFilter Chain.java:45)

at org.apache.sling.engine.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilter Chain.java:64)

at com.day.cq.wcm.core.impl.WCMDebugFilter.doFilter(WCMDebugFilter.java:146)

at org.apache.sling.engine.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilter Chain.java:60)

at com.day.cq.wcm.core.impl.WCMComponentFilter.filterRootInclude(WCMComponentFilter.java:357 )

at com.day.cq.wcm.core.impl.WCMComponentFilter.doFilter(WCMComponentFilter.java:166)

at org.apache.sling.engine.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilter Chain.java:60)

at com.day.cq.personalization.impl.TargetComponentFilter.doFilter(TargetComponentFilter.java :96)

at org.apache.sling.engine.impl.filter.AbstractSlingFilterChain.doFilter(AbstractSlingFilter Chain.java:60)

at org.apache.sling.engine.impl.SlingRequestProcessorImpl.processComponent(SlingRequestProce ssorImpl.java:284)

at org.apache.sling.engine.impl.SlingRequestProcessorImpl.dispatchRequest(SlingRequestProces sorImpl.java:324)

at org.apache.sling.engine.impl.request.SlingRequestDispatcher.dispatch(SlingRequestDispatch er.java:216)

at org.apache.sling.engine.impl.request.SlingRequestDispatcher.forward(SlingRequestDispatche r.java:144)

at com.day.cq.wcm.core.impl.WCMComponentFilter$ForwardRequestDispatcher.forward(WCMComponent Filter.java:418)

at com.aig.dmfc.forms.SalesforcePostServlet.doPost(SalesforcePostServlet.java:97)

at org.apache.sling.api.servlets.SlingAllMethodsServlet.mayService(SlingAllMethodsServlet.ja va:148)

at org.apache.sling.api.servlets.SlingSafeMethodsServlet.service(SlingSafeMethodsServlet.jav a:344)

at org.apache.sling.api.servlets.SlingSafeMethodsServlet.service(SlingSafeMethodsServlet.jav a:375)

at org.apache.sling.engine.impl.request.RequestData.service(RequestData.java:511)

 

Advice and Guidence on this will help.

1 Reply

Avatar

Level 3

First issue got resolved , 1 of the input parameters was not set properly.

Now have only issue with "Once I have response as 200 I am not able to route the servlet to "Thank you page" , but getting the following exception".