You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by mt...@apache.org on 2020/01/01 13:41:19 UTC
[ofbiz-framework] 02/02: Improved: Remove ‘RequestHandler#ControllerConfig’ wrapper (OFBIZ-11313)
This is an automated email from the ASF dual-hosted git repository.
mthl pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/ofbiz-framework.git
commit 7508917a0af0311694c37cf1ddd4231a0c8b3529
Author: Mathieu Lirzin <ma...@nereide.fr>
AuthorDate: Sun Dec 29 16:29:01 2019 +0100
Improved: Remove ‘RequestHandler#ControllerConfig’ wrapper
(OFBIZ-11313)
‘RequestHandler#ControllerConfig’ was a wrapper around
‘ConfigXMLReader#ControllerConfig’ used as a convenience to gather
error handling when accessing configuration properties. Since the
later is now only throwing exceptions when instantiating the object,
‘RequestHandler#ControllerConfig’ is not useful anymore.
---
build.gradle | 2 +-
.../ofbiz/webapp/control/ConfigXMLReader.java | 11 +-
.../ofbiz/webapp/control/RequestHandler.java | 128 +++++----------------
.../webapp/event/ServiceMultiEventHandler.java | 7 +-
.../ofbiz/webapp/control/RequestHandlerTests.java | 7 +-
.../java/org/apache/ofbiz/widget/WidgetWorker.java | 9 +-
6 files changed, 45 insertions(+), 119 deletions(-)
diff --git a/build.gradle b/build.gradle
index 34bd3be..09ead78 100644
--- a/build.gradle
+++ b/build.gradle
@@ -285,7 +285,7 @@ checkstyle {
// the sum of errors that were present before introducing the
// ‘checkstyle’ tool present in the framework and in the official
// plugins.
- tasks.checkstyleMain.maxErrors = 37725
+ tasks.checkstyleMain.maxErrors = 37713
// Currently there are a lot of errors so we need to temporarily
// hide them to avoid polluting the terminal output.
showViolations = false
diff --git a/framework/webapp/src/main/java/org/apache/ofbiz/webapp/control/ConfigXMLReader.java b/framework/webapp/src/main/java/org/apache/ofbiz/webapp/control/ConfigXMLReader.java
index fddb48b..0802582 100644
--- a/framework/webapp/src/main/java/org/apache/ofbiz/webapp/control/ConfigXMLReader.java
+++ b/framework/webapp/src/main/java/org/apache/ofbiz/webapp/control/ConfigXMLReader.java
@@ -182,6 +182,9 @@ public class ConfigXMLReader {
}
public static class ControllerConfig {
+ private static final String DEFAULT_REDIRECT_STATUS_CODE =
+ UtilProperties.getPropertyValue("requestHandler", "status-code", "302");
+
public URL url;
private String errorpage;
private String protectView;
@@ -299,8 +302,14 @@ public class ConfigXMLReader {
return getIncludes(ccfg -> ccfg.securityClass);
}
+ /**
+ * Provides the status code that should be used when redirecting an HTTP client.
+ *
+ * @return an HTTP response status code.
+ */
public String getStatusCode() {
- return getIncludes(ccfg -> ccfg.statusCode);
+ String status = getIncludes(ccfg -> ccfg.statusCode);
+ return UtilValidate.isEmpty(status) ? DEFAULT_REDIRECT_STATUS_CODE : status;
}
public Map<String, String> getViewHandlerMap() {
diff --git a/framework/webapp/src/main/java/org/apache/ofbiz/webapp/control/RequestHandler.java b/framework/webapp/src/main/java/org/apache/ofbiz/webapp/control/RequestHandler.java
index f7d8d08..965d0d1 100644
--- a/framework/webapp/src/main/java/org/apache/ofbiz/webapp/control/RequestHandler.java
+++ b/framework/webapp/src/main/java/org/apache/ofbiz/webapp/control/RequestHandler.java
@@ -55,13 +55,13 @@ import org.apache.ofbiz.base.util.UtilMisc;
import org.apache.ofbiz.base.util.UtilObject;
import org.apache.ofbiz.base.util.UtilProperties;
import org.apache.ofbiz.base.util.UtilValidate;
-import org.apache.ofbiz.base.util.collections.MultivaluedMapContext;
import org.apache.ofbiz.entity.Delegator;
import org.apache.ofbiz.entity.GenericEntityException;
import org.apache.ofbiz.entity.GenericValue;
import org.apache.ofbiz.entity.util.EntityQuery;
import org.apache.ofbiz.entity.util.EntityUtilProperties;
import org.apache.ofbiz.webapp.OfbizUrlBuilder;
+import org.apache.ofbiz.webapp.control.ConfigXMLReader.ControllerConfig;
import org.apache.ofbiz.webapp.control.ConfigXMLReader.RequestMap;
import org.apache.ofbiz.webapp.event.EventFactory;
import org.apache.ofbiz.webapp.event.EventHandler;
@@ -80,8 +80,6 @@ import org.apache.ofbiz.widget.model.ThemeFactory;
public class RequestHandler {
public static final String module = RequestHandler.class.getName();
- private final static String defaultStatusCodeString =
- UtilProperties.getPropertyValue("requestHandler", "status-code", "302");
private final ViewFactory viewFactory;
private final EventFactory eventFactory;
private final URL controllerConfigURL;
@@ -89,66 +87,6 @@ public class RequestHandler {
private final boolean trackVisit;
private ControllerConfig ccfg;
- static class ControllerConfig {
- private final MultivaluedMapContext<String, RequestMap> requestMapMap;
- private final Map<String, ConfigXMLReader.ViewMap> viewMapMap;
- private String statusCodeString;
- private final String defaultRequest;
- private final Map<String, ConfigXMLReader.Event> firstVisitEventList;
- private final Map<String, ConfigXMLReader.Event> preprocessorEventList;
- private final Map<String, ConfigXMLReader.Event> postprocessorEventList;
- private final String protectView;
-
- ControllerConfig(ConfigXMLReader.ControllerConfig ccfg) throws WebAppConfigurationException {
- preprocessorEventList = ccfg.getPreprocessorEventList();
- postprocessorEventList = ccfg.getPostprocessorEventList();
- requestMapMap = ccfg.getRequestMapMultiMap();
- viewMapMap = ccfg.getViewMapMap();
- defaultRequest = ccfg.getDefaultRequest();
- firstVisitEventList = ccfg.getFirstVisitEventList();
- protectView = ccfg.getProtectView();
-
- String status = ccfg.getStatusCode();
- statusCodeString = UtilValidate.isEmpty(status) ? defaultStatusCodeString : status;
- }
-
- public MultivaluedMapContext<String, RequestMap> getRequestMapMap() {
- return requestMapMap;
- }
-
- public Map<String, ConfigXMLReader.ViewMap> getViewMapMap() {
- return viewMapMap;
- }
-
- public String getStatusCodeString() {
- return statusCodeString;
- }
-
- public String getDefaultRequest() {
- return defaultRequest;
- }
-
- public void setStatusCodeString(String statusCodeString) {
- this.statusCodeString = statusCodeString;
- }
-
- public Map<String, ConfigXMLReader.Event> getFirstVisitEventList() {
- return firstVisitEventList;
- }
-
- public Map<String, ConfigXMLReader.Event> getPreprocessorEventList() {
- return preprocessorEventList;
- }
-
- public Map<String, ConfigXMLReader.Event> getPostprocessorEventList() {
- return postprocessorEventList;
- }
-
- public String getProtectView() {
- return protectView;
- }
- }
-
public static RequestHandler getRequestHandler(ServletContext servletContext) {
RequestHandler rh = (RequestHandler) servletContext.getAttribute("_REQUEST_HANDLER_");
if (rh == null) {
@@ -193,7 +131,7 @@ public class RequestHandler {
* @return a collection of request maps which might be empty
*/
static Collection<RequestMap> resolveURI(ControllerConfig ccfg, HttpServletRequest req) {
- Map<String, List<RequestMap>> requestMapMap = ccfg.getRequestMapMap();
+ Map<String, List<RequestMap>> requestMapMap = ccfg.getRequestMapMultiMap();
Collection<RequestMap> rmaps = resolveTemplateURI(requestMapMap, req);
if (rmaps.isEmpty()) {
Map<String, ConfigXMLReader.ViewMap> viewMapMap = ccfg.getViewMapMap();
@@ -277,7 +215,7 @@ public class RequestHandler {
// Parse controller config.
try {
- ccfg = new ControllerConfig(getControllerConfig());
+ ccfg = ConfigXMLReader.getControllerConfig(controllerConfigURL);
} catch (WebAppConfigurationException e) {
Debug.logError(e, "Exception thrown while parsing controller.xml file: ", module);
throw new RequestHandlerException(e);
@@ -342,7 +280,7 @@ public class RequestHandler {
// Check for chained request.
if (chain != null) {
String chainRequestUri = RequestHandler.getRequestUri(chain);
- requestMap = ccfg.getRequestMapMap().getFirst(chainRequestUri);
+ requestMap = ccfg.getRequestMapMap().get(chainRequestUri);
if (requestMap == null) {
throw new RequestHandlerException("Unknown chained request [" + chainRequestUri + "]; this request does not exist");
}
@@ -366,11 +304,11 @@ public class RequestHandler {
// Check to make sure we are allowed to access this request directly. (Also checks if this request is defined.)
// If the request cannot be called, or is not defined, check and see if there is a default-request we can process
if (!requestMap.securityDirectRequest) {
- if (ccfg.getDefaultRequest() == null || !ccfg.getRequestMapMap().getFirst(ccfg.getDefaultRequest()).securityDirectRequest) {
+ if (ccfg.getDefaultRequest() == null || !ccfg.getRequestMapMap().get(ccfg.getDefaultRequest()).securityDirectRequest) {
// use the same message as if it was missing for security reasons, ie so can't tell if it is missing or direct request is not allowed
throw new RequestHandlerException(requestMissingErrorMessage);
} else {
- requestMap = ccfg.getRequestMapMap().getFirst(ccfg.getDefaultRequest());
+ requestMap = ccfg.getRequestMapMap().get(ccfg.getDefaultRequest());
}
}
// Check if we SHOULD be secure and are not.
@@ -412,7 +350,7 @@ public class RequestHandler {
String newUrl = RequestHandler.makeUrl(request, response, urlBuf.toString());
if (newUrl.toUpperCase().startsWith("HTTPS")) {
// if we are supposed to be secure, redirect secure.
- callRedirect(newUrl, response, request, ccfg.getStatusCodeString());
+ callRedirect(newUrl, response, request, ccfg.getStatusCode());
return;
}
}
@@ -497,7 +435,7 @@ public class RequestHandler {
// Invoke the security handler
// catch exceptions and throw RequestHandlerException if failed.
if (Debug.verboseOn()) Debug.logVerbose("[RequestHandler]: AuthRequired. Running security check. " + showSessionId(request), module);
- ConfigXMLReader.Event checkLoginEvent = ccfg.getRequestMapMap().getFirst("checkLogin").event;
+ ConfigXMLReader.Event checkLoginEvent = ccfg.getRequestMapMap().get("checkLogin").event;
String checkLoginReturnString = null;
try {
@@ -510,9 +448,9 @@ public class RequestHandler {
eventReturn = checkLoginReturnString;
// if the request is an ajax request we don't want to return the default login check
if (!"XMLHttpRequest".equals(request.getHeader("X-Requested-With"))) {
- requestMap = ccfg.getRequestMapMap().getFirst("checkLogin");
+ requestMap = ccfg.getRequestMapMap().get("checkLogin");
} else {
- requestMap = ccfg.getRequestMapMap().getFirst("ajaxCheckLogin");
+ requestMap = ccfg.getRequestMapMap().get("ajaxCheckLogin");
}
}
}
@@ -644,7 +582,7 @@ public class RequestHandler {
redirectTarget += "?" + queryString;
}
- callRedirect(makeLink(request, response, redirectTarget), response, request, ccfg.getStatusCodeString());
+ callRedirect(makeLink(request, response, redirectTarget), response, request, ccfg.getStatusCode());
return;
}
}
@@ -702,31 +640,32 @@ public class RequestHandler {
}
}
- String responseStatusCode = nextRequestResponse.statusCode;
- if(UtilValidate.isNotEmpty(responseStatusCode))
- ccfg.setStatusCodeString(responseStatusCode);
-
+ // The status code used to redirect the HTTP client.
+ String redirectSC = UtilValidate.isNotEmpty(nextRequestResponse.statusCode)
+ ? nextRequestResponse.statusCode
+ : ccfg.getStatusCode();
+
if ("url".equals(nextRequestResponse.type)) {
if (Debug.verboseOn()) Debug.logVerbose("[RequestHandler.doRequest]: Response is a URL redirect." + showSessionId(request), module);
- callRedirect(nextRequestResponse.value, response, request, ccfg.getStatusCodeString());
+ callRedirect(nextRequestResponse.value, response, request, redirectSC);
} else if ("url-redirect".equals(nextRequestResponse.type)) {
// check for a cross-application redirect
if (Debug.verboseOn())
Debug.logVerbose("[RequestHandler.doRequest]: Response is a URL redirect with redirect parameters."
+ showSessionId(request), module);
callRedirect(nextRequestResponse.value + this.makeQueryString(request, nextRequestResponse), response,
- request, ccfg.getStatusCodeString());
+ request, redirectSC);
} else if ("cross-redirect".equals(nextRequestResponse.type)) {
// check for a cross-application redirect
if (Debug.verboseOn()) Debug.logVerbose("[RequestHandler.doRequest]: Response is a Cross-Application redirect." + showSessionId(request), module);
String url = nextRequestResponse.value.startsWith("/") ? nextRequestResponse.value : "/" + nextRequestResponse.value;
- callRedirect(url + this.makeQueryString(request, nextRequestResponse), response, request, ccfg.getStatusCodeString());
+ callRedirect(url + this.makeQueryString(request, nextRequestResponse), response, request, redirectSC);
} else if ("request-redirect".equals(nextRequestResponse.type)) {
if (Debug.verboseOn()) Debug.logVerbose("[RequestHandler.doRequest]: Response is a Request redirect." + showSessionId(request), module);
- callRedirect(makeLinkWithQueryString(request, response, "/" + nextRequestResponse.value, nextRequestResponse), response, request, ccfg.getStatusCodeString());
+ callRedirect(makeLinkWithQueryString(request, response, "/" + nextRequestResponse.value, nextRequestResponse), response, request, redirectSC);
} else if ("request-redirect-noparam".equals(nextRequestResponse.type)) {
if (Debug.verboseOn()) Debug.logVerbose("[RequestHandler.doRequest]: Response is a Request redirect with no parameters." + showSessionId(request), module);
- callRedirect(makeLink(request, response, nextRequestResponse.value), response, request, ccfg.getStatusCodeString());
+ callRedirect(makeLink(request, response, nextRequestResponse.value), response, request, redirectSC);
} else if ("view".equals(nextRequestResponse.type)) {
if (Debug.verboseOn()) Debug.logVerbose("[RequestHandler.doRequest]: Response is a view." + showSessionId(request), module);
@@ -1140,13 +1079,7 @@ public class RequestHandler {
String requestUri = RequestHandler.getRequestUri(url);
ConfigXMLReader.RequestMap requestMap = null;
if (requestUri != null) {
- try {
- requestMap = getControllerConfig().getRequestMapMap().get(requestUri);
- } catch (WebAppConfigurationException e) {
- // If we can't read the controller.xml file, then there is no point in continuing.
- Debug.logError(e, "Exception thrown while parsing controller.xml file: ", module);
- return null;
- }
+ requestMap = getControllerConfig().getRequestMapMap().get(requestUri);
}
boolean didFullSecure = false;
boolean didFullStandard = false;
@@ -1302,20 +1235,15 @@ public class RequestHandler {
if (uriString == null) {
uriString= "";
}
- try {
- Map<String, RequestMap> rmaps = getControllerConfig().getRequestMapMap();
- RequestMap requestMap = rmaps.get(uriString);
+ Map<String, RequestMap> rmaps = getControllerConfig().getRequestMapMap();
+ RequestMap requestMap = rmaps.get(uriString);
+ if (requestMap == null) {
+ requestMap = rmaps.get(getControllerConfig().getDefaultRequest());
if (requestMap == null) {
- requestMap = rmaps.get(getControllerConfig().getDefaultRequest());
- if (requestMap == null) {
- return false;
- }
+ return false;
}
- return pred.test(requestMap);
- } catch (WebAppConfigurationException e) {
- Debug.logError(e, "Exception thrown while parsing controller.xml file: ", module);
- return false;
}
+ return pred.test(requestMap);
}
/**
diff --git a/framework/webapp/src/main/java/org/apache/ofbiz/webapp/event/ServiceMultiEventHandler.java b/framework/webapp/src/main/java/org/apache/ofbiz/webapp/event/ServiceMultiEventHandler.java
index 55c8929..e768553 100644
--- a/framework/webapp/src/main/java/org/apache/ofbiz/webapp/event/ServiceMultiEventHandler.java
+++ b/framework/webapp/src/main/java/org/apache/ofbiz/webapp/event/ServiceMultiEventHandler.java
@@ -161,12 +161,7 @@ public class ServiceMultiEventHandler implements EventHandler {
} catch (WebAppConfigurationException e) {
throw new EventHandlerException(e);
}
- boolean eventGlobalTransaction;
- try {
- eventGlobalTransaction = controllerConfig.getRequestMapMap().get(requestUri).event.globalTransaction;
- } catch (WebAppConfigurationException e) {
- throw new EventHandlerException(e);
- }
+ boolean eventGlobalTransaction = controllerConfig.getRequestMapMap().get(requestUri).event.globalTransaction;
// big try/finally to make sure commit or rollback are run
boolean beganTrans = false;
diff --git a/framework/webapp/src/test/java/org/apache/ofbiz/webapp/control/RequestHandlerTests.java b/framework/webapp/src/test/java/org/apache/ofbiz/webapp/control/RequestHandlerTests.java
index 0469d76..53d760d 100644
--- a/framework/webapp/src/test/java/org/apache/ofbiz/webapp/control/RequestHandlerTests.java
+++ b/framework/webapp/src/test/java/org/apache/ofbiz/webapp/control/RequestHandlerTests.java
@@ -40,6 +40,7 @@ import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.apache.ofbiz.base.util.collections.MultivaluedMapContext;
+import org.apache.ofbiz.webapp.control.ConfigXMLReader.ControllerConfig;
import org.apache.ofbiz.webapp.control.ConfigXMLReader.RequestMap;
import org.apache.ofbiz.webapp.control.ConfigXMLReader.ViewMap;
import org.junit.Before;
@@ -52,15 +53,15 @@ public class RequestHandlerTests {
private Map<String, ViewMap> viewMaps;
private HttpServletRequest req;
private Element dummyElement;
- private RequestHandler.ControllerConfig ccfg;
+ private ControllerConfig ccfg;
@Before
public void setUp() {
- ccfg = mock(RequestHandler.ControllerConfig.class);
+ ccfg = mock(ControllerConfig.class);
reqMaps = new MultivaluedMapContext<>();
viewMaps = new HashMap<>();
when(ccfg.getDefaultRequest()).thenReturn(null);
- when(ccfg.getRequestMapMap()).thenReturn(reqMaps);
+ when(ccfg.getRequestMapMultiMap()).thenReturn(reqMaps);
when(ccfg.getViewMapMap()).thenReturn(viewMaps);
req = mock(HttpServletRequest.class);
dummyElement = mock(Element.class);
diff --git a/framework/widget/src/main/java/org/apache/ofbiz/widget/WidgetWorker.java b/framework/widget/src/main/java/org/apache/ofbiz/widget/WidgetWorker.java
index 3a1646d..2f043bb 100644
--- a/framework/widget/src/main/java/org/apache/ofbiz/widget/WidgetWorker.java
+++ b/framework/widget/src/main/java/org/apache/ofbiz/widget/WidgetWorker.java
@@ -27,7 +27,6 @@ import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-import org.apache.ofbiz.base.util.Debug;
import org.apache.ofbiz.base.util.UtilCodec;
import org.apache.ofbiz.base.util.UtilGenerics;
import org.apache.ofbiz.base.util.UtilHttp;
@@ -36,7 +35,6 @@ import org.apache.ofbiz.entity.Delegator;
import org.apache.ofbiz.service.LocalDispatcher;
import org.apache.ofbiz.webapp.control.ConfigXMLReader;
import org.apache.ofbiz.webapp.control.RequestHandler;
-import org.apache.ofbiz.webapp.control.WebAppConfigurationException;
import org.apache.ofbiz.webapp.taglib.ContentUrlTag;
import org.apache.ofbiz.widget.model.ModelForm;
import org.apache.ofbiz.widget.model.ModelFormField;
@@ -300,12 +298,7 @@ public final class WidgetWorker {
String requestUri = (target.indexOf('?') > -1) ? target.substring(0, target.indexOf('?')) : target;
ServletContext servletContext = request.getSession().getServletContext();
RequestHandler rh = (RequestHandler) servletContext.getAttribute("_REQUEST_HANDLER_");
- ConfigXMLReader.RequestMap requestMap = null;
- try {
- requestMap = rh.getControllerConfig().getRequestMapMap().get(requestUri);
- } catch (WebAppConfigurationException e) {
- Debug.logError(e, "Exception thrown while parsing controller.xml file: ", module);
- }
+ ConfigXMLReader.RequestMap requestMap = rh.getControllerConfig().getRequestMapMap().get(requestUri);
if (requestMap != null && requestMap.event != null) {
return "hidden-form";
}