diff --git a/apps/rest-showcase/src/main/java/org/demo/rest/example/OrdersController.java b/apps/rest-showcase/src/main/java/org/demo/rest/example/OrdersController.java
index 2184e2b1e..50d9c8fa6 100644
--- a/apps/rest-showcase/src/main/java/org/demo/rest/example/OrdersController.java
+++ b/apps/rest-showcase/src/main/java/org/demo/rest/example/OrdersController.java
@@ -18,30 +18,30 @@
*/
package org.demo.rest.example;
-import java.util.Collection;
-
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-import org.apache.struts2.rest.DefaultHttpHeaders;
-import org.apache.struts2.rest.HttpHeaders;
-import org.apache.struts2.convention.annotation.Results;
-import org.apache.struts2.convention.annotation.Result;
-
import com.opensymphony.xwork2.ModelDriven;
import com.opensymphony.xwork2.Validateable;
import com.opensymphony.xwork2.ValidationAwareSupport;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.struts2.convention.annotation.Result;
+import org.apache.struts2.convention.annotation.Results;
+import org.apache.struts2.interceptor.parameter.StrutsParameter;
+import org.apache.struts2.rest.DefaultHttpHeaders;
+import org.apache.struts2.rest.HttpHeaders;
+
+import java.util.Collection;
@Results({
@Result(name="success", type="redirectAction", params = {"actionName" , "orders"})
})
-public class OrdersController extends ValidationAwareSupport implements ModelDriven
*
* @author martin.gilday
+ * @deprecated since 6.6.0, integrated into {@link ParametersInterceptor} with {@link StrutsParameter} using
+ * {@code struts.parameters.requireAnnotations=true}
*/
+@Deprecated
public class AnnotationParameterFilterInterceptor extends AbstractInterceptor {
/* (non-Javadoc)
diff --git a/core/src/main/java/com/opensymphony/xwork2/interceptor/annotations/BlockByDefault.java b/core/src/main/java/com/opensymphony/xwork2/interceptor/annotations/BlockByDefault.java
index ddb855b3d..e7b452022 100644
--- a/core/src/main/java/com/opensymphony/xwork2/interceptor/annotations/BlockByDefault.java
+++ b/core/src/main/java/com/opensymphony/xwork2/interceptor/annotations/BlockByDefault.java
@@ -31,9 +31,11 @@ import java.lang.annotation.Target;
* To allow access to a field it must be annotated with {@link Allowed}
*
* @author martin.gilday
+ * @deprecated since 6.6.0, use {@code struts.parameters.requireAnnotations=true} to block all parameters globally.
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
+@Deprecated
public @interface BlockByDefault {
}
diff --git a/core/src/main/java/com/opensymphony/xwork2/interceptor/annotations/Blocked.java b/core/src/main/java/com/opensymphony/xwork2/interceptor/annotations/Blocked.java
index 630368a87..17ec80940 100644
--- a/core/src/main/java/com/opensymphony/xwork2/interceptor/annotations/Blocked.java
+++ b/core/src/main/java/com/opensymphony/xwork2/interceptor/annotations/Blocked.java
@@ -28,9 +28,11 @@ import java.lang.annotation.Target;
* a HttpRequest parameter.
*
* @author martin.gilday
+ * @deprecated since 6.6.0, use {@code struts.parameters.requireAnnotations=true} to block all parameters globally.
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
+@Deprecated
public @interface Blocked {
}
diff --git a/core/src/main/java/org/apache/struts2/dispatcher/DefaultActionSupport.java b/core/src/main/java/org/apache/struts2/dispatcher/DefaultActionSupport.java
index 7fa83fc87..0df1e3e90 100644
--- a/core/src/main/java/org/apache/struts2/dispatcher/DefaultActionSupport.java
+++ b/core/src/main/java/org/apache/struts2/dispatcher/DefaultActionSupport.java
@@ -18,11 +18,11 @@
*/
package org.apache.struts2.dispatcher;
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.struts2.ServletActionContext;
-
import com.opensymphony.xwork2.ActionSupport;
+import org.apache.struts2.ServletActionContext;
+import org.apache.struts2.interceptor.parameter.StrutsParameter;
+
+import javax.servlet.http.HttpServletRequest;
/**
* A simple action support class that sets properties to be able to serve
@@ -44,6 +44,7 @@ public class DefaultActionSupport extends ActionSupport {
/* (non-Javadoc)
* @see com.opensymphony.xwork2.ActionSupport#execute()
*/
+ @Override
public String execute() throws Exception {
HttpServletRequest request = ServletActionContext.getRequest();
String requestedUrl = request.getPathInfo();
@@ -61,9 +62,8 @@ public class DefaultActionSupport extends ActionSupport {
/**
* @param successResultValue The successResultValue to set.
*/
+ @StrutsParameter
public void setSuccessResultValue(String successResultValue) {
this.successResultValue = successResultValue;
}
-
-
}
diff --git a/core/src/main/java/org/apache/struts2/ognl/ProviderAllowlist.java b/core/src/main/java/org/apache/struts2/ognl/ProviderAllowlist.java
index d10372885..93f7506b7 100644
--- a/core/src/main/java/org/apache/struts2/ognl/ProviderAllowlist.java
+++ b/core/src/main/java/org/apache/struts2/ognl/ProviderAllowlist.java
@@ -28,13 +28,14 @@ import java.util.Set;
import static java.util.Collections.unmodifiableSet;
/**
- * Allows {@link ConfigurationProvider}s to register classes that should be allowed to be used in OGNL expressions.
+ * Allows registration of classes that should be allowed to be used in OGNL expressions, using a key to identify the
+ * source of the allowlist.
*
* @since 6.4.0
*/
public class ProviderAllowlist {
- private final Map>> allowlistMap;
+ private final Map>> allowlistMap;
private Set> allowlistClasses;
public ProviderAllowlist() {
@@ -42,24 +43,40 @@ public class ProviderAllowlist {
reconstructAllowlist();
}
- public synchronized void registerAllowlist(ConfigurationProvider configurationProvider, Set> allowlist) {
- Set> existingAllowlist = allowlistMap.get(configurationProvider);
+ public synchronized void registerAllowlist(Object key, Set> allowlist) {
+ Set> existingAllowlist = allowlistMap.get(key);
if (existingAllowlist != null) {
- clearAllowlist(configurationProvider);
+ clearAllowlist(key);
}
- this.allowlistMap.put(configurationProvider, new HashSet<>(allowlist));
+ this.allowlistMap.put(key, new HashSet<>(allowlist));
this.allowlistClasses.addAll(allowlist);
}
- public synchronized void clearAllowlist(ConfigurationProvider configurationProvider) {
- Set> allowlist = allowlistMap.get(configurationProvider);
+ /**
+ * @deprecated since 6.6.0, use {@link #registerAllowlist(Object, Set)}
+ */
+ @Deprecated
+ public synchronized void registerAllowlist(ConfigurationProvider configurationProvider, Set> allowlist) {
+ registerAllowlist((Object) configurationProvider, allowlist);
+ }
+
+ public synchronized void clearAllowlist(Object key) {
+ Set> allowlist = allowlistMap.get(key);
if (allowlist == null) {
return;
}
- this.allowlistMap.remove(configurationProvider);
+ this.allowlistMap.remove(key);
reconstructAllowlist();
}
+ /**
+ * @deprecated since 6.6.0, use {@link #clearAllowlist(Object)}
+ */
+ @Deprecated
+ public synchronized void clearAllowlist(ConfigurationProvider configurationProvider) {
+ clearAllowlist((Object) configurationProvider);
+ }
+
public Set> getProviderAllowlist() {
return unmodifiableSet(allowlistClasses);
}
diff --git a/core/src/test/java/com/opensymphony/xwork2/ActionSupportTest.java b/core/src/test/java/com/opensymphony/xwork2/ActionSupportTest.java
index 65c38d38e..b917aaed4 100644
--- a/core/src/test/java/com/opensymphony/xwork2/ActionSupportTest.java
+++ b/core/src/test/java/com/opensymphony/xwork2/ActionSupportTest.java
@@ -20,8 +20,12 @@ package com.opensymphony.xwork2;
import com.opensymphony.xwork2.conversion.impl.ConversionData;
import com.opensymphony.xwork2.util.ValueStack;
+import org.apache.struts2.interceptor.parameter.StrutsParameter;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+import java.util.ResourceBundle;
/**
* Unit test for {@link ActionSupport}.
@@ -334,6 +338,7 @@ public class ActionSupportTest extends XWorkTestCase {
return val;
}
+ @StrutsParameter
public void setVal(Double val) {
this.val = val;
}
diff --git a/core/src/test/java/com/opensymphony/xwork2/ModelDrivenAction.java b/core/src/test/java/com/opensymphony/xwork2/ModelDrivenAction.java
index fabc3ed95..6ffcad2ff 100644
--- a/core/src/test/java/com/opensymphony/xwork2/ModelDrivenAction.java
+++ b/core/src/test/java/com/opensymphony/xwork2/ModelDrivenAction.java
@@ -19,6 +19,8 @@
package com.opensymphony.xwork2;
+import org.apache.struts2.interceptor.parameter.StrutsParameter;
+
/**
* ModelDrivenAction
*
@@ -28,9 +30,9 @@ package com.opensymphony.xwork2;
public class ModelDrivenAction extends ActionSupport implements ModelDriven {
private String foo;
- private TestBean model = new TestBean();
-
+ private final TestBean model = new TestBean();
+ @StrutsParameter
public void setFoo(String foo) {
this.foo = foo;
}
@@ -42,6 +44,8 @@ public class ModelDrivenAction extends ActionSupport implements ModelDriven {
/**
* @return the model to be pushed onto the ValueStack after the Action itself
*/
+ @StrutsParameter(depth = 2)
+ @Override
public Object getModel() {
return model;
}
diff --git a/core/src/test/java/com/opensymphony/xwork2/ModelDrivenAnnotationAction.java b/core/src/test/java/com/opensymphony/xwork2/ModelDrivenAnnotationAction.java
index a103d7d5c..5549b60b1 100644
--- a/core/src/test/java/com/opensymphony/xwork2/ModelDrivenAnnotationAction.java
+++ b/core/src/test/java/com/opensymphony/xwork2/ModelDrivenAnnotationAction.java
@@ -18,6 +18,8 @@
*/
package com.opensymphony.xwork2;
+import org.apache.struts2.interceptor.parameter.StrutsParameter;
+
/**
* ModelDrivenAnnotationAction
*
@@ -28,9 +30,9 @@ package com.opensymphony.xwork2;
public class ModelDrivenAnnotationAction extends ActionSupport implements ModelDriven {
private String foo;
- private AnnotatedTestBean model = new AnnotatedTestBean();
-
+ private final AnnotatedTestBean model = new AnnotatedTestBean();
+ @StrutsParameter
public void setFoo(String foo) {
this.foo = foo;
}
@@ -42,6 +44,8 @@ public class ModelDrivenAnnotationAction extends ActionSupport implements ModelD
/**
* @return the model to be pushed onto the ValueStack after the Action itself
*/
+ @StrutsParameter(depth = 2)
+ @Override
public Object getModel() {
return model;
}
diff --git a/core/src/test/java/com/opensymphony/xwork2/ProxyInvocationAction.java b/core/src/test/java/com/opensymphony/xwork2/ProxyInvocationAction.java
index ac4e2c36e..47afb2baa 100644
--- a/core/src/test/java/com/opensymphony/xwork2/ProxyInvocationAction.java
+++ b/core/src/test/java/com/opensymphony/xwork2/ProxyInvocationAction.java
@@ -22,6 +22,8 @@ package com.opensymphony.xwork2;
* Need by the ProxyInvocationTest
*/
public class ProxyInvocationAction extends ActionSupport implements ProxyInvocationInterface {
+
+ @Override
public String show() {
return "proxyResult";
}
diff --git a/core/src/test/java/com/opensymphony/xwork2/SimpleAction.java b/core/src/test/java/com/opensymphony/xwork2/SimpleAction.java
index 16b3357b1..51d9fa7f7 100644
--- a/core/src/test/java/com/opensymphony/xwork2/SimpleAction.java
+++ b/core/src/test/java/com/opensymphony/xwork2/SimpleAction.java
@@ -21,7 +21,12 @@ package com.opensymphony.xwork2;
import com.opensymphony.xwork2.config.Configuration;
import com.opensymphony.xwork2.inject.Inject;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
/**
@@ -56,7 +61,7 @@ public class SimpleAction extends ActionSupport {
private Map existingMap = new HashMap<>();
private List beanList;
-
+
public static boolean resultCalled;
@@ -64,11 +69,11 @@ public class SimpleAction extends ActionSupport {
resultCalled = false;
existingMap.put("existingKey", "value");
}
-
+
public Map getTheProtectedMap() {
return protectedMap;
}
-
+
protected Map getTheSemiProtectedMap() {
return protectedMap;
}
@@ -81,7 +86,6 @@ public class SimpleAction extends ActionSupport {
return existingMap;
}
-
public void setBar(int bar) {
this.bar = bar;
}
@@ -187,15 +191,15 @@ public class SimpleAction extends ActionSupport {
public ArrayList getSomeList() {
return someList;
}
-
+
public String getIndexedProp(int index) {
return indexedProps.get(index);
}
-
+
public void setIndexedProp(int index, String val) {
indexedProps.put(index, val);
}
-
+
public void setThrowException(boolean throwException) {
this.throwException = throwException;
@@ -204,7 +208,7 @@ public class SimpleAction extends ActionSupport {
public String commandMethod() throws Exception {
return COMMAND_RETURN_CODE;
}
-
+
public Result resultAction() throws Exception {
return new Result() {
public Configuration configuration;
@@ -217,7 +221,7 @@ public class SimpleAction extends ActionSupport {
if (configuration != null)
resultCalled = true;
}
-
+
};
}
@@ -251,7 +255,7 @@ public class SimpleAction extends ActionSupport {
return SUCCESS;
}
-
+
public long getLongFoo() {
return longFoo;
}
diff --git a/core/src/test/java/com/opensymphony/xwork2/SimpleAnnotationAction.java b/core/src/test/java/com/opensymphony/xwork2/SimpleAnnotationAction.java
index 5e21a0984..312e7bc9c 100644
--- a/core/src/test/java/com/opensymphony/xwork2/SimpleAnnotationAction.java
+++ b/core/src/test/java/com/opensymphony/xwork2/SimpleAnnotationAction.java
@@ -18,7 +18,18 @@
*/
package com.opensymphony.xwork2;
-import com.opensymphony.xwork2.validator.annotations.*;
+import com.opensymphony.xwork2.validator.annotations.DateRangeFieldValidator;
+import com.opensymphony.xwork2.validator.annotations.DoubleRangeFieldValidator;
+import com.opensymphony.xwork2.validator.annotations.EmailValidator;
+import com.opensymphony.xwork2.validator.annotations.ExpressionValidator;
+import com.opensymphony.xwork2.validator.annotations.IntRangeFieldValidator;
+import com.opensymphony.xwork2.validator.annotations.RequiredFieldValidator;
+import com.opensymphony.xwork2.validator.annotations.RequiredStringValidator;
+import com.opensymphony.xwork2.validator.annotations.StringLengthFieldValidator;
+import com.opensymphony.xwork2.validator.annotations.UrlValidator;
+import com.opensymphony.xwork2.validator.annotations.Validations;
+import com.opensymphony.xwork2.validator.annotations.ValidatorType;
+import org.apache.struts2.interceptor.parameter.StrutsParameter;
import java.util.ArrayList;
import java.util.Date;
@@ -49,8 +60,6 @@ public class SimpleAnnotationAction extends ActionSupport {
private String aliasSource;
private String aliasDest;
-
-
//~ Constructors ///////////////////////////////////////////////////////////
@@ -61,6 +70,7 @@ public class SimpleAnnotationAction extends ActionSupport {
@RequiredFieldValidator(type = ValidatorType.FIELD, message = "You must enter a value for bar.")
@IntRangeFieldValidator(type = ValidatorType.FIELD, min = "6", max = "10", message = "bar must be between ${min} and ${max}, current value is ${bar}.")
+ @StrutsParameter
public void setBar(int bar) {
this.bar = bar;
}
@@ -70,6 +80,7 @@ public class SimpleAnnotationAction extends ActionSupport {
}
@IntRangeFieldValidator(min = "0", key = "baz.range", message = "Could not find baz.range!")
+ @StrutsParameter
public void setBaz(int baz) {
this.baz = baz;
}
@@ -83,6 +94,7 @@ public class SimpleAnnotationAction extends ActionSupport {
}
@DoubleRangeFieldValidator(minInclusive = "0.123", key = "baz.range", message = "Could not find percentage.range!")
+ @StrutsParameter
public void setPercentage(double percentage) {
this.percentage = percentage;
}
@@ -91,10 +103,12 @@ public class SimpleAnnotationAction extends ActionSupport {
this.bean = bean;
}
+ @StrutsParameter(depth = 2)
public AnnotatedTestBean getBean() {
return bean;
}
+ @StrutsParameter
public void setBlah(String blah) {
this.blah = blah;
}
@@ -112,6 +126,7 @@ public class SimpleAnnotationAction extends ActionSupport {
}
@DateRangeFieldValidator(min = "12/22/2002", max = "12/25/2002", message = "The date must be between 12-22-2002 and 12-25-2002.")
+ @StrutsParameter
public void setDate(Date date) {
this.date = date;
}
@@ -120,6 +135,7 @@ public class SimpleAnnotationAction extends ActionSupport {
return date;
}
+ @StrutsParameter
public void setFoo(int foo) {
this.foo = foo;
}
@@ -128,6 +144,7 @@ public class SimpleAnnotationAction extends ActionSupport {
return foo;
}
+ @StrutsParameter
public void setName(String name) {
this.name = name;
}
@@ -140,15 +157,16 @@ public class SimpleAnnotationAction extends ActionSupport {
this.settings = settings;
}
+ @StrutsParameter(depth = 1)
public Properties getSettings() {
return settings;
}
-
public String getAliasDest() {
return aliasDest;
}
+ @StrutsParameter
public void setAliasDest(String aliasDest) {
this.aliasDest = aliasDest;
}
@@ -157,11 +175,12 @@ public class SimpleAnnotationAction extends ActionSupport {
return aliasSource;
}
+ @StrutsParameter
public void setAliasSource(String aliasSource) {
this.aliasSource = aliasSource;
}
-
+ @StrutsParameter
public void setSomeList(ArrayList someList) {
this.someList = someList;
}
@@ -170,6 +189,7 @@ public class SimpleAnnotationAction extends ActionSupport {
return someList;
}
+ @StrutsParameter
public void setThrowException(boolean throwException) {
this.throwException = throwException;
}
@@ -186,7 +206,6 @@ public class SimpleAnnotationAction extends ActionSupport {
return "OK";
}
- @Override
@Validations(
requiredFields =
{@RequiredFieldValidator(type = ValidatorType.SIMPLE, fieldName = "customfield", message = "You must enter a value for field.")},
@@ -210,6 +229,7 @@ public class SimpleAnnotationAction extends ActionSupport {
@ExpressionValidator(expression = "foo > 5", message = "Foo must be greater than Bar 5. Foo = ${foo}, Bar = ${bar}.")
}
)
+ @Override
public String execute() throws Exception {
if (foo == bar) {
return ERROR;
diff --git a/core/src/test/java/com/opensymphony/xwork2/ValidationOrderAction.java b/core/src/test/java/com/opensymphony/xwork2/ValidationOrderAction.java
index 0928301e3..f5cc1c4e2 100644
--- a/core/src/test/java/com/opensymphony/xwork2/ValidationOrderAction.java
+++ b/core/src/test/java/com/opensymphony/xwork2/ValidationOrderAction.java
@@ -18,14 +18,16 @@
*/
package com.opensymphony.xwork2;
+import org.apache.struts2.interceptor.parameter.StrutsParameter;
+
/**
* A sample action to test validation order.
- *
+ *
* @author tm_jee
* @version $Date$ $Id$
*/
public class ValidationOrderAction extends ActionSupport {
-
+
private String username;
private String password;
private String confirmPassword;
@@ -38,9 +40,9 @@ public class ValidationOrderAction extends ActionSupport {
private String email;
private String website;
private String passwordHint;
-
-
-
+
+
+
@Override
public String execute() throws Exception {
return SUCCESS;
@@ -53,7 +55,7 @@ public class ValidationOrderAction extends ActionSupport {
}
-
+ @StrutsParameter
public void setCity(String city) {
this.city = city;
}
@@ -65,7 +67,7 @@ public class ValidationOrderAction extends ActionSupport {
}
-
+ @StrutsParameter
public void setConfirmPassword(String confirmPassword) {
this.confirmPassword = confirmPassword;
}
@@ -77,7 +79,7 @@ public class ValidationOrderAction extends ActionSupport {
}
-
+ @StrutsParameter
public void setCountry(String country) {
this.country = country;
}
@@ -89,7 +91,7 @@ public class ValidationOrderAction extends ActionSupport {
}
-
+ @StrutsParameter
public void setEmail(String email) {
this.email = email;
}
@@ -101,7 +103,7 @@ public class ValidationOrderAction extends ActionSupport {
}
-
+ @StrutsParameter
public void setFirstName(String firstName) {
this.firstName = firstName;
}
@@ -113,7 +115,7 @@ public class ValidationOrderAction extends ActionSupport {
}
-
+ @StrutsParameter
public void setLastName(String lastName) {
this.lastName = lastName;
}
@@ -125,7 +127,7 @@ public class ValidationOrderAction extends ActionSupport {
}
-
+ @StrutsParameter
public void setPassword(String password) {
this.password = password;
}
@@ -137,7 +139,7 @@ public class ValidationOrderAction extends ActionSupport {
}
-
+ @StrutsParameter
public void setPasswordHint(String passwordHint) {
this.passwordHint = passwordHint;
}
@@ -149,7 +151,7 @@ public class ValidationOrderAction extends ActionSupport {
}
-
+ @StrutsParameter
public void setPostalCode(String postalCode) {
this.postalCode = postalCode;
}
@@ -161,7 +163,7 @@ public class ValidationOrderAction extends ActionSupport {
}
-
+ @StrutsParameter
public void setProvince(String province) {
this.province = province;
}
@@ -173,7 +175,7 @@ public class ValidationOrderAction extends ActionSupport {
}
-
+ @StrutsParameter
public void setUsername(String username) {
this.username = username;
}
@@ -185,7 +187,7 @@ public class ValidationOrderAction extends ActionSupport {
}
-
+ @StrutsParameter
public void setWebsite(String website) {
this.website = website;
}
diff --git a/core/src/test/java/com/opensymphony/xwork2/interceptor/ModelDrivenInterceptorTest.java b/core/src/test/java/com/opensymphony/xwork2/interceptor/ModelDrivenInterceptorTest.java
index 4f3589f9f..65b21c86d 100644
--- a/core/src/test/java/com/opensymphony/xwork2/interceptor/ModelDrivenInterceptorTest.java
+++ b/core/src/test/java/com/opensymphony/xwork2/interceptor/ModelDrivenInterceptorTest.java
@@ -20,7 +20,12 @@ package com.opensymphony.xwork2.interceptor;
import com.mockobjects.dynamic.ConstraintMatcher;
import com.mockobjects.dynamic.Mock;
-import com.opensymphony.xwork2.*;
+import com.opensymphony.xwork2.Action;
+import com.opensymphony.xwork2.ActionContext;
+import com.opensymphony.xwork2.ActionInvocation;
+import com.opensymphony.xwork2.ActionSupport;
+import com.opensymphony.xwork2.ModelDriven;
+import com.opensymphony.xwork2.XWorkTestCase;
import com.opensymphony.xwork2.util.ValueStack;
import java.util.Date;
@@ -175,6 +180,7 @@ public class ModelDrivenInterceptorTest extends XWorkTestCase {
public class ModelDrivenAction extends ActionSupport implements ModelDriven {
+ @Override
public Object getModel() {
return model;
}
diff --git a/core/src/test/java/com/opensymphony/xwork2/interceptor/ScopedModelDrivenInterceptorTest.java b/core/src/test/java/com/opensymphony/xwork2/interceptor/ScopedModelDrivenInterceptorTest.java
index 39358f264..577f66321 100644
--- a/core/src/test/java/com/opensymphony/xwork2/interceptor/ScopedModelDrivenInterceptorTest.java
+++ b/core/src/test/java/com/opensymphony/xwork2/interceptor/ScopedModelDrivenInterceptorTest.java
@@ -190,22 +190,27 @@ public class ScopedModelDrivenInterceptorTest extends XWorkTestCase {
private String key;
private User model;
+ @Override
public void setModel(Object model) {
this.model = (User) model;
}
+ @Override
public void setScopeKey(String key) {
this.key = key;
}
+ @Override
public String getScopeKey() {
return key;
}
+ @Override
public User getModel() {
return model;
}
+ @Override
public String execute() throws Exception {
return SUCCESS;
}
@@ -217,22 +222,27 @@ public class ScopedModelDrivenInterceptorTest extends XWorkTestCase {
private String key;
private Equidae model;
+ @Override
public void setModel(Object model) {
this.model = (Equidae) model;
}
+ @Override
public void setScopeKey(String key) {
this.key = key;
}
+ @Override
public String getScopeKey() {
return key;
}
+ @Override
public Equidae getModel() {
return model;
}
+ @Override
public String execute() throws Exception {
return SUCCESS;
}
diff --git a/core/src/test/java/com/opensymphony/xwork2/interceptor/annotations/AllowingByDefaultAction.java b/core/src/test/java/com/opensymphony/xwork2/interceptor/annotations/AllowingByDefaultAction.java
index c70fcae44..21ec5462e 100644
--- a/core/src/test/java/com/opensymphony/xwork2/interceptor/annotations/AllowingByDefaultAction.java
+++ b/core/src/test/java/com/opensymphony/xwork2/interceptor/annotations/AllowingByDefaultAction.java
@@ -19,21 +19,24 @@
package com.opensymphony.xwork2.interceptor.annotations;
import com.opensymphony.xwork2.ActionSupport;
+import org.apache.struts2.interceptor.parameter.StrutsParameter;
/**
* @author martin.gilday
*
*/
public class AllowingByDefaultAction extends ActionSupport {
-
+
@Blocked
private String name;
private String job;
-
+
+ @StrutsParameter
public void setName(String name) {
this.name = name;
}
-
+
+ @StrutsParameter
public void setJob(String job) {
this.job = job;
}
diff --git a/core/src/test/java/com/opensymphony/xwork2/interceptor/annotations/BlockingByDefaultAction.java b/core/src/test/java/com/opensymphony/xwork2/interceptor/annotations/BlockingByDefaultAction.java
index fa1f7e742..499fb2c94 100644
--- a/core/src/test/java/com/opensymphony/xwork2/interceptor/annotations/BlockingByDefaultAction.java
+++ b/core/src/test/java/com/opensymphony/xwork2/interceptor/annotations/BlockingByDefaultAction.java
@@ -19,6 +19,7 @@
package com.opensymphony.xwork2.interceptor.annotations;
import com.opensymphony.xwork2.ActionSupport;
+import org.apache.struts2.interceptor.parameter.StrutsParameter;
/**
* @author martin.gilday
@@ -26,15 +27,17 @@ import com.opensymphony.xwork2.ActionSupport;
*/
@BlockByDefault
public class BlockingByDefaultAction extends ActionSupport {
-
+
@Allowed
private String name;
private String job;
-
+
+ @StrutsParameter
public void setName(String name) {
this.name = name;
}
-
+
+ @StrutsParameter
public void setJob(String job) {
this.job = job;
}
diff --git a/core/src/test/java/com/opensymphony/xwork2/test/ModelDrivenAction2.java b/core/src/test/java/com/opensymphony/xwork2/test/ModelDrivenAction2.java
index 5bbc2d48c..0c445860b 100644
--- a/core/src/test/java/com/opensymphony/xwork2/test/ModelDrivenAction2.java
+++ b/core/src/test/java/com/opensymphony/xwork2/test/ModelDrivenAction2.java
@@ -19,6 +19,7 @@
package com.opensymphony.xwork2.test;
import com.opensymphony.xwork2.ModelDrivenAction;
+import org.apache.struts2.interceptor.parameter.StrutsParameter;
/**
@@ -28,12 +29,13 @@ import com.opensymphony.xwork2.ModelDrivenAction;
*/
public class ModelDrivenAction2 extends ModelDrivenAction {
- private TestBean2 model = new TestBean2();
+ private final TestBean2 model = new TestBean2();
/**
* @return the model to be pushed onto the ValueStack after the Action itself
*/
+ @StrutsParameter(depth = 3)
@Override
public Object getModel() {
return model;
diff --git a/core/src/test/java/com/opensymphony/xwork2/test/ModelDrivenAnnotationAction2.java b/core/src/test/java/com/opensymphony/xwork2/test/ModelDrivenAnnotationAction2.java
index c7aef9315..7c26dcfab 100644
--- a/core/src/test/java/com/opensymphony/xwork2/test/ModelDrivenAnnotationAction2.java
+++ b/core/src/test/java/com/opensymphony/xwork2/test/ModelDrivenAnnotationAction2.java
@@ -19,6 +19,7 @@
package com.opensymphony.xwork2.test;
import com.opensymphony.xwork2.ModelDrivenAnnotationAction;
+import org.apache.struts2.interceptor.parameter.StrutsParameter;
/**
@@ -29,12 +30,13 @@ import com.opensymphony.xwork2.ModelDrivenAnnotationAction;
*/
public class ModelDrivenAnnotationAction2 extends ModelDrivenAnnotationAction {
- private AnnotationTestBean2 model = new AnnotationTestBean2();
+ private final AnnotationTestBean2 model = new AnnotationTestBean2();
/**
* @return the model to be pushed onto the ValueStack after the Action itself
*/
+ @StrutsParameter(depth = 3)
@Override
public Object getModel() {
return model;
diff --git a/core/src/test/java/com/opensymphony/xwork2/test/SimpleAction2.java b/core/src/test/java/com/opensymphony/xwork2/test/SimpleAction2.java
index d08435464..1d9540402 100644
--- a/core/src/test/java/com/opensymphony/xwork2/test/SimpleAction2.java
+++ b/core/src/test/java/com/opensymphony/xwork2/test/SimpleAction2.java
@@ -19,6 +19,7 @@
package com.opensymphony.xwork2.test;
import com.opensymphony.xwork2.SimpleAction;
+import org.apache.struts2.interceptor.parameter.StrutsParameter;
/**
@@ -31,7 +32,7 @@ public class SimpleAction2 extends SimpleAction {
private int count;
-
+ @StrutsParameter
public void setCount(int count) {
this.count = count;
}
diff --git a/core/src/test/java/com/opensymphony/xwork2/test/SimpleAction3.java b/core/src/test/java/com/opensymphony/xwork2/test/SimpleAction3.java
index f4934cd89..40a4c79b2 100644
--- a/core/src/test/java/com/opensymphony/xwork2/test/SimpleAction3.java
+++ b/core/src/test/java/com/opensymphony/xwork2/test/SimpleAction3.java
@@ -20,6 +20,7 @@ package com.opensymphony.xwork2.test;
import com.opensymphony.xwork2.SimpleAction;
import com.opensymphony.xwork2.util.Bar;
+import org.apache.struts2.interceptor.parameter.StrutsParameter;
/**
@@ -32,19 +33,24 @@ public class SimpleAction3 extends SimpleAction implements DataAware {
private Bar bar;
private String data;
-
+ @Override
public void setBarObj(Bar b) {
bar = b;
}
+ @StrutsParameter(depth = 1)
+ @Override
public Bar getBarObj() {
return bar;
}
+ @StrutsParameter
+ @Override
public void setData(String data) {
this.data = data;
}
+ @Override
public String getData() {
return data;
}
diff --git a/core/src/test/java/com/opensymphony/xwork2/test/SimpleAnnotationAction2.java b/core/src/test/java/com/opensymphony/xwork2/test/SimpleAnnotationAction2.java
index 1f7d98a16..d5e566e40 100644
--- a/core/src/test/java/com/opensymphony/xwork2/test/SimpleAnnotationAction2.java
+++ b/core/src/test/java/com/opensymphony/xwork2/test/SimpleAnnotationAction2.java
@@ -21,6 +21,7 @@ package com.opensymphony.xwork2.test;
import com.opensymphony.xwork2.SimpleAnnotationAction;
import com.opensymphony.xwork2.validator.annotations.IntRangeFieldValidator;
import com.opensymphony.xwork2.validator.annotations.RequiredFieldValidator;
+import org.apache.struts2.interceptor.parameter.StrutsParameter;
/**
* SimpleAction2
@@ -35,6 +36,7 @@ public class SimpleAnnotationAction2 extends SimpleAnnotationAction {
@RequiredFieldValidator(message = "You must enter a value for count.")
@IntRangeFieldValidator(min = "0", max = "5", message = "count must be between ${min} and ${max}, current value is ${count}.")
+ @StrutsParameter
public void setCount(int count) {
this.count = count;
}
diff --git a/core/src/test/java/com/opensymphony/xwork2/test/SimpleAnnotationAction3.java b/core/src/test/java/com/opensymphony/xwork2/test/SimpleAnnotationAction3.java
index 929eb4b51..dea337bce 100644
--- a/core/src/test/java/com/opensymphony/xwork2/test/SimpleAnnotationAction3.java
+++ b/core/src/test/java/com/opensymphony/xwork2/test/SimpleAnnotationAction3.java
@@ -20,6 +20,7 @@ package com.opensymphony.xwork2.test;
import com.opensymphony.xwork2.SimpleAnnotationAction;
import com.opensymphony.xwork2.util.Bar;
+import org.apache.struts2.interceptor.parameter.StrutsParameter;
/**
@@ -33,19 +34,24 @@ public class SimpleAnnotationAction3 extends SimpleAnnotationAction implements A
private Bar bar;
private String data;
-
+ @Override
public void setBarObj(Bar b) {
bar = b;
}
+ @StrutsParameter(depth = 1)
+ @Override
public Bar getBarObj() {
return bar;
}
+ @StrutsParameter
+ @Override
public void setData(String data) {
this.data = data;
}
+ @Override
public String getData() {
return data;
}
diff --git a/core/src/test/java/com/opensymphony/xwork2/test/annotations/ValidateAnnotatedMethodOnlyAction.java b/core/src/test/java/com/opensymphony/xwork2/test/annotations/ValidateAnnotatedMethodOnlyAction.java
index b57361cd4..aefaa94a0 100644
--- a/core/src/test/java/com/opensymphony/xwork2/test/annotations/ValidateAnnotatedMethodOnlyAction.java
+++ b/core/src/test/java/com/opensymphony/xwork2/test/annotations/ValidateAnnotatedMethodOnlyAction.java
@@ -20,6 +20,7 @@ package com.opensymphony.xwork2.test.annotations;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.validator.annotations.ExpressionValidator;
+import org.apache.struts2.interceptor.parameter.StrutsParameter;
/**
* ValidateAnnotatedMethodOnlyAction
@@ -34,6 +35,7 @@ public class ValidateAnnotatedMethodOnlyAction extends ActionSupport {
return param1;
}
+ @StrutsParameter
public void setParam1(String param1) {
this.param1 = param1;
}
@@ -42,6 +44,7 @@ public class ValidateAnnotatedMethodOnlyAction extends ActionSupport {
return param2;
}
+ @StrutsParameter
public void setParam2(String param2) {
this.param2 = param2;
}
diff --git a/core/src/test/java/com/opensymphony/xwork2/util/Bar.java b/core/src/test/java/com/opensymphony/xwork2/util/Bar.java
index 348a28576..6332a570b 100644
--- a/core/src/test/java/com/opensymphony/xwork2/util/Bar.java
+++ b/core/src/test/java/com/opensymphony/xwork2/util/Bar.java
@@ -19,6 +19,7 @@
package com.opensymphony.xwork2.util;
import com.opensymphony.xwork2.ActionSupport;
+import org.apache.struts2.interceptor.parameter.StrutsParameter;
/**
@@ -32,7 +33,7 @@ public class Bar extends ActionSupport {
String title;
int somethingElse;
-
+ @StrutsParameter
public void setId(Long id) {
this.id = id;
}
@@ -41,6 +42,7 @@ public class Bar extends ActionSupport {
return this.id;
}
+ @StrutsParameter
public void setSomethingElse(int somethingElse) {
this.somethingElse = somethingElse;
}
@@ -49,6 +51,7 @@ public class Bar extends ActionSupport {
return somethingElse;
}
+ @StrutsParameter
public void setTitle(String title) {
this.title = title;
}
diff --git a/core/src/test/java/com/opensymphony/xwork2/util/StrutsLocalizedTextProviderTest.java b/core/src/test/java/com/opensymphony/xwork2/util/StrutsLocalizedTextProviderTest.java
index b86923db1..7bb8af612 100644
--- a/core/src/test/java/com/opensymphony/xwork2/util/StrutsLocalizedTextProviderTest.java
+++ b/core/src/test/java/com/opensymphony/xwork2/util/StrutsLocalizedTextProviderTest.java
@@ -32,6 +32,7 @@ import com.opensymphony.xwork2.config.providers.XmlConfigurationProvider;
import com.opensymphony.xwork2.test.ModelDrivenAction2;
import com.opensymphony.xwork2.test.TestBean2;
import org.apache.struts2.config.StrutsXmlConfigurationProvider;
+import org.apache.struts2.interceptor.parameter.StrutsParameter;
import java.text.DateFormat;
import java.text.ParseException;
@@ -83,6 +84,7 @@ public class StrutsLocalizedTextProviderTest extends XWorkTestCase {
public static class MyAction extends ActionSupport {
private Bar testBean2;
+ @StrutsParameter(depth = 1)
public Bar getBarObj() {
return testBean2;
}
@@ -460,7 +462,7 @@ public class StrutsLocalizedTextProviderTest extends XWorkTestCase {
/**
* Test the {@link StrutsLocalizedTextProvider#findText(java.lang.Class, java.lang.String, java.util.Locale, java.lang.String, java.lang.Object[], com.opensymphony.xwork2.util.ValueStack) }
* method for basic correctness.
- *
+ *
* It is the version of the method that will search the class hierarchy resource bundles first, unless {@link StrutsLocalizedTextProvider#searchDefaultBundlesFirst}
* is true (in which case it will search the default resource bundles first). No matter the flag setting, it should search until it finds a match, or fails to find
* a match and returns the default message parameter that was passed.
@@ -611,7 +613,7 @@ public class StrutsLocalizedTextProviderTest extends XWorkTestCase {
/**
* Attempt to force the resource bundles to be reloaded, even if configuration would otherwise prevent it.
- * It will preserve the current reloadBundles state, attempt to force a reload and then restore the
+ * It will preserve the current reloadBundles state, attempt to force a reload and then restore the
* original reloadBundles value.
*/
public void callReloadBundlesForceReload() {
@@ -625,9 +627,9 @@ public class StrutsLocalizedTextProviderTest extends XWorkTestCase {
}
/**
- * Returns the value of the resource bundles reloaded state from the context, provided that one was
+ * Returns the value of the resource bundles reloaded state from the context, provided that one was
* previously set. If no value is found, the result will be false (same as if bundles had not been reloaded).
- *
+ *
* @return true if resource bundles reloaded indicator is true, false otherwise (including if value was never set).
*/
public boolean getBundlesReloadedIndicatorValue() {
diff --git a/core/src/test/java/com/opensymphony/xwork2/validator/ActionValidatorManagerTest.java b/core/src/test/java/com/opensymphony/xwork2/validator/ActionValidatorManagerTest.java
index 385f2ab0a..0c100babe 100644
--- a/core/src/test/java/com/opensymphony/xwork2/validator/ActionValidatorManagerTest.java
+++ b/core/src/test/java/com/opensymphony/xwork2/validator/ActionValidatorManagerTest.java
@@ -25,6 +25,7 @@ import com.opensymphony.xwork2.util.ValueStackFactory;
import com.opensymphony.xwork2.validator.validators.RequiredFieldValidator;
import com.opensymphony.xwork2.validator.validators.RequiredStringValidator;
import com.opensymphony.xwork2.validator.validators.VisitorFieldValidator;
+import org.apache.struts2.interceptor.parameter.StrutsParameter;
import java.util.ArrayList;
import java.util.Collections;
@@ -201,8 +202,10 @@ public class ActionValidatorManagerTest extends XWorkTestCase {
public void setReferenceNumber(String referenceNumber) { this.referenceNumber = referenceNumber; }
public Integer getOrder() { return order; }
+ @StrutsParameter
public void setOrder(Integer order) { this.order = order; }
+ @StrutsParameter(depth = 2)
public Customer getCustomer() { return customer; }
public void setCustomer(Customer customer) { this.customer = customer; }
}
@@ -233,4 +236,4 @@ public class ActionValidatorManagerTest extends XWorkTestCase {
public String getPobox() { return pobox; }
public void setPobox(String pobox) { this.pobox = pobox; }
}
-}
\ No newline at end of file
+}
diff --git a/core/src/test/java/com/opensymphony/xwork2/validator/AnnotationValidationAction.java b/core/src/test/java/com/opensymphony/xwork2/validator/AnnotationValidationAction.java
index 3142c4515..b8e6b1601 100644
--- a/core/src/test/java/com/opensymphony/xwork2/validator/AnnotationValidationAction.java
+++ b/core/src/test/java/com/opensymphony/xwork2/validator/AnnotationValidationAction.java
@@ -87,6 +87,7 @@ public class AnnotationValidationAction extends ActionSupport {
messageParams = {"one", "two", "three"})
@VisitorFieldValidator(message = "Foo isn't valid!", key = "visitorfield.key", fieldName = "foo", appendPrefix = false,
shortCircuit = true, messageParams = {"one", "two", "three"})
+ @Override
public String execute() {
return SUCCESS;
}
diff --git a/core/src/test/java/com/opensymphony/xwork2/validator/AnnotationValidationExpAction.java b/core/src/test/java/com/opensymphony/xwork2/validator/AnnotationValidationExpAction.java
index 073ff3bce..f79439149 100644
--- a/core/src/test/java/com/opensymphony/xwork2/validator/AnnotationValidationExpAction.java
+++ b/core/src/test/java/com/opensymphony/xwork2/validator/AnnotationValidationExpAction.java
@@ -89,6 +89,7 @@ public class AnnotationValidationExpAction extends ActionSupport {
messageParams = {"one", "two", "three"})
@VisitorFieldValidator(message = "Foo isn't valid!", key = "visitorfield.key", fieldName = "foo", appendPrefix = false,
shortCircuit = true, messageParams = {"one", "two", "three"})
+ @Override
public String execute() {
return SUCCESS;
}
diff --git a/core/src/test/java/com/opensymphony/xwork2/validator/StringLengthFieldValidatorTest.java b/core/src/test/java/com/opensymphony/xwork2/validator/StringLengthFieldValidatorTest.java
index 20d8a2bfc..dc1ee6b12 100644
--- a/core/src/test/java/com/opensymphony/xwork2/validator/StringLengthFieldValidatorTest.java
+++ b/core/src/test/java/com/opensymphony/xwork2/validator/StringLengthFieldValidatorTest.java
@@ -24,6 +24,7 @@ import com.opensymphony.xwork2.TextProviderFactory;
import com.opensymphony.xwork2.XWorkTestCase;
import com.opensymphony.xwork2.util.ValueStack;
import com.opensymphony.xwork2.validator.validators.StringLengthFieldValidator;
+import org.apache.struts2.interceptor.parameter.StrutsParameter;
import java.util.Arrays;
import java.util.Collection;
@@ -220,6 +221,7 @@ public class StringLengthFieldValidatorTest extends XWorkTestCase {
return this.myField;
}
+ @StrutsParameter
public void setMyField(String myField) {
this.myField = myField;
}
@@ -228,6 +230,7 @@ public class StringLengthFieldValidatorTest extends XWorkTestCase {
return trimValue;
}
+ @StrutsParameter
public void setTrimValue(boolean trimValue) {
this.trimValue = trimValue;
}
@@ -236,6 +239,7 @@ public class StringLengthFieldValidatorTest extends XWorkTestCase {
return minLengthValue;
}
+ @StrutsParameter
public void setMinLengthValue(int minLengthValue) {
this.minLengthValue = minLengthValue;
}
@@ -244,6 +248,7 @@ public class StringLengthFieldValidatorTest extends XWorkTestCase {
return maxLengthValue;
}
+ @StrutsParameter
public void setMaxLengthValue(int maxLengthValue) {
this.maxLengthValue = maxLengthValue;
}
@@ -252,6 +257,7 @@ public class StringLengthFieldValidatorTest extends XWorkTestCase {
return strings;
}
+ @StrutsParameter
public void setStrings(String[] strings) {
this.strings = strings;
}
@@ -260,6 +266,7 @@ public class StringLengthFieldValidatorTest extends XWorkTestCase {
return stringCollection;
}
+ @StrutsParameter
public void setStringCollection(Collection stringCollection) {
this.stringCollection = stringCollection;
}
diff --git a/core/src/test/java/com/opensymphony/xwork2/validator/VisitorValidatorModelAction.java b/core/src/test/java/com/opensymphony/xwork2/validator/VisitorValidatorModelAction.java
index fee56451b..9f5baeee0 100644
--- a/core/src/test/java/com/opensymphony/xwork2/validator/VisitorValidatorModelAction.java
+++ b/core/src/test/java/com/opensymphony/xwork2/validator/VisitorValidatorModelAction.java
@@ -19,6 +19,7 @@
package com.opensymphony.xwork2.validator;
import com.opensymphony.xwork2.ModelDriven;
+import org.apache.struts2.interceptor.parameter.StrutsParameter;
/**
@@ -32,6 +33,8 @@ public class VisitorValidatorModelAction extends VisitorValidatorTestAction impl
/**
* @return the model to be pushed onto the ValueStack instead of the Action itself
*/
+ @StrutsParameter(depth = 2)
+ @Override
public Object getModel() {
return getBean();
}
diff --git a/core/src/test/java/com/opensymphony/xwork2/validator/VisitorValidatorTestAction.java b/core/src/test/java/com/opensymphony/xwork2/validator/VisitorValidatorTestAction.java
index 9e672bf48..b7cef86ae 100644
--- a/core/src/test/java/com/opensymphony/xwork2/validator/VisitorValidatorTestAction.java
+++ b/core/src/test/java/com/opensymphony/xwork2/validator/VisitorValidatorTestAction.java
@@ -20,6 +20,7 @@ package com.opensymphony.xwork2.validator;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.TestBean;
+import org.apache.struts2.interceptor.parameter.StrutsParameter;
import java.util.ArrayList;
import java.util.Date;
@@ -49,15 +50,16 @@ public class VisitorValidatorTestAction extends ActionSupport {
}
}
-
public void setBean(TestBean bean) {
this.bean = bean;
}
+ @StrutsParameter(depth = 2)
public TestBean getBean() {
return bean;
}
+ @StrutsParameter
public void setContext(String context) {
this.context = context;
}
@@ -70,6 +72,7 @@ public class VisitorValidatorTestAction extends ActionSupport {
this.testBeanArray = testBeanArray;
}
+ @StrutsParameter(depth = 3)
public TestBean[] getTestBeanArray() {
return testBeanArray;
}
@@ -78,6 +81,7 @@ public class VisitorValidatorTestAction extends ActionSupport {
this.testBeanList = testBeanList;
}
+ @StrutsParameter(depth = 3)
public List getTestBeanList() {
return testBeanList;
}
@@ -86,6 +90,7 @@ public class VisitorValidatorTestAction extends ActionSupport {
return birthday;
}
+ @StrutsParameter
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
diff --git a/core/src/test/java/org/apache/struts2/ExecutionCountTestAction.java b/core/src/test/java/org/apache/struts2/ExecutionCountTestAction.java
index 1d609e572..ca8ee077f 100644
--- a/core/src/test/java/org/apache/struts2/ExecutionCountTestAction.java
+++ b/core/src/test/java/org/apache/struts2/ExecutionCountTestAction.java
@@ -41,9 +41,10 @@ public class ExecutionCountTestAction extends ActionSupport {
return executionCount;
}
+ @Override
public String execute() throws Exception {
executionCount++;
- LOG.info("executing ExecutionCountTestAction. Current count is " + executionCount);
+ LOG.info("executing ExecutionCountTestAction. Current count is {}", executionCount);
return SUCCESS;
}
diff --git a/core/src/test/java/org/apache/struts2/HttpMethodsTestAction.java b/core/src/test/java/org/apache/struts2/HttpMethodsTestAction.java
index 255044b95..33921e220 100644
--- a/core/src/test/java/org/apache/struts2/HttpMethodsTestAction.java
+++ b/core/src/test/java/org/apache/struts2/HttpMethodsTestAction.java
@@ -68,6 +68,7 @@ public class HttpMethodsTestAction extends ActionSupport implements HttpMethodAw
return "onDelete";
}
+ @Override
public void setMethod(HttpMethod httpMethod) {
this.httpMethod = httpMethod;
}
@@ -76,6 +77,7 @@ public class HttpMethodsTestAction extends ActionSupport implements HttpMethodAw
return httpMethod;
}
+ @Override
public String getBadRequestResultName() {
return resultName;
}
diff --git a/core/src/test/java/org/apache/struts2/TestAction.java b/core/src/test/java/org/apache/struts2/TestAction.java
index b9595de11..f90f538f2 100644
--- a/core/src/test/java/org/apache/struts2/TestAction.java
+++ b/core/src/test/java/org/apache/struts2/TestAction.java
@@ -184,6 +184,7 @@ public class TestAction extends ActionSupport {
this.fooInt = fooInt;
}
+ @Override
public String execute() throws Exception {
if (result == null) {
result = Action.SUCCESS;
diff --git a/core/src/test/java/org/apache/struts2/interceptor/CookieInterceptorTest.java b/core/src/test/java/org/apache/struts2/interceptor/CookieInterceptorTest.java
index afe18f731..8e6f6d19d 100644
--- a/core/src/test/java/org/apache/struts2/interceptor/CookieInterceptorTest.java
+++ b/core/src/test/java/org/apache/struts2/interceptor/CookieInterceptorTest.java
@@ -27,6 +27,7 @@ import com.opensymphony.xwork2.security.DefaultAcceptedPatternsChecker;
import com.opensymphony.xwork2.security.DefaultExcludedPatternsChecker;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.StrutsInternalTestCase;
+import org.apache.struts2.interceptor.parameter.StrutsParameter;
import org.springframework.mock.web.MockHttpServletRequest;
import javax.servlet.http.Cookie;
@@ -503,6 +504,7 @@ public class CookieInterceptorTest extends StrutsInternalTestCase {
private String cookie2;
private String cookie3;
+ @Override
public void setCookiesMap(Map cookies) {
this.cookies = cookies;
}
@@ -515,6 +517,7 @@ public class CookieInterceptorTest extends StrutsInternalTestCase {
return cookie1;
}
+ @StrutsParameter
public void setCookie1(String cookie1) {
this.cookie1 = cookie1;
}
@@ -523,6 +526,7 @@ public class CookieInterceptorTest extends StrutsInternalTestCase {
return cookie2;
}
+ @StrutsParameter
public void setCookie2(String cookie2) {
this.cookie2 = cookie2;
}
@@ -531,6 +535,7 @@ public class CookieInterceptorTest extends StrutsInternalTestCase {
return cookie3;
}
+ @StrutsParameter
public void setCookie3(String cookie3) {
this.cookie3 = cookie3;
}
@@ -543,6 +548,7 @@ public class CookieInterceptorTest extends StrutsInternalTestCase {
private String cookie2;
private String cookie3;
+ @Override
public void withCookies(Map cookies) {
this.cookies = cookies;
}
@@ -555,6 +561,7 @@ public class CookieInterceptorTest extends StrutsInternalTestCase {
return cookie1;
}
+ @StrutsParameter
public void setCookie1(String cookie1) {
this.cookie1 = cookie1;
}
@@ -563,6 +570,7 @@ public class CookieInterceptorTest extends StrutsInternalTestCase {
return cookie2;
}
+ @StrutsParameter
public void setCookie2(String cookie2) {
this.cookie2 = cookie2;
}
@@ -571,6 +579,7 @@ public class CookieInterceptorTest extends StrutsInternalTestCase {
return cookie3;
}
+ @StrutsParameter
public void setCookie3(String cookie3) {
this.cookie3 = cookie3;
}
diff --git a/core/src/test/java/org/apache/struts2/interceptor/FileUploadInterceptorTest.java b/core/src/test/java/org/apache/struts2/interceptor/FileUploadInterceptorTest.java
index 14bb23c36..cfb305770 100644
--- a/core/src/test/java/org/apache/struts2/interceptor/FileUploadInterceptorTest.java
+++ b/core/src/test/java/org/apache/struts2/interceptor/FileUploadInterceptorTest.java
@@ -27,7 +27,6 @@ import com.opensymphony.xwork2.util.ClassLoaderUtil;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.StrutsInternalTestCase;
-import org.apache.struts2.TestAction;
import org.apache.struts2.dispatcher.HttpParameters;
import org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest;
import org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper;
@@ -37,7 +36,6 @@ import org.springframework.mock.web.MockHttpServletRequest;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
-import java.io.IOException;
import java.net.URI;
import java.net.URL;
import java.nio.charset.StandardCharsets;
@@ -595,6 +593,7 @@ public class FileUploadInterceptorTest extends StrutsInternalTestCase {
return new MultiPartRequestWrapper(jak, req, tempDir.getAbsolutePath(), new DefaultLocaleProvider());
}
+ @Override
protected void setUp() throws Exception {
super.setUp();
@@ -605,6 +604,7 @@ public class FileUploadInterceptorTest extends StrutsInternalTestCase {
tempDir.mkdirs();
}
+ @Override
protected void tearDown() throws Exception {
tempDir.delete();
interceptor.destroy();
diff --git a/core/src/test/java/org/apache/struts2/ognl/ProviderAllowlistTest.java b/core/src/test/java/org/apache/struts2/ognl/ProviderAllowlistTest.java
index baf91b9b5..2584d16f4 100644
--- a/core/src/test/java/org/apache/struts2/ognl/ProviderAllowlistTest.java
+++ b/core/src/test/java/org/apache/struts2/ognl/ProviderAllowlistTest.java
@@ -18,7 +18,6 @@
*/
package org.apache.struts2.ognl;
-import com.opensymphony.xwork2.config.ConfigurationProvider;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
@@ -39,10 +38,10 @@ public class ProviderAllowlistTest {
private ProviderAllowlist providerAllowlist;
@Mock
- private ConfigurationProvider provider1;
+ private Object key1;
@Mock
- private ConfigurationProvider provider2;
+ private Object key2;
@Before
public void setUp() throws Exception {
@@ -51,37 +50,37 @@ public class ProviderAllowlistTest {
@Test
public void registerAllowlist() {
- providerAllowlist.registerAllowlist(provider1, new HashSet<>(asList(String.class, Integer.class)));
- providerAllowlist.registerAllowlist(provider2, new HashSet<>(asList(Double.class, Integer.class)));
+ providerAllowlist.registerAllowlist(key1, new HashSet<>(asList(String.class, Integer.class)));
+ providerAllowlist.registerAllowlist(key2, new HashSet<>(asList(Double.class, Integer.class)));
assertThat(providerAllowlist.getProviderAllowlist()).containsExactlyInAnyOrder(String.class, Integer.class, Double.class);
}
@Test
public void registerAllowlist_twice() {
- providerAllowlist.registerAllowlist(provider1, new HashSet<>(asList(String.class, Integer.class)));
- providerAllowlist.registerAllowlist(provider1, new HashSet<>(asList(Double.class, Integer.class)));
+ providerAllowlist.registerAllowlist(key1, new HashSet<>(asList(String.class, Integer.class)));
+ providerAllowlist.registerAllowlist(key1, new HashSet<>(asList(Double.class, Integer.class)));
assertThat(providerAllowlist.getProviderAllowlist()).containsExactlyInAnyOrder(Integer.class, Double.class);
}
@Test
public void clearAllowlist() {
- providerAllowlist.registerAllowlist(provider1, new HashSet<>(asList(String.class, Integer.class)));
- providerAllowlist.registerAllowlist(provider2, new HashSet<>(asList(Double.class, Integer.class)));
+ providerAllowlist.registerAllowlist(key1, new HashSet<>(asList(String.class, Integer.class)));
+ providerAllowlist.registerAllowlist(key2, new HashSet<>(asList(Double.class, Integer.class)));
- providerAllowlist.clearAllowlist(provider1);
+ providerAllowlist.clearAllowlist(key1);
assertThat(providerAllowlist.getProviderAllowlist()).containsExactlyInAnyOrder(Integer.class, Double.class);
}
@Test
public void clearAllowlist_both() {
- providerAllowlist.registerAllowlist(provider1, new HashSet<>(asList(String.class, Integer.class)));
- providerAllowlist.registerAllowlist(provider2, new HashSet<>(asList(Double.class, Integer.class)));
+ providerAllowlist.registerAllowlist(key1, new HashSet<>(asList(String.class, Integer.class)));
+ providerAllowlist.registerAllowlist(key2, new HashSet<>(asList(Double.class, Integer.class)));
- providerAllowlist.clearAllowlist(provider1);
- providerAllowlist.clearAllowlist(provider2);
+ providerAllowlist.clearAllowlist(key1);
+ providerAllowlist.clearAllowlist(key2);
assertThat(providerAllowlist.getProviderAllowlist()).isEmpty();
}
diff --git a/core/src/test/java/org/apache/struts2/views/jsp/IteratorGeneratorTagTest.java b/core/src/test/java/org/apache/struts2/views/jsp/IteratorGeneratorTagTest.java
index d1748e16f..a5739b00e 100644
--- a/core/src/test/java/org/apache/struts2/views/jsp/IteratorGeneratorTagTest.java
+++ b/core/src/test/java/org/apache/struts2/views/jsp/IteratorGeneratorTagTest.java
@@ -18,13 +18,12 @@
*/
package org.apache.struts2.views.jsp;
-import java.util.Iterator;
-
+import com.opensymphony.xwork2.Action;
+import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.util.IteratorGenerator.Converter;
import org.apache.struts2.views.jsp.iterator.IteratorGeneratorTag;
-import com.opensymphony.xwork2.Action;
-import com.opensymphony.xwork2.ActionSupport;
+import java.util.Iterator;
/**
* Test case for IteratorGeneratorTag.
@@ -428,11 +427,7 @@ public class IteratorGeneratorTagTest extends AbstractTagTest {
public Action getAction() {
return new ActionSupport() {
public Converter getMyConverter() {
- return new Converter() {
- public Object convert(String value) throws Exception {
- return "myConverter-"+value;
- }
- };
+ return value -> "myConverter-"+value;
}
public int getMyCount() {
diff --git a/core/src/test/java/org/apache/struts2/views/jsp/SortIteratorTagTest.java b/core/src/test/java/org/apache/struts2/views/jsp/SortIteratorTagTest.java
index f88c2ae81..700e6e80a 100644
--- a/core/src/test/java/org/apache/struts2/views/jsp/SortIteratorTagTest.java
+++ b/core/src/test/java/org/apache/struts2/views/jsp/SortIteratorTagTest.java
@@ -18,18 +18,16 @@
*/
package org.apache.struts2.views.jsp;
+import com.opensymphony.xwork2.Action;
+import com.opensymphony.xwork2.ActionSupport;
+import org.apache.struts2.views.jsp.iterator.SortIteratorTag;
+
+import javax.servlet.jsp.JspException;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
-import javax.servlet.jsp.JspException;
-
-import org.apache.struts2.views.jsp.iterator.SortIteratorTag;
-
-import com.opensymphony.xwork2.Action;
-import com.opensymphony.xwork2.ActionSupport;
-
/**
* Test case to test SortIteratorTag.
*
@@ -338,13 +336,11 @@ public class SortIteratorTagTest extends AbstractTagTest {
public Action getAction() {
return new ActionSupport() {
public Comparator getComparator() {
- return new Comparator() {
- public int compare(Object o1, Object o2) {
- Integer i1 = (Integer) o1;
- Integer i2 = (Integer) o2;
+ return (o1, o2) -> {
+ Integer i1 = (Integer) o1;
+ Integer i2 = (Integer) o2;
- return (i1.intValue() - i2.intValue());
- }
+ return (i1 - i2);
};
}
diff --git a/core/src/test/java/org/apache/struts2/views/jsp/SubsetIteratorTagTest.java b/core/src/test/java/org/apache/struts2/views/jsp/SubsetIteratorTagTest.java
index 4498124bb..fc03dda0d 100644
--- a/core/src/test/java/org/apache/struts2/views/jsp/SubsetIteratorTagTest.java
+++ b/core/src/test/java/org/apache/struts2/views/jsp/SubsetIteratorTagTest.java
@@ -18,15 +18,14 @@
*/
package org.apache.struts2.views.jsp;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
+import com.opensymphony.xwork2.Action;
+import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.util.SubsetIteratorFilter.Decider;
import org.apache.struts2.views.jsp.iterator.SubsetIteratorTag;
-import com.opensymphony.xwork2.Action;
-import com.opensymphony.xwork2.ActionSupport;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
/**
@@ -641,11 +640,11 @@ public class SubsetIteratorTagTest extends AbstractTagTest {
return new ActionSupport() {
public List getMyList() {
List l = new ArrayList();
- l.add(new Integer(1));
- l.add(new Integer(2));
- l.add(new Integer(3));
- l.add(new Integer(4));
- l.add(new Integer(5));
+ l.add(1);
+ l.add(2);
+ l.add(3);
+ l.add(4);
+ l.add(5);
return l;
}
@@ -660,11 +659,9 @@ public class SubsetIteratorTagTest extends AbstractTagTest {
}
public Decider getMyDecider() {
- return new Decider() {
- public boolean decide(Object element) throws Exception {
- int integer = ((Integer)element).intValue();
- return (((integer % 2) == 0)?true:false);
- }
+ return element -> {
+ int integer = (Integer) element;
+ return integer % 2 == 0;
};
}
};
diff --git a/core/src/test/java/org/apache/struts2/views/jsp/ui/DoubleValidationAction.java b/core/src/test/java/org/apache/struts2/views/jsp/ui/DoubleValidationAction.java
index e62e3be5c..aedc8596c 100644
--- a/core/src/test/java/org/apache/struts2/views/jsp/ui/DoubleValidationAction.java
+++ b/core/src/test/java/org/apache/struts2/views/jsp/ui/DoubleValidationAction.java
@@ -19,6 +19,7 @@
package org.apache.struts2.views.jsp.ui;
import com.opensymphony.xwork2.ActionSupport;
+import org.apache.struts2.interceptor.parameter.StrutsParameter;
/**
*
@@ -30,6 +31,7 @@ public class DoubleValidationAction extends ActionSupport {
return longint;
}
+ @StrutsParameter
public void setLongint(double longint) {
this.longint = longint;
}
diff --git a/core/src/test/java/org/apache/struts2/views/jsp/ui/FieldErrorTagTest.java b/core/src/test/java/org/apache/struts2/views/jsp/ui/FieldErrorTagTest.java
index f8e611337..348f98fbe 100644
--- a/core/src/test/java/org/apache/struts2/views/jsp/ui/FieldErrorTagTest.java
+++ b/core/src/test/java/org/apache/struts2/views/jsp/ui/FieldErrorTagTest.java
@@ -18,19 +18,18 @@
*/
package org.apache.struts2.views.jsp.ui;
+import com.opensymphony.xwork2.Action;
+import com.opensymphony.xwork2.ActionSupport;
+import org.apache.struts2.TestAction;
+import org.apache.struts2.views.jsp.AbstractUITagTest;
+import org.apache.struts2.views.jsp.ParamTag;
+
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
-import org.apache.struts2.views.jsp.AbstractUITagTest;
-import org.apache.struts2.views.jsp.ParamTag;
-import org.apache.struts2.TestAction;
-
-import com.opensymphony.xwork2.Action;
-import com.opensymphony.xwork2.ActionSupport;
-
/**
* FieldError Tag Test Case.
*
diff --git a/core/src/test/java/org/apache/struts2/views/jsp/ui/IntValidationAction.java b/core/src/test/java/org/apache/struts2/views/jsp/ui/IntValidationAction.java
index 2be6ebdd1..f996c066d 100644
--- a/core/src/test/java/org/apache/struts2/views/jsp/ui/IntValidationAction.java
+++ b/core/src/test/java/org/apache/struts2/views/jsp/ui/IntValidationAction.java
@@ -19,6 +19,7 @@
package org.apache.struts2.views.jsp.ui;
import com.opensymphony.xwork2.ActionSupport;
+import org.apache.struts2.interceptor.parameter.StrutsParameter;
/**
*
@@ -30,6 +31,7 @@ public class IntValidationAction extends ActionSupport {
return longint;
}
+ @StrutsParameter
public void setLongint(int longint) {
this.longint = longint;
}
diff --git a/plugins/bean-validation/src/test/java/org/apache/struts/beanvalidation/actions/FieldAction.java b/plugins/bean-validation/src/test/java/org/apache/struts/beanvalidation/actions/FieldAction.java
index e9af62d4f..1c0470d82 100644
--- a/plugins/bean-validation/src/test/java/org/apache/struts/beanvalidation/actions/FieldAction.java
+++ b/plugins/bean-validation/src/test/java/org/apache/struts/beanvalidation/actions/FieldAction.java
@@ -19,6 +19,7 @@
package org.apache.struts.beanvalidation.actions;
import com.opensymphony.xwork2.ActionSupport;
+import org.apache.struts2.interceptor.parameter.StrutsParameter;
import org.hibernate.validator.constraints.NotBlank;
public class FieldAction extends ActionSupport {
@@ -30,6 +31,7 @@ public class FieldAction extends ActionSupport {
return test;
}
+ @StrutsParameter
public void setTest(String test) {
this.test = test;
}
diff --git a/plugins/bean-validation/src/test/java/org/apache/struts/beanvalidation/actions/FieldMatchAction.java b/plugins/bean-validation/src/test/java/org/apache/struts/beanvalidation/actions/FieldMatchAction.java
index 935ad5d17..688661f63 100644
--- a/plugins/bean-validation/src/test/java/org/apache/struts/beanvalidation/actions/FieldMatchAction.java
+++ b/plugins/bean-validation/src/test/java/org/apache/struts/beanvalidation/actions/FieldMatchAction.java
@@ -20,6 +20,7 @@ package org.apache.struts.beanvalidation.actions;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts.beanvalidation.constraints.FieldMatch;
+import org.apache.struts2.interceptor.parameter.StrutsParameter;
import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.NotBlank;
@@ -48,6 +49,7 @@ public class FieldMatchAction extends ActionSupport {
return password;
}
+ @StrutsParameter
public void setPassword(String password) {
this.password = password;
}
@@ -56,6 +58,7 @@ public class FieldMatchAction extends ActionSupport {
return confirmPassword;
}
+ @StrutsParameter
public void setConfirmPassword(String confirmPassword) {
this.confirmPassword = confirmPassword;
}
@@ -64,6 +67,7 @@ public class FieldMatchAction extends ActionSupport {
return email;
}
+ @StrutsParameter
public void setEmail(String email) {
this.email = email;
}
@@ -72,6 +76,7 @@ public class FieldMatchAction extends ActionSupport {
return confirmEmail;
}
+ @StrutsParameter
public void setConfirmEmail(String confirmEmail) {
this.confirmEmail = confirmEmail;
}
diff --git a/plugins/bean-validation/src/test/java/org/apache/struts/beanvalidation/actions/ModelDrivenAction.java b/plugins/bean-validation/src/test/java/org/apache/struts/beanvalidation/actions/ModelDrivenAction.java
index d39e04847..9b32fa24b 100644
--- a/plugins/bean-validation/src/test/java/org/apache/struts/beanvalidation/actions/ModelDrivenAction.java
+++ b/plugins/bean-validation/src/test/java/org/apache/struts/beanvalidation/actions/ModelDrivenAction.java
@@ -21,14 +21,17 @@ package org.apache.struts.beanvalidation.actions;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import org.apache.struts.beanvalidation.models.Person;
+import org.apache.struts2.interceptor.parameter.StrutsParameter;
import javax.validation.Valid;
public class ModelDrivenAction extends ActionSupport implements ModelDriven, ModelDrivenActionInterface {
@Valid
- private Person model = new Person();
+ private final Person model = new Person();
+ @StrutsParameter(depth = 2)
+ @Override
public Person getModel() {
return model;
}
diff --git a/plugins/bean-validation/src/test/java/org/apache/struts/beanvalidation/actions/ValidateGroupAction.java b/plugins/bean-validation/src/test/java/org/apache/struts/beanvalidation/actions/ValidateGroupAction.java
index 6b17ab736..7d3540551 100644
--- a/plugins/bean-validation/src/test/java/org/apache/struts/beanvalidation/actions/ValidateGroupAction.java
+++ b/plugins/bean-validation/src/test/java/org/apache/struts/beanvalidation/actions/ValidateGroupAction.java
@@ -22,14 +22,17 @@ import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import org.apache.struts.beanvalidation.constraints.ValidationGroup;
import org.apache.struts.beanvalidation.models.Person;
+import org.apache.struts2.interceptor.parameter.StrutsParameter;
import javax.validation.Valid;
public class ValidateGroupAction extends ActionSupport implements ModelDriven {
@Valid
- private Person model = new Person();
+ private final Person model = new Person();
+ @StrutsParameter(depth = 2)
+ @Override
public Person getModel() {
return model;
}
@@ -67,4 +70,4 @@ public class ValidateGroupAction extends ActionSupport implements ModelDriven validators = Collections.emptyList();
private ActionValidatorManager actionValidatorManager;
-
+
@Inject
public void setActionValidatorManager(ActionValidatorManager mgr) {
this.actionValidatorManager = mgr;
}
-
+
public String getClazz() {
return clazz;
}
+ @StrutsParameter
public void setClazz(String clazz) {
this.clazz = clazz;
}
@@ -69,6 +71,7 @@ public class ListValidatorsAction extends ActionSupport {
return context;
}
+ @StrutsParameter
public void setContext(String context) {
this.context = context;
}
@@ -77,6 +80,7 @@ public class ListValidatorsAction extends ActionSupport {
return validators;
}
+ @Override
public String execute() throws Exception {
loadValidators();
return super.execute();
diff --git a/plugins/config-browser/src/main/java/org/apache/struts2/config_browser/ShowBeansAction.java b/plugins/config-browser/src/main/java/org/apache/struts2/config_browser/ShowBeansAction.java
index 1e8dab8be..6248b6964 100644
--- a/plugins/config-browser/src/main/java/org/apache/struts2/config_browser/ShowBeansAction.java
+++ b/plugins/config-browser/src/main/java/org/apache/struts2/config_browser/ShowBeansAction.java
@@ -46,6 +46,7 @@ public class ShowBeansAction extends ActionNamesAction {
Map> bindings;
@Inject
+ @Override
public void setContainer(Container container) {
super.setContainer(container);
bindings = new TreeMap<>();
@@ -123,6 +124,7 @@ public class ShowBeansAction extends ActionNamesAction {
return isDefault;
}
+ @Override
public int compareTo(Binding b2) {
int ret;
if (isDefault) {
diff --git a/plugins/config-browser/src/main/java/org/apache/struts2/config_browser/ShowConfigAction.java b/plugins/config-browser/src/main/java/org/apache/struts2/config_browser/ShowConfigAction.java
index 51b0d50e5..25547c395 100644
--- a/plugins/config-browser/src/main/java/org/apache/struts2/config_browser/ShowConfigAction.java
+++ b/plugins/config-browser/src/main/java/org/apache/struts2/config_browser/ShowConfigAction.java
@@ -21,10 +21,11 @@ package org.apache.struts2.config_browser;
import com.opensymphony.xwork2.ObjectFactory;
import com.opensymphony.xwork2.config.entities.ActionConfig;
import com.opensymphony.xwork2.inject.Inject;
-import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.LogManager;
import com.opensymphony.xwork2.util.reflection.ReflectionProvider;
import org.apache.commons.text.StringEscapeUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.struts2.interceptor.parameter.StrutsParameter;
import java.beans.PropertyDescriptor;
import java.util.Set;
@@ -43,8 +44,8 @@ public class ShowConfigAction extends ActionNamesAction {
private Set actionNames;
private String detailView = "results";
private PropertyDescriptor[] properties;
- private static Logger LOG = LogManager.getLogger(ShowConfigAction.class);
-
+ private static final Logger LOG = LogManager.getLogger(ShowConfigAction.class);
+
private ObjectFactory objectFactory;
private ReflectionProvider reflectionProvider;
@@ -52,23 +53,26 @@ public class ShowConfigAction extends ActionNamesAction {
return detailView;
}
+ @StrutsParameter
public void setDetailView(String detailView) {
this.detailView = detailView;
}
+ @Override
public Set getActionNames() {
return actionNames;
}
+ @Override
public String getNamespace() {
return StringEscapeUtils.escapeHtml4(namespace);
}
-
+
@Inject
public void setObjectFactory(ObjectFactory fac) {
this.objectFactory = fac;
}
-
+
@Inject
public void setReflectionProvider(ReflectionProvider prov) {
this.reflectionProvider = prov;
@@ -78,6 +82,7 @@ public class ShowConfigAction extends ActionNamesAction {
return clazz.getName().substring(clazz.getName().lastIndexOf('.') + 1);
}
+ @StrutsParameter
public void setNamespace(String namespace) {
this.namespace = namespace;
}
@@ -86,6 +91,7 @@ public class ShowConfigAction extends ActionNamesAction {
return actionName;
}
+ @StrutsParameter
public void setActionName(String actionName) {
this.actionName = actionName;
}
@@ -98,16 +104,17 @@ public class ShowConfigAction extends ActionNamesAction {
return properties;
}
+ @Override
public String execute() throws Exception {
super.execute();
config = configHelper.getActionConfig(namespace, actionName);
- actionNames = new TreeSet(configHelper.getActionNames(namespace));
+ actionNames = new TreeSet<>(configHelper.getActionNames(namespace));
try {
Object action = objectFactory.buildAction(actionName, namespace, config, null);
properties = reflectionProvider.getPropertyDescriptors(action);
} catch (Exception e) {
- LOG.error("Unable to get properties for action " + actionName, e);
- addActionError("Unable to retrieve action properties: " + e.toString());
+ LOG.error("Unable to get properties for action {}", actionName, e);
+ addActionError("Unable to retrieve action properties: " + e);
}
if (hasErrors()) //super might have set some :)
diff --git a/plugins/config-browser/src/main/java/org/apache/struts2/config_browser/ShowValidatorAction.java b/plugins/config-browser/src/main/java/org/apache/struts2/config_browser/ShowValidatorAction.java
index c740e1473..524cee021 100644
--- a/plugins/config-browser/src/main/java/org/apache/struts2/config_browser/ShowValidatorAction.java
+++ b/plugins/config-browser/src/main/java/org/apache/struts2/config_browser/ShowValidatorAction.java
@@ -19,12 +19,13 @@
package org.apache.struts2.config_browser;
import com.opensymphony.xwork2.inject.Inject;
-import org.apache.logging.log4j.Logger;
-import org.apache.logging.log4j.LogManager;
import com.opensymphony.xwork2.util.reflection.ReflectionContextFactory;
import com.opensymphony.xwork2.util.reflection.ReflectionException;
import com.opensymphony.xwork2.util.reflection.ReflectionProvider;
import com.opensymphony.xwork2.validator.Validator;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.struts2.interceptor.parameter.StrutsParameter;
import java.beans.BeanInfo;
import java.beans.IntrospectionException;
@@ -32,6 +33,7 @@ import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.util.Collections;
import java.util.Map;
+import java.util.Objects;
import java.util.Set;
import java.util.TreeSet;
@@ -42,11 +44,11 @@ import java.util.TreeSet;
public class ShowValidatorAction extends ListValidatorsAction {
private static final long serialVersionUID = 4061534149317835177L;
- private static Logger LOG = LogManager.getLogger(ShowValidatorAction.class);
+ private static final Logger LOG = LogManager.getLogger(ShowValidatorAction.class);
private Set properties = Collections.emptySet();
private int selected = 0;
-
+
ReflectionProvider reflectionProvider;
ReflectionContextFactory reflectionContextFactory;
@@ -54,16 +56,17 @@ public class ShowValidatorAction extends ListValidatorsAction {
public void setReflectionProvider(ReflectionProvider prov) {
this.reflectionProvider = prov;
}
-
+
@Inject
public void setReflectionContextFactory(ReflectionContextFactory fac) {
this.reflectionContextFactory = fac;
}
-
+
public int getSelected() {
return selected;
}
+ @StrutsParameter
public void setSelected(int selected) {
this.selected = selected;
}
@@ -76,10 +79,11 @@ public class ShowValidatorAction extends ListValidatorsAction {
return validators.get(selected);
}
+ @Override
public String execute() throws Exception {
loadValidators();
Validator validator = getSelectedValidator();
- properties = new TreeSet();
+ properties = new TreeSet<>();
try {
Map context = reflectionContextFactory.createDefaultContext(validator);
BeanInfo beanInfoFrom;
@@ -162,6 +166,7 @@ public class ShowValidatorAction extends ListValidatorsAction {
this.name = name;
}
+ @Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof PropertyInfo)) return false;
@@ -170,11 +175,11 @@ public class ShowValidatorAction extends ListValidatorsAction {
if (!name.equals(propertyInfo.name)) return false;
if (!type.equals(propertyInfo.type)) return false;
- if (value != null ? !value.equals(propertyInfo.value) : propertyInfo.value != null) return false;
- return true;
+ return Objects.equals(value, propertyInfo.value);
}
+ @Override
public int hashCode() {
int result;
result = name.hashCode();
@@ -183,6 +188,7 @@ public class ShowValidatorAction extends ListValidatorsAction {
return result;
}
+ @Override
public int compareTo(Object o) {
PropertyInfo other = (PropertyInfo) o;
return this.name.compareTo(other.name);
diff --git a/plugins/convention/src/main/java/org/apache/struts2/convention/ClasspathConfigurationProvider.java b/plugins/convention/src/main/java/org/apache/struts2/convention/ClasspathConfigurationProvider.java
index f3d873322..71ac094cf 100644
--- a/plugins/convention/src/main/java/org/apache/struts2/convention/ClasspathConfigurationProvider.java
+++ b/plugins/convention/src/main/java/org/apache/struts2/convention/ClasspathConfigurationProvider.java
@@ -36,7 +36,7 @@ import org.apache.struts2.dispatcher.DispatcherListener;
*
*/
public class ClasspathConfigurationProvider implements ConfigurationProvider, DispatcherListener {
- private ActionConfigBuilder actionConfigBuilder;
+ private final ActionConfigBuilder actionConfigBuilder;
private boolean devMode;
private boolean reload;
private boolean listeningToDispatcher;
@@ -59,6 +59,7 @@ public class ClasspathConfigurationProvider implements ConfigurationProvider, Di
/**
* Not used.
*/
+ @Override
public void destroy() {
if (this.listeningToDispatcher) {
Dispatcher.removeDispatcherListener(this);
@@ -71,6 +72,7 @@ public class ClasspathConfigurationProvider implements ConfigurationProvider, Di
*
* @param configuration configuration
*/
+ @Override
public void init(Configuration configuration) {
if (devMode && reload && !listeningToDispatcher) {
//this is the only way I found to be able to get added to to ConfigurationProvider list
@@ -88,6 +90,7 @@ public class ClasspathConfigurationProvider implements ConfigurationProvider, Di
*
* @throws ConfigurationException in case of configuration errors
*/
+ @Override
public void register(ContainerBuilder containerBuilder, LocatableProperties locatableProperties)
throws ConfigurationException {
}
@@ -97,20 +100,24 @@ public class ClasspathConfigurationProvider implements ConfigurationProvider, Di
*
* @throws ConfigurationException in case of configuration errors
*/
+ @Override
public void loadPackages() throws ConfigurationException {
}
/**
* @return true if devMode, reload and actionConfigBuilder.needsReload()
*/
+ @Override
public boolean needsReload() {
return devMode && reload && actionConfigBuilder.needsReload();
}
+ @Override
public void dispatcherInitialized(Dispatcher du) {
du.getConfigurationManager().addContainerProvider(this);
}
+ @Override
public void dispatcherDestroyed(Dispatcher du) {
}
-}
\ No newline at end of file
+}
diff --git a/plugins/convention/src/main/java/org/apache/struts2/convention/ClasspathPackageProvider.java b/plugins/convention/src/main/java/org/apache/struts2/convention/ClasspathPackageProvider.java
index 7b314c05b..3ffec8488 100644
--- a/plugins/convention/src/main/java/org/apache/struts2/convention/ClasspathPackageProvider.java
+++ b/plugins/convention/src/main/java/org/apache/struts2/convention/ClasspathPackageProvider.java
@@ -18,11 +18,11 @@
*/
package org.apache.struts2.convention;
-import com.opensymphony.xwork2.config.PackageProvider;
import com.opensymphony.xwork2.config.Configuration;
import com.opensymphony.xwork2.config.ConfigurationException;
-import com.opensymphony.xwork2.inject.Inject;
+import com.opensymphony.xwork2.config.PackageProvider;
import com.opensymphony.xwork2.inject.Container;
+import com.opensymphony.xwork2.inject.Inject;
/**
*
@@ -34,20 +34,23 @@ import com.opensymphony.xwork2.inject.Container;
*
*/
public class ClasspathPackageProvider implements PackageProvider {
- private ActionConfigBuilder actionConfigBuilder;
+ private final ActionConfigBuilder actionConfigBuilder;
@Inject
public ClasspathPackageProvider(Container container) {
this.actionConfigBuilder = container.getInstance(ActionConfigBuilder.class, container.getInstance(String.class, ConventionConstants.CONVENTION_ACTION_CONFIG_BUILDER));
}
+ @Override
public void init(Configuration configuration) throws ConfigurationException {
}
+ @Override
public boolean needsReload() {
- return actionConfigBuilder.needsReload();
+ return actionConfigBuilder.needsReload();
}
+ @Override
public void loadPackages() throws ConfigurationException {
actionConfigBuilder.buildActionConfigs();
}
diff --git a/plugins/convention/src/main/java/org/apache/struts2/convention/PackageBasedActionConfigBuilder.java b/plugins/convention/src/main/java/org/apache/struts2/convention/PackageBasedActionConfigBuilder.java
index 460cab49e..71331d4ef 100644
--- a/plugins/convention/src/main/java/org/apache/struts2/convention/PackageBasedActionConfigBuilder.java
+++ b/plugins/convention/src/main/java/org/apache/struts2/convention/PackageBasedActionConfigBuilder.java
@@ -24,6 +24,7 @@ import com.opensymphony.xwork2.FileManagerFactory;
import com.opensymphony.xwork2.ObjectFactory;
import com.opensymphony.xwork2.config.Configuration;
import com.opensymphony.xwork2.config.ConfigurationException;
+import com.opensymphony.xwork2.config.ConfigurationUtil;
import com.opensymphony.xwork2.config.entities.ActionConfig;
import com.opensymphony.xwork2.config.entities.ExceptionMappingConfig;
import com.opensymphony.xwork2.config.entities.InterceptorMapping;
@@ -57,6 +58,7 @@ import org.apache.struts2.convention.annotation.ExceptionMappings;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.Namespaces;
import org.apache.struts2.convention.annotation.ParentPackage;
+import org.apache.struts2.ognl.ProviderAllowlist;
import java.io.IOException;
import java.lang.reflect.Method;
@@ -125,6 +127,9 @@ public class PackageBasedActionConfigBuilder implements ActionConfigBuilder {
private FileManager fileManager;
private ClassFinderFactory classFinderFactory;
+ private final Set> allowlistClasses = new HashSet<>();
+ private ProviderAllowlist providerAllowlist;
+
/**
* Constructs actions based on a list of packages.
*
@@ -167,6 +172,11 @@ public class PackageBasedActionConfigBuilder implements ActionConfigBuilder {
this.devMode = BooleanUtils.toBoolean(mode);
}
+ @Inject
+ public void setProviderAllowlist(ProviderAllowlist providerAllowlist) {
+ this.providerAllowlist = providerAllowlist;
+ }
+
/**
* @param reload Reload configuration when classes change. Defaults to "false" and should not be used
* in production.
@@ -345,33 +355,38 @@ public class PackageBasedActionConfigBuilder implements ActionConfigBuilder {
* annotation which is used to control the parent package for a specific action. Lastly, the
* {@link ResultMapBuilder} is used to create ResultConfig instances of the action.
*/
+ @Override
public void buildActionConfigs() {
+ allowlistClasses.clear();
+
//setup reload class loader based on dev settings
initReloadClassLoader();
- if (!disableActionScanning) {
- if (actionPackages == null && packageLocators == null) {
- throw new ConfigurationException("At least a list of action packages or action package locators " +
- "must be given using one of the properties [struts.convention.action.packages] or " +
- "[struts.convention.package.locators]");
- }
-
- if (LOG.isTraceEnabled()) {
- LOG.trace("Loading action configurations");
- if (actionPackages != null) {
- LOG.trace("Actions being loaded from action packages: {}", (Object[]) actionPackages);
- }
- if (packageLocators != null) {
- LOG.trace("Actions being loaded using package locator's: {}", (Object[]) packageLocators);
- }
- if (excludePackages != null) {
- LOG.trace("Excluding actions from packages: {}", (Object[]) excludePackages);
- }
- }
-
- Set> classes = findActions();
- buildConfiguration(classes);
+ if (disableActionScanning) {
+ return;
}
+
+ if (actionPackages == null && packageLocators == null) {
+ throw new ConfigurationException("At least a list of action packages or action package locators " +
+ "must be given using one of the properties [struts.convention.action.packages] or " +
+ "[struts.convention.package.locators]");
+ }
+
+ if (LOG.isTraceEnabled()) {
+ LOG.trace("Loading action configurations");
+ if (actionPackages != null) {
+ LOG.trace("Actions being loaded from action packages: {}", (Object[]) actionPackages);
+ }
+ if (packageLocators != null) {
+ LOG.trace("Actions being loaded using package locator's: {}", (Object[]) packageLocators);
+ }
+ if (excludePackages != null) {
+ LOG.trace("Excluding actions from packages: {}", (Object[]) excludePackages);
+ }
+ }
+
+ Set> classes = findActions();
+ buildConfiguration(classes);
}
protected ClassLoaderInterface getClassLoaderInterface() {
@@ -765,7 +780,10 @@ public class PackageBasedActionConfigBuilder implements ActionConfigBuilder {
} else if (actionAnnotation != null)
createActionConfig(defaultPackageConfig, actionClass, defaultActionName, methodName, actionAnnotation, allowedMethods);
}
+
+ allowlistClasses.addAll(ConfigurationUtil.getAllClassTypes(actionClass));
}
+ providerAllowlist.registerAllowlist(this, allowlistClasses);
buildIndexActions(packageConfigs);
@@ -1153,10 +1171,13 @@ public class PackageBasedActionConfigBuilder implements ActionConfigBuilder {
}
}
+ @Override
public void destroy() {
loadedFileUrls.clear();
+ providerAllowlist.clearAllowlist(this);
}
+ @Override
public boolean needsReload() {
if (devMode && reload) {
for (String url : loadedFileUrls) {
diff --git a/plugins/convention/src/test/java/actions/MessageAction.java b/plugins/convention/src/test/java/actions/MessageAction.java
index 2482fdbc8..3c963d5ca 100644
--- a/plugins/convention/src/test/java/actions/MessageAction.java
+++ b/plugins/convention/src/test/java/actions/MessageAction.java
@@ -31,7 +31,7 @@ public class MessageAction extends ActionSupport {
return message;
}
-
+ @Override
public String execute() {
message = "Hello World";
return SUCCESS;
diff --git a/plugins/convention/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java b/plugins/convention/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java
index c44ca335a..1643ce7ae 100644
--- a/plugins/convention/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java
+++ b/plugins/convention/src/test/java/org/apache/struts2/convention/PackageBasedActionConfigBuilderTest.java
@@ -18,9 +18,21 @@
*/
package org.apache.struts2.convention;
-import com.opensymphony.xwork2.*;
+import com.opensymphony.xwork2.ActionChainResult;
+import com.opensymphony.xwork2.ActionContext;
+import com.opensymphony.xwork2.FileManager;
+import com.opensymphony.xwork2.FileManagerFactory;
+import com.opensymphony.xwork2.ObjectFactory;
+import com.opensymphony.xwork2.Result;
import com.opensymphony.xwork2.config.Configuration;
-import com.opensymphony.xwork2.config.entities.*;
+import com.opensymphony.xwork2.config.entities.ActionConfig;
+import com.opensymphony.xwork2.config.entities.ExceptionMappingConfig;
+import com.opensymphony.xwork2.config.entities.InterceptorConfig;
+import com.opensymphony.xwork2.config.entities.InterceptorMapping;
+import com.opensymphony.xwork2.config.entities.InterceptorStackConfig;
+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.impl.DefaultConfiguration;
import com.opensymphony.xwork2.factory.DefaultInterceptorFactory;
import com.opensymphony.xwork2.factory.DefaultResultFactory;
@@ -32,12 +44,20 @@ import com.opensymphony.xwork2.util.fs.DefaultFileManager;
import com.opensymphony.xwork2.util.fs.DefaultFileManagerFactory;
import com.opensymphony.xwork2.util.reflection.ReflectionException;
import junit.framework.TestCase;
-
import org.apache.commons.lang3.StringUtils;
import org.apache.struts2.convention.actions.DefaultResultPathAction;
import org.apache.struts2.convention.actions.NoAnnotationAction;
import org.apache.struts2.convention.actions.Skip;
-import org.apache.struts2.convention.actions.action.*;
+import org.apache.struts2.convention.actions.action.ActionNameAction;
+import org.apache.struts2.convention.actions.action.ActionNamesAction;
+import org.apache.struts2.convention.actions.action.ClassLevelAnnotationAction;
+import org.apache.struts2.convention.actions.action.ClassLevelAnnotationDefaultMethodAction;
+import org.apache.struts2.convention.actions.action.ClassLevelAnnotationsAction;
+import org.apache.struts2.convention.actions.action.ClassLevelAnnotationsDefaultMethodAction;
+import org.apache.struts2.convention.actions.action.ClassNameAction;
+import org.apache.struts2.convention.actions.action.SingleActionNameAction;
+import org.apache.struts2.convention.actions.action.TestAction;
+import org.apache.struts2.convention.actions.action.TestExtends;
import org.apache.struts2.convention.actions.allowedmethods.ClassLevelAllowedMethodsAction;
import org.apache.struts2.convention.actions.allowedmethods.PackageLevelAllowedMethodsAction;
import org.apache.struts2.convention.actions.allowedmethods.sub.PackageLevelAllowedMethodsChildAction;
@@ -61,7 +81,15 @@ import org.apache.struts2.convention.actions.parentpackage.ClassLevelParentPacka
import org.apache.struts2.convention.actions.parentpackage.PackageLevelParentPackageAction;
import org.apache.struts2.convention.actions.parentpackage.sub.ClassLevelParentPackageChildAction;
import org.apache.struts2.convention.actions.parentpackage.sub.PackageLevelParentPackageChildAction;
-import org.apache.struts2.convention.actions.result.*;
+import org.apache.struts2.convention.actions.result.ActionLevelResultAction;
+import org.apache.struts2.convention.actions.result.ActionLevelResultsAction;
+import org.apache.struts2.convention.actions.result.ActionLevelResultsNamesAction;
+import org.apache.struts2.convention.actions.result.ClassLevelResultAction;
+import org.apache.struts2.convention.actions.result.ClassLevelResultsAction;
+import org.apache.struts2.convention.actions.result.GlobalResultAction;
+import org.apache.struts2.convention.actions.result.GlobalResultOverrideAction;
+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;
@@ -69,15 +97,24 @@ import org.apache.struts2.convention.actions.transactions.TransNameAction;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Actions;
import org.apache.struts2.convention.dontfind.DontFindMeAction;
+import org.apache.struts2.ognl.ProviderAllowlist;
import org.apache.struts2.result.ServletDispatcherResult;
import org.easymock.EasyMock;
import javax.servlet.ServletContext;
import java.net.MalformedURLException;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
import static org.apache.struts2.convention.ReflectionTools.getAnnotation;
-import static org.easymock.EasyMock.*;
+import static org.easymock.EasyMock.checkOrder;
+import static org.easymock.EasyMock.createStrictMock;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.verify;
/**
*
@@ -388,6 +425,7 @@ public class PackageBasedActionConfigBuilderTest extends TestCase {
fileManagerFactory.setFileManager(new DefaultFileManager());
builder.setFileManagerFactory(fileManagerFactory);
builder.setPackageLocatorsBase("org.apache.struts2.convention.actions");
+ builder.setProviderAllowlist(new ProviderAllowlist());
builder.buildActionConfigs();
verify(resultMapBuilder);
diff --git a/plugins/json/src/test/java/org/apache/struts2/json/JSONValidationInterceptorTest.java b/plugins/json/src/test/java/org/apache/struts2/json/JSONValidationInterceptorTest.java
index 8cf3dcef1..b53187e25 100644
--- a/plugins/json/src/test/java/org/apache/struts2/json/JSONValidationInterceptorTest.java
+++ b/plugins/json/src/test/java/org/apache/struts2/json/JSONValidationInterceptorTest.java
@@ -29,6 +29,7 @@ import com.opensymphony.xwork2.validator.annotations.IntRangeFieldValidator;
import com.opensymphony.xwork2.validator.annotations.RequiredStringValidator;
import com.opensymphony.xwork2.validator.annotations.StringLengthFieldValidator;
import org.apache.struts2.StrutsStatics;
+import org.apache.struts2.interceptor.parameter.StrutsParameter;
import org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor;
import org.apache.struts2.interceptor.validation.SkipValidation;
import org.apache.struts2.junit.StrutsTestCase;
@@ -214,6 +215,7 @@ public class JSONValidationInterceptorTest extends StrutsTestCase {
private boolean executed = false;
private String password;
+ @Override
public String execute() {
executed = true;
return Action.SUCCESS;
@@ -230,11 +232,13 @@ public class JSONValidationInterceptorTest extends StrutsTestCase {
@StringLengthFieldValidator(minLength = "2", message = "Too short")
@EmailValidator(message = "This is no email")
+ @StrutsParameter
public void setText(String text) {
this.text = text;
}
@RequiredStringValidator(message = "Password isn't correct")
+ @StrutsParameter
public void setPassword(String password) {
this.password = password;
}
@@ -248,6 +252,7 @@ public class JSONValidationInterceptorTest extends StrutsTestCase {
}
@IntRangeFieldValidator(min = "-1", message = "Min value is -1")
+ @StrutsParameter
public void setValue(int value) {
this.value = value;
}
diff --git a/plugins/junit/src/test/java/org/apache/struts2/junit/JUnitTestAction.java b/plugins/junit/src/test/java/org/apache/struts2/junit/JUnitTestAction.java
index f09c34144..1531c3670 100644
--- a/plugins/junit/src/test/java/org/apache/struts2/junit/JUnitTestAction.java
+++ b/plugins/junit/src/test/java/org/apache/struts2/junit/JUnitTestAction.java
@@ -19,6 +19,7 @@
package org.apache.struts2.junit;
import com.opensymphony.xwork2.ActionSupport;
+import org.apache.struts2.interceptor.parameter.StrutsParameter;
import org.springframework.beans.factory.annotation.Autowired;
public class JUnitTestAction extends ActionSupport {
@@ -33,6 +34,7 @@ public class JUnitTestAction extends ActionSupport {
return name;
}
+ @StrutsParameter
public void setName(String name) {
this.name = name;
}
diff --git a/plugins/junit/src/test/java/org/apache/struts2/junit/session/SessionGetAction.java b/plugins/junit/src/test/java/org/apache/struts2/junit/session/SessionGetAction.java
index 2149f7bd0..039cf9cd9 100644
--- a/plugins/junit/src/test/java/org/apache/struts2/junit/session/SessionGetAction.java
+++ b/plugins/junit/src/test/java/org/apache/struts2/junit/session/SessionGetAction.java
@@ -27,6 +27,7 @@ import com.opensymphony.xwork2.ActionSupport;
public class SessionGetAction extends ActionSupport {
private static final long serialVersionUID = 8366502863472148631L;
+ @Override
public String execute() {
return ActionSupport.SUCCESS;
}
diff --git a/plugins/junit/src/test/java/org/apache/struts2/junit/session/SessionSetAction.java b/plugins/junit/src/test/java/org/apache/struts2/junit/session/SessionSetAction.java
index 7d3a0dc97..f463951c0 100644
--- a/plugins/junit/src/test/java/org/apache/struts2/junit/session/SessionSetAction.java
+++ b/plugins/junit/src/test/java/org/apache/struts2/junit/session/SessionSetAction.java
@@ -30,6 +30,7 @@ public class SessionSetAction extends ActionSupport {
public String SESSION_KEY = "sessionKey";
public String SESSION_VALUE = "sessionValue";
+ @Override
public String execute() {
ActionContext.getContext().getSession().put(SESSION_KEY, SESSION_VALUE);
return ActionSupport.SUCCESS;
diff --git a/plugins/oval/src/test/java/org/apache/struts2/oval/interceptor/FieldsWithProfiles.java b/plugins/oval/src/test/java/org/apache/struts2/oval/interceptor/FieldsWithProfiles.java
index 5c5c342cd..09b06df18 100644
--- a/plugins/oval/src/test/java/org/apache/struts2/oval/interceptor/FieldsWithProfiles.java
+++ b/plugins/oval/src/test/java/org/apache/struts2/oval/interceptor/FieldsWithProfiles.java
@@ -20,6 +20,7 @@ package org.apache.struts2.oval.interceptor;
import com.opensymphony.xwork2.ActionSupport;
import net.sf.oval.constraint.NotNull;
+import org.apache.struts2.interceptor.parameter.StrutsParameter;
import org.apache.struts2.oval.annotation.Profiles;
public class FieldsWithProfiles extends ActionSupport {
@@ -46,6 +47,7 @@ public class FieldsWithProfiles extends ActionSupport {
return firstName;
}
+ @StrutsParameter
public void setFirstName(String firstName) {
this.firstName = firstName;
}
@@ -54,6 +56,7 @@ public class FieldsWithProfiles extends ActionSupport {
return lastName;
}
+ @StrutsParameter
public void setLastName(String lastName) {
this.lastName = lastName;
}
@@ -62,6 +65,7 @@ public class FieldsWithProfiles extends ActionSupport {
return middleName;
}
+ @StrutsParameter
public void setMiddleName(String middleName) {
this.middleName = middleName;
}
diff --git a/plugins/oval/src/test/java/org/apache/struts2/oval/interceptor/MemberObject.java b/plugins/oval/src/test/java/org/apache/struts2/oval/interceptor/MemberObject.java
index 591b1b206..3abe9dca1 100644
--- a/plugins/oval/src/test/java/org/apache/struts2/oval/interceptor/MemberObject.java
+++ b/plugins/oval/src/test/java/org/apache/struts2/oval/interceptor/MemberObject.java
@@ -18,17 +18,17 @@
*/
package org.apache.struts2.oval.interceptor;
-import net.sf.oval.constraint.AssertValid;
-
-import org.apache.struts2.oval.interceptor.domain.Person;
-
import com.opensymphony.xwork2.ActionSupport;
+import net.sf.oval.constraint.AssertValid;
+import org.apache.struts2.interceptor.parameter.StrutsParameter;
+import org.apache.struts2.oval.interceptor.domain.Person;
public class MemberObject extends ActionSupport {
@AssertValid
- private Person person = new Person();
+ private final Person person = new Person();
+ @StrutsParameter(depth = 2)
public Person getPerson() {
return person;
}
diff --git a/plugins/oval/src/test/java/org/apache/struts2/oval/interceptor/ModelDrivenAction.java b/plugins/oval/src/test/java/org/apache/struts2/oval/interceptor/ModelDrivenAction.java
index c4b7a2ed2..21e4e88ee 100644
--- a/plugins/oval/src/test/java/org/apache/struts2/oval/interceptor/ModelDrivenAction.java
+++ b/plugins/oval/src/test/java/org/apache/struts2/oval/interceptor/ModelDrivenAction.java
@@ -18,18 +18,19 @@
*/
package org.apache.struts2.oval.interceptor;
-import net.sf.oval.constraint.AssertValid;
-
-import org.apache.struts2.oval.interceptor.domain.Person;
-
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
+import net.sf.oval.constraint.AssertValid;
+import org.apache.struts2.interceptor.parameter.StrutsParameter;
+import org.apache.struts2.oval.interceptor.domain.Person;
public class ModelDrivenAction extends ActionSupport implements ModelDriven {
@AssertValid
- private Person person = new Person();
+ private final Person person = new Person();
+ @StrutsParameter(depth = 2)
+ @Override
public Person getModel() {
return person;
}
diff --git a/plugins/oval/src/test/java/org/apache/struts2/oval/interceptor/SimpleField.java b/plugins/oval/src/test/java/org/apache/struts2/oval/interceptor/SimpleField.java
index 045dc1f68..e8bfa618c 100644
--- a/plugins/oval/src/test/java/org/apache/struts2/oval/interceptor/SimpleField.java
+++ b/plugins/oval/src/test/java/org/apache/struts2/oval/interceptor/SimpleField.java
@@ -18,10 +18,11 @@
*/
package org.apache.struts2.oval.interceptor;
+import com.opensymphony.xwork2.ActionSupport;
import net.sf.oval.constraint.Length;
import net.sf.oval.constraint.NotEmpty;
import net.sf.oval.constraint.NotNull;
-import com.opensymphony.xwork2.ActionSupport;
+import org.apache.struts2.interceptor.parameter.StrutsParameter;
public class SimpleField extends ActionSupport{
@NotNull()
@@ -35,10 +36,12 @@ public class SimpleField extends ActionSupport{
return name;
}
+ @StrutsParameter
public void setName(String name) {
this.name = name;
}
+ @Override
public void validate() {
this.validateCalled = true;
}
diff --git a/plugins/oval/src/test/java/org/apache/struts2/oval/interceptor/SimpleFieldI18n.java b/plugins/oval/src/test/java/org/apache/struts2/oval/interceptor/SimpleFieldI18n.java
index cc986ff1e..48a271d61 100644
--- a/plugins/oval/src/test/java/org/apache/struts2/oval/interceptor/SimpleFieldI18n.java
+++ b/plugins/oval/src/test/java/org/apache/struts2/oval/interceptor/SimpleFieldI18n.java
@@ -21,6 +21,7 @@ package org.apache.struts2.oval.interceptor;
import com.opensymphony.xwork2.ActionSupport;
import net.sf.oval.constraint.Length;
import net.sf.oval.constraint.NotNull;
+import org.apache.struts2.interceptor.parameter.StrutsParameter;
public class SimpleFieldI18n extends ActionSupport {
@NotNull(message = "notnull.field")
@@ -31,6 +32,7 @@ public class SimpleFieldI18n extends ActionSupport {
return name;
}
+ @StrutsParameter
public void setName(String name) {
this.name = name;
}
diff --git a/plugins/oval/src/test/java/org/apache/struts2/oval/interceptor/SimpleFieldI18nDefaultKey.java b/plugins/oval/src/test/java/org/apache/struts2/oval/interceptor/SimpleFieldI18nDefaultKey.java
index d758ec4b6..2d8d507d6 100644
--- a/plugins/oval/src/test/java/org/apache/struts2/oval/interceptor/SimpleFieldI18nDefaultKey.java
+++ b/plugins/oval/src/test/java/org/apache/struts2/oval/interceptor/SimpleFieldI18nDefaultKey.java
@@ -20,8 +20,7 @@ package org.apache.struts2.oval.interceptor;
import com.opensymphony.xwork2.ActionSupport;
import net.sf.oval.constraint.NotNull;
-import net.sf.oval.constraint.NotEmpty;
-import net.sf.oval.constraint.Length;
+import org.apache.struts2.interceptor.parameter.StrutsParameter;
public class SimpleFieldI18nDefaultKey extends ActionSupport {
@NotNull(message = "notnull.field")
@@ -31,6 +30,7 @@ public class SimpleFieldI18nDefaultKey extends ActionSupport {
return name;
}
+ @StrutsParameter
public void setName(String name) {
this.name = name;
}
diff --git a/plugins/oval/src/test/java/org/apache/struts2/oval/interceptor/SimpleFieldJPAAnnotations.java b/plugins/oval/src/test/java/org/apache/struts2/oval/interceptor/SimpleFieldJPAAnnotations.java
index 8df5c55f1..949a16958 100644
--- a/plugins/oval/src/test/java/org/apache/struts2/oval/interceptor/SimpleFieldJPAAnnotations.java
+++ b/plugins/oval/src/test/java/org/apache/struts2/oval/interceptor/SimpleFieldJPAAnnotations.java
@@ -19,6 +19,7 @@
package org.apache.struts2.oval.interceptor;
import com.opensymphony.xwork2.ActionSupport;
+import org.apache.struts2.interceptor.parameter.StrutsParameter;
import javax.persistence.Basic;
@@ -30,6 +31,7 @@ public class SimpleFieldJPAAnnotations extends ActionSupport {
return firstName;
}
+ @StrutsParameter
public void setFirstName(String firstName) {
this.firstName = firstName;
}
diff --git a/plugins/oval/src/test/java/org/apache/struts2/oval/interceptor/SimpleFieldOGNLExpression.java b/plugins/oval/src/test/java/org/apache/struts2/oval/interceptor/SimpleFieldOGNLExpression.java
index 858c497c4..e5697a448 100644
--- a/plugins/oval/src/test/java/org/apache/struts2/oval/interceptor/SimpleFieldOGNLExpression.java
+++ b/plugins/oval/src/test/java/org/apache/struts2/oval/interceptor/SimpleFieldOGNLExpression.java
@@ -18,8 +18,9 @@
*/
package org.apache.struts2.oval.interceptor;
-import net.sf.oval.constraint.Assert;
import com.opensymphony.xwork2.ActionSupport;
+import net.sf.oval.constraint.Assert;
+import org.apache.struts2.interceptor.parameter.StrutsParameter;
public class SimpleFieldOGNLExpression extends ActionSupport {
@@ -30,6 +31,7 @@ public class SimpleFieldOGNLExpression extends ActionSupport {
return name;
}
+ @StrutsParameter
public void setName(String name) {
this.name = name;
}
diff --git a/plugins/oval/src/test/java/org/apache/struts2/oval/interceptor/SimpleFieldsXML.java b/plugins/oval/src/test/java/org/apache/struts2/oval/interceptor/SimpleFieldsXML.java
index 09bf3fa00..32659fab1 100644
--- a/plugins/oval/src/test/java/org/apache/struts2/oval/interceptor/SimpleFieldsXML.java
+++ b/plugins/oval/src/test/java/org/apache/struts2/oval/interceptor/SimpleFieldsXML.java
@@ -19,8 +19,8 @@
package org.apache.struts2.oval.interceptor;
import com.opensymphony.xwork2.ActionSupport;
-import net.sf.oval.constraint.NotEmpty;
import net.sf.oval.constraint.NotNull;
+import org.apache.struts2.interceptor.parameter.StrutsParameter;
public class SimpleFieldsXML extends ActionSupport {
private String firstName;
@@ -32,6 +32,7 @@ public class SimpleFieldsXML extends ActionSupport {
return firstName;
}
+ @StrutsParameter
public void setFirstName(String firstName) {
this.firstName = firstName;
}
@@ -40,6 +41,7 @@ public class SimpleFieldsXML extends ActionSupport {
return lastName;
}
+ @StrutsParameter
public void setLastName(String lastName) {
this.lastName = lastName;
}
diff --git a/plugins/oval/src/test/java/org/apache/struts2/oval/interceptor/SimpleFieldsXMLChild.java b/plugins/oval/src/test/java/org/apache/struts2/oval/interceptor/SimpleFieldsXMLChild.java
index 971afb7fe..6a9808229 100644
--- a/plugins/oval/src/test/java/org/apache/struts2/oval/interceptor/SimpleFieldsXMLChild.java
+++ b/plugins/oval/src/test/java/org/apache/struts2/oval/interceptor/SimpleFieldsXMLChild.java
@@ -18,6 +18,8 @@
*/
package org.apache.struts2.oval.interceptor;
+import org.apache.struts2.interceptor.parameter.StrutsParameter;
+
public class SimpleFieldsXMLChild extends SimpleFieldsXML {
private String middleName;
@@ -25,6 +27,7 @@ public class SimpleFieldsXMLChild extends SimpleFieldsXML {
return middleName;
}
+ @StrutsParameter
public void setMiddleName(String middleName) {
this.middleName = middleName;
}
diff --git a/plugins/oval/src/test/java/org/apache/struts2/oval/interceptor/SimpleMethod.java b/plugins/oval/src/test/java/org/apache/struts2/oval/interceptor/SimpleMethod.java
index a3dc92a4b..e69397322 100644
--- a/plugins/oval/src/test/java/org/apache/struts2/oval/interceptor/SimpleMethod.java
+++ b/plugins/oval/src/test/java/org/apache/struts2/oval/interceptor/SimpleMethod.java
@@ -19,9 +19,10 @@
package org.apache.struts2.oval.interceptor;
import com.opensymphony.xwork2.ActionSupport;
+import net.sf.oval.configuration.annotation.IsInvariant;
import net.sf.oval.constraint.Length;
import net.sf.oval.constraint.NotNull;
-import net.sf.oval.configuration.annotation.IsInvariant;
+import org.apache.struts2.interceptor.parameter.StrutsParameter;
public class SimpleMethod extends ActionSupport {
private String name;
@@ -33,6 +34,7 @@ public class SimpleMethod extends ActionSupport {
return name;
}
+ @StrutsParameter
public void setSomeName(String name) {
this.name = name;
}
diff --git a/plugins/rest/src/test/java/org/apache/struts2/rest/RestActionInvocationTest.java b/plugins/rest/src/test/java/org/apache/struts2/rest/RestActionInvocationTest.java
index 8e83dc155..6f22a583e 100644
--- a/plugins/rest/src/test/java/org/apache/struts2/rest/RestActionInvocationTest.java
+++ b/plugins/rest/src/test/java/org/apache/struts2/rest/RestActionInvocationTest.java
@@ -32,6 +32,7 @@ import com.opensymphony.xwork2.ognl.OgnlUtil;
import com.opensymphony.xwork2.util.XWorkTestCaseHelper;
import junit.framework.TestCase;
import org.apache.struts2.ServletActionContext;
+import org.apache.struts2.interceptor.parameter.StrutsParameter;
import org.apache.struts2.result.HttpHeaderResult;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;
@@ -53,7 +54,7 @@ public class RestActionInvocationTest extends TestCase {
@Override
protected void setUp() throws Exception {
super.setUp();
-
+
restActionInvocation = new RestActionInvocationTester();
request = new MockHttpServletRequest();
response = new MockHttpServletResponse();
@@ -61,7 +62,7 @@ public class RestActionInvocationTest extends TestCase {
ServletActionContext.setResponse(response);
}
-
+
/**
* Test the correct action results: null, String, HttpHeaders, Result
* @throws Exception
@@ -71,12 +72,12 @@ public class RestActionInvocationTest extends TestCase {
Object methodResult = "index";
ActionConfig actionConfig = restActionInvocation.getProxy().getConfig();
assertEquals("index", restActionInvocation.saveResult(actionConfig, methodResult));
-
+
setUp();
methodResult = new DefaultHttpHeaders("show");
assertEquals("show", restActionInvocation.saveResult(actionConfig, methodResult));
assertEquals(methodResult, restActionInvocation.httpHeaders);
-
+
setUp();
methodResult = new HttpHeaderResult(HttpServletResponse.SC_ACCEPTED);
assertEquals(null, restActionInvocation.saveResult(actionConfig, methodResult));
@@ -89,18 +90,18 @@ public class RestActionInvocationTest extends TestCase {
// ko
assertFalse(true);
-
+
} catch (ConfigurationException c) {
// ok, object not allowed
}
}
-
+
/**
* Test the target selection: exception, error messages, model and null
* @throws Exception
*/
public void testSelectTarget() throws Exception {
-
+
// Exception
Exception e = new Exception();
restActionInvocation.getStack().set("exception", e);
@@ -118,7 +119,7 @@ public class RestActionInvocationTest extends TestCase {
errors.put("actionErrors", list);
restActionInvocation.selectTarget();
assertEquals(errors, restActionInvocation.target);
-
+
// Model with get and no content in post, put, delete
setUp();
RestAction restAction = (RestAction)restActionInvocation.getAction();
@@ -168,18 +169,18 @@ public class RestActionInvocationTest extends TestCase {
};
model.add("Item");
restAction.model = model;
-
+
restActionInvocation.processResult();
assertEquals(SC_NOT_MODIFIED, response.getStatus());
-
+
}
-
+
/**
* Test the default error result.
* @throws Exception
*/
public void testDefaultErrorResult() throws Exception {
-
+
// Exception
Exception e = new Exception();
restActionInvocation.getStack().set("exception", e);
@@ -189,24 +190,24 @@ public class RestActionInvocationTest extends TestCase {
List model = new ArrayList();
model.add("Item");
restAction.model = model;
-
+
restActionInvocation.setDefaultErrorResultName("default-error");
- ResultConfig resultConfig = new ResultConfig.Builder("default-error",
+ ResultConfig resultConfig = new ResultConfig.Builder("default-error",
"org.apache.struts2.result.HttpHeaderResult")
.addParam("status", "123").build();
- ActionConfig actionConfig = new ActionConfig.Builder("org.apache.rest",
+ ActionConfig actionConfig = new ActionConfig.Builder("org.apache.rest",
"RestAction", "org.apache.rest.RestAction")
.addResultConfig(resultConfig)
.build();
((MockActionProxy)restActionInvocation.getProxy()).setConfig(actionConfig);
-
+
restActionInvocation.processResult();
assertEquals(123, response.getStatus());
-
+
}
-
+
public void testNoResult() throws Exception {
-
+
RestAction restAction = (RestAction)restActionInvocation.getAction();
List model = new ArrayList();
model.add("Item");
@@ -219,34 +220,34 @@ public class RestActionInvocationTest extends TestCase {
// ko
assertFalse(true);
-
+
} catch (ConfigurationException c) {
// ok, no result
}
}
-
+
/**
* Test the global execution
* @throws Exception
*/
public void testInvoke() throws Exception {
-
+
// Default index method return 'success'
((MockActionProxy)restActionInvocation.getProxy()).setMethod("index");
// Define result 'success'
- ResultConfig resultConfig = new ResultConfig.Builder("success",
+ ResultConfig resultConfig = new ResultConfig.Builder("success",
"org.apache.struts2.result.HttpHeaderResult")
.addParam("status", "123").build();
- ActionConfig actionConfig = new ActionConfig.Builder("org.apache.rest",
+ ActionConfig actionConfig = new ActionConfig.Builder("org.apache.rest",
"RestAction", "org.apache.rest.RestAction")
.addResultConfig(resultConfig)
.build();
((MockActionProxy)restActionInvocation.getProxy()).setConfig(actionConfig);
request.setMethod("GET");
-
+
restActionInvocation.setOgnlUtil(new OgnlUtil());
restActionInvocation.invoke();
@@ -264,7 +265,7 @@ public class RestActionInvocationTest extends TestCase {
interceptorMappings.add(new InterceptorMapping("interceptor", mockInterceptor));
interceptors = interceptorMappings.iterator();
MockActionProxy actionProxy = new MockActionProxy();
- ActionConfig actionConfig = new ActionConfig.Builder("org.apache.rest",
+ ActionConfig actionConfig = new ActionConfig.Builder("org.apache.rest",
"RestAction", "org.apache.rest.RestAction").build();
actionProxy.setConfig(actionConfig);
proxy = actionProxy;
@@ -280,18 +281,20 @@ public class RestActionInvocationTest extends TestCase {
container = ActionContext.getContext().getContainer();
stack = ActionContext.getContext().getValueStack();
objectFactory = container.getInstance(ObjectFactory.class);
-
+
}
-
+
}
- class RestAction extends RestActionSupport implements ModelDriven> {
+ static class RestAction extends RestActionSupport implements ModelDriven> {
List model;
-
+
+ @StrutsParameter(depth = 1)
+ @Override
public List getModel() {
return model;
}
-
+
}
}
diff --git a/plugins/spring/src/test/java/com/opensymphony/xwork2/ModelDrivenAction.java b/plugins/spring/src/test/java/com/opensymphony/xwork2/ModelDrivenAction.java
index fabc3ed95..6ffcad2ff 100644
--- a/plugins/spring/src/test/java/com/opensymphony/xwork2/ModelDrivenAction.java
+++ b/plugins/spring/src/test/java/com/opensymphony/xwork2/ModelDrivenAction.java
@@ -19,6 +19,8 @@
package com.opensymphony.xwork2;
+import org.apache.struts2.interceptor.parameter.StrutsParameter;
+
/**
* ModelDrivenAction
*
@@ -28,9 +30,9 @@ package com.opensymphony.xwork2;
public class ModelDrivenAction extends ActionSupport implements ModelDriven {
private String foo;
- private TestBean model = new TestBean();
-
+ private final TestBean model = new TestBean();
+ @StrutsParameter
public void setFoo(String foo) {
this.foo = foo;
}
@@ -42,6 +44,8 @@ public class ModelDrivenAction extends ActionSupport implements ModelDriven {
/**
* @return the model to be pushed onto the ValueStack after the Action itself
*/
+ @StrutsParameter(depth = 2)
+ @Override
public Object getModel() {
return model;
}