You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by lu...@apache.org on 2012/09/12 22:18:46 UTC
svn commit: r1384108 - in /struts/struts2/trunk/core/src/main:
java/org/apache/struts2/StrutsConstants.java
java/org/apache/struts2/dispatcher/Dispatcher.java
resources/org/apache/struts2/default.properties
Author: lukaszlenart
Date: Wed Sep 12 20:18:45 2012
New Revision: 1384108
URL: http://svn.apache.org/viewvc?rev=1384108&view=rev
Log:
WW-3811 adds a new constant struts.handle.exception to control when Dispatcher should handle exception and when rethrow it
Modified:
struts/struts2/trunk/core/src/main/java/org/apache/struts2/StrutsConstants.java
struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java
struts/struts2/trunk/core/src/main/resources/org/apache/struts2/default.properties
Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/StrutsConstants.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/StrutsConstants.java?rev=1384108&r1=1384107&r2=1384108&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/StrutsConstants.java (original)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/StrutsConstants.java Wed Sep 12 20:18:45 2012
@@ -243,4 +243,7 @@ public final class StrutsConstants {
public static final String STRUTS_CONVERTER_NUMBER = "struts.converter.number";
public static final String STRUTS_CONVERTER_STRING = "struts.converter.string";
+ /** Enable handling exceptions by Dispatcher - true by default **/
+ public static final String STRUTS_HANDLE_EXCEPTION = "struts.handle.exception";
+
}
Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java?rev=1384108&r1=1384107&r2=1384108&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java (original)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java Wed Sep 12 20:18:45 2012
@@ -156,6 +156,12 @@ public class Dispatcher {
private boolean paramsWorkaroundEnabled = false;
/**
+ * Indicates if Dispatcher should handle exception and call sendError()
+ * Introduced to allow integration with other frameworks like Spring Security
+ */
+ private boolean handleException;
+
+ /**
* Provide the dispatcher instance for the current thread.
*
* @return The dispatcher instance
@@ -254,6 +260,11 @@ public class Dispatcher {
this.valueStackFactory = valueStackFactory;
}
+ @Inject(StrutsConstants.STRUTS_HANDLE_EXCEPTION)
+ public void setHandleException(String handleException) {
+ this.handleException = Boolean.parseBoolean(handleException);
+ }
+
/**
* Releases all instances bound to this dispatcher instance.
*/
@@ -537,21 +548,24 @@ public class Dispatcher {
}
} catch (ConfigurationException e) {
// WW-2874 Only log error if in devMode
- if(devMode) {
+ if (devMode) {
String reqStr = request.getRequestURI();
if (request.getQueryString() != null) {
reqStr = reqStr + "?" + request.getQueryString();
}
LOG.error("Could not find action or result\n" + reqStr, e);
+ } else {
+ if (LOG.isWarnEnabled()) {
+ LOG.warn("Could not find action or result", e);
+ }
}
- else {
- if (LOG.isWarnEnabled()) {
- LOG.warn("Could not find action or result", e);
- }
- }
sendError(request, response, context, HttpServletResponse.SC_NOT_FOUND, e);
} catch (Exception e) {
- sendError(request, response, context, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e);
+ if (handleException || devMode) {
+ sendError(request, response, context, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e);
+ } else {
+ throw new ServletException(e);
+ }
} finally {
UtilTimerStack.pop(timerKey);
}
@@ -800,8 +814,7 @@ public class Dispatcher {
* @param e the Exception that is reported.
* @param ctx the ServletContext object.
*/
- public void sendError(HttpServletRequest request, HttpServletResponse response,
- ServletContext ctx, int code, Exception e) {
+ public void sendError(HttpServletRequest request, HttpServletResponse response, ServletContext ctx, int code, Exception e) {
Boolean devModeOverride = FilterDispatcher.getDevModeOverride();
if (devModeOverride != null ? devModeOverride : devMode) {
response.setContentType("text/html");
Modified: struts/struts2/trunk/core/src/main/resources/org/apache/struts2/default.properties
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/resources/org/apache/struts2/default.properties?rev=1384108&r1=1384107&r2=1384108&view=diff
==============================================================================
--- struts/struts2/trunk/core/src/main/resources/org/apache/struts2/default.properties (original)
+++ struts/struts2/trunk/core/src/main/resources/org/apache/struts2/default.properties Wed Sep 12 20:18:45 2012
@@ -207,4 +207,8 @@ struts.ognl.logMissingProperties=false
### Caches parsed OGNL expressions, but can lead to memory leaks
### if the application generates a lot of different expressions
struts.ognl.enableExpressionCache=true
+
+### Indicates if Dispatcher should handle unexpected exceptions by calling sendError()
+### or simply rethrow it as a ServletException to allow future processing by other frameworks like Spring Security
+struts.handle.exception=true
### END SNIPPET: complete_file