diff --git a/core/src/main/java/org/apache/struts2/dispatcher/HttpParameters.java b/core/src/main/java/org/apache/struts2/dispatcher/HttpParameters.java index 50fda1c94..f5a162a3f 100644 --- a/core/src/main/java/org/apache/struts2/dispatcher/HttpParameters.java +++ b/core/src/main/java/org/apache/struts2/dispatcher/HttpParameters.java @@ -57,15 +57,23 @@ public class HttpParameters implements Cloneable { return HttpParameters.createEmpty().withParent(this).withExtraParams(newParams).build(); } + public Map getHttpParameters() { + Map result = new HashMap<>(parameters.size()); + for (Map.Entry entry : parameters.entrySet()) { + result.put(entry.getKey(), entry.getValue().getMultipleValue()); + } + return result; + } + public static class Builder { private Map requestParameterMap; private HttpParameters parent; protected Builder(Map requestParameterMap) { - this.requestParameterMap = toStringArrayMpa(requestParameterMap); + this.requestParameterMap = toStringArrayMap(requestParameterMap); } - private Map toStringArrayMpa(Map map) { + private Map toStringArrayMap(Map map) { Map result = new TreeMap<>(); for (Map.Entry entry : map.entrySet()) { Object value = entry.getValue(); @@ -94,11 +102,16 @@ public class HttpParameters implements Cloneable { public Builder withExtraParams(Map params) { if (params != null) { - requestParameterMap.putAll(toStringArrayMpa(params)); + requestParameterMap.putAll(toStringArrayMap(params)); } return this; } + public Builder withComparator(Comparator orderedComparator) { + requestParameterMap = new TreeMap<>(orderedComparator); + return this; + } + public HttpParameters build() { Map parameters = (parent == null) ? new HashMap() @@ -113,10 +126,5 @@ public class HttpParameters implements Cloneable { } return new HttpParameters(parameters); } - - public Builder withComparator(Comparator orderedComparator) { - requestParameterMap = new TreeMap<>(orderedComparator); - return this; - } } } diff --git a/core/src/main/java/org/apache/struts2/interceptor/ServletConfigInterceptor.java b/core/src/main/java/org/apache/struts2/interceptor/ServletConfigInterceptor.java index 3a3f132cb..29e22d346 100644 --- a/core/src/main/java/org/apache/struts2/interceptor/ServletConfigInterceptor.java +++ b/core/src/main/java/org/apache/struts2/interceptor/ServletConfigInterceptor.java @@ -135,7 +135,7 @@ public class ServletConfigInterceptor extends AbstractInterceptor implements Str } if (action instanceof ParameterAware) { - ((ParameterAware) action).setParameters((Map)context.getParameters()); + ((ParameterAware) action).setParameters(context.getParameters().getHttpParameters()); } if (action instanceof ApplicationAware) { diff --git a/core/src/test/java/org/apache/struts2/interceptor/ServletConfigInterceptorTest.java b/core/src/test/java/org/apache/struts2/interceptor/ServletConfigInterceptorTest.java index 857ed3ac2..58a17a75a 100644 --- a/core/src/test/java/org/apache/struts2/interceptor/ServletConfigInterceptorTest.java +++ b/core/src/test/java/org/apache/struts2/interceptor/ServletConfigInterceptorTest.java @@ -30,6 +30,7 @@ import javax.servlet.http.HttpServletResponse; import org.apache.struts2.StrutsInternalTestCase; import org.apache.struts2.StrutsStatics; +import org.apache.struts2.dispatcher.HttpParameters; import org.apache.struts2.util.ServletContextAware; import org.easymock.MockControl; import org.springframework.mock.web.MockHttpServletRequest; @@ -89,7 +90,7 @@ public class ServletConfigInterceptorTest extends StrutsInternalTestCase { MockActionInvocation mai = createActionInvocation(mock); Map param = new HashMap(); - mai.getInvocationContext().setParameters(param); + mai.getInvocationContext().setParameters(HttpParameters.createEmpty().build()); mock.setParameters((Map)param); control.setVoidCallable();