Fixes tests
Project: http://git-wip-us.apache.org/repos/asf/struts/repo Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/c3f4457b Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/c3f4457b Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/c3f4457b Branch: refs/heads/master Commit: c3f4457b8b8ad6bd0e89646d825f2ef5f9f91118 Parents: 4565993 Author: Lukasz Lenart <lukaszlen...@apache.org> Authored: Mon Aug 31 14:43:31 2015 +0200 Committer: Lukasz Lenart <lukaszlen...@apache.org> Committed: Mon Aug 31 14:43:31 2015 +0200 ---------------------------------------------------------------------- .../opensymphony/xwork2/DefaultActionProxy.java | 11 ++++++----- .../opensymphony/xwork2/ActionInvocationTest.java | 18 ++++++++++++++---- .../config/providers/SomeUnknownHandler.java | 5 +++++ core/src/test/resources/xwork-sample.xml | 6 ++++-- 4 files changed, 29 insertions(+), 11 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/struts/blob/c3f4457b/core/src/main/java/com/opensymphony/xwork2/DefaultActionProxy.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/com/opensymphony/xwork2/DefaultActionProxy.java b/core/src/main/java/com/opensymphony/xwork2/DefaultActionProxy.java index d1bfd71..6b8749e 100644 --- a/core/src/main/java/com/opensymphony/xwork2/DefaultActionProxy.java +++ b/core/src/main/java/com/opensymphony/xwork2/DefaultActionProxy.java @@ -194,12 +194,13 @@ public class DefaultActionProxy implements ActionProxy, Serializable { resolveMethod(); - if (!config.isAllowedMethod(method)) { - throw new ConfigurationException("Invalid method: " + method + " for action " + actionName); + if (config.isAllowedMethod(method) || + (unknownHandlerManager.hasUnknownHandlers() && unknownHandlerManager.isAllowedMethod(method, config)) + ) { + invocation.init(this); + } else { + throw new ConfigurationException("This method: " + method + " for action " + actionName + " is not allowed!"); } - - invocation.init(this); - } finally { UtilTimerStack.pop(profileKey); } http://git-wip-us.apache.org/repos/asf/struts/blob/c3f4457b/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 05c09b2..37aa2a5 100644 --- a/core/src/test/java/com/opensymphony/xwork2/ActionInvocationTest.java +++ b/core/src/test/java/com/opensymphony/xwork2/ActionInvocationTest.java @@ -17,6 +17,7 @@ package com.opensymphony.xwork2; import com.opensymphony.xwork2.config.entities.ActionConfig; import com.opensymphony.xwork2.config.providers.XmlConfigurationProvider; +import com.opensymphony.xwork2.mock.MockResult; import java.util.HashMap; @@ -45,12 +46,12 @@ public class ActionInvocationTest extends XWorkTestCase { public void testCommandInvocationUnknownHandler() throws Exception { - DefaultActionProxy baseActionProxy = (DefaultActionProxy) actionProxyFactory.createActionProxy( - "baz", "unknownMethodTest", "unknownmethod", null); UnknownHandler unknownHandler = new UnknownHandler() { - public ActionConfig handleUnknownAction(String namespace, String actionName) throws XWorkException { return null;} + public ActionConfig handleUnknownAction(String namespace, String actionName) throws XWorkException { + return new ActionConfig.Builder("test", actionName, ActionSupport.class.getName()).build(); + } public Result handleUnknownResult(ActionContext actionContext, String actionName, ActionConfig actionConfig, String resultCode) throws XWorkException { - return null; + return new MockResult(); } public Object handleUnknownActionMethod(Object action, String methodName) { if (methodName.equals("unknownmethod")) { @@ -59,10 +60,19 @@ public class ActionInvocationTest extends XWorkTestCase { return null; } } + public boolean isAllowedMethod(String allowedMethod, ActionConfig actionConfig) { + return "unknownmethod".equals(allowedMethod); + } }; UnknownHandlerManagerMock uhm = new UnknownHandlerManagerMock(); uhm.addUnknownHandler(unknownHandler); + + loadButAdd(UnknownHandlerManager.class, uhm); + + DefaultActionProxy baseActionProxy = (DefaultActionProxy) actionProxyFactory.createActionProxy( + "baz", "unknownMethodTest", "unknownmethod", null); + ((DefaultActionInvocation)baseActionProxy.getInvocation()).setUnknownHandlerManager(uhm); assertEquals("found", baseActionProxy.execute()); http://git-wip-us.apache.org/repos/asf/struts/blob/c3f4457b/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 312f4c9..5e922e0 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 @@ -38,6 +38,11 @@ public class SomeUnknownHandler implements UnknownHandler{ return null; } + @Override + public boolean isAllowedMethod(String allowedMethod, ActionConfig actionConfig) { + return false; + } + public void setActionConfig(ActionConfig actionConfig) { this.actionConfig = actionConfig; } http://git-wip-us.apache.org/repos/asf/struts/blob/c3f4457b/core/src/test/resources/xwork-sample.xml ---------------------------------------------------------------------- diff --git a/core/src/test/resources/xwork-sample.xml b/core/src/test/resources/xwork-sample.xml index 3705298..cd2ddcb 100644 --- a/core/src/test/resources/xwork-sample.xml +++ b/core/src/test/resources/xwork-sample.xml @@ -1,6 +1,6 @@ <!DOCTYPE xwork PUBLIC - "-//Apache Struts//XWork 2.0//EN" - "http://struts.apache.org/dtds/xwork-2.0.dtd" + "-//Apache Struts//XWork 2.5//EN" + "http://struts.apache.org/dtds/xwork-2.5.dtd" > <!-- "file:///temp/ross/xwork/src/etc/xwork-1.0.dtd" --> @@ -14,6 +14,8 @@ </result> </global-results> + <global-allowed-methods methods="execute,input,back,cancel,browse"/> + <action name="Foo" class="com.opensymphony.xwork2.SimpleAction"> <param name="foo">17</param> <param name="bar">23</param>