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 2016/12/19 17:51:24 UTC
struts git commit: WW-4725 Allows handle all redirection by
MessageStoreInterceptor
Repository: struts
Updated Branches:
refs/heads/master 4727265e5 -> 7e4d1b45e
WW-4725 Allows handle all redirection by MessageStoreInterceptor
Project: http://git-wip-us.apache.org/repos/asf/struts/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/7e4d1b45
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/7e4d1b45
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/7e4d1b45
Branch: refs/heads/master
Commit: 7e4d1b45ea9d349d22a9995dd38c8a21f0321ef0
Parents: 4727265
Author: Lukasz Lenart <lu...@apache.org>
Authored: Mon Dec 19 18:51:04 2016 +0100
Committer: Lukasz Lenart <lu...@apache.org>
Committed: Mon Dec 19 18:51:04 2016 +0100
----------------------------------------------------------------------
.../interceptor/MessageStoreInterceptor.java | 9 +++-
.../MessageStorePreResultListener.java | 46 ++++++++++++--------
.../org/apache/struts2/result/Redirectable.java | 8 ++++
.../result/ServletActionRedirectResult.java | 2 +-
.../struts2/result/ServletRedirectResult.java | 2 +-
.../MessageStorePreResultListenerTest.java | 12 +++--
.../struts2/json/JSONActionRedirectResult.java | 3 +-
7 files changed, 57 insertions(+), 25 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/struts/blob/7e4d1b45/core/src/main/java/org/apache/struts2/interceptor/MessageStoreInterceptor.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/struts2/interceptor/MessageStoreInterceptor.java b/core/src/main/java/org/apache/struts2/interceptor/MessageStoreInterceptor.java
index f3e8cb5..5052df7 100644
--- a/core/src/main/java/org/apache/struts2/interceptor/MessageStoreInterceptor.java
+++ b/core/src/main/java/org/apache/struts2/interceptor/MessageStoreInterceptor.java
@@ -203,7 +203,10 @@ public class MessageStoreInterceptor extends AbstractInterceptor {
before(invocation);
LOG.trace("Registering listener to store messages before result will be executed");
- invocation.addPreResultListener(new MessageStorePreResultListener(this));
+ MessageStorePreResultListener preResultListener = createPreResultListener(invocation);
+ preResultListener.init(this);
+
+ invocation.addPreResultListener(preResultListener);
String result = invocation.invoke();
@@ -212,6 +215,10 @@ public class MessageStoreInterceptor extends AbstractInterceptor {
return result;
}
+ protected MessageStorePreResultListener createPreResultListener(ActionInvocation invocation) {
+ return new MessageStorePreResultListener();
+ }
+
/**
* Handle the retrieving of field errors / action messages / field errors, which is
* done before action invocation, and the <code>operationMode</code> is 'RETRIEVE'.
http://git-wip-us.apache.org/repos/asf/struts/blob/7e4d1b45/core/src/main/java/org/apache/struts2/interceptor/MessageStorePreResultListener.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/struts2/interceptor/MessageStorePreResultListener.java b/core/src/main/java/org/apache/struts2/interceptor/MessageStorePreResultListener.java
index 9b313a8..4df6591 100644
--- a/core/src/main/java/org/apache/struts2/interceptor/MessageStorePreResultListener.java
+++ b/core/src/main/java/org/apache/struts2/interceptor/MessageStorePreResultListener.java
@@ -26,8 +26,7 @@ import com.opensymphony.xwork2.interceptor.ValidationAware;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.struts2.ServletActionContext;
-import org.apache.struts2.result.ServletActionRedirectResult;
-import org.apache.struts2.result.ServletRedirectResult;
+import org.apache.struts2.result.Redirectable;
import java.util.Map;
@@ -36,26 +35,25 @@ import java.util.Map;
* just before result will be executed. It must be done that way as after result will be executed
* HttpSession cannot be modified (response was already sent to browser).
*/
-class MessageStorePreResultListener implements PreResultListener {
+public class MessageStorePreResultListener implements PreResultListener {
private static final Logger LOG = LogManager.getLogger(MessageStorePreResultListener.class);
- private MessageStoreInterceptor interceptor;
+ protected MessageStoreInterceptor interceptor;
- public MessageStorePreResultListener(MessageStoreInterceptor interceptor) {
+ public void init(MessageStoreInterceptor interceptor) {
this.interceptor = interceptor;
}
-
@Override
public void beforeResult(ActionInvocation invocation, String resultCode) {
- boolean isCommitted = ServletActionContext.getResponse().isCommitted();
+ boolean isCommitted = isCommitted();
if (isCommitted) {
LOG.trace("Response was already committed, cannot store messages!");
return;
}
- boolean isInvalidated = ServletActionContext.getRequest().getSession(false) == null;
+ boolean isInvalidated = isInvalidated();
if (isInvalidated) {
LOG.trace("Session was invalidated or never created, cannot store messages!");
return;
@@ -69,15 +67,7 @@ class MessageStorePreResultListener implements PreResultListener {
String reqOperationMode = interceptor.getRequestOperationMode(invocation);
- boolean isRedirect = false;
- try {
- ResultConfig resultConfig = invocation.getProxy().getConfig().getResults().get(resultCode);
- if (resultConfig != null) {
- isRedirect = ServletRedirectResult.class.isAssignableFrom(Class.forName(resultConfig.getClassName()));
- }
- } catch (Exception e) {
- LOG.warn("Cannot read result!", e);
- }
+ boolean isRedirect = isRedirect(invocation, resultCode);
if (MessageStoreInterceptor.STORE_MODE.equalsIgnoreCase(reqOperationMode) ||
MessageStoreInterceptor.STORE_MODE.equalsIgnoreCase(interceptor.getOperationModel()) ||
@@ -97,4 +87,26 @@ class MessageStorePreResultListener implements PreResultListener {
}
}
}
+
+ protected boolean isCommitted() {
+ return ServletActionContext.getResponse().isCommitted();
+ }
+
+ protected boolean isInvalidated() {
+ return ServletActionContext.getRequest().getSession(false) == null;
+ }
+
+ protected boolean isRedirect(ActionInvocation invocation, String resultCode) {
+ boolean isRedirect = false;
+ try {
+ ResultConfig resultConfig = invocation.getProxy().getConfig().getResults().get(resultCode);
+ if (resultConfig != null) {
+ isRedirect = Redirectable.class.isAssignableFrom(Class.forName(resultConfig.getClassName()));
+ }
+ } catch (Exception e) {
+ LOG.warn("Cannot read result!", e);
+ }
+ return isRedirect;
+ }
+
}
http://git-wip-us.apache.org/repos/asf/struts/blob/7e4d1b45/core/src/main/java/org/apache/struts2/result/Redirectable.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/struts2/result/Redirectable.java b/core/src/main/java/org/apache/struts2/result/Redirectable.java
new file mode 100644
index 0000000..54fdf65
--- /dev/null
+++ b/core/src/main/java/org/apache/struts2/result/Redirectable.java
@@ -0,0 +1,8 @@
+package org.apache.struts2.result;
+
+/**
+ * Marking interface for results which perform browser redirection
+ */
+public interface Redirectable {
+
+}
http://git-wip-us.apache.org/repos/asf/struts/blob/7e4d1b45/core/src/main/java/org/apache/struts2/result/ServletActionRedirectResult.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/struts2/result/ServletActionRedirectResult.java b/core/src/main/java/org/apache/struts2/result/ServletActionRedirectResult.java
index 798e809..5a4528e 100644
--- a/core/src/main/java/org/apache/struts2/result/ServletActionRedirectResult.java
+++ b/core/src/main/java/org/apache/struts2/result/ServletActionRedirectResult.java
@@ -123,7 +123,7 @@ import java.util.List;
*
* @see ActionMapper
*/
-public class ServletActionRedirectResult extends ServletRedirectResult implements ReflectionExceptionHandler {
+public class ServletActionRedirectResult extends ServletRedirectResult implements ReflectionExceptionHandler, Redirectable {
private static final long serialVersionUID = -9042425229314584066L;
http://git-wip-us.apache.org/repos/asf/struts/blob/7e4d1b45/core/src/main/java/org/apache/struts2/result/ServletRedirectResult.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/struts2/result/ServletRedirectResult.java b/core/src/main/java/org/apache/struts2/result/ServletRedirectResult.java
index e804416..552ee04 100644
--- a/core/src/main/java/org/apache/struts2/result/ServletRedirectResult.java
+++ b/core/src/main/java/org/apache/struts2/result/ServletRedirectResult.java
@@ -98,7 +98,7 @@ import static javax.servlet.http.HttpServletResponse.SC_FOUND;
* </pre>
*
*/
-public class ServletRedirectResult extends StrutsResultSupport implements ReflectionExceptionHandler {
+public class ServletRedirectResult extends StrutsResultSupport implements ReflectionExceptionHandler, Redirectable {
private static final long serialVersionUID = 6316947346435301270L;
http://git-wip-us.apache.org/repos/asf/struts/blob/7e4d1b45/core/src/test/java/org/apache/struts2/interceptor/MessageStorePreResultListenerTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/struts2/interceptor/MessageStorePreResultListenerTest.java b/core/src/test/java/org/apache/struts2/interceptor/MessageStorePreResultListenerTest.java
index e888a55..9074bcb 100644
--- a/core/src/test/java/org/apache/struts2/interceptor/MessageStorePreResultListenerTest.java
+++ b/core/src/test/java/org/apache/struts2/interceptor/MessageStorePreResultListenerTest.java
@@ -54,7 +54,8 @@ public class MessageStorePreResultListenerTest extends StrutsInternalTestCase {
// when
MessageStoreInterceptor msi = new MessageStoreInterceptor();
- MessageStorePreResultListener listener = new MessageStorePreResultListener(msi);
+ MessageStorePreResultListener listener = new MessageStorePreResultListener();
+ listener.init(msi);
listener.beforeResult(mockActionInvocation, Action.SUCCESS);
// then
@@ -86,7 +87,8 @@ public class MessageStorePreResultListenerTest extends StrutsInternalTestCase {
// when
MessageStoreInterceptor msi = new MessageStoreInterceptor();
- MessageStorePreResultListener listener = new MessageStorePreResultListener(msi);
+ MessageStorePreResultListener listener = new MessageStorePreResultListener();
+ listener.init(msi);
listener.beforeResult(mockActionInvocation, Action.SUCCESS);
// then
@@ -98,7 +100,8 @@ public class MessageStorePreResultListenerTest extends StrutsInternalTestCase {
MessageStoreInterceptor interceptor = new MessageStoreInterceptor();
interceptor.setOperationMode(MessageStoreInterceptor.AUTOMATIC_MODE);
- MessageStorePreResultListener listener = new MessageStorePreResultListener(interceptor);
+ MessageStorePreResultListener listener = new MessageStorePreResultListener();
+ listener.init(interceptor);
Map sessionMap = new LinkedHashMap();
@@ -178,7 +181,8 @@ public class MessageStorePreResultListenerTest extends StrutsInternalTestCase {
interceptor.setAllowRequestParameterSwitch(true);
interceptor.setOperationMode(MessageStoreInterceptor.STORE_MODE);
- MessageStorePreResultListener listener = new MessageStorePreResultListener(interceptor);
+ MessageStorePreResultListener listener = new MessageStorePreResultListener();
+ listener.init(interceptor);
Map sessionMap = new LinkedHashMap();
http://git-wip-us.apache.org/repos/asf/struts/blob/7e4d1b45/plugins/json/src/main/java/org/apache/struts2/json/JSONActionRedirectResult.java
----------------------------------------------------------------------
diff --git a/plugins/json/src/main/java/org/apache/struts2/json/JSONActionRedirectResult.java b/plugins/json/src/main/java/org/apache/struts2/json/JSONActionRedirectResult.java
index 4b8b948..c3a9268 100644
--- a/plugins/json/src/main/java/org/apache/struts2/json/JSONActionRedirectResult.java
+++ b/plugins/json/src/main/java/org/apache/struts2/json/JSONActionRedirectResult.java
@@ -7,6 +7,7 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
+import org.apache.struts2.result.Redirectable;
import org.apache.struts2.result.ServletActionRedirectResult;
/**
@@ -24,7 +25,7 @@ import org.apache.struts2.result.ServletActionRedirectResult;
* </p>
*
*/
-public class JSONActionRedirectResult extends ServletActionRedirectResult {
+public class JSONActionRedirectResult extends ServletActionRedirectResult implements Redirectable {
private static final long serialVersionUID = 3107276294073879542L;