You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@shindig.apache.org by do...@apache.org on 2008/06/17 20:55:43 UTC

svn commit: r668795 - in /incubator/shindig/trunk/java/social-api/src: main/java/org/apache/shindig/social/dataservice/ test/java/org/apache/shindig/social/dataservice/ test/java/org/apache/shindig/social/dataservice/integration/

Author: doll
Date: Tue Jun 17 11:55:42 2008
New Revision: 668795

URL: http://svn.apache.org/viewvc?rev=668795&view=rev
Log:
The dataservice handlers now take in RequestItems. This pushes the servlet related logic out of the handlers and just into the DataServiceServlet. This will allow batching (coming next) to be clean. 



Added:
    incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/dataservice/RequestItem.java
      - copied, changed from r668245, incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/RequestItem.java
Modified:
    incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/dataservice/ActivityHandler.java
    incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/dataservice/AppDataHandler.java
    incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/dataservice/DataRequestHandler.java
    incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/dataservice/DataServiceServlet.java
    incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/dataservice/PersonHandler.java
    incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/ActivityHandlerTest.java
    incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/AppDataHandlerTest.java
    incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/DataRequestHandlerTest.java
    incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/DataServiceServletTest.java
    incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/PersonHandlerTest.java
    incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/integration/AbstractLargeRestfulTests.java

Modified: incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/dataservice/ActivityHandler.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/dataservice/ActivityHandler.java?rev=668795&r1=668794&r2=668795&view=diff
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/dataservice/ActivityHandler.java (original)
+++ incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/dataservice/ActivityHandler.java Tue Jun 17 11:55:42 2008
@@ -18,13 +18,10 @@
 package org.apache.shindig.social.dataservice;
 
 import com.google.inject.Inject;
-import org.apache.shindig.common.SecurityToken;
+
 import org.apache.shindig.social.ResponseError;
 import org.apache.shindig.social.ResponseItem;
 import org.apache.shindig.social.opensocial.model.Activity;
-import org.apache.shindig.social.opensocial.util.BeanJsonConverter;
-
-import javax.servlet.http.HttpServletRequest;
 
 public class ActivityHandler extends DataRequestHandler {
   private ActivityService service;
@@ -34,8 +31,7 @@
     this.service = service;
   }
 
-  ResponseItem handleDelete(HttpServletRequest servletRequest,
-      SecurityToken token) {
+  ResponseItem handleDelete(RequestItem request) {
     return new ResponseItem<Object>(ResponseError.BAD_REQUEST,
         "You can't delete activities. ", null);
   }
@@ -47,9 +43,8 @@
    * /activities/john.doe/@self
    * - postBody is an activity object
    */
-  ResponseItem handlePut(HttpServletRequest servletRequest,
-      SecurityToken token) {
-    return handlePost(servletRequest, token);
+  ResponseItem handlePut(RequestItem request) {
+    return handlePost(request);
   }
 
   /**
@@ -59,18 +54,17 @@
    * /activities/john.doe/@self
    * - postBody is an activity object
    */
-  ResponseItem handlePost(HttpServletRequest servletRequest,
-      SecurityToken token) {
-    String[] segments = getParamsFromRequest(servletRequest);
+  ResponseItem handlePost(RequestItem request) {
+    String[] segments = getParamsFromRequest(request);
 
     UserId userId = UserId.fromJson(segments[0]);
     GroupId groupId = GroupId.fromJson(segments[1]);
     // TODO: Should we pass the groupId through to the service?
 
-    String jsonActivity = servletRequest.getParameter("entry");
+    String jsonActivity = request.getParameters().get("entry");
     Activity activity = converter.convertToObject(jsonActivity, Activity.class);
 
-    return service.createActivity(userId, activity, token);
+    return service.createActivity(userId, activity, request.getToken());
   }
 
   /**
@@ -81,9 +75,8 @@
    * /activities/john.doe/@self
    * /activities/john.doe/@friends
    */
-  ResponseItem handleGet(HttpServletRequest servletRequest,
-      SecurityToken token) {
-    String[] segments = getParamsFromRequest(servletRequest);
+  ResponseItem handleGet(RequestItem request) {
+    String[] segments = getParamsFromRequest(request);
 
     UserId userId = UserId.fromJson(segments[0]);
     GroupId groupId = GroupId.fromJson(segments[1]);
@@ -95,9 +88,9 @@
     // TODO: Filter by fields
     // TODO: do we need to add pagination and sorting support?
     if (optionalActivityId != null) {
-      return service.getActivity(userId, groupId, optionalActivityId, token);
+      return service.getActivity(userId, groupId, optionalActivityId, request.getToken());
     }
-    return service.getActivities(userId, groupId, token);
+    return service.getActivities(userId, groupId, request.getToken());
   }
 
 }

Modified: incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/dataservice/AppDataHandler.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/dataservice/AppDataHandler.java?rev=668795&r1=668794&r2=668795&view=diff
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/dataservice/AppDataHandler.java (original)
+++ incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/dataservice/AppDataHandler.java Tue Jun 17 11:55:42 2008
@@ -17,15 +17,12 @@
  */
 package org.apache.shindig.social.dataservice;
 
-import org.apache.shindig.common.SecurityToken;
 import org.apache.shindig.social.ResponseItem;
-import org.apache.shindig.social.opensocial.util.BeanJsonConverter;
 
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import com.google.inject.Inject;
 
-import javax.servlet.http.HttpServletRequest;
 import java.util.List;
 import java.util.Map;
 
@@ -48,20 +45,17 @@
    * The post data should be a regular json object. All of the fields vars will
    * be pulled from the values and set on the person object. If there are no
    * fields vars then all of the data will be overridden.
+   * @param request
    */
-  ResponseItem handleDelete(HttpServletRequest servletRequest,
-      SecurityToken token) {
-    String[] segments = getParamsFromRequest(servletRequest);
+  ResponseItem handleDelete(RequestItem request) {
+    String[] segments = getParamsFromRequest(request);
 
     UserId userId = UserId.fromJson(segments[0]);
     GroupId groupId = GroupId.fromJson(segments[1]);
-    String appId = getAppId(segments[2], token);
+    String appId = getAppId(segments[2], request.getToken());
 
-    List<String> fields = getListParam(servletRequest, "fields",
-        Lists.<String>newArrayList());
-
-    return service.deletePersonData(userId, groupId, fields,
-        appId, token);
+    List<String> fields = getListParam(request, "fields", Lists.<String>newArrayList());
+    return service.deletePersonData(userId, groupId, fields, appId, request.getToken());
   }
 
   /**
@@ -76,9 +70,8 @@
    * be pulled from the values and set on the person object. If there are no
    * fields vars then all of the data will be overridden.
    */
-  ResponseItem handlePut(HttpServletRequest servletRequest,
-      SecurityToken token) {
-    return handlePost(servletRequest, token);
+  ResponseItem handlePut(RequestItem request) {
+    return handlePost(request);
   }
 
   /**
@@ -93,24 +86,23 @@
    * be pulled from the values and set on the person object. If there are no
    * fields vars then all of the data will be overridden.
    */
-  ResponseItem handlePost(HttpServletRequest servletRequest,
-      SecurityToken token) {
-    String[] segments = getParamsFromRequest(servletRequest);
+  ResponseItem handlePost(RequestItem request) {
+    String[] segments = getParamsFromRequest(request);
 
     UserId userId = UserId.fromJson(segments[0]);
     GroupId groupId = GroupId.fromJson(segments[1]);
-    String appId = getAppId(segments[2], token);
+    String appId = getAppId(segments[2], request.getToken());
 
-    List<String> fields = getListParam(servletRequest, "fields",
+    List<String> fields = getListParam(request, "fields",
         Lists.<String>newArrayList());
 
-    String jsonAppData = servletRequest.getParameter("entry");
+    String jsonAppData = request.getParameters().get("entry");
     Map<String, String> values = Maps.newHashMap();
     values = converter.convertToObject(jsonAppData,
         (Class<Map<String, String>>) values.getClass());
 
     return service.updatePersonData(userId, groupId, fields, values,
-        appId, token);
+        appId, request.getToken());
   }
 
   /**
@@ -121,18 +113,17 @@
    * /appdata/john.doe/@friends/app?fields=count
    * /appdata/john.doe/@self/app
    */
-  ResponseItem handleGet(HttpServletRequest servletRequest,
-      SecurityToken token) {
-    String[] segments = getParamsFromRequest(servletRequest);
+  ResponseItem handleGet(RequestItem request) {
+    String[] segments = getParamsFromRequest(request);
 
     UserId userId = UserId.fromJson(segments[0]);
     GroupId groupId = GroupId.fromJson(segments[1]);
-    String appId = getAppId(segments[2], token);
+    String appId = getAppId(segments[2], request.getToken());
 
-    List<String> fields = getListParam(servletRequest, "fields",
+    List<String> fields = getListParam(request, "fields",
         Lists.<String>newArrayList());
 
-    return service.getPersonData(userId, groupId, fields, appId, token);
+    return service.getPersonData(userId, groupId, fields, appId, request.getToken());
   }
 
 }

Modified: incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/dataservice/DataRequestHandler.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/dataservice/DataRequestHandler.java?rev=668795&r1=668794&r2=668795&view=diff
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/dataservice/DataRequestHandler.java (original)
+++ incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/dataservice/DataRequestHandler.java Tue Jun 17 11:55:42 2008
@@ -19,16 +19,11 @@
 
 import org.apache.shindig.common.SecurityToken;
 import org.apache.shindig.social.ResponseItem;
-import org.apache.shindig.social.ResponseError;
 import org.apache.shindig.social.opensocial.util.BeanConverter;
 
 import com.google.common.collect.Lists;
 import org.apache.commons.lang.StringUtils;
 
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.io.PrintWriter;
 import java.util.List;
 
 public abstract class DataRequestHandler {
@@ -39,77 +34,65 @@
     this.converter = converter;
   }
 
-  public void handleMethod(String httpMethod, HttpServletRequest servletRequest,
-      HttpServletResponse servletResponse, SecurityToken token)
-      throws IOException {
+  public ResponseItem handleMethod(RequestItem request) {
+    String httpMethod = request.getMethod();
     if (StringUtils.isBlank(httpMethod)) {
       throw new IllegalArgumentException("Unserviced Http method type");
     }
     ResponseItem responseItem;
+
     if (httpMethod.equals("GET")) {
-      responseItem = handleGet(servletRequest, token);
+      responseItem = handleGet(request);
     } else if (httpMethod.equals("POST")) {
-      responseItem = handlePost(servletRequest, token);
+      responseItem = handlePost(request);
     } else if (httpMethod.equals("PUT")) {
-      responseItem = handlePut(servletRequest, token);
+      responseItem = handlePut(request);
     } else if (httpMethod.equals("DELETE")) {
-      responseItem = handleDelete(servletRequest, token);
+      responseItem = handleDelete(request);
     } else {
       throw new IllegalArgumentException("Unserviced Http method type");
     }
-    if (responseItem.getError() == null) {
-      PrintWriter writer = servletResponse.getWriter();
-      writer.write(converter.convertToString(responseItem.getResponse()));
-    } else {
-      servletResponse.sendError(responseItem.getError().getHttpErrorCode(),
-          responseItem.getErrorMessage());
-    }
+    return responseItem;
   }
 
-  abstract ResponseItem handleDelete(HttpServletRequest servletRequest,
-      SecurityToken token);
+  abstract ResponseItem handleDelete(RequestItem request);
 
-  abstract ResponseItem handlePut(HttpServletRequest servletRequest,
-      SecurityToken token);
+  abstract ResponseItem handlePut(RequestItem request);
 
-  abstract ResponseItem handlePost(HttpServletRequest servletRequest,
-      SecurityToken token);
+  abstract ResponseItem handlePost(RequestItem request);
 
-  abstract ResponseItem handleGet(HttpServletRequest servletRequest,
-      SecurityToken token);
+  abstract ResponseItem handleGet(RequestItem request);
 
-  protected static String[] getParamsFromRequest(HttpServletRequest servletRequest) {
-    return getQueryPath(servletRequest).split("/");
+  protected static String[] getParamsFromRequest(RequestItem request) {
+    return getQueryPath(request).split("/");
   }
 
-  /*package-protected*/ static String getQueryPath(HttpServletRequest servletRequest) {
-    String pathInfo = servletRequest.getPathInfo();
+  /*package-protected*/ static String getQueryPath(RequestItem request) {
+    String pathInfo = request.getUrl();
     int index = pathInfo.indexOf('/', 1);
     return pathInfo.substring(index + 1);
   }
 
-  protected static <T extends Enum<T>> T getEnumParam(
-      HttpServletRequest servletRequest, String paramName, T defaultValue,
-      Class<T> enumClass) {
-    String paramValue = servletRequest.getParameter(paramName);
+  protected static <T extends Enum<T>> T getEnumParam(RequestItem request, String paramName,
+      T defaultValue, Class<T> enumClass) {
+    String paramValue = request.getParameters().get(paramName);
     if (paramValue != null) {
       return Enum.valueOf(enumClass, paramValue);
     }
     return defaultValue;
   }
 
-  protected static int getIntegerParam(HttpServletRequest servletRequest,
-      String paramName, int defaultValue) {
-    String paramValue = servletRequest.getParameter(paramName);
+  protected static int getIntegerParam(RequestItem request, String paramName, int defaultValue) {
+    String paramValue = request.getParameters().get(paramName);
     if (paramValue != null) {
       return new Integer(paramValue);
     }
     return defaultValue;
   }
 
-  protected static List<String> getListParam(HttpServletRequest servletRequest,
-      String paramName, List<String> defaultValue) {
-    String paramValue = servletRequest.getParameter(paramName);
+  protected static List<String> getListParam(RequestItem request, String paramName,
+      List<String> defaultValue) {
+    String paramValue = request.getParameters().get(paramName);
     if (paramValue != null) {
       return Lists.newArrayList(paramValue.split(","));
     }

Modified: incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/dataservice/DataServiceServlet.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/dataservice/DataServiceServlet.java?rev=668795&r1=668794&r2=668795&view=diff
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/dataservice/DataServiceServlet.java (original)
+++ incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/dataservice/DataServiceServlet.java Tue Jun 17 11:55:42 2008
@@ -27,11 +27,13 @@
 import org.apache.shindig.social.opensocial.util.BeanConverter;
 import org.apache.shindig.social.opensocial.util.BeanJsonConverter;
 import org.apache.shindig.social.opensocial.util.BeanXmlConverter;
+import org.apache.shindig.social.ResponseItem;
 
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
+import java.io.PrintWriter;
 import java.util.Map;
 import java.util.logging.Logger;
 
@@ -113,18 +115,31 @@
     }
 
     DataRequestHandler handler = injector.getInstance(handlerClass);
-    handler.setConverter(getConverterForRequest(servletRequest));
+    BeanConverter converter = getConverterForRequest(servletRequest);
+    // TODO: Move all conversions out of the handler up into the servlet layer
+    handler.setConverter(converter);
 
     String method = getHttpMethodFromParameter(servletRequest.getMethod(),
         servletRequest.getParameter(X_HTTP_METHOD_OVERRIDE));
+
+    SecurityToken token;
     try {
-      SecurityToken token = securityTokenDecoder.createToken(
-          servletRequest.getParameter(SECURITY_TOKEN_PARAM));
-      handler.handleMethod(method, servletRequest, servletResponse, token);
+      token = securityTokenDecoder.createToken(servletRequest.getParameter(SECURITY_TOKEN_PARAM));
     } catch (SecurityTokenException e) {
       throw new RuntimeException(
           "Implement error return for bad security token.");
     }
+
+    ResponseItem responseItem = handler.handleMethod(
+        new RequestItem(servletRequest, token, method));
+
+    if (responseItem.getError() == null) {
+      PrintWriter writer = servletResponse.getWriter();
+      writer.write(converter.convertToString(responseItem.getResponse()));
+    } else {
+      servletResponse.sendError(responseItem.getError().getHttpErrorCode(),
+          responseItem.getErrorMessage());
+    }
   }
 
   /*package-protected*/ BeanConverter getConverterForRequest(HttpServletRequest servletRequest) {

Modified: incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/dataservice/PersonHandler.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/dataservice/PersonHandler.java?rev=668795&r1=668794&r2=668795&view=diff
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/dataservice/PersonHandler.java (original)
+++ incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/dataservice/PersonHandler.java Tue Jun 17 11:55:42 2008
@@ -17,17 +17,14 @@
  */
 package org.apache.shindig.social.dataservice;
 
-import org.apache.shindig.common.SecurityToken;
 import org.apache.shindig.social.ResponseError;
 import org.apache.shindig.social.ResponseItem;
 import org.apache.shindig.social.opensocial.model.Person;
-import org.apache.shindig.social.opensocial.util.BeanJsonConverter;
 
 import com.google.common.collect.Lists;
 import com.google.common.collect.Sets;
 import com.google.inject.Inject;
 
-import javax.servlet.http.HttpServletRequest;
 import java.util.Set;
 
 
@@ -39,19 +36,16 @@
     this.personService = personService;
   }
 
-  ResponseItem handleDelete(HttpServletRequest servletRequest,
-      SecurityToken token) {
+  ResponseItem handleDelete(RequestItem request) {
     return new ResponseItem<Object>(ResponseError.BAD_REQUEST,
         "You can't delete people. ", null);
   }
 
-  ResponseItem handlePut(HttpServletRequest servletRequest,
-      SecurityToken token) {
+  ResponseItem handlePut(RequestItem request) {
     return new ResponseItem<Object>(ResponseError.NOT_IMPLEMENTED,
         "You can't add people right now. ", null);  }
 
-  ResponseItem handlePost(HttpServletRequest servletRequest,
-      SecurityToken token) {
+  ResponseItem handlePost(RequestItem request) {
     return new ResponseItem<Object>(ResponseError.NOT_IMPLEMENTED,
         "You can't add people right now. ", null);
   }
@@ -64,9 +58,8 @@
    * /people/john.doe/@friends
    * /people/john.doe/@self
    */
-  ResponseItem handleGet(HttpServletRequest servletRequest,
-      SecurityToken token) {
-    String[] segments = getParamsFromRequest(servletRequest);
+  ResponseItem handleGet(RequestItem request) {
+    String[] segments = getParamsFromRequest(request);
 
     UserId userId = UserId.fromJson(segments[0]);
     GroupId groupId = GroupId.fromJson(segments[1]);
@@ -78,25 +71,25 @@
 
     if (optionalPersonId != null
         || groupId.getType() == GroupId.Type.self) {
-      return personService.getPerson(userId, token);
+      return personService.getPerson(userId, request.getToken());
     }
 
-    PersonService.SortOrder sort = getEnumParam(servletRequest, "orderBy",
+    PersonService.SortOrder sort = getEnumParam(request, "orderBy",
         PersonService.SortOrder.topFriends, PersonService.SortOrder.class);
-    PersonService.FilterType filter = getEnumParam(servletRequest, "filterBy",
+    PersonService.FilterType filter = getEnumParam(request, "filterBy",
         PersonService.FilterType.all, PersonService.FilterType.class);
 
-    int first = getIntegerParam(servletRequest, "startIndex", 0);
-    int max = getIntegerParam(servletRequest, "count", 20);
+    int first = getIntegerParam(request, "startIndex", 0);
+    int max = getIntegerParam(request, "count", 20);
 
     Set<String>  profileDetails = Sets.newHashSet(
-        getListParam(servletRequest, "fields",
+        getListParam(request, "fields",
             Lists.newArrayList(Person.Field.ID.toString(),
                 Person.Field.NAME.toString(),
                 Person.Field.THUMBNAIL_URL.toString())));
 
     return personService.getPeople(userId, groupId, sort, filter, first, max,
-        profileDetails, token);
+        profileDetails, request.getToken());
   }
 
 }

Copied: incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/dataservice/RequestItem.java (from r668245, incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/RequestItem.java)
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/dataservice/RequestItem.java?p2=incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/dataservice/RequestItem.java&p1=incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/RequestItem.java&r1=668245&r2=668795&rev=668795&view=diff
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/RequestItem.java (original)
+++ incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/dataservice/RequestItem.java Tue Jun 17 11:55:42 2008
@@ -15,41 +15,71 @@
  * KIND, either express or implied. See the License for the
  * specific language governing permissions and limitations under the License.
  */
-package org.apache.shindig.social;
+package org.apache.shindig.social.dataservice;
 
 import org.apache.shindig.common.SecurityToken;
 
-import org.json.JSONObject;
+import com.google.common.collect.Maps;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Map;
+import java.util.Enumeration;
 
 /**
- * Represents the request items that come from the json. Each RequestItem should
- * map to one ResponseItem.
+ * Represents the request items that come from the restful request.
  */
 public class RequestItem {
-  private String type;
-  private JSONObject params;
+  private String url;
+  private String method;
+  private Map<String, String> parameters;
   private SecurityToken token;
 
-  public RequestItem(String type, JSONObject params, SecurityToken token) {
-    this.type = type;
-    this.params = params;
+  public RequestItem(String url, Map<String, String> parameters, SecurityToken token,
+      String method) {
+    this.url = url;
+    this.parameters = parameters;
     this.token = token;
+    this.method = method;
+  }
+
+  public RequestItem(HttpServletRequest servletRequest, SecurityToken token, String method) {
+    this(servletRequest.getPathInfo(), createParameterMap(servletRequest), token, method);
+  }
+
+  private static Map<String, String> createParameterMap(HttpServletRequest servletRequest) {
+    Map<String, String> parameters = Maps.newHashMap();
+
+    Enumeration names = servletRequest.getParameterNames();
+    while(names.hasMoreElements()) {
+      String name = (String) names.nextElement();
+      parameters.put(name, servletRequest.getParameter(name));
+    }
+
+    return parameters;
+  }
+
+  public String getUrl() {
+    return url;
+  }
+
+  public void setUrl(String url) {
+    this.url = url;
   }
 
-  public String getType() {
-    return type;
+  public String getMethod() {
+    return method;
   }
 
-  public void setType(String type) {
-    this.type = type;
+  public void setMethod(String method) {
+    this.method = method;
   }
 
-  public JSONObject getParams() {
-    return params;
+  public Map<String, String> getParameters() {
+    return parameters;
   }
 
-  public void setParams(JSONObject params) {
-    this.params = params;
+  public void setParameters(Map<String, String> parameters) {
+    this.parameters = parameters;
   }
 
   public SecurityToken getToken() {

Modified: incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/ActivityHandlerTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/ActivityHandlerTest.java?rev=668795&r1=668794&r2=668795&view=diff
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/ActivityHandlerTest.java (original)
+++ incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/ActivityHandlerTest.java Tue Jun 17 11:55:42 2008
@@ -26,21 +26,22 @@
 import junit.framework.TestCase;
 import org.easymock.classextension.EasyMock;
 
-import javax.servlet.http.HttpServletRequest;
+import java.util.Map;
+
+import com.google.common.collect.Maps;
 
 public class ActivityHandlerTest extends TestCase {
   private BeanJsonConverter converter;
-  private HttpServletRequest servletRequest;
   private ActivityService activityService;
   private ActivityHandler handler;
   private FakeGadgetToken token;
+  private RequestItem request;
 
 
   @Override
   protected void setUp() throws Exception {
     token = new FakeGadgetToken();
     converter = EasyMock.createMock(BeanJsonConverter.class);
-    servletRequest = EasyMock.createMock(HttpServletRequest.class);
     activityService = EasyMock.createMock(ActivityService.class);
 
     handler = new ActivityHandler(activityService);
@@ -49,18 +50,20 @@
 
   private void replay() {
     EasyMock.replay(converter);
-    EasyMock.replay(servletRequest);
     EasyMock.replay(activityService);
   }
 
   private void verify() {
     EasyMock.verify(converter);
-    EasyMock.verify(servletRequest);
     EasyMock.verify(activityService);
   }
 
   private void setPath(String path) {
-    EasyMock.expect(servletRequest.getPathInfo()).andReturn(path);
+    this.setPathAndParams(path, null);
+  }
+
+  private void setPathAndParams(String path, Map<String, String> params) {
+    request = new RequestItem(path, params, token, null);
   }
 
   private void assertHandleGetForGroup(GroupId.Type group) {
@@ -72,7 +75,7 @@
         new GroupId(group, null), token)).andReturn(data);
 
     replay();
-    assertEquals(data, handler.handleGet(servletRequest, token));
+    assertEquals(data, handler.handleGet(request));
     verify();
   }
 
@@ -97,16 +100,18 @@
         "jane.doe", token)).andReturn(data);
 
     replay();
-    assertEquals(data, handler.handleGet(servletRequest, token));
+    assertEquals(data, handler.handleGet(request));
     verify();
   }
 
   private ResponseItem setupPostData() {
-    setPath("/people/john.doe/@self");
-
     String jsonActivity = "{title: hi mom!, etc etc}";
+
+    Map<String, String> params = Maps.newHashMap();
+    params.put("entry", jsonActivity);
+    setPathAndParams("/people/john.doe/@self", params);
+
     Activity activity = new Activity();
-    EasyMock.expect(servletRequest.getParameter("entry")).andReturn(jsonActivity);
     EasyMock.expect(converter.convertToObject(jsonActivity, Activity.class)).andReturn(activity);
 
     ResponseItem data = new ResponseItem<Object>(null);
@@ -118,19 +123,19 @@
 
   public void testHandlePost() throws Exception {
     ResponseItem data = setupPostData();
-    assertEquals(data, handler.handlePost(servletRequest, token));
+    assertEquals(data, handler.handlePost(request));
     verify();
   }
 
   public void testHandlePut() throws Exception {
     ResponseItem data = setupPostData();
-    assertEquals(data, handler.handlePut(servletRequest, token));
+    assertEquals(data, handler.handlePut(request));
     verify();
   }
 
   public void testHandleDelete() throws Exception {
     replay();
-    assertEquals(ResponseError.BAD_REQUEST, handler.handleDelete(servletRequest, token).getError());
+    assertEquals(ResponseError.BAD_REQUEST, handler.handleDelete(request).getError());
     verify();
   }
 }
\ No newline at end of file

Modified: incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/AppDataHandlerTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/AppDataHandlerTest.java?rev=668795&r1=668794&r2=668795&view=diff
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/AppDataHandlerTest.java (original)
+++ incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/AppDataHandlerTest.java Tue Jun 17 11:55:42 2008
@@ -28,20 +28,20 @@
 
 import javax.servlet.http.HttpServletRequest;
 import java.util.HashMap;
+import java.util.Map;
 
 public class AppDataHandlerTest extends TestCase {
   private BeanJsonConverter converter;
-  private HttpServletRequest servletRequest;
   private AppDataService appDataService;
   private AppDataHandler handler;
   private FakeGadgetToken token;
+  private RequestItem request;
 
 
   @Override
   protected void setUp() throws Exception {
     token = new FakeGadgetToken();
     converter = EasyMock.createMock(BeanJsonConverter.class);
-    servletRequest = EasyMock.createMock(HttpServletRequest.class);
     appDataService = EasyMock.createMock(AppDataService.class);
 
     handler = new AppDataHandler(appDataService);
@@ -50,23 +50,26 @@
 
   private void replay() {
     EasyMock.replay(converter);
-    EasyMock.replay(servletRequest);
     EasyMock.replay(appDataService);
   }
 
   private void verify() {
     EasyMock.verify(converter);
-    EasyMock.verify(servletRequest);
     EasyMock.verify(appDataService);
   }
 
   private void setPath(String path) {
-    EasyMock.expect(servletRequest.getPathInfo()).andReturn(path);
+    Map<String, String> params = Maps.newHashMap();
+    params.put("fields", null);
+    this.setPathAndParams(path, params);
+  }
+
+  private void setPathAndParams(String path, Map<String, String> params) {
+    request = new RequestItem(path, params, token, null);
   }
 
   private void assertHandleGetForGroup(GroupId.Type group) {
     setPath("/activities/john.doe/@" + group.toString() + "/appId");
-    EasyMock.expect(servletRequest.getParameter("fields")).andReturn(null);
 
     ResponseItem<DataCollection> data = new ResponseItem<DataCollection>(null);
     EasyMock.expect(appDataService.getPersonData(new UserId(UserId.Type.userId, "john.doe"),
@@ -74,7 +77,7 @@
         Lists.<String>newArrayList(), "appId", token)).andReturn(data);
 
     replay();
-    assertEquals(data, handler.handleGet(servletRequest, token));
+    assertEquals(data, handler.handleGet(request));
     verify();
   }
 
@@ -91,8 +94,9 @@
   }
 
   public void testHandleGetWithoutFields() throws Exception {
-    setPath("/appData/john.doe/@friends/appId");
-    EasyMock.expect(servletRequest.getParameter("fields")).andReturn("pandas");
+    Map<String, String> params = Maps.newHashMap();
+    params.put("fields", "pandas");
+    setPathAndParams("/appData/john.doe/@friends/appId", params);
 
     ResponseItem<DataCollection> data = new ResponseItem<DataCollection>(null);
     EasyMock.expect(appDataService.getPersonData(new UserId(UserId.Type.userId, "john.doe"),
@@ -100,17 +104,19 @@
         Lists.newArrayList("pandas"), "appId", token)).andReturn(data);
 
     replay();
-    assertEquals(data, handler.handleGet(servletRequest, token));
+    assertEquals(data, handler.handleGet(request));
     verify();
   }
 
   private ResponseItem setupPostData() {
-    setPath("/appData/john.doe/@self/appId");
-    EasyMock.expect(servletRequest.getParameter("fields")).andReturn("pandas");
-
     String jsonAppData = "{pandas: 'are fuzzy'}";
+
+    Map<String, String> params = Maps.newHashMap();
+    params.put("fields", "pandas");
+    params.put("entry", jsonAppData);
+    setPathAndParams("/appData/john.doe/@self/appId", params);
+
     HashMap<String, String> values = Maps.newHashMap();
-    EasyMock.expect(servletRequest.getParameter("entry")).andReturn(jsonAppData);
     EasyMock.expect(converter.convertToObject(jsonAppData, HashMap.class)).andReturn(values);
 
     ResponseItem data = new ResponseItem<Object>(null);
@@ -123,19 +129,20 @@
 
   public void testHandlePost() throws Exception {
     ResponseItem data = setupPostData();
-    assertEquals(data, handler.handlePost(servletRequest, token));
+    assertEquals(data, handler.handlePost(request));
     verify();
   }
 
   public void testHandlePut() throws Exception {
     ResponseItem data = setupPostData();
-    assertEquals(data, handler.handlePut(servletRequest, token));
+    assertEquals(data, handler.handlePut(request));
     verify();
   }
 
   public void testHandleDelete() throws Exception {
-    setPath("/appData/john.doe/@self/appId");
-    EasyMock.expect(servletRequest.getParameter("fields")).andReturn("pandas");
+    Map<String, String> params = Maps.newHashMap();
+    params.put("fields", "pandas");
+    setPathAndParams("/appData/john.doe/@self/appId", params);
 
     ResponseItem data = new ResponseItem<Object>(null);
     EasyMock.expect(appDataService.deletePersonData(new UserId(UserId.Type.userId, "john.doe"),
@@ -143,7 +150,7 @@
         Lists.newArrayList("pandas"), "appId", token)).andReturn(data);
 
     replay();
-    assertEquals(data, handler.handleDelete(servletRequest, token));
+    assertEquals(data, handler.handleDelete(request));
     verify();
   }
 }
\ No newline at end of file

Modified: incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/DataRequestHandlerTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/DataRequestHandlerTest.java?rev=668795&r1=668794&r2=668795&view=diff
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/DataRequestHandlerTest.java (original)
+++ incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/DataRequestHandlerTest.java Tue Jun 17 11:55:42 2008
@@ -17,79 +17,52 @@
  */
 package org.apache.shindig.social.dataservice;
 
-import junit.framework.TestCase;
-import org.easymock.classextension.EasyMock;
-import org.apache.shindig.social.ResponseItem;
-import org.apache.shindig.social.ResponseError;
-import org.apache.shindig.social.opensocial.util.BeanJsonConverter;
-import org.apache.shindig.common.SecurityToken;
 import org.apache.shindig.common.testing.FakeGadgetToken;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import org.apache.shindig.social.ResponseItem;
 
 import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import junit.framework.TestCase;
 
-import java.io.PrintWriter;
-import java.io.IOException;
+import java.util.Map;
 
 public class DataRequestHandlerTest extends TestCase {
   private DataRequestHandler drh;
-  private HttpServletRequest req;
-  private HttpServletResponse resp;
-  private BeanJsonConverter converter;
+  private RequestItem request;
 
   @Override
   protected void setUp() throws Exception {
-    req = EasyMock.createMock(HttpServletRequest.class);
-    resp = EasyMock.createMock(HttpServletResponse.class);
-    converter = EasyMock.createMock(BeanJsonConverter.class);
-
     drh = new DataRequestHandler() {
-      ResponseItem handleDelete(HttpServletRequest servletRequest,
-          SecurityToken token) {
+      ResponseItem handleDelete(RequestItem request) {
         return new ResponseItem<String>("DELETE");
       }
 
-      ResponseItem handlePut(HttpServletRequest servletRequest,
-          SecurityToken token) {
+      ResponseItem handlePut(RequestItem request) {
         return new ResponseItem<String>("PUT");
       }
 
-      ResponseItem handlePost(HttpServletRequest servletRequest,
-          SecurityToken token) {
+      ResponseItem handlePost(RequestItem request) {
         return new ResponseItem<String>("POST");
       }
 
-      ResponseItem handleGet(HttpServletRequest servletRequest,
-          SecurityToken token) {
+      ResponseItem handleGet(RequestItem request) {
         return new ResponseItem<String>("GET");
       }
     };
 
-    drh.setConverter(converter);
+    request = new RequestItem(null, null, null, null);
   }
 
   public void testHandleMethodSuccess() throws Exception {
-    verifyDispatchMethodCalled("DELETE", converter);
-    verifyDispatchMethodCalled("PUT", converter);
-    verifyDispatchMethodCalled("POST", converter);
-    verifyDispatchMethodCalled("GET", converter);
-  }
-
-  private void verifyDispatchMethodCalled(String methodName, BeanJsonConverter converter)
-      throws IOException {
-    String jsonObject = "my lovely json";
-    EasyMock.expect(converter.convertToString(methodName)).andReturn(jsonObject);
-
-    PrintWriter writerMock = EasyMock.createMock(PrintWriter.class);
-    EasyMock.expect(resp.getWriter()).andReturn(writerMock);
-    writerMock.write(jsonObject);
-
-    EasyMock.replay(req, resp, converter, writerMock);
-    drh.handleMethod(methodName, req, resp, null);
-    EasyMock.verify(req, resp, converter, writerMock);
-    EasyMock.reset(req, resp, converter, writerMock);
+    verifyDispatchMethodCalled("DELETE");
+    verifyDispatchMethodCalled("PUT");
+    verifyDispatchMethodCalled("POST");
+    verifyDispatchMethodCalled("GET");
+  }
+
+  private void verifyDispatchMethodCalled(String methodName) throws Exception {
+    request.setMethod(methodName);
+    assertEquals(methodName, drh.handleMethod(request).getResponse());
   }
 
   public void testHandleMethodWithInvalidMethod() throws Exception {
@@ -98,9 +71,10 @@
     verifyExceptionThrown("HEAD");
   }
 
-  private void verifyExceptionThrown(String methodName) throws IOException {
+  private void verifyExceptionThrown(String methodName) throws Exception {
+    request.setMethod(methodName);
     try {
-      drh.handleMethod(methodName, req, resp, null);
+      drh.handleMethod(request);
       fail("The invalid method " + methodName + " should throw an exception.");
     } catch (IllegalArgumentException e) {
       // Yea! We like exeptions
@@ -108,113 +82,67 @@
     }
   }
 
-  public void testHandleMethodFailure() throws Exception {
-    for (ResponseError error : ResponseError.values()) {
-      assertMethodFailure(error);
-    }
-  }
-
-  private void assertMethodFailure(final ResponseError error) throws IOException {
-    drh = new DataRequestHandler() {
-      ResponseItem handleDelete(HttpServletRequest servletRequest,
-          SecurityToken token) {
-        return null;
-      }
-
-      ResponseItem handlePut(HttpServletRequest servletRequest,
-          SecurityToken token) {
-        return null;
-      }
-
-      ResponseItem handlePost(HttpServletRequest servletRequest,
-          SecurityToken token) {
-        return null;
-      }
-
-      ResponseItem handleGet(HttpServletRequest servletRequest,
-          SecurityToken token) {
-        return new ResponseItem<String>(error, "", "");
-      }
-    };
-
-    resp.sendError(error.getHttpErrorCode(), "");
-    EasyMock.replay(req, resp);
-    drh.handleMethod("GET", req, resp, null);
-    EasyMock.verify(req, resp);
-    EasyMock.reset(req, resp);
-  }
-
   public void testGetParamsFromRequest() throws Exception {
-    EasyMock.expect(req.getPathInfo()).andReturn("/people/5/@self");
-
-    EasyMock.replay(req);
-    String[] params = DataRequestHandler.getParamsFromRequest(req);
+    String[] params = DataRequestHandler.getParamsFromRequest(
+        new RequestItem("/people/5/@self", null, null, null));
     assertEquals("5", params[0]);
     assertEquals("@self", params[1]);
-    EasyMock.verify(req);
   }
 
   public void testGetQueryPath() throws Exception {
-    EasyMock.expect(req.getPathInfo()).andReturn("/people/5/@self");
-
-    EasyMock.replay(req);
-    assertEquals("5/@self", DataRequestHandler.getQueryPath(req));
-    EasyMock.verify(req);
+    assertEquals("5/@self", DataRequestHandler.getQueryPath(
+        new RequestItem("/people/5/@self", null, null, null)));
   }
 
   public void testGetEnumParam() throws Exception {
-    EasyMock.expect(req.getParameter("field")).andReturn("name");
+    Map<String, String> parameters = Maps.newHashMap();
+    parameters.put("field", "name");
 
-    EasyMock.replay(req);
-    assertEquals(PersonService.SortOrder.name, DataRequestHandler.getEnumParam(req, "field",
+    assertEquals(PersonService.SortOrder.name, DataRequestHandler.getEnumParam(
+        new RequestItem(null, parameters, null, null), "field",
         PersonService.SortOrder.topFriends, PersonService.SortOrder.class));
-    EasyMock.verify(req);
-
-    EasyMock.reset(req);
 
     // Should return the default value if the parameter is null
-    EasyMock.expect(req.getParameter("field")).andReturn(null);
+    parameters = Maps.newHashMap();
+    parameters.put("field", null);
 
-    EasyMock.replay(req);
-    assertEquals(PersonService.SortOrder.topFriends, DataRequestHandler.getEnumParam(req, "field",
+    assertEquals(PersonService.SortOrder.topFriends, DataRequestHandler.getEnumParam(
+        new RequestItem(null, parameters, null, null), "field",
         PersonService.SortOrder.topFriends, PersonService.SortOrder.class));
-    EasyMock.verify(req);
   }
 
   public void testGetIntegerParam() throws Exception {
-    EasyMock.expect(req.getParameter("field")).andReturn("5");
-
-    EasyMock.replay(req);
-    assertEquals(5, DataRequestHandler.getIntegerParam(req, "field", 100));
-    EasyMock.verify(req);
+    Map<String, String> parameters = Maps.newHashMap();
+    parameters.put("field", "5");
 
-    EasyMock.reset(req);
+    assertEquals(5, DataRequestHandler.getIntegerParam(
+        new RequestItem(null, parameters, null, null), "field", 100));
 
     // Should return the default value if the parameter is null
-    EasyMock.expect(req.getParameter("field")).andReturn(null);
+    parameters = Maps.newHashMap();
+    parameters.put("field", null);
 
-    EasyMock.replay(req);
-    assertEquals(100, DataRequestHandler.getIntegerParam(req, "field", 100));
-    EasyMock.verify(req);
+    assertEquals(100, DataRequestHandler.getIntegerParam(
+        new RequestItem(null, parameters, null, null), "field", 100));
   }
 
   public void testGetListParam() throws Exception {
-    EasyMock.expect(req.getParameter("field")).andReturn("happy,sad,grumpy");
+    Map<String, String> parameters = Maps.newHashMap();
+    parameters.put("field", "happy,sad,grumpy");
 
-    EasyMock.replay(req);
     assertEquals(Lists.newArrayList("happy", "sad", "grumpy"),
-        DataRequestHandler.getListParam(req, "field", Lists.newArrayList("alpha")));
-    EasyMock.verify(req);
-
-    EasyMock.reset(req);
+        DataRequestHandler.getListParam(
+            new RequestItem(null, parameters, null, null),
+            "field", Lists.newArrayList("alpha")));
 
     // Should return the default value if the parameter is null
-    EasyMock.expect(req.getParameter("field")).andReturn(null);
+    parameters = Maps.newHashMap();
+    parameters.put("field", null);
 
-    EasyMock.replay(req);
     assertEquals(Lists.newArrayList("alpha"),
-        DataRequestHandler.getListParam(req, "field", Lists.newArrayList("alpha")));
-    EasyMock.verify(req);
+        DataRequestHandler.getListParam(
+            new RequestItem(null, parameters, null, null),
+            "field", Lists.newArrayList("alpha")));
   }
 
   public void testGetAppId() throws Exception {

Modified: incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/DataServiceServletTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/DataServiceServletTest.java?rev=668795&r1=668794&r2=668795&view=diff
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/DataServiceServletTest.java (original)
+++ incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/DataServiceServletTest.java Tue Jun 17 11:55:42 2008
@@ -23,15 +23,18 @@
 import org.apache.shindig.social.opensocial.util.BeanJsonConverter;
 import org.apache.shindig.social.opensocial.util.BeanXmlConverter;
 import org.apache.shindig.social.opensocial.util.BeanConverter;
+import org.apache.shindig.social.ResponseItem;
 
-import com.google.common.collect.Maps;
 import com.google.inject.Injector;
+import com.google.common.collect.Maps;
 import junit.framework.TestCase;
 import org.easymock.classextension.EasyMock;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
-import java.util.Map;
+import java.io.PrintWriter;
+import java.util.Enumeration;
+import java.util.StringTokenizer;
 
 public class DataServiceServletTest extends TestCase {
   private HttpServletRequest req;
@@ -41,12 +44,16 @@
   private ActivityHandler activityHandler;
   private AppDataHandler appDataHandler;
   private BasicSecurityTokenDecoder tokenDecoder;
-  protected Injector injector;
+  private Injector injector;
+  private BeanJsonConverter jsonConverter;
+  private BeanXmlConverter xmlConverter;
 
   protected void setUp() throws Exception {
     servlet = new DataServiceServlet();
     req = EasyMock.createMock(HttpServletRequest.class);
     res = EasyMock.createMock(HttpServletResponse.class);
+    jsonConverter = EasyMock.createMock(BeanJsonConverter.class);
+    xmlConverter = EasyMock.createMock(BeanXmlConverter.class);
 
     peopleHandler = EasyMock.createMock(PersonHandler.class);
     activityHandler = EasyMock.createMock(ActivityHandler.class);
@@ -58,6 +65,8 @@
     servlet.setHandlers(new HandlerProvider(new PersonHandler(null), new ActivityHandler(null),
         new AppDataHandler(null)));
 
+    servlet.setBeanConverters(jsonConverter, xmlConverter);
+
     tokenDecoder = EasyMock.createMock(BasicSecurityTokenDecoder.class);
     servlet.setSecurityTokenDecoder(tokenDecoder);
   }
@@ -104,27 +113,37 @@
       String actualMethod, String overrideMethod, String expectedMethod) throws Exception {
     req.setCharacterEncoding("UTF-8");
 
-    EasyMock.expect(req.getPathInfo()).andReturn(pathInfo);
-    EasyMock.expect(req.getMethod()).andReturn(actualMethod);
-    EasyMock.expect(req.getMethod()).andReturn(actualMethod);
+    EasyMock.expect(req.getPathInfo()).andStubReturn(pathInfo);
+    EasyMock.expect(req.getMethod()).andStubReturn(actualMethod);
+    EasyMock.expect(req.getParameterNames()).andStubReturn((Enumeration) new StringTokenizer(""));
     EasyMock.expect(req.getParameter(DataServiceServlet.X_HTTP_METHOD_OVERRIDE)).andReturn(
         overrideMethod);
     EasyMock.expect(req.getParameter(DataServiceServlet.FORMAT_PARAM)).andReturn(null);
 
     String tokenString = "owner:viewer:app:container.com:foo:bar";
-    FakeGadgetToken token = new FakeGadgetToken();
     EasyMock.expect(req.getParameter(DataServiceServlet.SECURITY_TOKEN_PARAM))
         .andReturn(tokenString);
+
+    FakeGadgetToken token = new FakeGadgetToken();
     EasyMock.expect(tokenDecoder.createToken(tokenString)).andReturn(token);
 
     setupInjector();
-    handler.setConverter(null);
-    handler.handleMethod(expectedMethod, req, res, token);
 
-    EasyMock.replay(req, res, handler, tokenDecoder, injector);
+    String jsonObject = "my lovely json";
+    EasyMock.expect(handler.handleMethod(EasyMock.isA(RequestItem.class)))
+        .andReturn(new ResponseItem<String>(jsonObject));
+
+    EasyMock.expect(jsonConverter.convertToString(jsonObject)).andReturn(jsonObject);
+    handler.setConverter(jsonConverter);
+
+    PrintWriter writerMock = EasyMock.createMock(PrintWriter.class);
+    EasyMock.expect(res.getWriter()).andReturn(writerMock);
+    writerMock.write(jsonObject);
+
+    EasyMock.replay(req, res, handler, tokenDecoder, injector, jsonConverter);
     servlet.service(req, res);
-    EasyMock.verify(req, res, handler, tokenDecoder, injector);
-    EasyMock.reset(req, res, handler, tokenDecoder, injector);
+    EasyMock.verify(req, res, handler, tokenDecoder, injector, jsonConverter);
+    EasyMock.reset(req, res, handler, tokenDecoder, injector, jsonConverter);
   }
 
   public void testInvalidRoute() throws Exception {

Modified: incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/PersonHandlerTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/PersonHandlerTest.java?rev=668795&r1=668794&r2=668795&view=diff
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/PersonHandlerTest.java (original)
+++ incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/PersonHandlerTest.java Tue Jun 17 11:55:42 2008
@@ -17,62 +17,57 @@
  */
 package org.apache.shindig.social.dataservice;
 
-import org.apache.shindig.social.ResponseItem;
+import org.apache.shindig.common.testing.FakeGadgetToken;
 import org.apache.shindig.social.ResponseError;
+import org.apache.shindig.social.ResponseItem;
 import org.apache.shindig.social.opensocial.model.Person;
-import org.apache.shindig.social.opensocial.util.BeanJsonConverter;
-import org.apache.shindig.common.testing.FakeGadgetToken;
 
+import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
 import junit.framework.TestCase;
 import org.easymock.classextension.EasyMock;
 
-import javax.servlet.http.HttpServletRequest;
+import java.util.Map;
 
 public class PersonHandlerTest extends TestCase {
-  private BeanJsonConverter converter;
-  private HttpServletRequest servletRequest;
   private PersonService personService;
   private PersonHandler handler;
   private FakeGadgetToken token;
+  private RequestItem request;
 
   @Override
   protected void setUp() throws Exception {
     token = new FakeGadgetToken();
-    converter = EasyMock.createMock(BeanJsonConverter.class);
-    servletRequest = EasyMock.createMock(HttpServletRequest.class);
     personService = EasyMock.createMock(PersonService.class);
 
     handler = new PersonHandler(personService);
-    handler.setConverter(converter);
   }
 
   private void replay() {
-    EasyMock.replay(converter);
-    EasyMock.replay(servletRequest);
     EasyMock.replay(personService);
   }
 
   private void verify() {
-    EasyMock.verify(converter);
-    EasyMock.verify(servletRequest);
     EasyMock.verify(personService);
   }
 
-  // TODO: Make super class and pull this up
   private void setPath(String path) {
-    EasyMock.expect(servletRequest.getPathInfo()).andReturn(path);
+    Map<String, String> params = Maps.newHashMap();
+    params.put("orderBy", null);
+    params.put("filterBy", null);
+    params.put("startIndex", null);
+    params.put("count", null);
+    params.put("fields", null);
+    this.setPathAndParams(path, params);
+  }
+
+  private void setPathAndParams(String path, Map<String, String> params) {
+    request = new RequestItem(path, params, token, null);
   }
 
   public void testHandleGetAllNoParams() throws Exception {
     setPath("/people/john.doe/@all");
 
-    EasyMock.expect(servletRequest.getParameter("orderBy")).andReturn(null);
-    EasyMock.expect(servletRequest.getParameter("filterBy")).andReturn(null);
-    EasyMock.expect(servletRequest.getParameter("startIndex")).andReturn(null);
-    EasyMock.expect(servletRequest.getParameter("count")).andReturn(null);
-    EasyMock.expect(servletRequest.getParameter("fields")).andReturn(null);
-
     ResponseItem<RestfulCollection<Person>> data
         = new ResponseItem<RestfulCollection<Person>>(null);
     EasyMock.expect(personService.getPeople(
@@ -86,19 +81,13 @@
         token)).andReturn(data);
 
     replay();
-    assertEquals(data, handler.handleGet(servletRequest, token));
+    assertEquals(data, handler.handleGet(request));
     verify();
   }
 
   public void testHandleGetFriendsNoParams() throws Exception {
     setPath("/people/john.doe/@friends");
 
-    EasyMock.expect(servletRequest.getParameter("orderBy")).andReturn(null);
-    EasyMock.expect(servletRequest.getParameter("filterBy")).andReturn(null);
-    EasyMock.expect(servletRequest.getParameter("startIndex")).andReturn(null);
-    EasyMock.expect(servletRequest.getParameter("count")).andReturn(null);
-    EasyMock.expect(servletRequest.getParameter("fields")).andReturn(null);
-
     ResponseItem<RestfulCollection<Person>> data
         = new ResponseItem<RestfulCollection<Person>>(null);
     EasyMock.expect(personService.getPeople(
@@ -112,21 +101,22 @@
         token)).andReturn(data);
 
     replay();
-    assertEquals(data, handler.handleGet(servletRequest, token));
+    assertEquals(data, handler.handleGet(request));
     verify();
   }
 
   public void testHandleGetFriendsWithParams() throws Exception {
-    setPath("/people/john.doe/@friends");
-
     PersonService.SortOrder order = PersonService.SortOrder.name;
     PersonService.FilterType filter = PersonService.FilterType.topFriends;
 
-    EasyMock.expect(servletRequest.getParameter("orderBy")).andReturn(order.toString());
-    EasyMock.expect(servletRequest.getParameter("filterBy")).andReturn(filter.toString());
-    EasyMock.expect(servletRequest.getParameter("startIndex")).andReturn("5");
-    EasyMock.expect(servletRequest.getParameter("count")).andReturn("10");
-    EasyMock.expect(servletRequest.getParameter("fields")).andReturn("money,fame,fortune");
+    Map<String, String> params = Maps.newHashMap();
+    params.put("orderBy", order.toString());
+    params.put("filterBy", filter.toString());
+    params.put("startIndex", "5");
+    params.put("count", "10");
+    params.put("fields", "money,fame,fortune");
+
+    setPathAndParams("/people/john.doe/@friends", params);
 
     ResponseItem<RestfulCollection<Person>> data
         = new ResponseItem<RestfulCollection<Person>>(null);
@@ -136,7 +126,7 @@
         filter, 5, 10, Sets.newHashSet("money", "fame", "fortune"), token)).andReturn(data);
 
     replay();
-    assertEquals(data, handler.handleGet(servletRequest, token));
+    assertEquals(data, handler.handleGet(request));
     verify();
   }
 
@@ -152,7 +142,7 @@
         token)).andReturn(data);
 
     replay();
-    assertEquals(data, handler.handleGet(servletRequest, token));
+    assertEquals(data, handler.handleGet(request));
     verify();
   }
 
@@ -165,28 +155,25 @@
         token)).andReturn(data);
 
     replay();
-    assertEquals(data, handler.handleGet(servletRequest, token));
+    assertEquals(data, handler.handleGet(request));
     verify();
   }
 
   public void testHandleDelete() throws Exception {
     replay();
-    assertEquals(ResponseError.BAD_REQUEST,
-        handler.handleDelete(servletRequest, token).getError());
+    assertEquals(ResponseError.BAD_REQUEST, handler.handleDelete(request).getError());
     verify();
   }
 
   public void testHandlePut() throws Exception {
     replay();
-    assertEquals(ResponseError.NOT_IMPLEMENTED,
-        handler.handlePut(servletRequest, token).getError());
+    assertEquals(ResponseError.NOT_IMPLEMENTED, handler.handlePut(request).getError());
     verify();
   }
 
   public void testHandlePost() throws Exception {
     replay();
-    assertEquals(ResponseError.NOT_IMPLEMENTED,
-        handler.handlePost(servletRequest, token).getError());
+    assertEquals(ResponseError.NOT_IMPLEMENTED, handler.handlePost(request).getError());
     verify();
   }
 }
\ No newline at end of file

Modified: incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/integration/AbstractLargeRestfulTests.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/integration/AbstractLargeRestfulTests.java?rev=668795&r1=668794&r2=668795&view=diff
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/integration/AbstractLargeRestfulTests.java (original)
+++ incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/integration/AbstractLargeRestfulTests.java Tue Jun 17 11:55:42 2008
@@ -30,6 +30,7 @@
 
 import com.google.common.collect.Maps;
 import com.google.inject.Guice;
+import junit.framework.TestCase;
 import org.easymock.classextension.EasyMock;
 import org.json.JSONObject;
 
@@ -43,8 +44,7 @@
 import java.io.ByteArrayOutputStream;
 import java.io.PrintWriter;
 import java.util.Map;
-
-import junit.framework.TestCase;
+import java.util.Vector;
 
 public abstract class AbstractLargeRestfulTests extends TestCase {
   private HttpServletRequest req;
@@ -83,6 +83,9 @@
     EasyMock.expect(req.getParameter("st")).andStubReturn(
         "john.doe:john.doe:app:container.com:foo:bar");
 
+    Vector<String> vector = new Vector<String>(extraParams.keySet());
+    EasyMock.expect(req.getParameterNames()).andStubReturn(vector.elements());
+
     for (Map.Entry<String, String> entry : extraParams.entrySet()) {
       EasyMock.expect(req.getParameter(entry.getKey())).andStubReturn(entry.getValue());
     }