Author: hsaputra Date: Thu Sep 30 17:09:34 2010 New Revision: 1003169 URL: http://svn.apache.org/viewvc?rev=1003169&view=rev Log: SHINDIG-1436 | Shindig does not support returning a JSON array when format 'json' is selected on an osapi.http.get request
Codereview: http://codereview.appspot.com/2323043/ Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/HttpRequestHandler.java shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/HttpRequestHandlerTest.java Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/HttpRequestHandler.java URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/HttpRequestHandler.java?rev=1003169&r1=1003168&r2=1003169&view=diff ============================================================================== --- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/HttpRequestHandler.java (original) +++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/HttpRequestHandler.java Thu Sep 30 17:09:34 2010 @@ -35,6 +35,8 @@ import org.apache.shindig.protocol.BaseR import org.apache.shindig.protocol.Operation; import org.apache.shindig.protocol.ProtocolException; import org.apache.shindig.protocol.Service; + +import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; @@ -285,7 +287,12 @@ public class HttpRequestHandler { return processFeed(request, body); } else if ("json".equalsIgnoreCase(request.format)) { try { - return new JSONObject(body); + body = body.trim(); + if(body.charAt(0) == '[') { + return new JSONArray(body); + } else { + return new JSONObject(body); + } } catch (JSONException e) { // TODO: include data block with invalid JSON throw new ProtocolException(HttpServletResponse.SC_NOT_ACCEPTABLE, "Response not valid JSON", e); Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/HttpRequestHandlerTest.java URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/HttpRequestHandlerTest.java?rev=1003169&r1=1003168&r2=1003169&view=diff ============================================================================== --- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/HttpRequestHandlerTest.java (original) +++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/HttpRequestHandlerTest.java Thu Sep 30 17:09:34 2010 @@ -287,7 +287,7 @@ public class HttpRequestHandlerTest exte } @Test - public void testJsonGet() throws Exception { + public void testJsonObjectGet() throws Exception { JSONObject request = new JSONObject("{method:http.get, id:req1, params : {" + "href:'http://www.example.org/somecontent', format:'json'" + "}}"); @@ -308,6 +308,27 @@ public class HttpRequestHandlerTest exte } @Test + public void testJsonArrayGet() throws Exception { + JSONObject request = new JSONObject("{method:http.get, id:req1, params : {" + + "href:'http://www.example.org/somecontent', format:'json'" + + "}}"); + HttpRequest httpRequest = new HttpRequest(Uri.parse("http://www.example.org/somecontent")); + httpRequest.setMethod("GET"); + builder.setResponseString("[{key:1},{key:2}]"); + expect(pipeline.execute(eqRequest(httpRequest))).andReturn(builder.create()).anyTimes(); + + replay(); + RpcHandler operation = registry.getRpcHandler(request); + + HttpRequestHandler.HttpApiResponse httpApiResponse = + (HttpRequestHandler.HttpApiResponse)operation.execute(emptyFormItems, token, converter).get(); + verify(); + + JsonAssert.assertJsonEquals("{ headers : {}, status : 200, content : [{key:1},{key:2}]}}", + converter.convertToString(httpApiResponse)); + } + + @Test public void testSignedGetRequest() throws Exception { JSONObject request = new JSONObject("{method:http.get, id:req1, params : {" + "href:'http://www.example.org/somecontent',"
