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);