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();
+  }
 }


Reply via email to