diff --git a/framework/base/src/main/java/org/apache/ofbiz/base/util/UtilHttp.java b/framework/base/src/main/java/org/apache/ofbiz/base/util/UtilHttp.java index 83bbe85d5e5..0b1a3d45d12 100644 --- a/framework/base/src/main/java/org/apache/ofbiz/base/util/UtilHttp.java +++ b/framework/base/src/main/java/org/apache/ofbiz/base/util/UtilHttp.java @@ -172,9 +172,6 @@ public static Map getParameterMap(HttpServletRequest req, Predic throw new RuntimeException(e); } params.putAll(multiPartMap); - if (req.getAttribute("multiPartMap") == null) { - req.setAttribute("multiPartMap", multiPartMap); - } if (Debug.verboseOn()) { Debug.logVerbose("Made Request Parameter Map with [" + params.size() + "] Entries", MODULE); } @@ -222,8 +219,23 @@ public static JakartaServletFileUpload getSer return upload; } + /** + * Lazy getter for parameters of requests with multipart encoding. + *

+ * Sets the multipart data as request attribute "multiPartMap" when called the first time but will refer to that request attribute + * for subsequent times. + * + * @param request + * @return + */ public static Map getMultiPartParameterMap(HttpServletRequest request) throws FileUploadException { - Map multiPartMap = new HashMap<>(); + Map multiPartMap = UtilGenerics.checkMap(request.getAttribute("multiPartMap"), String.class, Object.class); + + if (multiPartMap != null) { + return multiPartMap; + } + multiPartMap = new HashMap<>(); + Delegator delegator = (Delegator) request.getAttribute("delegator"); HttpSession session = request.getSession(); boolean isMultiPart = JakartaServletFileUpload.isMultipartContent(request); @@ -304,7 +316,7 @@ public static Map getMultiPartParameterMap(HttpServletRequest re } } } - + request.setAttribute("multiPartMap", multiPartMap); return multiPartMap; } diff --git a/framework/webapp/src/main/java/org/apache/ofbiz/webapp/event/ServiceEventHandler.java b/framework/webapp/src/main/java/org/apache/ofbiz/webapp/event/ServiceEventHandler.java index f3c9bbc164d..8b73092d081 100644 --- a/framework/webapp/src/main/java/org/apache/ofbiz/webapp/event/ServiceEventHandler.java +++ b/framework/webapp/src/main/java/org/apache/ofbiz/webapp/event/ServiceEventHandler.java @@ -157,7 +157,9 @@ public String invoke(Event event, RequestMap requestMap, HttpServletRequest requ value = paramList; } else { // first check the multi-part map - value = multiPartMap.get(name); + if (UtilValidate.isNotEmpty(multiPartMap)) { + value = multiPartMap.get(name); + } // next check attributes; do this before parameters so that attribute which can // be changed by code can override parameters which can't