You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by mu...@apache.org on 2009/03/17 21:24:26 UTC
svn commit: r755382 - in /struts/struts2/trunk/plugins/convention/src:
main/java/org/apache/struts2/convention/
test/java/org/apache/struts2/convention/
test/java/org/apache/struts2/convention/actions/result/
Author: musachy
Date: Tue Mar 17 20:24:26 2009
New Revision: 755382
URL: http://svn.apache.org/viewvc?rev=755382&view=rev
Log:
WW-3043 Result annotations at the method level should overwrite result annotations at the class level in the Convention plugin
Added:
struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/actions/result/OverrideResultAction.java
Modified:
struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/DefaultResultMapBuilder.java
struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/DefaultResultMapBuilderTest.java
struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java
Modified: struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/DefaultResultMapBuilder.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/DefaultResultMapBuilder.java?rev=755382&r1=755381&r2=755382&view=diff
==============================================================================
--- struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/DefaultResultMapBuilder.java (original)
+++ struts/struts2/trunk/plugins/convention/src/main/java/org/apache/struts2/convention/DefaultResultMapBuilder.java Tue Mar 17 20:24:26 2009
@@ -180,20 +180,23 @@
String resultPrefix = defaultResultPath + actionName;
+ //results from files
Map<String, ResultConfig> results = new HashMap<String, ResultConfig>();
Map<String, ResultTypeConfig> resultsByExtension = conventionsService.getResultTypesByExtension(packageConfig);
createFromResources(actionClass, results, defaultResultPath, resultPrefix, actionName,
packageConfig, resultsByExtension);
- if (annotation != null && annotation.results() != null && annotation.results().length > 0) {
- createFromAnnotations(results, defaultResultPath, packageConfig, annotation.results(),
- actionClass, resultsByExtension);
- }
- //get inherited @Results and @Result
+ //get inherited @Results and @Result (class level)
for (Class<?> clazz : ReflectionTools.getClassHierarchy(actionClass)) {
createResultsFromAnnotations(clazz, packageConfig, defaultResultPath, results, resultsByExtension);
}
+
+ //method level
+ if (annotation != null && annotation.results() != null && annotation.results().length > 0) {
+ createFromAnnotations(results, defaultResultPath, packageConfig, annotation.results(),
+ actionClass, resultsByExtension);
+ }
return results;
}
Modified: struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/DefaultResultMapBuilderTest.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/DefaultResultMapBuilderTest.java?rev=755382&r1=755381&r2=755382&view=diff
==============================================================================
--- struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/DefaultResultMapBuilderTest.java (original)
+++ struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/DefaultResultMapBuilderTest.java Tue Mar 17 20:24:26 2009
@@ -29,6 +29,7 @@
import static org.apache.struts2.convention.ReflectionTools.*;
import org.apache.struts2.convention.actions.NoAnnotationAction;
+import org.apache.struts2.convention.actions.result.OverrideResultAction;
import org.apache.struts2.convention.actions.result.ActionLevelResultAction;
import org.apache.struts2.convention.actions.result.ActionLevelResultsAction;
import org.apache.struts2.convention.actions.result.ClassLevelResultAction;
@@ -74,6 +75,20 @@
verify(context, "/WEB-INF/location", results, false);
}
+ public void testResultOverrride() throws Exception {
+ ServletContext context = mockServletContext("/WEB-INF/location");
+
+ // Test with a slash
+ PackageConfig packageConfig = createPackageConfigBuilder("/namespace");
+ this.conventionsService = new ConventionsServiceImpl("/WEB-INF/location");
+ DefaultResultMapBuilder builder = new DefaultResultMapBuilder(context, container, "dispatcher,velocity,freemarker");
+ Action actionAnn = OverrideResultAction.class.getMethod("execute").getAnnotation(Action.class);
+ Map<String, ResultConfig> results = builder.build(OverrideResultAction.class, actionAnn, "action100", packageConfig);
+ ResultConfig result = results.get("error");
+ assertNotNull(result);
+ assertEquals("/WEB-INF/location/namespace/error-overriden.jsp", result.getParams().get("location"));
+ }
+
public void testNull() throws Exception {
ServletContext context = EasyMock.createStrictMock(ServletContext.class);
EasyMock.expect(context.getResourcePaths("/WEB-INF/location/namespace/")).andReturn(null);
Modified: struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java?rev=755382&r1=755381&r2=755382&view=diff
==============================================================================
--- struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java (original)
+++ struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java Tue Mar 17 20:24:26 2009
@@ -61,6 +61,7 @@
import org.apache.struts2.convention.actions.result.ClassLevelResultAction;
import org.apache.struts2.convention.actions.result.ClassLevelResultsAction;
import org.apache.struts2.convention.actions.result.InheritedResultExtends;
+import org.apache.struts2.convention.actions.result.OverrideResultAction;
import org.apache.struts2.convention.actions.resultpath.ClassLevelResultPathAction;
import org.apache.struts2.convention.actions.resultpath.PackageLevelResultPathAction;
import org.apache.struts2.convention.actions.skip.Index;
@@ -241,6 +242,7 @@
expect(resultMapBuilder.build(ActionLevelResultAction.class, getAnnotation(ActionLevelResultAction.class, "execute", Action.class), "action-level-result", resultPkg)).andReturn(results);
expect(resultMapBuilder.build(ActionLevelResultsAction.class, getAnnotation(ActionLevelResultsAction.class, "execute", Action.class), "action-level-results", resultPkg)).andReturn(results);
expect(resultMapBuilder.build(InheritedResultExtends.class, null, "inherited-result-extends", resultPkg)).andReturn(results);
+ expect(resultMapBuilder.build(OverrideResultAction.class, getAnnotation(OverrideResultAction.class, "execute", Action.class), "override-result", resultPkg)).andReturn(results);
/* org.apache.struts2.convention.actions.resultpath */
expect(resultMapBuilder.build(ClassLevelResultPathAction.class, null, "class-level-result-path", resultPathPkg)).andReturn(results);
@@ -450,7 +452,7 @@
/* org.apache.struts2.convention.actions.result */
pkgConfig = configuration.getPackageConfig("org.apache.struts2.convention.actions.result#struts-default#/result");
assertNotNull(pkgConfig);
- assertEquals(5, pkgConfig.getActionConfigs().size());
+ assertEquals(6, pkgConfig.getActionConfigs().size());
verifyActionConfig(pkgConfig, "class-level-result", ClassLevelResultAction.class, "execute", pkgConfig.getName());
verifyActionConfig(pkgConfig, "class-level-results", ClassLevelResultsAction.class, "execute", pkgConfig.getName());
verifyActionConfig(pkgConfig, "action-level-result", ActionLevelResultAction.class, "execute", pkgConfig.getName());
Added: struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/actions/result/OverrideResultAction.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/actions/result/OverrideResultAction.java?rev=755382&view=auto
==============================================================================
--- struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/actions/result/OverrideResultAction.java (added)
+++ struts/struts2/trunk/plugins/convention/src/test/java/org/apache/struts2/convention/actions/result/OverrideResultAction.java Tue Mar 17 20:24:26 2009
@@ -0,0 +1,35 @@
+/*
+ * $Id$
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.struts2.convention.actions.result;
+
+import org.apache.struts2.convention.annotation.Result;
+import org.apache.struts2.convention.annotation.Action;
+
+@Result(name = "error", location = "error.jsp")
+public class OverrideResultAction {
+
+ @Action(value = "override-result", results = {
+ @Result(name = "error", location = "error-overriden.jsp")
+ })
+ public void execute() {
+
+ }
+}