/**
* xweb project
* Created by Hamed Abdollahpour
* http://www.mobile4use.com/xweb
*/
package ir.xweb.server;
import ir.xweb.module.Manager;
import ir.xweb.module.Module;
import ir.xweb.module.ModuleException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class XWebServlet extends HttpServlet {
private static final long serialVersionUID = -2953215151807131181L;
private final static Logger logger = LoggerFactory.getLogger("XWebServlet");
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Manager manager = (Manager)getServletContext().getAttribute(Constants.SESSION_MANAGER);
String api = request.getParameter("api");
if(api == null) {
throw new ServletException(Constants.SESSION_MANAGER + " parameter not found (please set module name)");
}
Module module = manager.getModule(api);
if(module != null) {
//logger.trace("Call module: " + module.getInfo().getName());
try {
XWebUser user = (XWebUser) request.getSession().getAttribute(Constants.SESSION_USER);
module.process(getServletContext(), request, response, user == null ? null : user.getRole());
} catch (ModuleException ex) {
//int errorCode = ex.getErrorCode();
final Integer responseCode = ex.getResponseCode();
// trace error or not
final boolean trace = (responseCode == null) ||
((responseCode != HttpServletResponse.SC_NOT_FOUND) &&
(responseCode != HttpServletResponse.SC_UNAUTHORIZED));
if(trace) {
logger.error(responseCode + " error", ex);
}
// Write error to output
if(!response.isCommitted()) {
if (ex.getErrorCode() != null) {
response.addHeader("xweb-error-code", Integer.toString(ex.getErrorCode()));
}
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
if(responseCode != null) {
response.sendError(responseCode, ex.toString());
} else {
response.sendError(HttpServletResponse.SC_BAD_REQUEST, ex.toString());
}
}
} catch (Exception ex) {
logger.error("Error in module process. Module: "
+ module.getInfo().getName()
+ " : " + ex.getMessage(), ex);
if(!response.isCommitted()) {
response.sendError(HttpServletResponse.SC_BAD_REQUEST,
"Error in module: " + api + " Cause: " + ex.getMessage());
}
}
} else {
logger.info("Call illegal API: " + api);
response.sendError(HttpServletResponse.SC_BAD_REQUEST, "Call illegal API: " + api);
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doGet(req, resp);
}
}