You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@shindig.apache.org by be...@apache.org on 2008/09/23 23:50:22 UTC
svn commit: r698365 - in /incubator/shindig/trunk/java/gadgets/src:
main/java/org/apache/shindig/gadgets/
main/java/org/apache/shindig/gadgets/http/
main/java/org/apache/shindig/gadgets/preload/
main/java/org/apache/shindig/gadgets/servlet/ test/java/o...
Author: beaton
Date: Tue Sep 23 14:50:21 2008
New Revision: 698365
URL: http://svn.apache.org/viewvc?rev=698365&view=rev
Log:
Move formatting of makeRequest responses into a utility class.
Added:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/FetchResponseUtils.java (with props)
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/FetchResponseUtilsTest.java (with props)
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpResponseBuilder.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/preload/HttpPreloader.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/MakeRequestHandler.java
Added: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/FetchResponseUtils.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/FetchResponseUtils.java?rev=698365&view=auto
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/FetchResponseUtils.java (added)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/FetchResponseUtils.java Tue Sep 23 14:50:21 2008
@@ -0,0 +1,70 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.shindig.gadgets;
+
+import org.apache.shindig.gadgets.http.HttpResponse;
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Handles converting HttpResponse objects to the format expected by the makeRequest javascript.
+ */
+public class FetchResponseUtils {
+
+ /**
+ * Convert a response to a JSON object.
+ *
+ * The returned JSON object contains the following values:
+ * rc: integer response code
+ * body: string response body
+ * headers: object, keys are header names, values are lists of header values
+ *
+ * @param response the response body
+ * @param body string to use as the body of the response.
+ * @return a JSONObject representation of the response body.
+ */
+ public static JSONObject getResponseAsJson(HttpResponse response, String body)
+ throws JSONException {
+ JSONObject resp = new JSONObject();
+ resp.put("rc", response.getHttpStatusCode());
+ resp.put("body", body);
+ JSONObject headers = new JSONObject();
+ addHeaders(headers, response, "set-cookie");
+ addHeaders(headers, response, "location");
+ resp.put("headers", headers);
+ // Merge in additional response data
+ for (Map.Entry<String, String> entry : response.getMetadata().entrySet()) {
+ resp.put(entry.getKey(), entry.getValue());
+ }
+ return resp;
+ }
+
+ private static void addHeaders(JSONObject headers, HttpResponse response, String headerName)
+ throws JSONException {
+ List<String> values = response.getHeaders(headerName);
+ if (!values.isEmpty()) {
+ headers.put(headerName.toLowerCase(), new JSONArray(values));
+ }
+ }
+
+}
Propchange: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/FetchResponseUtils.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpResponseBuilder.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpResponseBuilder.java?rev=698365&r1=698364&r2=698365&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpResponseBuilder.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpResponseBuilder.java Tue Sep 23 14:50:21 2008
@@ -57,7 +57,7 @@
}
/**
- * @param responseString The response string. Converted to UTF-8 bytes and copied when set.
+ * @param body The response string. Converted to UTF-8 bytes and copied when set.
*/
public HttpResponseBuilder setResponseString(String body) {
responseBytes = CharsetUtil.getUtf8Bytes(body);
Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/preload/HttpPreloader.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/preload/HttpPreloader.java?rev=698365&r1=698364&r2=698365&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/preload/HttpPreloader.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/preload/HttpPreloader.java Tue Sep 23 14:50:21 2008
@@ -19,12 +19,12 @@
package org.apache.shindig.gadgets.preload;
import org.apache.shindig.common.uri.Uri;
+import org.apache.shindig.gadgets.FetchResponseUtils;
import org.apache.shindig.gadgets.GadgetContext;
import org.apache.shindig.gadgets.http.ContentFetcherFactory;
import org.apache.shindig.gadgets.http.HttpRequest;
import org.apache.shindig.gadgets.http.HttpResponse;
import org.apache.shindig.gadgets.oauth.OAuthArguments;
-import org.apache.shindig.gadgets.servlet.MakeRequestHandler;
import org.apache.shindig.gadgets.spec.GadgetSpec;
import org.apache.shindig.gadgets.spec.Preload;
import org.json.JSONException;
@@ -92,7 +92,7 @@
public HttpPreloadData(HttpResponse response) {
JSONObject data = null;
try {
- data = MakeRequestHandler.getResponseAsJson(response, response.getResponseAsString());
+ data = FetchResponseUtils.getResponseAsJson(response, response.getResponseAsString());
} catch (JSONException e) {
data = new JSONObject();
}
Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/MakeRequestHandler.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/MakeRequestHandler.java?rev=698365&r1=698364&r2=698365&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/MakeRequestHandler.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/MakeRequestHandler.java Tue Sep 23 14:50:21 2008
@@ -24,6 +24,7 @@
import org.apache.shindig.common.util.Utf8UrlCoder;
import org.apache.shindig.gadgets.AuthType;
import org.apache.shindig.gadgets.FeedProcessor;
+import org.apache.shindig.gadgets.FetchResponseUtils;
import org.apache.shindig.gadgets.GadgetException;
import org.apache.shindig.gadgets.http.ContentFetcherFactory;
import org.apache.shindig.gadgets.http.HttpRequest;
@@ -34,13 +35,10 @@
import com.google.inject.Inject;
import com.google.inject.Singleton;
-import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.IOException;
-import java.util.List;
-import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -171,42 +169,6 @@
}
/**
- * Convert a response to a JSON object. static so it can be used by HttpPreloaders as well.
- *
- * The returned JSON object contains the following values:
- * rc: integer response code
- * body: string response body
- * headers: object, keys are header names, values are lists of header values
- *
- * @param response the response body
- * @param body string to use as the body of the response.
- * @return a JSONObject representation of the response body.
- */
- public static JSONObject getResponseAsJson(HttpResponse response, String body)
- throws JSONException {
- JSONObject resp = new JSONObject();
- resp.put("rc", response.getHttpStatusCode());
- resp.put("body", body);
- JSONObject headers = new JSONObject();
- addHeaders(headers, response, "set-cookie");
- addHeaders(headers, response, "location");
- resp.put("headers", headers);
- // Merge in additional response data
- for (Map.Entry<String, String> entry : response.getMetadata().entrySet()) {
- resp.put(entry.getKey(), entry.getValue());
- }
- return resp;
- }
-
- private static void addHeaders(JSONObject headers, HttpResponse response, String headerName)
- throws JSONException {
- List<String> values = response.getHeaders(headerName);
- if (!values.isEmpty()) {
- headers.put(headerName.toLowerCase(), new JSONArray(values));
- }
- }
-
- /**
* Format a response as JSON, including additional JSON inserted by
* chained content fetchers.
*/
@@ -218,7 +180,7 @@
if ("FEED".equals(request.getParameter(CONTENT_TYPE_PARAM))) {
body = processFeed(originalUrl, request, body);
}
- JSONObject resp = getResponseAsJson(results, body);
+ JSONObject resp = FetchResponseUtils.getResponseAsJson(results, body);
if (authToken != null) {
String updatedAuthToken = authToken.getUpdatedToken();
Added: incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/FetchResponseUtilsTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/FetchResponseUtilsTest.java?rev=698365&view=auto
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/FetchResponseUtilsTest.java (added)
+++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/FetchResponseUtilsTest.java Tue Sep 23 14:50:21 2008
@@ -0,0 +1,90 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.shindig.gadgets;
+
+import static org.junit.Assert.assertEquals;
+
+import org.apache.shindig.gadgets.http.HttpResponse;
+import org.apache.shindig.gadgets.http.HttpResponseBuilder;
+import org.json.JSONObject;
+import org.junit.Test;
+
+/**
+ * Test of FetchResponseUtils
+ */
+public class FetchResponseUtilsTest {
+
+ @Test
+ public void testSimpleResponse() throws Exception {
+ HttpResponse response = new HttpResponseBuilder()
+ .setHttpStatusCode(999)
+ .create();
+ JSONObject obj = FetchResponseUtils.getResponseAsJson(response, "body");
+ assertEquals(999, obj.getInt("rc"));
+ assertEquals("body", obj.getString("body"));
+ assertEquals(0, obj.getJSONObject("headers").length());
+ }
+
+ @Test
+ public void testMetadata() throws Exception {
+ HttpResponse response = new HttpResponseBuilder()
+ .setHttpStatusCode(999)
+ .setMetadata("metaname", "metavalue")
+ .setMetadata("more meta", "more value")
+ .create();
+ JSONObject obj = FetchResponseUtils.getResponseAsJson(response, "body");
+ assertEquals(999, obj.getInt("rc"));
+ assertEquals("body", obj.getString("body"));
+ assertEquals("metavalue", obj.getString("metaname"));
+ assertEquals("more value", obj.getString("more meta"));
+ }
+
+ @Test
+ public void testHeaders() throws Exception {
+ HttpResponse response = new HttpResponseBuilder()
+ .setHttpStatusCode(999)
+ .setHeader("Set-Cookie", "cookie")
+ .setHeader("location", "somewhere")
+ .create();
+ JSONObject obj = FetchResponseUtils.getResponseAsJson(response, "body");
+ assertEquals(999, obj.getInt("rc"));
+ assertEquals("body", obj.getString("body"));
+ assertEquals(1, obj.getJSONObject("headers").getJSONArray("set-cookie").length());
+ assertEquals("cookie", obj.getJSONObject("headers").getJSONArray("set-cookie").get(0));
+ assertEquals(1, obj.getJSONObject("headers").getJSONArray("location").length());
+ assertEquals("somewhere", obj.getJSONObject("headers").getJSONArray("location").get(0));
+ }
+
+ @Test
+ public void testMultiValuedHeaders() throws Exception {
+ HttpResponse response = new HttpResponseBuilder()
+ .setHttpStatusCode(999)
+ .addHeader("Set-Cookie", "cookie")
+ .addHeader("Set-Cookie", "cookie2")
+ .addHeader("Set-Cookie", "cookie3")
+ .create();
+ JSONObject obj = FetchResponseUtils.getResponseAsJson(response, "body");
+ assertEquals(999, obj.getInt("rc"));
+ assertEquals("body", obj.getString("body"));
+ assertEquals(3, obj.getJSONObject("headers").getJSONArray("set-cookie").length());
+ assertEquals("cookie", obj.getJSONObject("headers").getJSONArray("set-cookie").get(0));
+ assertEquals("cookie2", obj.getJSONObject("headers").getJSONArray("set-cookie").get(1));
+ assertEquals("cookie3", obj.getJSONObject("headers").getJSONArray("set-cookie").get(2));
+ }
+}
Propchange: incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/FetchResponseUtilsTest.java
------------------------------------------------------------------------------
svn:eol-style = native