Author: lindner
Date: Mon Aug 16 07:49:29 2010
New Revision: 985816
URL: http://svn.apache.org/viewvc?rev=985816&view=rev
Log:
Patch from Gagan Goku | Fixing ServletUtil.fromHttpServletRequest to take
multiple header values for same header name
Modified:
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ServletUtil.java
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/ServletUtilTest.java
Modified:
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ServletUtil.java
URL:
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ServletUtil.java?rev=985816&r1=985815&r2=985816&view=diff
==============================================================================
---
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ServletUtil.java
(original)
+++
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ServletUtil.java
Mon Aug 16 07:49:29 2010
@@ -32,28 +32,49 @@ import org.apache.shindig.gadgets.http.H
import org.apache.shindig.gadgets.http.HttpResponse;
import org.apache.shindig.gadgets.http.HttpResponseBuilder;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
import java.util.Map;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
public class ServletUtil {
public static final String REMOTE_ADDR_KEY = "RemoteAddress";
public static final String DATA_URI_KEY = "dataUri";
private ServletUtil() {}
+ /**
+ * Returns an HttpRequest object encapsulating the servlet request.
+ * NOTE: Request parameters are not explicitly taken care of, instead we copy
+ * the InputStream and query parameters separately.
+ *
+ * @param servletReq The http servlet request.
+ * @return An HttpRequest object with all the information provided by the
+ * servlet request.
+ * @throws IOException In case of errors.
+ */
public static HttpRequest fromHttpServletRequest(HttpServletRequest
servletReq) throws IOException {
HttpRequest req = new HttpRequest(new UriBuilder(servletReq).toUri());
+
Enumeration<?> headerNames = servletReq.getHeaderNames();
while (headerNames.hasMoreElements()) {
- String headerName = (String)headerNames.nextElement();
- req.addHeader(headerName, servletReq.getHeader(headerName));
+ Object obj = headerNames.nextElement();
+ if (obj instanceof String) {
+ String headerName = (String) obj;
+
+ Enumeration<?> headerValues = servletReq.getHeaders(headerName);
+ while (headerValues.hasMoreElements()) {
+ obj = headerValues.nextElement();
+ if (obj instanceof String) {
+ req.addHeader(headerName, (String) obj);
+ }
+ }
+ }
}
+
req.setMethod(servletReq.getMethod());
if ("POST".equalsIgnoreCase(req.getMethod())) {
req.setPostBody(servletReq.getInputStream());
Modified:
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/ServletUtilTest.java
URL:
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/ServletUtilTest.java?rev=985816&r1=985815&r2=985816&view=diff
==============================================================================
---
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/ServletUtilTest.java
(original)
+++
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/ServletUtilTest.java
Mon Aug 16 07:49:29 2010
@@ -18,13 +18,6 @@
*/
package org.apache.shindig.gadgets.servlet;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.util.Vector;
-
import org.apache.commons.codec.binary.Base64;
import org.apache.shindig.common.servlet.HttpServletResponseRecorder;
import org.apache.shindig.common.servlet.HttpUtil;
@@ -35,13 +28,20 @@ import org.apache.shindig.gadgets.http.H
import org.apache.shindig.gadgets.http.HttpResponse;
import org.apache.shindig.gadgets.http.HttpResponseBuilder;
import org.easymock.EasyMock;
-
import org.json.JSONObject;
import org.junit.Test;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.Enumeration;
+import java.util.Vector;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
public class ServletUtilTest {
@Test
@@ -172,8 +172,10 @@ public class ServletUtilTest {
headerNames.add("Header1");
headerNames.add("Header2");
EasyMock.expect(original.getHeaderNames()).andReturn(headerNames.elements());
- EasyMock.expect(original.getHeader("Header1")).andReturn("HVal1");
- EasyMock.expect(original.getHeader("Header2")).andReturn("HVal2");
+ EasyMock.expect(original.getHeaders("Header1"))
+ .andReturn(makeEnumeration("HVal1", "HVal3"));
+ EasyMock.expect(original.getHeaders("Header2"))
+ .andReturn(makeEnumeration("HVal2", "HVal4"));
EasyMock.expect(original.getMethod()).andReturn("post");
final ByteArrayInputStream bais = new ByteArrayInputStream("post
body".getBytes());
ServletInputStream sis = new ServletInputStream() {
@@ -192,8 +194,10 @@ public class ServletUtilTest {
assertEquals(Uri.parse("https://www.example.org:444/path/foo?one=two&three=four"),
request.getUri());
assertEquals(3, request.getHeaders().size());
- assertEquals("HVal1", request.getHeader("Header1"));
- assertEquals("HVal2", request.getHeader("Header2"));
+ assertEquals("HVal1", request.getHeaders("Header1").get(0));
+ assertEquals("HVal3", request.getHeaders("Header1").get(1));
+ assertEquals("HVal2", request.getHeaders("Header2").get(0));
+ assertEquals("HVal4", request.getHeaders("Header2").get(1));
assertEquals("post", request.getMethod());
assertEquals("post body", request.getPostBodyAsString());
assertEquals("1.2.3.4", request.getParam(ServletUtil.REMOTE_ADDR_KEY));
@@ -236,4 +240,10 @@ public class ServletUtilTest {
assertEquals("no-cache", recorder.getHeader("Pragma"));
assertEquals("no-cache", recorder.getHeader("Cache-Control"));
}
+
+ Enumeration<String> makeEnumeration(String... args) {
+ Vector<String> vector = new Vector<String>();
+ vector.addAll(Arrays.asList(args));
+ return vector.elements();
+ }
}