You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@shindig.apache.org by ie...@apache.org on 2008/10/23 09:57:39 UTC

svn commit: r707300 - in /incubator/shindig/trunk/java/social-api/src: main/java/org/apache/shindig/social/opensocial/service/DataServiceServlet.java test/java/org/apache/shindig/social/opensocial/service/DataServiceServletTest.java

Author: ieb
Date: Thu Oct 23 00:57:38 2008
New Revision: 707300

URL: http://svn.apache.org/viewvc?rev=707300&view=rev
Log:
SHINDIG-601

Patch from Rajdeep Dua

Updated DataServiceServlet to support
HttpRequest Headers :
  Key - CONTENT_TYPE,
  value - application/atom+xml
               application/json

   Choose BeanXmlConverter for atom+xml and json otherwise
   If content type is not set then check format parameter.

Thanks

Some formatting fixes were applied to make the patch acceptable.

Modified:
    incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/service/DataServiceServlet.java
    incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/DataServiceServletTest.java

Modified: incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/service/DataServiceServlet.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/service/DataServiceServlet.java?rev=707300&r1=707299&r2=707300&view=diff
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/service/DataServiceServlet.java (original)
+++ incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/opensocial/service/DataServiceServlet.java Thu Oct 23 00:57:38 2008
@@ -40,6 +40,8 @@
   public static final String ACTIVITY_ROUTE = "activities";
   public static final String APPDATA_ROUTE = "appdata";
 
+  public static final String CONTENT_TYPE = "CONTENT_TYPE";
+
   private static final Logger logger = Logger.getLogger(
       "org.apache.shindig.social.opensocial.spi");
 
@@ -91,7 +93,7 @@
   }
 
   /**
-   * Handler for non-batch requests
+   * Handler for non-batch requests.
    */
   private void handleSingleRequest(HttpServletRequest servletRequest,
       HttpServletResponse servletResponse, SecurityToken token,
@@ -115,15 +117,45 @@
 
 
   BeanConverter getConverterForRequest(HttpServletRequest servletRequest) {
-    String formatString = servletRequest.getParameter(FORMAT_PARAM);
-    if (ATOM_FORMAT.equals(formatString)) {
-      return atomConverter;
+    String formatString = null;
+    BeanConverter converter = null;
+    String contentType = null;
+
+    try {
+      formatString = servletRequest.getParameter(FORMAT_PARAM);
+    } catch (Throwable t) {
+      // this happens while testing
+      logger.fine("Unexpected error : format param is null " + t.toString());
     }
-
-    else if (XML_FORMAT.equals(formatString)) {
-      return xmlConverter;
+    try {
+      contentType = servletRequest.getHeader(CONTENT_TYPE);
+    } catch (Throwable t) {
+      //this happens while testing
+      logger.fine("Unexpected error : content type is null " + t.toString());
     }
 
-    return jsonConverter;
+    if (contentType != null) {
+      if (contentType.equals("application/json")) {
+        converter = jsonConverter;
+      } else if (contentType.equals("application/atom+xml")) {
+        converter = atomConverter;
+      } else if (contentType.equals("application/xml")) {
+        converter = xmlConverter;
+      } else if (formatString == null) {
+        // takes care of cases where content!= null but is ""
+        converter = jsonConverter;
+      }
+    } else if (formatString != null) {
+      if (formatString.equals(ATOM_FORMAT)) {
+        converter = atomConverter;
+      } else if (formatString.equals(XML_FORMAT)) {
+        converter = xmlConverter;
+      } else {
+        converter = jsonConverter;
+      }
+    } else {
+      converter = jsonConverter;
+    }
+    return converter;
   }
 }

Modified: incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/DataServiceServletTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/DataServiceServletTest.java?rev=707300&r1=707299&r2=707300&view=diff
==============================================================================
--- incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/DataServiceServletTest.java (original)
+++ incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/opensocial/service/DataServiceServletTest.java Thu Oct 23 00:57:38 2008
@@ -203,8 +203,34 @@
     assertConverter(json, "ahhhh!");
   }
 
+  public void testGetConverterForRequestContentType() throws Exception {
+    BeanJsonConverter json = new BeanJsonConverter(Guice
+        .createInjector(new SocialApiTestsGuiceModule()));
+    BeanXmlConverter xml = new BeanXmlConverter();
+    BeanAtomConverter atom = new BeanAtomConverter();
+    servlet.setBeanConverters(json, xml, atom);
+
+    assertConverterForContentType(atom, "application/atom+xml");
+    assertConverterForContentType(xml, "application/xml");
+    assertConverterForContentType(json, "");
+    assertConverterForContentType(json, null);
+    assertConverterForContentType(json, "abcd!");
+
+  }
+
   private void assertConverter(BeanConverter converter, String format) {
-    EasyMock.expect(req.getParameter(DataServiceServlet.FORMAT_PARAM)).andReturn(format);
+    EasyMock.expect(req.getParameter(DataServiceServlet.FORMAT_PARAM))
+        .andReturn(format);
+    EasyMock.replay(req);
+    assertEquals(converter, servlet.getConverterForRequest(req));
+    EasyMock.verify(req);
+    EasyMock.reset(req);
+  }
+
+  private void assertConverterForContentType(BeanConverter converter,
+      String contentType) {
+    EasyMock.expect(req.getHeader(DataServiceServlet.CONTENT_TYPE)).andReturn(
+        contentType);
     EasyMock.replay(req);
     assertEquals(converter, servlet.getConverterForRequest(req));
     EasyMock.verify(req);