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 2015/06/21 18:56:16 UTC

struts git commit: WW-4517 UnknownHandlers should return null instead of throwing an exception

Repository: struts
Updated Branches:
  refs/heads/master 586f770d3 -> ce61023a4


WW-4517 UnknownHandlers should return null instead of throwing an
exception


Project: http://git-wip-us.apache.org/repos/asf/struts/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/ce61023a
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/ce61023a
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/ce61023a

Branch: refs/heads/master
Commit: ce61023a4ce9892b15a8a2eeae213dfe3328ce74
Parents: 586f770
Author: Lukasz Lenart <lu...@apache.org>
Authored: Sun Jun 21 18:56:07 2015 +0200
Committer: Lukasz Lenart <lu...@apache.org>
Committed: Sun Jun 21 18:56:07 2015 +0200

----------------------------------------------------------------------
 .../xwork2/DefaultUnknownHandlerManager.java          |  6 +++++-
 .../java/com/opensymphony/xwork2/UnknownHandler.java  | 14 ++++++--------
 .../opensymphony/xwork2/UnknownHandlerManager.java    |  9 +++++++++
 .../com/opensymphony/xwork2/ActionInvocationTest.java |  2 +-
 .../xwork2/config/providers/SomeUnknownHandler.java   |  2 +-
 .../xwork2/util/UnknownHandlerManagerTest.java        |  7 ++++++-
 .../struts2/convention/ConventionUnknownHandler.java  |  2 +-
 7 files changed, 29 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/struts/blob/ce61023a/core/src/main/java/com/opensymphony/xwork2/DefaultUnknownHandlerManager.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/com/opensymphony/xwork2/DefaultUnknownHandlerManager.java b/core/src/main/java/com/opensymphony/xwork2/DefaultUnknownHandlerManager.java
index 92f7ba7..ef463b2 100644
--- a/core/src/main/java/com/opensymphony/xwork2/DefaultUnknownHandlerManager.java
+++ b/core/src/main/java/com/opensymphony/xwork2/DefaultUnknownHandlerManager.java
@@ -104,7 +104,11 @@ public class DefaultUnknownHandlerManager implements UnknownHandlerManager {
             }
         }
 
-        return null;
+        if (unknownHandlers.isEmpty()) {
+            throw new NoSuchMethodException(String.format("No UnknownHandlers defined to handle method [%s]", methodName));
+        } else {
+            throw new NoSuchMethodException(String.format("None of defined UnknownHandlers can handle method [%s]", methodName));
+        }
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/struts/blob/ce61023a/core/src/main/java/com/opensymphony/xwork2/UnknownHandler.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/com/opensymphony/xwork2/UnknownHandler.java b/core/src/main/java/com/opensymphony/xwork2/UnknownHandler.java
index faabfc0..2558b78 100644
--- a/core/src/main/java/com/opensymphony/xwork2/UnknownHandler.java
+++ b/core/src/main/java/com/opensymphony/xwork2/UnknownHandler.java
@@ -33,7 +33,7 @@ public interface UnknownHandler {
      * @return An generated ActionConfig, can return <tt>null</tt>
      * @throws XWorkException
      */
-    public ActionConfig handleUnknownAction(String namespace, String actionName) throws XWorkException;
+    ActionConfig handleUnknownAction(String namespace, String actionName) throws XWorkException;
     
     /**
      * Handles the case when a result cannot be found for an action and result code. 
@@ -45,7 +45,7 @@ public interface UnknownHandler {
      * @return A result to be executed, can return <tt>null</tt>
      * @throws XWorkException
      */
-    public Result handleUnknownResult(ActionContext actionContext, String actionName, ActionConfig actionConfig, String resultCode) throws XWorkException;
+    Result handleUnknownResult(ActionContext actionContext, String actionName, ActionConfig actionConfig, String resultCode) throws XWorkException;
     
     /**
      * Handles the case when an action method cannot be found.  This method is responsible both for finding the method and executing it.
@@ -53,11 +53,9 @@ public interface UnknownHandler {
      * @since 2.1
      * @param action The action object
      * @param methodName The method name to call
-     * @return The result returned from invoking the action method, can return <tt>null</tt>
-     * @deprecated @throws NoSuchMethodException If the method cannot be found should return null instead,
-     *                                           don't throw exception as other UnknownHandles won't be invoked
-     *                                           'throws NoSuchMethodException' signature will be removed with next
-     *                                           major release
+     * @return The result returned from invoking the action method, can return <tt>null</tt> if this instance cannot
+     *         handle such methodName to allow other handlers give a chance
      */
-	public Object handleUnknownActionMethod(Object action, String methodName) throws NoSuchMethodException;
+	Object handleUnknownActionMethod(Object action, String methodName);
+
 }

http://git-wip-us.apache.org/repos/asf/struts/blob/ce61023a/core/src/main/java/com/opensymphony/xwork2/UnknownHandlerManager.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/com/opensymphony/xwork2/UnknownHandlerManager.java b/core/src/main/java/com/opensymphony/xwork2/UnknownHandlerManager.java
index 325c0ff..f5e2542 100644
--- a/core/src/main/java/com/opensymphony/xwork2/UnknownHandlerManager.java
+++ b/core/src/main/java/com/opensymphony/xwork2/UnknownHandlerManager.java
@@ -25,8 +25,17 @@ import java.util.List;
  * @see com.opensymphony.xwork2.DefaultUnknownHandlerManager
  */
 public interface UnknownHandlerManager {
+
     Result handleUnknownResult(ActionContext actionContext, String actionName, ActionConfig actionConfig, String resultCode);
 
+    /**
+     * Tries to handle passed methodName if cannot find method should re
+     *
+     * @param action Action's instance
+     * @param methodName method name to handle
+     * @return Result representing result of given action method
+     * @throws NoSuchMethodException if method can be handled by defined UnknownHandlers
+     */
     Object handleUnknownMethod(Object action, String methodName) throws NoSuchMethodException;
 
     ActionConfig handleUnknownAction(String namespace, String actionName);

http://git-wip-us.apache.org/repos/asf/struts/blob/ce61023a/core/src/test/java/com/opensymphony/xwork2/ActionInvocationTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/com/opensymphony/xwork2/ActionInvocationTest.java b/core/src/test/java/com/opensymphony/xwork2/ActionInvocationTest.java
index 58d02dd..05c09b2 100644
--- a/core/src/test/java/com/opensymphony/xwork2/ActionInvocationTest.java
+++ b/core/src/test/java/com/opensymphony/xwork2/ActionInvocationTest.java
@@ -52,7 +52,7 @@ public class ActionInvocationTest extends XWorkTestCase {
 			public Result handleUnknownResult(ActionContext actionContext, String actionName, ActionConfig actionConfig, String resultCode) throws XWorkException {
 				return null;
 			}
-			public Object handleUnknownActionMethod(Object action, String methodName) throws NoSuchMethodException {
+			public Object handleUnknownActionMethod(Object action, String methodName) {
 				if (methodName.equals("unknownmethod")) {
 					return "found";
 				} else {

http://git-wip-us.apache.org/repos/asf/struts/blob/ce61023a/core/src/test/java/com/opensymphony/xwork2/config/providers/SomeUnknownHandler.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/com/opensymphony/xwork2/config/providers/SomeUnknownHandler.java b/core/src/test/java/com/opensymphony/xwork2/config/providers/SomeUnknownHandler.java
index 494a16c..312f4c9 100644
--- a/core/src/test/java/com/opensymphony/xwork2/config/providers/SomeUnknownHandler.java
+++ b/core/src/test/java/com/opensymphony/xwork2/config/providers/SomeUnknownHandler.java
@@ -29,7 +29,7 @@ public class SomeUnknownHandler implements UnknownHandler{
         return actionConfig;
     }
 
-    public Object handleUnknownActionMethod(Object action, String methodName) throws NoSuchMethodException {
+    public Object handleUnknownActionMethod(Object action, String methodName) {
         return actionMethodResult;
     }
 

http://git-wip-us.apache.org/repos/asf/struts/blob/ce61023a/core/src/test/java/com/opensymphony/xwork2/util/UnknownHandlerManagerTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/com/opensymphony/xwork2/util/UnknownHandlerManagerTest.java b/core/src/test/java/com/opensymphony/xwork2/util/UnknownHandlerManagerTest.java
index 9533eb0..42b41b7 100644
--- a/core/src/test/java/com/opensymphony/xwork2/util/UnknownHandlerManagerTest.java
+++ b/core/src/test/java/com/opensymphony/xwork2/util/UnknownHandlerManagerTest.java
@@ -77,6 +77,11 @@ public class UnknownHandlerManagerTest extends ConfigurationTestBase {
         //should not pick any
         uh1.setActionMethodResult(null);
         uh2.setActionMethodResult(null);
-        assertEquals(null, uhm.handleUnknownMethod(null, null));
+        try {
+            uhm.handleUnknownMethod(null, null);
+            fail("Should throw exception!");
+        } catch (NoSuchMethodException e) {
+            assertTrue(true);
+        }
     }
 }

http://git-wip-us.apache.org/repos/asf/struts/blob/ce61023a/plugins/convention/src/main/java/org/apache/struts2/convention/ConventionUnknownHandler.java
----------------------------------------------------------------------
diff --git a/plugins/convention/src/main/java/org/apache/struts2/convention/ConventionUnknownHandler.java b/plugins/convention/src/main/java/org/apache/struts2/convention/ConventionUnknownHandler.java
index bacc30d..85ce714 100644
--- a/plugins/convention/src/main/java/org/apache/struts2/convention/ConventionUnknownHandler.java
+++ b/plugins/convention/src/main/java/org/apache/struts2/convention/ConventionUnknownHandler.java
@@ -385,7 +385,7 @@ public class ConventionUnknownHandler implements UnknownHandler {
     /**
      * Not used
      */
-    public Object handleUnknownActionMethod(Object action, String methodName) throws NoSuchMethodException {
+    public Object handleUnknownActionMethod(Object action, String methodName) {
         return null;
     }