Fixed: Unable to add survey product to cart in order entry form.
It was due to incorrect usage of param map, used UtilHttp.getCombinedMap instead with some code improvements.
Thanks Amit Gadaley for reporting the issue and providing the patch.
*******************************************************************************/
package org.apache.ofbiz.content.survey;
+import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
@@ -25,6 +26,7 @@ import javax.servlet.http.HttpServletResponse;
import org.apache.ofbiz.base.util.Debug;
import org.apache.ofbiz.base.util.UtilHttp;
+import org.apache.ofbiz.service.*;
import org.apache.ofbiz.webapp.control.ConfigXMLReader;
import org.apache.ofbiz.webapp.control.ConfigXMLReader.RequestMap;
import org.apache.ofbiz.webapp.control.RequestHandler;
@@ -39,29 +41,25 @@ public class SurveyEvents {
public static final String module = SurveyEvents.class.getName();
public static String createSurveyResponseAndRestoreParameters(HttpServletRequest request, HttpServletResponse response) {
- // Call createSurveyResponse as an event, easier to setup and ensures parameter security
- ConfigXMLReader.Event createSurveyResponseEvent = new ConfigXMLReader.Event("service", null, "createSurveyResponse", true);
- RequestHandler rh = (RequestHandler) request.getAttribute("_REQUEST_HANDLER_");
- ConfigXMLReader.ControllerConfig controllerConfig = rh.getControllerConfig();
- String requestUri = (String) request.getAttribute("thisRequestUri");
- RequestMap requestMap = null;
+ LocalDispatcher dispatcher = (LocalDispatcher) request.getAttribute("dispatcher");
+ DispatchContext dctx = dispatcher.getDispatchContext();
+
+ Map<String, Object> combinedMap = UtilHttp.getCombinedMap(request);
+
try {
- requestMap = controllerConfig.getRequestMapMap().get(requestUri);
- } catch (WebAppConfigurationException e) {
- Debug.logError(e, "Exception thrown while parsing controller.xml file: ", module);
+ Map<String, Object> surveyResponseMap = dctx.makeValidContext("createSurveyResponse", ModelService.IN_PARAM, combinedMap);
+ Map<String, Object> surveyResponseResult = dispatcher.runSync("createSurveyResponse", surveyResponseMap);
+ if (ServiceUtil.isError(surveyResponseResult)) {
+ Debug.logError(ServiceUtil.getErrorMessage(surveyResponseResult), module);
+ return "error";
}
- String eventResponse = null;
- try {
- eventResponse = rh.runEvent(request, response, createSurveyResponseEvent, requestMap, null);
- } catch (EventHandlerException e) {
+ request.setAttribute("surveyResponseId", surveyResponseResult.get("surveyResponseId"));
+ } catch (GenericServiceException e) {
Debug.logError(e, module);
return "error";
}
- if (!"success".equals(eventResponse)) {
- return eventResponse;
- }
+
// Check for an incoming _ORIG_PARAM_MAP_ID_, if present get the session stored parameter map and insert it's entries as request attributes
- Map<String, Object> combinedMap = UtilHttp.getCombinedMap(request);
if (combinedMap.containsKey("_ORIG_PARAM_MAP_ID_")) {
String origParamMapId = (String) combinedMap.get("_ORIG_PARAM_MAP_ID_");
UtilHttp.restoreStashedParameterMap(request, origParamMapId);
