You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2014/12/04 16:20:20 UTC
tomee git commit: TOMEE-1467 repeated query param support for
embedded http layer
Repository: tomee
Updated Branches:
refs/heads/develop 8112ec545 -> 4c05a943d
TOMEE-1467 repeated query param support for embedded http layer
Project: http://git-wip-us.apache.org/repos/asf/tomee/repo
Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/4c05a943
Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/4c05a943
Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/4c05a943
Branch: refs/heads/develop
Commit: 4c05a943df8bfee1f7e099bed834ff552afea8f3
Parents: 8112ec5
Author: Romain Manni-Bucau <rm...@apache.org>
Authored: Thu Dec 4 16:19:37 2014 +0100
Committer: Romain Manni-Bucau <rm...@apache.org>
Committed: Thu Dec 4 16:19:37 2014 +0100
----------------------------------------------------------------------
.../openejb/server/httpd/HttpRequestImpl.java | 78 +++++++++++---------
1 file changed, 42 insertions(+), 36 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tomee/blob/4c05a943/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpRequestImpl.java
----------------------------------------------------------------------
diff --git a/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpRequestImpl.java b/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpRequestImpl.java
index 21af108..78367ab 100644
--- a/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpRequestImpl.java
+++ b/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpRequestImpl.java
@@ -54,12 +54,16 @@ import java.util.Arrays;
import java.util.Collection;
import java.util.Enumeration;
import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.StringTokenizer;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
+import static java.util.Collections.singletonList;
+
/**
* A class to take care of HTTP Requests. It parses headers, content, form and url
* parameters.
@@ -71,7 +75,7 @@ public class HttpRequestImpl implements HttpRequest {
protected static final String EJBSESSIONID = "EJBSESSIONID";
// note: no eviction so invalidate has to be called properly
- private static final ConcurrentMap<String, HttpSession> SESSIONS = new ConcurrentHashMap<String, HttpSession>();
+ private static final ConcurrentMap<String, HttpSession> SESSIONS = new ConcurrentHashMap<>();
public static final Class<?>[] SERVLET_CONTEXT_INTERFACES = new Class<?>[]{ServletContext.class};
public static final InvocationHandler SERVLET_CONTEXT_HANDLER = new InvocationHandler() {
@@ -97,24 +101,24 @@ public class HttpRequestImpl implements HttpRequest {
/**
* the headers for this page
*/
- private final Map<String, String> headers = new HashMap<String, String>();
+ private final Map<String, String> headers = new HashMap<>();
/**
* the form parameters for this page
*/
- private final Map<String, String> formParams = new HashMap<String, String>();
+ private final Map<String, String> formParams = new HashMap<>();
/**
* the URL (or query) parameters for this page
*/
- private final Map<String, String> queryParams = new HashMap<String, String>();
+ private final Map<String, List<String>> queryParams = new HashMap<>();
/**
* All form and query parameters. Query parameters override form parameters.
*/
- private final Map<String, String> parameters = new HashMap<String, String>();
+ private final Map<String, List<String>> parameters = new HashMap<>();
- private final Map<String, Part> parts = new HashMap<String, Part>();
+ private final Map<String, Part> parts = new HashMap<>();
/**
* Cookies sent from the client
@@ -137,7 +141,7 @@ public class HttpRequestImpl implements HttpRequest {
/**
* Request scoped data which is set and used by application code.
*/
- private final Map<String, Object> attributes = new HashMap<String, Object>();
+ private final Map<String, Object> attributes = new HashMap<>();
private String path = "/";
private Locale locale = Locale.getDefault();
@@ -187,21 +191,7 @@ public class HttpRequestImpl implements HttpRequest {
}
public Map<String, String> getFormParameters() {
- return new HashMap<String, String>(formParams);
- }
-
- public Map<String, String> getQueryParameters() {
- return new HashMap<String, String>(queryParams);
- }
-
- /**
- * Gets a URL (or query) parameter based on the name passed in.
- *
- * @param name The name of the URL (or query) parameter
- * @return The value of the URL (or query) parameter
- */
- public String getQueryParameter(String name) {
- return queryParams.get(name);
+ return new HashMap<>(formParams);
}
/**
@@ -244,8 +234,10 @@ public class HttpRequestImpl implements HttpRequest {
@Override
public String getQueryString() {
StringBuilder str = new StringBuilder("");
- for (Map.Entry<String, String> q : queryParams.entrySet()) {
- str.append(q.getKey()).append("=").append(q.getValue()).append("&");
+ for (final Map.Entry<String, List<String>> q : queryParams.entrySet()) {
+ for (final String v : q.getValue()) {
+ str.append(q.getKey()).append("=").append(v).append("&");
+ }
}
String out = str.toString();
if (out.isEmpty()) {
@@ -362,8 +354,10 @@ public class HttpRequestImpl implements HttpRequest {
readHeaders(di);
readBody(di);
- parameters.putAll(this.getFormParameters());
- parameters.putAll(this.getQueryParameters());
+ for (final Map.Entry<String, String> formParameters : getFormParameters().entrySet()) {
+ parameters.put(formParameters.getKey(), singletonList(formParameters.getValue()));
+ }
+ parameters.putAll(queryParams);
if (headers.containsKey("Cookie")) {
final String cookie = headers.get("Cookie");
@@ -524,8 +518,12 @@ public class HttpRequestImpl implements HttpRequest {
value = URLDecoder.decode(param.nextToken());
}
- //System.out.println("[] "+name+" = "+value);
- queryParams.put(name, value);
+ List<String> list = queryParams.get(name);
+ if (list == null) {
+ list = new LinkedList<String>();
+ queryParams.put(name, list);
+ }
+ list.add(value);
}
}
@@ -948,26 +946,29 @@ public class HttpRequestImpl implements HttpRequest {
}
public String getParameter(String name) {
- return parameters.get(name);
+ final List<String> strings = parameters.get(name);
+ return strings == null ? null : strings.iterator().next();
}
@Override
public Map<String, String[]> getParameterMap() {
- Map<String, String[]> params = new HashMap<String, String[]>();
- for (Map.Entry<String, String> p : parameters.entrySet()) {
- params.put(p.getKey(), new String[]{p.getValue()});
+ final Map<String, String[]> params = new HashMap<String, String[]>();
+ for (final Map.Entry<String, List<String>> p : parameters.entrySet()) {
+ final List<String> values = p.getValue();
+ params.put(p.getKey(), values.toArray(new String[values.size()]));
}
return params;
}
@Override
public Enumeration<String> getParameterNames() {
- return new ArrayEnumeration(new ArrayList<String>(parameters.keySet()));
+ return new ArrayEnumeration(new ArrayList<>(parameters.keySet()));
}
@Override
- public String[] getParameterValues(String s) {
- return new String[]{parameters.get(s)};
+ public String[] getParameterValues(final String s) {
+ final List<String> strings = parameters.get(s);
+ return strings == null ? null : strings.toArray(new String[strings.size()]);
}
@Override
@@ -985,8 +986,13 @@ public class HttpRequestImpl implements HttpRequest {
return path;
}
+ @Deprecated // TODO should be dropped, do we drop axis module as well?
public Map<String, String> getParameters() {
- return new HashMap<String, String>(parameters);
+ final HashMap<String, String> converted = new HashMap<String, String>(parameters.size());
+ for (final Map.Entry<String, List<String>> entry : parameters.entrySet()) {
+ converted.put(entry.getKey(), entry.getValue().iterator().next());
+ }
+ return converted;
}
public String getRemoteAddr() {