You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by je...@apache.org on 2008/04/27 13:43:42 UTC
svn commit: r651927 - in /struts/struts2/trunk/plugins/codebehind/src:
main/java/org/apache/struts2/codebehind/CodebehindUnknownHandler.java
test/java/org/apache/struts2/codebehind/CodebehindUnknownHandlerTest.java
Author: jeromy
Date: Sun Apr 27 04:43:40 2008
New Revision: 651927
URL: http://svn.apache.org/viewvc?rev=651927&view=rev
Log:
Fix to codebehind's unknown action handler based on Wes' patch
WW-2607
Modified:
struts/struts2/trunk/plugins/codebehind/src/main/java/org/apache/struts2/codebehind/CodebehindUnknownHandler.java
struts/struts2/trunk/plugins/codebehind/src/test/java/org/apache/struts2/codebehind/CodebehindUnknownHandlerTest.java
Modified: struts/struts2/trunk/plugins/codebehind/src/main/java/org/apache/struts2/codebehind/CodebehindUnknownHandler.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/codebehind/src/main/java/org/apache/struts2/codebehind/CodebehindUnknownHandler.java?rev=651927&r1=651926&r2=651927&view=diff
==============================================================================
--- struts/struts2/trunk/plugins/codebehind/src/main/java/org/apache/struts2/codebehind/CodebehindUnknownHandler.java (original)
+++ struts/struts2/trunk/plugins/codebehind/src/main/java/org/apache/struts2/codebehind/CodebehindUnknownHandler.java Sun Apr 27 04:43:40 2008
@@ -41,10 +41,7 @@
import com.opensymphony.xwork2.XWorkException;
import com.opensymphony.xwork2.config.Configuration;
import com.opensymphony.xwork2.config.ConfigurationException;
-import com.opensymphony.xwork2.config.entities.ActionConfig;
-import com.opensymphony.xwork2.config.entities.PackageConfig;
-import com.opensymphony.xwork2.config.entities.ResultConfig;
-import com.opensymphony.xwork2.config.entities.ResultTypeConfig;
+import com.opensymphony.xwork2.config.entities.*;
import com.opensymphony.xwork2.config.providers.InterceptorBuilder;
import com.opensymphony.xwork2.inject.Inject;
import com.opensymphony.xwork2.util.logging.Logger;
@@ -119,10 +116,15 @@
return actionConfig;
}
+ /** Create a new ActionConfig in the default package, with the default interceptor stack and a single result */
protected ActionConfig buildActionConfig(String path, String namespace, String actionName, ResultTypeConfig resultTypeConfig) {
- PackageConfig pkg = configuration.getPackageConfig(defaultPackageName);
+ final PackageConfig pkg = configuration.getPackageConfig(defaultPackageName);
return new ActionConfig.Builder(defaultPackageName, "execute", ActionSupport.class.getName())
- .addInterceptors(InterceptorBuilder.constructInterceptorReference(pkg, pkg.getFullDefaultInterceptorRef(),
+ .addInterceptors(InterceptorBuilder.constructInterceptorReference(new InterceptorLocator() {
+ public Object getInterceptorConfig(String name) {
+ return pkg.getAllInterceptorConfigs().get(name); // recurse package hiearchy
+ }
+ }, pkg.getFullDefaultInterceptorRef(),
Collections.EMPTY_MAP, null, objectFactory))
.addResultConfig(new ResultConfig.Builder(Action.SUCCESS, resultTypeConfig.getClassName())
.addParams(resultTypeConfig.getParams())
Modified: struts/struts2/trunk/plugins/codebehind/src/test/java/org/apache/struts2/codebehind/CodebehindUnknownHandlerTest.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/codebehind/src/test/java/org/apache/struts2/codebehind/CodebehindUnknownHandlerTest.java?rev=651927&r1=651926&r2=651927&view=diff
==============================================================================
--- struts/struts2/trunk/plugins/codebehind/src/test/java/org/apache/struts2/codebehind/CodebehindUnknownHandlerTest.java (original)
+++ struts/struts2/trunk/plugins/codebehind/src/test/java/org/apache/struts2/codebehind/CodebehindUnknownHandlerTest.java Sun Apr 27 04:43:40 2008
@@ -33,12 +33,9 @@
import com.mockobjects.dynamic.C;
import com.mockobjects.dynamic.Mock;
-import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.ActionInvocation;
-import com.opensymphony.xwork2.ActionProxyFactory;
-import com.opensymphony.xwork2.ObjectFactory;
-import com.opensymphony.xwork2.Result;
+import com.opensymphony.xwork2.*;
import com.opensymphony.xwork2.config.entities.ResultTypeConfig;
+import com.opensymphony.xwork2.config.entities.ActionConfig;
import com.opensymphony.xwork2.util.XWorkTestCaseHelper;
public class CodebehindUnknownHandlerTest extends StrutsTestCase {
@@ -98,7 +95,30 @@
assertTrue(url.toString().endsWith("struts-plugin.xml"));
mockServletContext.verify();
}
-
+
+ /**
+ * Assert that an unknown action like /foo maps to ActionSupport with a ServletDispatcherResult to /foo.jsp
+ */
+ public void testBuildActionConfigForUnknownAction() throws MalformedURLException {
+ URL url = new URL("file:/foo.jsp");
+ mockServletContext.expectAndReturn("getResource", C.args(C.eq("/foo.jsp")), url);
+ ActionConfig actionConfig = handler.handleUnknownAction("/", "foo");
+ // we need a package
+ assertEquals("codebehind-default", actionConfig.getPackageName());
+ // a non-empty interceptor stack
+ assertTrue(actionConfig.getInterceptors().size() > 0);
+ // ActionSupport as the implementation
+ assertEquals(ActionSupport.class.getName(), actionConfig.getClassName());
+ // with one result
+ assertEquals(1, actionConfig.getResults().size());
+ // named success
+ assertNotNull(actionConfig.getResults().get("success"));
+ // of ServletDispatcherResult type
+ assertEquals(ServletDispatcherResult.class.getName(), actionConfig.getResults().get("success").getClassName());
+ // and finally pointing to foo.jsp!
+ assertEquals("/foo.jsp", actionConfig.getResults().get("success").getParams().get("location"));
+ }
+
public static class SomeResult implements Result {
public String location;