Author: doll
Date: Mon Jun 16 12:15:26 2008
New Revision: 668265
URL: http://svn.apache.org/viewvc?rev=668265&view=rev
Log:
The java restful apis now return error responses correctly and the javascript
is now able to interpet them into opensocial response errors.
Modified:
incubator/shindig/trunk/features/opensocial-current/restfulcontainer.js
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/ResponseError.java
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/dataservice/DataRequestHandler.java
incubator/shindig/trunk/java/social-api/src/test/java/org/apache/shindig/social/dataservice/DataRequestHandlerTest.java
Modified:
incubator/shindig/trunk/features/opensocial-current/restfulcontainer.js
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/features/opensocial-current/restfulcontainer.js?rev=668265&r1=668264&r2=668265&view=diff
==============================================================================
--- incubator/shindig/trunk/features/opensocial-current/restfulcontainer.js
(original)
+++ incubator/shindig/trunk/features/opensocial-current/restfulcontainer.js Mon
Jun 16 12:15:26 2008
@@ -98,11 +98,14 @@
gadgets.io.makeNonProxiedRequest(
baseUrl + url + separator + "st=" + st,
function(result) {
- result = result.data;
+ var error;
+ if (result.errors) {
+ error = RestfulContainer.translateHttpError(result.errors[0]);
+ }
- // TODO: handle errors
+ // TODO: get error messages
var processedData = requestObject.request.processResponse(
- requestObject.request, result, null, null);
+ requestObject.request, result.data, error, null);
globalError = globalError || processedData.hadError();
responseMap[requestObject.key] = processedData;
@@ -118,6 +121,25 @@
};
+RestfulContainer.translateHttpError = function(httpError) {
+ if (httpError == "Error 501") {
+ return opensocial.ResponseItem.Error.NOT_IMPLEMENTED;
+ } else if (httpError == "Error 401") {
+ return opensocial.ResponseItem.Error.UNAUTHORIZED;
+ } else if (httpError == "Error 403") {
+ return opensocial.ResponseItem.Error.FORBIDDEN;
+ } else if (httpError == "Error 400") {
+ return opensocial.ResponseItem.Error.BAD_REQUEST;
+ } else if (httpError == "Error 500") {
+ return opensocial.ResponseItem.Error.INTERNAL_ERROR;
+ } else if (httpError == "Error 404") {
+ return opensocial.ResponseItem.Error.BAD_REQUEST;
+ // TODO: Which one should the limit exceeded error be?
+ // } else if (httpError == "Error ???") {
+ // return opensocial.ResponseItem.Error.LIMIT_EXCEEDED;
+ }
+}
+
RestfulContainer.prototype.makeIdSpec = function(id) {
return new opensocial.IdSpec({'userId' : id});
}
Modified:
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/ResponseError.java
URL:
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/ResponseError.java?rev=668265&r1=668264&r2=668265&view=diff
==============================================================================
---
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/ResponseError.java
(original)
+++
incubator/shindig/trunk/java/social-api/src/main/java/org/apache/shindig/social/ResponseError.java
Mon Jun 16 12:15:26 2008
@@ -17,21 +17,29 @@
*/
package org.apache.shindig.social;
+import javax.servlet.http.HttpServletResponse;
+
public enum ResponseError {
- NOT_IMPLEMENTED("notImplemented"),
- UNAUTHORIZED("unauthorized"),
- FORBIDDEN("forbidden"),
- BAD_REQUEST("badRequest"),
- INTERNAL_ERROR("internalError");
+ NOT_IMPLEMENTED("notImplemented", HttpServletResponse.SC_NOT_IMPLEMENTED),
+ UNAUTHORIZED("unauthorized", HttpServletResponse.SC_UNAUTHORIZED),
+ FORBIDDEN("forbidden", HttpServletResponse.SC_FORBIDDEN),
+ BAD_REQUEST("badRequest", HttpServletResponse.SC_BAD_REQUEST),
+ INTERNAL_ERROR("internalError",
HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
private final String jsonValue;
+ private int httpErrorCode;
- ResponseError(String jsonValue) {
+ ResponseError(String jsonValue, int httpErrorCode) {
this.jsonValue = jsonValue;
+ this.httpErrorCode = httpErrorCode;
}
@Override
public String toString() {
return jsonValue;
}
+
+ public int getHttpErrorCode() {
+ return httpErrorCode;
+ }
}
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=668265&r1=668264&r2=668265&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
Mon Jun 16 12:15:26 2008
@@ -19,6 +19,7 @@
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;
@@ -60,7 +61,8 @@
PrintWriter writer = servletResponse.getWriter();
writer.write(converter.convertToString(responseItem.getResponse()));
} else {
- // throw an error
+ servletResponse.sendError(responseItem.getError().getHttpErrorCode(),
+ responseItem.getErrorMessage());
}
}
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=668265&r1=668264&r2=668265&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
Mon Jun 16 12:15:26 2008
@@ -109,6 +109,12 @@
}
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) {
@@ -127,14 +133,15 @@
ResponseItem handleGet(HttpServletRequest servletRequest,
SecurityToken token) {
- return new ResponseItem<String>(ResponseError.INTERNAL_ERROR, "", "");
+ return new ResponseItem<String>(error, "", "");
}
};
+ resp.sendError(error.getHttpErrorCode(), "");
EasyMock.replay(req, resp);
drh.handleMethod("GET", req, resp, null);
- // TODO: Assert the right actions occur based on the error type
EasyMock.verify(req, resp);
+ EasyMock.reset(req, resp);
}
public void testGetParamsFromRequest() throws Exception {