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 2184e2b1ec..50d9c8fa65 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 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 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 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 ddb855b3da..e7b4520220 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 @@
* 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 630368a87b..17ec80940d 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 @@
* 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/com/opensymphony/xwork2/ognl/OgnlUtil.java b/core/src/main/java/com/opensymphony/xwork2/ognl/OgnlUtil.java
index 3ec09f1eed..af9bdd3d4a 100644
--- a/core/src/main/java/com/opensymphony/xwork2/ognl/OgnlUtil.java
+++ b/core/src/main/java/com/opensymphony/xwork2/ognl/OgnlUtil.java
@@ -704,11 +704,6 @@ protected Map createDefaultContext(Object root) {
return createDefaultContext(root, null);
}
- /**
- * Note that the allowlist capability is not enforced by the {@link OgnlContext} returned by this method. Currently,
- * this context is only leveraged by some public methods on {@link OgnlUtil} which are called by
- * {@link OgnlReflectionProvider}.
- */
protected Map createDefaultContext(Object root, ClassResolver resolver) {
if (resolver == null) {
resolver = container.getInstance(RootAccessor.class);
@@ -716,11 +711,7 @@ protected Map createDefaultContext(Object root, ClassResolver re
throw new IllegalStateException("Cannot find ClassResolver");
}
}
-
- SecurityMemberAccess memberAccess = container.getInstance(SecurityMemberAccess.class);
- memberAccess.useEnforceAllowlistEnabled(Boolean.FALSE.toString());
-
- return Ognl.createDefaultContext(root, memberAccess, resolver, defaultConverter);
+ return Ognl.createDefaultContext(root, container.getInstance(SecurityMemberAccess.class), resolver, defaultConverter);
}
@FunctionalInterface
diff --git a/core/src/main/java/com/opensymphony/xwork2/ognl/SecurityMemberAccess.java b/core/src/main/java/com/opensymphony/xwork2/ognl/SecurityMemberAccess.java
index 333fd276a4..f15b50af1e 100644
--- a/core/src/main/java/com/opensymphony/xwork2/ognl/SecurityMemberAccess.java
+++ b/core/src/main/java/com/opensymphony/xwork2/ognl/SecurityMemberAccess.java
@@ -90,6 +90,7 @@ public class SecurityMemberAccess implements MemberAccess {
private Set excludedPackageNames = emptySet();
private Set excludedPackageExemptClasses = emptySet();
+ private static volatile boolean isDevModeLogged = false;
private volatile boolean isDevModeInit;
private boolean isDevMode;
private Set devModeExcludedClasses = unmodifiableSet(new HashSet<>(singletonList(Object.class.getName())));
@@ -536,7 +537,10 @@ private void useDevModeConfiguration() {
return;
}
isDevModeInit = true;
- LOG.warn("Working in devMode, using devMode excluded classes and packages!");
+ if (!isDevModeLogged) {
+ LOG.warn("Working in devMode, using devMode excluded classes and packages!");
+ isDevModeLogged = true;
+ }
excludedClasses = devModeExcludedClasses;
excludedPackageNamePatterns = devModeExcludedPackageNamePatterns;
excludedPackageNames = devModeExcludedPackageNames;
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 c6f07795ed..555746cdb0 100644
--- a/core/src/main/java/org/apache/struts2/dispatcher/DefaultActionSupport.java
+++ b/core/src/main/java/org/apache/struts2/dispatcher/DefaultActionSupport.java
@@ -21,6 +21,7 @@
import jakarta.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
+import org.apache.struts2.interceptor.parameter.StrutsParameter;
import com.opensymphony.xwork2.ActionSupport;
@@ -44,6 +45,7 @@ public DefaultActionSupport() {
/* (non-Javadoc)
* @see com.opensymphony.xwork2.ActionSupport#execute()
*/
+ @Override
public String execute() throws Exception {
HttpServletRequest request = ServletActionContext.getRequest();
String requestedUrl = request.getPathInfo();
@@ -61,9 +63,8 @@ public String getSuccessResultValue() {
/**
* @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 d103728853..93f7506b7a 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 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 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 65c38d38ec..b917aaed43 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 @@
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 Double getVal() {
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 fabc3ed95b..6ffcad2ff2 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 @@
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 String getFoo() {
/**
* @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 a103d7d5cc..5549b60b10 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 @@
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 String getFoo() {
/**
* @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 ac4e2c36eb..47afb2baa6 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 @@
* 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 16b3357b16..51d9fa7f79 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 @@
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 SimpleAction() {
resultCalled = false;
existingMap.put("existingKey", "value");
}
-
+
public Map getTheProtectedMap() {
return protectedMap;
}
-
+
protected Map getTheSemiProtectedMap() {
return protectedMap;
}
@@ -81,7 +86,6 @@ public Map getTheExistingMap() {
return existingMap;
}
-
public void setBar(int bar) {
this.bar = bar;
}
@@ -187,15 +191,15 @@ public void setSomeList(ArrayList someList) {
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 void setThrowException(boolean throwException) {
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 void execute(ActionInvocation invocation) throws Exception {
if (configuration != null)
resultCalled = true;
}
-
+
};
}
@@ -251,7 +255,7 @@ public String execute() throws Exception {
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 5e21a09849..312e7bc9c2 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 SimpleAnnotationAction() {
@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 int getBar() {
}
@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 double getPercentage() {
}
@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 void setBean(AnnotatedTestBean bean) {
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 boolean[] getBools() {
}
@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 Date getDate() {
return date;
}
+ @StrutsParameter
public void setFoo(int foo) {
this.foo = foo;
}
@@ -128,6 +144,7 @@ public int getFoo() {
return foo;
}
+ @StrutsParameter
public void setName(String name) {
this.name = name;
}
@@ -140,15 +157,16 @@ public void setSettings(Properties settings) {
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 String getAliasSource() {
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 ArrayList getSomeList() {
return someList;
}
+ @StrutsParameter
public void setThrowException(boolean throwException) {
this.throwException = throwException;
}
@@ -186,7 +206,6 @@ public String exceptionMethod() throws Exception {
return "OK";
}
- @Override
@Validations(
requiredFields =
{@RequiredFieldValidator(type = ValidatorType.SIMPLE, fieldName = "customfield", message = "You must enter a value for field.")},
@@ -210,6 +229,7 @@ public String exceptionMethod() throws Exception {
@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 0928301e32..f5cc1c4e23 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 String getCity() {
}
-
+ @StrutsParameter
public void setCity(String city) {
this.city = city;
}
@@ -65,7 +67,7 @@ public String getConfirmPassword() {
}
-
+ @StrutsParameter
public void setConfirmPassword(String confirmPassword) {
this.confirmPassword = confirmPassword;
}
@@ -77,7 +79,7 @@ public String getCountry() {
}
-
+ @StrutsParameter
public void setCountry(String country) {
this.country = country;
}
@@ -89,7 +91,7 @@ public String getEmail() {
}
-
+ @StrutsParameter
public void setEmail(String email) {
this.email = email;
}
@@ -101,7 +103,7 @@ public String getFirstName() {
}
-
+ @StrutsParameter
public void setFirstName(String firstName) {
this.firstName = firstName;
}
@@ -113,7 +115,7 @@ public String getLastName() {
}
-
+ @StrutsParameter
public void setLastName(String lastName) {
this.lastName = lastName;
}
@@ -125,7 +127,7 @@ public String getPassword() {
}
-
+ @StrutsParameter
public void setPassword(String password) {
this.password = password;
}
@@ -137,7 +139,7 @@ public String getPasswordHint() {
}
-
+ @StrutsParameter
public void setPasswordHint(String passwordHint) {
this.passwordHint = passwordHint;
}
@@ -149,7 +151,7 @@ public String getPostalCode() {
}
-
+ @StrutsParameter
public void setPostalCode(String postalCode) {
this.postalCode = postalCode;
}
@@ -161,7 +163,7 @@ public String getProvince() {
}
-
+ @StrutsParameter
public void setProvince(String province) {
this.province = province;
}
@@ -173,7 +175,7 @@ public String getUsername() {
}
-
+ @StrutsParameter
public void setUsername(String username) {
this.username = username;
}
@@ -185,7 +187,7 @@ public String getWebsite() {
}
-
+ @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 4f3589f9f1..65b21c86d1 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 @@
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 @@ protected void tearDown() throws Exception {
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 39358f2648..577f663214 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 @@ private class MyUserScopedModelDrivenAction implements ScopedModelDriven, Action
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 @@ private class MyEquidaeScopedModelDrivenAction implements ScopedModelDriven, Act
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 c70fcae442..21ec5462e5 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 fa1f7e7427..499fb2c946 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 @@
*/
@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 5bbc2d48ce..0c445860b8 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 @@
*/
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 c7aef9315e..7c26dcfabc 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 @@
*/
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 d08435464b..1d9540402a 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 f4934cd898..40a4c79b2b 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 @@
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 1f7d98a162..d5e566e408 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 @@
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 929eb4b512..dea337bce9 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 @@
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 b57361cd4d..aefaa94a09 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 @@
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 String getParam1() {
return param1;
}
+ @StrutsParameter
public void setParam1(String param1) {
this.param1 = param1;
}
@@ -42,6 +44,7 @@ public String getParam2() {
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 348a28576c..6332a570b1 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 Long getId() {
return this.id;
}
+ @StrutsParameter
public void setSomethingElse(int somethingElse) {
this.somethingElse = somethingElse;
}
@@ -49,6 +51,7 @@ public int getSomethingElse() {
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 b86923db1a..7bb8af612e 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.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 void testActionGetTextWithNullObject() throws Exception {
public static class MyAction extends ActionSupport {
private Bar testBean2;
+ @StrutsParameter(depth = 1)
public Bar getBarObj() {
return testBean2;
}
@@ -460,7 +462,7 @@ public void testGetDefaultMessageWithAlternateKey() {
/**
* 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 int currentBundlesMapSize() {
/**
* 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 void callReloadBundlesForceReload() {
}
/**
- * 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 385f2ab0a3..0c100babe8 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.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 static class MockAction extends ActionSupport {
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 static class Address {
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 3142c45155..b8e6b16013 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 073ff3bcec..f794391496 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 20d8a2bfca..dc1ee6b12a 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.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 String getMyField() {
return this.myField;
}
+ @StrutsParameter
public void setMyField(String myField) {
this.myField = myField;
}
@@ -228,6 +230,7 @@ public boolean isTrimValue() {
return trimValue;
}
+ @StrutsParameter
public void setTrimValue(boolean trimValue) {
this.trimValue = trimValue;
}
@@ -236,6 +239,7 @@ public int getMinLengthValue() {
return minLengthValue;
}
+ @StrutsParameter
public void setMinLengthValue(int minLengthValue) {
this.minLengthValue = minLengthValue;
}
@@ -244,6 +248,7 @@ public int getMaxLengthValue() {
return maxLengthValue;
}
+ @StrutsParameter
public void setMaxLengthValue(int maxLengthValue) {
this.maxLengthValue = maxLengthValue;
}
@@ -252,6 +257,7 @@ public String[] getStrings() {
return strings;
}
+ @StrutsParameter
public void setStrings(String[] strings) {
this.strings = strings;
}
@@ -260,6 +266,7 @@ public Collection getStringCollection() {
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 fee56451ba..9f5baeee0f 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 9e672bf489..b7cef86ae9 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 @@
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 VisitorValidatorTestAction() {
}
}
-
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 void setTestBeanArray(TestBean[] testBeanArray) {
this.testBeanArray = testBeanArray;
}
+ @StrutsParameter(depth = 3)
public TestBean[] getTestBeanArray() {
return testBeanArray;
}
@@ -78,6 +81,7 @@ public void setTestBeanList(List testBeanList) {
this.testBeanList = testBeanList;
}
+ @StrutsParameter(depth = 3)
public List getTestBeanList() {
return testBeanList;
}
@@ -86,6 +90,7 @@ public Date getBirthday() {
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 1d609e572d..ca8ee077f9 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 int getExecutionCount() {
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 255044b95f..33921e2204 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 String onDelete() {
return "onDelete";
}
+ @Override
public void setMethod(HttpMethod httpMethod) {
this.httpMethod = httpMethod;
}
@@ -76,6 +77,7 @@ public HttpMethod getHttpMethod() {
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 604d2837b4..ddcfd83cc3 100644
--- a/core/src/test/java/org/apache/struts2/TestAction.java
+++ b/core/src/test/java/org/apache/struts2/TestAction.java
@@ -197,6 +197,7 @@ public void setFooInt(Integer fooInt) {
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/dispatcher/multipart/JakartaMultiPartRequestTest.java b/core/src/test/java/org/apache/struts2/dispatcher/multipart/JakartaMultiPartRequestTest.java
index c5fe42b1cb..781b7fbd0e 100644
--- a/core/src/test/java/org/apache/struts2/dispatcher/multipart/JakartaMultiPartRequestTest.java
+++ b/core/src/test/java/org/apache/struts2/dispatcher/multipart/JakartaMultiPartRequestTest.java
@@ -25,4 +25,4 @@ protected AbstractMultiPartRequest createMultipartRequest() {
return new JakartaMultiPartRequest();
}
-}
\ No newline at end of file
+}
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 3cd0e57ab4..adb5496d17 100644
--- a/core/src/test/java/org/apache/struts2/interceptor/CookieInterceptorTest.java
+++ b/core/src/test/java/org/apache/struts2/interceptor/CookieInterceptorTest.java
@@ -29,6 +29,7 @@
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.StrutsInternalTestCase;
import org.apache.struts2.action.CookiesAware;
+import org.apache.struts2.interceptor.parameter.StrutsParameter;
import org.springframework.mock.web.MockHttpServletRequest;
import java.util.Collections;
@@ -474,6 +475,7 @@ public String getCookie1() {
return cookie1;
}
+ @StrutsParameter
public void setCookie1(String cookie1) {
this.cookie1 = cookie1;
}
@@ -482,6 +484,7 @@ public String getCookie2() {
return cookie2;
}
+ @StrutsParameter
public void setCookie2(String cookie2) {
this.cookie2 = cookie2;
}
@@ -490,6 +493,7 @@ public String getCookie3() {
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 8dbd173e53..872122066a 100644
--- a/core/src/test/java/org/apache/struts2/interceptor/FileUploadInterceptorTest.java
+++ b/core/src/test/java/org/apache/struts2/interceptor/FileUploadInterceptorTest.java
@@ -622,6 +622,7 @@ private MultiPartRequestWrapper createMultipartRequest(int maxsize, int maxfiles
return new MultiPartRequestWrapper(jak, request, tempDir.getAbsolutePath(), new DefaultLocaleProvider());
}
+ @Override
protected void setUp() throws Exception {
super.setUp();
@@ -633,6 +634,7 @@ protected void setUp() throws Exception {
assertThat(tempDir.mkdirs()).isTrue();
}
+ @Override
protected void tearDown() throws Exception {
interceptor.destroy();
super.tearDown();
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 baf91b9b52..2584d16f40 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 void setUp() throws Exception {
@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 d1748e16fb..a5739b00e8 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 void testGeneratorWithCount_clearTagStateSet() throws Exception {
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 51b8b7a815..ea37888a41 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,17 +18,16 @@
*/
package org.apache.struts2.views.jsp;
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.Iterator;
-import java.util.List;
-
import jakarta.servlet.jsp.JspException;
-import org.apache.struts2.views.jsp.iterator.SortIteratorTag;
-
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;
+import org.apache.struts2.views.jsp.iterator.SortIteratorTag;
+
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
/**
* Test case to test SortIteratorTag.
@@ -338,13 +337,11 @@ public void testSortWithIllegalComparator() throws Exception {
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 4498124bb2..fc03dda0d8 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 Action getAction() {
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 Integer[] getMyArray() {
}
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 e62e3be5cc..aedc8596c4 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 double getLongint() {
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 f8e6113373..348f98fbe5 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 2be6ebdd12..f996c066d0 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 int getLongint() {
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 e9af62d4ff..1c0470d82a 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 String getTest() {
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 935ad5d178..688661f638 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 @@
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 String getPassword() {
return password;
}
+ @StrutsParameter
public void setPassword(String password) {
this.password = password;
}
@@ -56,6 +58,7 @@ public String getConfirmPassword() {
return confirmPassword;
}
+ @StrutsParameter
public void setConfirmPassword(String confirmPassword) {
this.confirmPassword = confirmPassword;
}
@@ -64,6 +67,7 @@ public String getEmail() {
return email;
}
+ @StrutsParameter
public void setEmail(String email) {
this.email = email;
}
@@ -72,6 +76,7 @@ public String getConfirmEmail() {
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 c2fe152e17..296f42c62b 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 @@
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 jakarta.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 be46934639..20aabf15bc 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.ModelDriven;
import org.apache.struts.beanvalidation.constraints.ValidationGroup;
import org.apache.struts.beanvalidation.models.Person;
+import org.apache.struts2.interceptor.parameter.StrutsParameter;
import jakarta.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 String actionMultiGroupsChecks() {
public String actionLongNameChecks() {
return SUCCESS;
}
-}
\ No newline at end of file
+}
diff --git a/plugins/config-browser/src/main/java/org/apache/struts2/config_browser/ActionNamesAction.java b/plugins/config-browser/src/main/java/org/apache/struts2/config_browser/ActionNamesAction.java
index 9b6efbdad2..0686f21925 100644
--- a/plugins/config-browser/src/main/java/org/apache/struts2/config_browser/ActionNamesAction.java
+++ b/plugins/config-browser/src/main/java/org/apache/struts2/config_browser/ActionNamesAction.java
@@ -23,6 +23,7 @@
import com.opensymphony.xwork2.inject.Inject;
import org.apache.commons.text.StringEscapeUtils;
import org.apache.struts2.StrutsConstants;
+import org.apache.struts2.interceptor.parameter.StrutsParameter;
import java.util.Set;
import java.util.TreeSet;
@@ -54,6 +55,7 @@ public String getNamespace() {
return StringEscapeUtils.escapeHtml4(namespace);
}
+ @StrutsParameter
public void setNamespace(String namespace) {
this.namespace = namespace;
}
@@ -81,9 +83,10 @@ public String getExtension() {
return extension;
}
+ @Override
public String execute() throws Exception {
namespaces = configHelper.getNamespaces();
- if (namespaces.size() == 0) {
+ if (namespaces.isEmpty()) {
addActionError("There are no namespaces in this configuration");
return ERROR;
}
diff --git a/plugins/config-browser/src/main/java/org/apache/struts2/config_browser/ListValidatorsAction.java b/plugins/config-browser/src/main/java/org/apache/struts2/config_browser/ListValidatorsAction.java
index 9eade6bb63..5a3344cf11 100644
--- a/plugins/config-browser/src/main/java/org/apache/struts2/config_browser/ListValidatorsAction.java
+++ b/plugins/config-browser/src/main/java/org/apache/struts2/config_browser/ListValidatorsAction.java
@@ -26,6 +26,7 @@
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.util.Collections;
import java.util.List;
@@ -43,16 +44,17 @@ public class ListValidatorsAction extends ActionSupport {
List 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 String getContext() {
return context;
}
+ @StrutsParameter
public void setContext(String context) {
this.context = context;
}
@@ -77,6 +80,7 @@ public List getValidators() {
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 1e8dab8be0..6248b69647 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 boolean isDefault() {
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 51b0d50e5c..25547c3958 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 @@
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 String getDetailView() {
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 String stripPackage(Class clazz) {
return clazz.getName().substring(clazz.getName().lastIndexOf('.') + 1);
}
+ @StrutsParameter
public void setNamespace(String namespace) {
this.namespace = namespace;
}
@@ -86,6 +91,7 @@ public String getActionName() {
return actionName;
}
+ @StrutsParameter
public void setActionName(String actionName) {
this.actionName = actionName;
}
@@ -98,16 +104,17 @@ public PropertyDescriptor[] getProperties() {
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 c740e1473f..524cee0212 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.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 @@
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 Validator getSelectedValidator() {
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 void setName(String name) {
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 boolean equals(Object o) {
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 int hashCode() {
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 f3d8733221..71ac094cfb 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 @@
*
*/
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 void setReload(String reload) {
/**
* Not used.
*/
+ @Override
public void destroy() {
if (this.listeningToDispatcher) {
Dispatcher.removeDispatcherListener(this);
@@ -71,6 +72,7 @@ public void destroy() {
*
* @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 void init(Configuration configuration) {
*
* @throws ConfigurationException in case of configuration errors
*/
+ @Override
public void register(ContainerBuilder containerBuilder, LocatableProperties locatableProperties)
throws ConfigurationException {
}
@@ -97,20 +100,24 @@ public void register(ContainerBuilder containerBuilder, LocatableProperties loca
*
* @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 7b314c05b8..3ffec8488c 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 @@
*
*/
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 460cab49e0..71331d4efc 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.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.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 void setDevMode(String mode) {
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 @@ protected ClassLoader getClassLoader() {
* 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 (disableActionScanning) {
+ return;
+ }
- 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);
- }
- }
+ 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]");
+ }
- Set> classes = findActions();
- buildConfiguration(classes);
+ 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 @@ protected void buildConfiguration(Set> classes) {
} 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 @@ protected void buildIndexActions(Map packageConfi
}
}
+ @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 2482fdbc8c..3c963d5ca0 100644
--- a/plugins/convention/src/test/java/actions/MessageAction.java
+++ b/plugins/convention/src/test/java/actions/MessageAction.java
@@ -31,7 +31,7 @@ public String getMessage() {
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 4733abfadc..5fef87760d 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.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.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.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 jakarta.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 Container getContainer() {
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/jasperreports/pom.xml b/plugins/jasperreports/pom.xml
index c3785994cd..31796f91ab 100644
--- a/plugins/jasperreports/pom.xml
+++ b/plugins/jasperreports/pom.xml
@@ -35,7 +35,7 @@
net.sf.jasperreports
jasperreports
- 6.21.0
+ 6.21.3
provided
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 5c564b5903..69aab50129 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.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 static class TestAction extends ActionSupport {
private boolean executed = false;
private String password;
+ @Override
public String execute() {
executed = true;
return Action.SUCCESS;
@@ -230,11 +232,13 @@ public String getText() {
@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 int getValue() {
}
@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/session/SessionGetAction.java b/plugins/junit/src/test/java/org/apache/struts2/junit/session/SessionGetAction.java
index 2149f7bd06..039cf9cd98 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 @@
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 7d3a0dc973..f463951c05 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/rest/src/test/java/org/apache/struts2/rest/RestActionInvocationTest.java b/plugins/rest/src/test/java/org/apache/struts2/rest/RestActionInvocationTest.java
index b567801c72..0e64f2ef88 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
@@ -35,6 +35,7 @@
import jakarta.servlet.http.HttpServletResponse;
import junit.framework.TestCase;
import org.apache.struts2.ServletActionContext;
+import org.apache.struts2.interceptor.parameter.StrutsParameter;
import org.apache.struts2.ognl.StrutsOgnlGuard;
import org.apache.struts2.result.HttpHeaderResult;
import org.springframework.mock.web.MockHttpServletRequest;
@@ -293,10 +294,12 @@ class RestActionInvocationTester extends RestActionInvocation {
}
- 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 fabc3ed95b..6ffcad2ff2 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 @@
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 String getFoo() {
/**
* @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/pom.xml b/pom.xml
index 6490ad4ea8..ab259db29d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -114,9 +114,9 @@
1.14.11
2.3.33
8.0.1.Final
- 2.17.1
+ 2.17.2
2.23.1
- 3.2.5
+ 3.3.1
5.8.0
3.3.5
2.5.0