ApiServlet: use HttpUtils instead of class specific implementation Signed-off-by: Rohit Yadav <rohit.ya...@shapeblue.com>
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/3cc6efce Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/3cc6efce Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/3cc6efce Branch: refs/heads/master Commit: 3cc6efce04153a013d70971cbcfdbb20ab8b7fbb Parents: 983252c Author: Rohit Yadav <rohit.ya...@shapeblue.com> Authored: Tue Aug 12 10:06:35 2014 +0200 Committer: Rohit Yadav <rohit.ya...@shapeblue.com> Committed: Tue Aug 12 12:01:32 2014 +0200 ---------------------------------------------------------------------- server/src/com/cloud/api/ApiServlet.java | 45 +++++++++------------------ 1 file changed, 14 insertions(+), 31 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3cc6efce/server/src/com/cloud/api/ApiServlet.java ---------------------------------------------------------------------- diff --git a/server/src/com/cloud/api/ApiServlet.java b/server/src/com/cloud/api/ApiServlet.java index d09d426..8dff6eb 100644 --- a/server/src/com/cloud/api/ApiServlet.java +++ b/server/src/com/cloud/api/ApiServlet.java @@ -22,10 +22,10 @@ import com.cloud.api.auth.APIAuthenticator; import com.cloud.user.Account; import com.cloud.user.AccountService; import com.cloud.user.User; +import com.cloud.utils.HttpUtils; import com.cloud.utils.StringUtils; import com.cloud.utils.db.EntityManager; import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.context.CallContext; import org.apache.cloudstack.managed.context.ManagedContext; @@ -40,7 +40,6 @@ import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; -import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.util.HashMap; @@ -125,7 +124,7 @@ public class ApiServlet extends HttpServlet { auditTrailSb.append(" ").append(remoteAddress); auditTrailSb.append(" -- ").append(req.getMethod()).append(' '); // get the response format since we'll need it in a couple of places - String responseType = BaseCmd.RESPONSE_TYPE_XML; + String responseType = HttpUtils.RESPONSE_TYPE_XML; final Map<String, Object[]> params = new HashMap<String, Object[]>(); params.putAll(req.getParameterMap()); @@ -143,10 +142,11 @@ public class ApiServlet extends HttpServlet { } try { - if (BaseCmd.RESPONSE_TYPE_JSON.equalsIgnoreCase(responseType)) { - resp.setContentType(ApiServer.getJsonContentType() + "; charset=UTF-8"); - } else { - resp.setContentType("text/xml; charset=UTF-8"); + + if (HttpUtils.RESPONSE_TYPE_JSON.equalsIgnoreCase(responseType)) { + resp.setContentType(HttpUtils.JSON_CONTENT_TYPE); + } else if (HttpUtils.RESPONSE_TYPE_XML.equalsIgnoreCase(responseType)){ + resp.setContentType(HttpUtils.XML_CONTENT_TYPE); } HttpSession session = req.getSession(false); @@ -202,7 +202,7 @@ public class ApiServlet extends HttpServlet { } } } - writeResponse(resp, responseString, httpResponseCode, responseType); + HttpUtils.writeHttpResponse(resp, responseString, httpResponseCode, responseType); return; } } @@ -229,7 +229,7 @@ public class ApiServlet extends HttpServlet { auditTrailSb.append(" " + HttpServletResponse.SC_UNAUTHORIZED + " " + "unable to verify user credentials"); final String serializedResponse = _apiServer.getSerializedApiError(HttpServletResponse.SC_UNAUTHORIZED, "unable to verify user credentials", params, responseType); - writeResponse(resp, serializedResponse, HttpServletResponse.SC_UNAUTHORIZED, responseType); + HttpUtils.writeHttpResponse(resp, serializedResponse, HttpServletResponse.SC_UNAUTHORIZED, responseType); return; } @@ -240,7 +240,7 @@ public class ApiServlet extends HttpServlet { s_logger.info("missing command, ignoring request..."); auditTrailSb.append(" " + HttpServletResponse.SC_BAD_REQUEST + " " + "no command specified"); final String serializedResponse = _apiServer.getSerializedApiError(HttpServletResponse.SC_BAD_REQUEST, "no command specified", params, responseType); - writeResponse(resp, serializedResponse, HttpServletResponse.SC_BAD_REQUEST, responseType); + HttpUtils.writeHttpResponse(resp, serializedResponse, HttpServletResponse.SC_BAD_REQUEST, responseType); return; } final User user = _entityMgr.findById(User.class, userId); @@ -256,7 +256,7 @@ public class ApiServlet extends HttpServlet { auditTrailSb.append(" " + HttpServletResponse.SC_UNAUTHORIZED + " " + "unable to verify user credentials"); final String serializedResponse = _apiServer.getSerializedApiError(HttpServletResponse.SC_UNAUTHORIZED, "unable to verify user credentials", params, responseType); - writeResponse(resp, serializedResponse, HttpServletResponse.SC_UNAUTHORIZED, responseType); + HttpUtils.writeHttpResponse(resp, serializedResponse, HttpServletResponse.SC_UNAUTHORIZED, responseType); return; } } else { @@ -270,7 +270,7 @@ public class ApiServlet extends HttpServlet { // Add the HTTP method (GET/POST/PUT/DELETE) as well into the params map. params.put("httpmethod", new String[] {req.getMethod()}); final String response = _apiServer.handleRequest(params, responseType, auditTrailSb); - writeResponse(resp, response != null ? response : "", HttpServletResponse.SC_OK, responseType); + HttpUtils.writeHttpResponse(resp, response != null ? response : "", HttpServletResponse.SC_OK, responseType); } else { if (session != null) { try { @@ -283,13 +283,13 @@ public class ApiServlet extends HttpServlet { final String serializedResponse = _apiServer.getSerializedApiError(HttpServletResponse.SC_UNAUTHORIZED, "unable to verify user credentials and/or request signature", params, responseType); - writeResponse(resp, serializedResponse, HttpServletResponse.SC_UNAUTHORIZED, responseType); + HttpUtils.writeHttpResponse(resp, serializedResponse, HttpServletResponse.SC_UNAUTHORIZED, responseType); } } catch (final ServerApiException se) { final String serializedResponseText = _apiServer.getSerializedApiError(se, params, responseType); resp.setHeader("X-Description", se.getDescription()); - writeResponse(resp, serializedResponseText, se.getErrorCode().getHttpCode(), responseType); + HttpUtils.writeHttpResponse(resp, serializedResponseText, se.getErrorCode().getHttpCode(), responseType); auditTrailSb.append(" " + se.getErrorCode() + " " + se.getDescription()); } catch (final Exception ex) { s_logger.error("unknown exception writing api response", ex); @@ -303,21 +303,4 @@ public class ApiServlet extends HttpServlet { CallContext.unregister(); } } - - // FIXME: rather than isError, we might was to pass in the status code to give more flexibility - private void writeResponse(final HttpServletResponse resp, final String response, final int responseCode, final String responseType) { - try { - resp.setStatus(responseCode); - resp.getWriter().print(response); - } catch (final IOException ioex) { - if (s_logger.isTraceEnabled()) { - s_logger.trace("exception writing response: " + ioex); - } - } catch (final Exception ex) { - if (!(ex instanceof IllegalStateException)) { - s_logger.error("unknown exception writing api response", ex); - } - } - } - }