/** * Returns an array with all accepted content types. if the root directory was specified. * * @return database */ public String[] produces() { final String[] acc = req.getHeader("Accept").split("\\s*,\\s*"); for (int a = 0; a < acc.length; a++) { if (acc[a].indexOf(';') != -1) acc[a] = acc[a].replaceAll("\\w*;.*", ""); } return acc; }
private String getOriginOrReferer(HttpServletRequest pReq) { String origin = pReq.getHeader("Origin"); if (origin == null) { origin = pReq.getHeader("Referer"); } return origin != null ? origin.replaceAll("[\\n\\r]*", "") : null; }
/** * OPTION requests are treated as CORS preflight requests * * @param req the original request * @param resp the response the answer are written to */ @Override protected void doOptions(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { Map<String, String> responseHeaders = requestHandler.handleCorsPreflightRequest( req.getHeader("Origin"), req.getHeader("Access-Control-Request-Headers")); for (Map.Entry<String, String> entry : responseHeaders.entrySet()) { resp.setHeader(entry.getKey(), entry.getValue()); } }
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); String title = "Showing Request Headers"; StringBuilder sb = new StringBuilder(); sb.append("<html>\n<head>\n"); sb.append("<title>" + title + "</title>\n"); sb.append("</head>\n"); sb.append("<body bgcolor='#FDF5E6'>\n"); sb.append("<h1 align='center'>" + title + "</h1>\n"); sb.append("<b> Request Method: </b>" + request.getMethod() + "<br>\n"); sb.append("<b> Request URI: </b>" + request.getRequestURI() + "<br>\n"); sb.append("<b> Request Protocol: </b>" + request.getProtocol() + "<br>\n"); sb.append("<table border=1 align='center'>\n"); sb.append("<tr bgcolor='#FFAD00'>\n"); sb.append("<th> Header Name </th><th> Header Value </th></tr>\n"); Enumeration headerNames = request.getHeaderNames(); while (headerNames.hasMoreElements()) { String headerName = (String) headerNames.nextElement(); sb.append("<tr><td>" + headerName + "</td>"); sb.append("<td>" + request.getHeader(headerName) + "</td></tr>\n"); } sb.append("</table>\n"); sb.append("</body></html>"); out.println(sb.toString()); out.close(); }
/** * Constructor. * * @param rq request * @param rs response * @throws IOException I/O exception */ public HTTPContext(final HttpServletRequest rq, final HttpServletResponse rs) throws IOException { req = rq; res = rs; final String m = rq.getMethod(); method = HTTPMethod.get(m); final StringBuilder uri = new StringBuilder(req.getRequestURL()); final String qs = req.getQueryString(); if (qs != null) uri.append('?').append(qs); log(false, m, uri); // set UTF8 as default encoding (can be overwritten) res.setCharacterEncoding(UTF8); segments = toSegments(req.getPathInfo()); path = join(0); user = System.getProperty(DBUSER); pass = System.getProperty(DBPASS); // set session-specific credentials final String auth = req.getHeader(AUTHORIZATION); if (auth != null) { final String[] values = auth.split(" "); if (values[0].equals(BASIC)) { final String[] cred = Base64.decode(values[1]).split(":", 2); if (cred.length != 2) throw new LoginException(NOPASSWD); user = cred[0]; pass = cred[1]; } else { throw new LoginException(WHICHAUTH, values[0]); } } }
// Set an appropriate CORS header if requested and if allowed private void setCorsHeader(HttpServletRequest pReq, HttpServletResponse pResp) { String origin = requestHandler.extractCorsOrigin(pReq.getHeader("Origin")); if (origin != null) { pResp.setHeader("Access-Control-Allow-Origin", origin); pResp.setHeader("Access-Control-Allow-Credentials", "true"); } }
@Override public final void service(final HttpServletRequest req, final HttpServletResponse res) throws IOException { final HTTPContext http = new HTTPContext(req, res, this); final boolean restxq = this instanceof RestXqServlet; try { http.authorize(); run(http); http.log(SC_OK, ""); } catch (final HTTPException ex) { http.status(ex.getStatus(), Util.message(ex), restxq); } catch (final LoginException ex) { http.status(SC_UNAUTHORIZED, Util.message(ex), restxq); } catch (final IOException | QueryException ex) { http.status(SC_BAD_REQUEST, Util.message(ex), restxq); } catch (final ProcException ex) { http.status(SC_BAD_REQUEST, Text.INTERRUPTED, restxq); } catch (final Exception ex) { final String msg = Util.bug(ex); Util.errln(msg); http.status(SC_INTERNAL_SERVER_ERROR, Util.info(UNEXPECTED, msg), restxq); } finally { if (Prop.debug) { Util.outln("_ REQUEST _________________________________" + Prop.NL + req); final Enumeration<String> en = req.getHeaderNames(); while (en.hasMoreElements()) { final String key = en.nextElement(); Util.outln(Text.LI + key + Text.COLS + req.getHeader(key)); } Util.out("_ RESPONSE ________________________________" + Prop.NL + res); } } }
@Override public Map<String, String> getHeaders() { final Map<String, String> map = new HashMap<>(); final Enumeration<String> en = req.getHeaderNames(); while (en.hasMoreElements()) { final String name = en.nextElement(); final String val = req.getHeader(name); map.put(name, val); } return map; }
/** * Returns an array with all accepted content types. if the root directory was specified. * * @return database */ public String[] produces() { final String accept = req.getHeader("Accept"); if (accept == null) return new String[0]; final String[] acc = accept.split("\\s*,\\s*"); final int as = acc.length; for (int a = 0; a < as; a++) { if (acc[a].indexOf(';') != -1) acc[a] = acc[a].replaceAll("\\w*;.*", ""); } return acc; }
private static String getGZIPEncoding(HttpServletRequest request) { String acceptEncoding = request.getHeader("Accept-Encoding"); if (acceptEncoding == null) return null; acceptEncoding = acceptEncoding.toLowerCase(); if (acceptEncoding.indexOf("x-gzip") >= 0) { return "x-gzip"; } if (acceptEncoding.indexOf("gzip") >= 0) { return "gzip"; } return null; }
private void verifyAjaxToken(HttpServletRequest request) throws CsrfGuardException { HttpSession session = request.getSession(true); String tokenFromSession = (String) session.getAttribute(getSessionKey()); String tokenFromRequest = request.getHeader(getTokenName()); if (tokenFromRequest == null) { /** FAIL: token is missing from the request * */ throw new CsrfGuardException("required token is missing from the request"); } else if (tokenFromRequest.indexOf(tokenFromSession) == -1) { /** FAIL: the request token does not match the session token * */ throw new CsrfGuardException("request token does not match session token"); } }
public String getClientIPAddr() { HttpServletRequest request = (HttpServletRequest) (pageContext.getRequest()); String remoteAddr = request.getRemoteAddr(); String x; if ((x = request.getHeader("X-FORWARDED-FOR")) != null) { remoteAddr = x; int idx = remoteAddr.indexOf(','); if (idx > -1) { remoteAddr = remoteAddr.substring(0, idx); } } return remoteAddr; }
/** @service the servlet service request. called once for each servlet request. */ public void service(HttpServletRequest servReq, HttpServletResponse servRes) throws IOException { String name; String value[]; String val; servRes.setHeader("AUTHORIZATION", "user fred:mypassword"); ServletOutputStream out = servRes.getOutputStream(); HttpSession session = servReq.getSession(true); session.setAttribute("timemilis", new Long(System.currentTimeMillis())); if (session.isNew()) { out.println("<p> Session is new "); } else { out.println("<p> Session is not new "); } Long l = (Long) session.getAttribute("timemilis"); out.println("<p> Session id = " + session.getId()); out.println("<p> TimeMillis = " + l); out.println("<H2>Servlet Params</H2>"); Enumeration e = servReq.getParameterNames(); while (e.hasMoreElements()) { name = (String) e.nextElement(); value = servReq.getParameterValues(name); out.println(name + " : "); for (int i = 0; i < value.length; ++i) { out.println(value[i]); } out.println("<p>"); } out.println("<H2> Request Headers : </H2>"); e = servReq.getHeaderNames(); while (e.hasMoreElements()) { name = (String) e.nextElement(); val = (String) servReq.getHeader(name); out.println("<p>" + name + " : " + val); } try { BufferedReader br = servReq.getReader(); String line = null; while (null != (line = br.readLine())) { out.println(line); } } catch (IOException ie) { ie.printStackTrace(); } session.invalidate(); }
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head>"); String title = rb.getString("requestheader.title"); out.println("<title>" + title + "</title>"); out.println("</head>"); out.println("<body bgcolor=\"white\">"); // all links relative // XXX // making these absolute till we work out the // addition of a PathInfo issue out.println("<a href=\"../reqheaders.html\">"); out.println( "<img src=\"../images/code.gif\" height=24 " + "width=24 align=right border=0 alt=\"view code\"></a>"); out.println("<a href=\"../index.html\">"); out.println( "<img src=\"../images/return.gif\" height=24 " + "width=24 align=right border=0 alt=\"return\"></a>"); out.println("<h3>" + title + "</h3>"); out.println("<table border=0>"); Enumeration e = request.getHeaderNames(); while (e.hasMoreElements()) { String headerName = (String) e.nextElement(); String headerValue = request.getHeader(headerName); out.println("<tr><td bgcolor=\"#CCCCCC\">"); out.println(HTMLFilter.filter(headerName)); out.println("</td><td>"); out.println(HTMLFilter.filter(headerValue)); out.println("</td></tr>"); } out.println("</table>"); }
/** * Constructor. * * @param rq request * @param rs response * @param servlet calling servlet instance * @throws IOException I/O exception */ public HTTPContext( final HttpServletRequest rq, final HttpServletResponse rs, final BaseXServlet servlet) throws IOException { req = rq; res = rs; params = new HTTPParams(this); method = rq.getMethod(); final StringBuilder uri = new StringBuilder(req.getRequestURL()); final String qs = req.getQueryString(); if (qs != null) uri.append('?').append(qs); log('[' + method + "] " + uri, null); // set UTF8 as default encoding (can be overwritten) res.setCharacterEncoding(UTF8); segments = decode(toSegments(req.getPathInfo())); // adopt servlet-specific credentials or use global ones final GlobalOptions mprop = context().globalopts; user = servlet.user != null ? servlet.user : mprop.get(GlobalOptions.USER); pass = servlet.pass != null ? servlet.pass : mprop.get(GlobalOptions.PASSWORD); // overwrite credentials with session-specific data final String auth = req.getHeader(AUTHORIZATION); if (auth != null) { final String[] values = auth.split(" "); if (values[0].equals(BASIC)) { final String[] cred = org.basex.util.Base64.decode(values[1]).split(":", 2); if (cred.length != 2) throw new LoginException(NOPASSWD); user = cred[0]; pass = cred[1]; } else { throw new LoginException(WHICHAUTH, values[0]); } } }
private boolean isAjaxRequest(HttpServletRequest request) { return request.getHeader("X-Requested-With") != null; }
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String userAgent = request.getHeader("user-agent"); if (userAgent.matches(".*Android.*")) { int flag = 0; try { Connection con = DBConnectionAdmin.getConnection(); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery("SELECT email,password FROM admin"); String emailmember = request.getParameter("mail"); String passwordmember = request.getParameter("pass"); while (rs.next()) { String email = rs.getString("email"); String password = rs.getString("password"); if (email.equals(emailmember) && password.equals(passwordmember)) { flag = 1; // success in login break; } } /*if(request.getParameter("remember")!=null ){ if( request.getParameter("remember").equals("yes") ){ Cookie c1 = new Cookie("email", emailmember); c1.setMaxAge(60*60*24*365); response.addCookie(c1); Cookie c2 = new Cookie("password", passwordmember); c2.setMaxAge(60*60*24*365); response.addCookie(c2); } } else{ Cookie[] cookies = request.getCookies(); if (cookies != null) { for(Cookie cookie: cookies) { if(cookie.getName().equals("email")){ cookie.setMaxAge(0); response.addCookie(cookie); } else if(cookie.getName().equals("password")){ cookie.setMaxAge(0); response.addCookie(cookie); } } } }*/ } catch (SQLException | ClassNotFoundException e1) { e1.printStackTrace(); } if (flag == 1) { response.setContentType("text/html"); PrintWriter out = response.getWriter(); String docType = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 " + "Transitional//EN\">\n"; String title = "You Signed In Successfully"; out.println( docType + "<HTML>\n" + "<HEAD>" + "<script type='text/javascript'>" + "function changeweb() {" + " AndroidFunction.Second();" + "}" + "</script>" + "<TITLE>" + title + "</TITLE></HEAD>\n" + "<BODY BGCOLOR=\"#FDF5E6\" ><H1 ALIGN=CENTER>" + title + "</H1>\n" + "<button type='button' onclick=\"changeweb()\">Click Me!</button>" + "</BODY></HTML>"); HttpSession session = request.getSession(true); String email = request.getParameter("mail"); session.setAttribute("email", email); } else { response.setContentType("text/html"); PrintWriter out = response.getWriter(); String docType = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 " + "Transitional//EN\">\n"; String title = "Wrong password or E-mail.Please try again."; out.println( docType + "<HTML>\n" + "<HEAD><TITLE>" + title + "</TITLE></HEAD>\n" + "<BODY BGCOLOR=\"#FDF5E6\" ><H1 ALIGN=CENTER>" + title + "</H1>\n</BODY></HTML>"); } } else { response.setContentType("text/html"); PrintWriter out = response.getWriter(); String docType = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 " + "Transitional//EN\">\n"; String title = "Main"; out.println( docType + "<HTML>\n" + "<HEAD><TITLE>" + title + "</TITLE>" + "<style>" + "ul" + "{" + "list-style-type:none;" + "margin:0;" + "padding:0;" + "overflow:hidden;" + "}" + "li" + "{" + "float:left;" + "}" + "a:link,a:visited" + "{" + "display:block;" + "font-weight:bold;" + "font-size:200%;" + "color:#FFFFFF;" + "background-color:#98bf21;" + "text-align:center;" + "padding:4px;" + "text-decoration:none;" + "text-transform:uppercase;" + "border: 1px solid black;" + "padding:25px" + "}" + "a:hover,a:active" + "{" + "background-color:#7A991A;" + "}" + "</style>" + "</HEAD>\n" + "<body style='background-color:black' >\n"); out.println("<ul>"); out.println("<li><a href='http://localhost:8083/TestProject/main.html'>New Event!!</a></li>"); out.println("<li><a href='post.Eventlist'>Events</a></li>"); out.println("<li><a href='post.Myeventlist'>My Events</a></li>"); out.println("<li><a href='post.Memberslist'>Members</a></li>"); out.println("<li><a href='post.Profile'>Profile</a></li>"); out.println("<li><a href='post.Help'>Help</a></li>"); out.println("</ul>"); out.println("</BODY></HTML>"); } }
@Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { User user = null; if (UsrChk.validUser(request) != null) { HttpSession session = request.getSession(); user = (User) session.getAttribute("user"); } String url = request.getParameter("ref"); Vote vote = new Vote(); Date today = new Date(); vote.setDateTime(today); String ud = request.getParameter("vote"); int li = 0; li = Integer.parseInt(request.getParameter("linkid")); Link link = LinkDB.selectLinkById(li); String ipAddress = request.getHeader("X-FORWARDED-FOR"); // set ipAddress variable if (ipAddress == null) { ipAddress = request.getRemoteAddr(); } // check the up or down variable is set if (ud == null || ud.isEmpty() || ud.length() == 0) { response.sendRedirect(url); return; } // check the link is set else if (link == null) { response.sendRedirect(url); return; } // check the vote doesn't exists for that IP if no user is set. If it's not the same void, it // is switched in the voteExists method Vote v; if (user == null) v = link.getVote(ipAddress); else v = link.getVote(user.getUserName(), ipAddress); if (v != null) { if (user != null && v.getUser() == null) { // add a user to the vote v.setUser(user); LinkDB.update(link); } else if (ud.equals("Up") == v.getUpDown()) { // delete the vote link.removeVote(v); LinkDB.update(link); } else { // update the vote v.setUpDown(ud.equals("Up")); LinkDB.update(link); } } // if everything passes, record the vote else { vote.setUpDown(ud.equals("Up")); vote.setUser(user); vote.setLink(link); vote.setIp(ipAddress); link.addVote(vote); LinkDB.update(link); } response.sendRedirect(url); }
/** * Process HTTP request. * * @param act Action. * @param req Http request. * @param res Http response. */ private void processRequest(String act, HttpServletRequest req, HttpServletResponse res) { res.setContentType("application/json"); res.setCharacterEncoding("UTF-8"); GridRestCommand cmd = command(req); if (cmd == null) { res.setStatus(HttpServletResponse.SC_BAD_REQUEST); return; } if (!authChecker.apply(req.getHeader("X-Signature"))) { res.setStatus(HttpServletResponse.SC_UNAUTHORIZED); return; } GridRestResponse cmdRes; Map<String, Object> params = parameters(req); try { GridRestRequest cmdReq = createRequest(cmd, params, req); if (log.isDebugEnabled()) log.debug("Initialized command request: " + cmdReq); cmdRes = hnd.handle(cmdReq); if (cmdRes == null) throw new IllegalStateException("Received null result from handler: " + hnd); byte[] sesTok = cmdRes.sessionTokenBytes(); if (sesTok != null) cmdRes.setSessionToken(U.byteArray2HexString(sesTok)); res.setStatus(HttpServletResponse.SC_OK); } catch (Exception e) { res.setStatus(HttpServletResponse.SC_OK); U.error(log, "Failed to process HTTP request [action=" + act + ", req=" + req + ']', e); cmdRes = new GridRestResponse(STATUS_FAILED, e.getMessage()); } catch (Throwable e) { U.error(log, "Failed to process HTTP request [action=" + act + ", req=" + req + ']', e); throw e; } JsonConfig cfg = new GridJettyJsonConfig(); // Workaround for not needed transformation of string into JSON object. if (cmdRes.getResponse() instanceof String) cfg.registerJsonValueProcessor(cmdRes.getClass(), "response", SKIP_STR_VAL_PROC); if (cmdRes.getResponse() instanceof GridClientTaskResultBean && ((GridClientTaskResultBean) cmdRes.getResponse()).getResult() instanceof String) cfg.registerJsonValueProcessor(cmdRes.getResponse().getClass(), "result", SKIP_STR_VAL_PROC); JSON json; try { json = JSONSerializer.toJSON(cmdRes, cfg); } catch (JSONException e) { U.error(log, "Failed to convert response to JSON: " + cmdRes, e); json = JSONSerializer.toJSON(new GridRestResponse(STATUS_FAILED, e.getMessage()), cfg); } try { if (log.isDebugEnabled()) log.debug("Parsed command response into JSON object: " + json.toString(2)); res.getWriter().write(json.toString()); if (log.isDebugEnabled()) log.debug( "Processed HTTP request [action=" + act + ", jsonRes=" + cmdRes + ", req=" + req + ']'); } catch (IOException e) { U.error(log, "Failed to send HTTP response: " + json.toString(2), e); } }
@Override public String getRequestHeader(final Header header) { return req.getHeader(header.code); }
public Writer getErrorReport( Writer to, final HttpServletRequest request, CharTransformer escape) throws IOException { final Writer logMsg = new StringWriter(); final Writer tee = new org.mmbase.util.ChainedWriter(to, logMsg); Writer msg = tee; LinkedList<Throwable> stack = getStack(); String ticket = new Date().toString(); Map<String, String> props; try { props = org.mmbase.util.ApplicationContextReader.getProperties("mmbase_errorpage"); } catch (javax.naming.NamingException ne) { props = Collections.emptyMap(); log.info(ne); } if (request != null) { { msg.append("Headers\n----------\n"); // request properties for (Object name : Collections.list(request.getHeaderNames())) { msg.append( escape.transform( name + ": " + escape.transform(request.getHeader((String) name)) + "\n")); } } { msg.append("\nAttributes\n----------\n"); Pattern p = requestIgnore; if (p == null && props.get("request_ignore") != null) { p = Pattern.compile(props.get("request_ignore")); } for (Object name : Collections.list(request.getAttributeNames())) { if (p == null || !p.matcher((String) name).matches()) { msg.append( escape.transform(name + ": " + request.getAttribute((String) name) + "\n")); } } } if (Boolean.TRUE.equals(showSession) || (showSession == null && !"false".equals(props.get("show_session")))) { HttpSession ses = request.getSession(false); if (ses != null) { msg.append("\nSession\n----------\n"); Pattern p = sessionIgnore; if (p == null && props.get("session_ignore") != null) { p = Pattern.compile(props.get("session_ignore")); } for (Object name : Collections.list(ses.getAttributeNames())) { if (p == null || !p.matcher((String) name).matches()) { msg.append(escape.transform(name + ": " + ses.getAttribute((String) name) + "\n")); } } } } } msg.append("\n"); msg.append("Misc. properties\n----------\n"); if (request != null) { msg.append("method: ").append(escape.transform(request.getMethod())).append("\n"); msg.append("querystring: ").append(escape.transform(request.getQueryString())).append("\n"); msg.append("requesturl: ") .append(escape.transform(request.getRequestURL().toString())) .append("\n"); } if (Boolean.TRUE.equals(showMMBaseVersion) || (showMMBaseVersion == null && !"false".equals(props.get("show_mmbase_version")))) { msg.append("mmbase version: ").append(org.mmbase.Version.get()).append("\n"); } msg.append("status: ").append("").append(String.valueOf(status)).append("\n\n"); if (request != null) { msg.append("Parameters\n----------\n"); // request parameters Enumeration en = request.getParameterNames(); while (en.hasMoreElements()) { String name = (String) en.nextElement(); msg.append(name) .append(": ") .append(escape.transform(request.getParameter(name))) .append("\n"); } } msg.append("\nException ") .append(ticket) .append("\n----------\n\n") .append( exception != null ? (escape.transform(exception.getClass().getName())) : "NO EXCEPTION") .append(": "); int wroteCauses = 0; while (!stack.isEmpty()) { Throwable t = stack.removeFirst(); // add stack stacktraces if (t != null) { if (stack.isEmpty()) { // write last message always msg = tee; } String message = t.getMessage(); if (msg != tee) { to.append("\n=== skipped(see log) : ") .append(escape.transform(t.getClass().getName())) .append(": ") .append(message) .append("\n"); } msg.append("\n\n").append(escape.transform(t.getClass().getName() + ": " + message)); StackTraceElement[] stackTrace = t.getStackTrace(); for (StackTraceElement e : stackTrace) { msg.append("\n at ").append(escape.transform(e.toString())); } if (!stack.isEmpty()) { msg.append("\n-------caused:\n"); } wroteCauses++; if (wroteCauses >= MAX_CAUSES) { msg = logMsg; } } } // write errors to log if (status == 500) { try { if (props.get("to") != null && props.get("to").length() > 0) { javax.naming.Context initCtx = new javax.naming.InitialContext(); javax.naming.Context envCtx = (javax.naming.Context) initCtx.lookup("java:comp/env"); Object mailSession = envCtx.lookup("mail/Session"); Class sessionClass = Class.forName("javax.mail.Session"); Class recipientTypeClass = Class.forName("javax.mail.Message$RecipientType"); Class messageClass = Class.forName("javax.mail.internet.MimeMessage"); Object mail = messageClass.getConstructor(sessionClass).newInstance(mailSession); messageClass .getMethod("addRecipients", recipientTypeClass, String.class) .invoke(mail, recipientTypeClass.getDeclaredField("TO").get(null), props.get("to")); messageClass.getMethod("setSubject", String.class).invoke(mail, ticket); mail.getClass().getMethod("setText", String.class).invoke(mail, logMsg.toString()); Class.forName("javax.mail.Transport") .getMethod("send", Class.forName("javax.mail.Message")) .invoke(null, mail); tee.append("\nmailed to (").append(String.valueOf(props)).append(")"); } } catch (Exception nnfe) { tee.append("\nnot mailed (").append(String.valueOf(nnfe)).append(")"); if (log.isDebugEnabled()) { log.debug(nnfe.getMessage(), nnfe); } } log.error("TICKET " + ticket + ":\n" + logMsg); } return to; }
public void getEnv(VariableTable vt) { Enumeration e = null; HttpServletRequest request = (HttpServletRequest) (pageContext.getRequest()); HttpSession session = request.getSession(false); String db_charset = "gb2312"; String url_charset = null; vt.remove("SESSION.LOGINID"); vt.remove("SESSION.LOGINNAME"); vt.remove("SESSION.LOGINROLE"); if (vt.exists("WEBCHART.DB_CHARSET")) { db_charset = vt.getString("WEBCHART.DB_CHARSET"); } if (vt.exists("WEBCHART.URL_CHARSET")) { url_charset = vt.getString("WEBCHART.URL_CHARSET"); } if (session != null) { e = session.getAttributeNames(); while (e.hasMoreElements()) { String name = (String) e.nextElement(); Object value = session.getAttribute(name); vt.add(name, java.sql.Types.VARCHAR); if (value != null) vt.setValue(name, value.toString()); } vt.add("SESSION.ID", java.sql.Types.VARCHAR); vt.setValue("SESSION.ID", session.getId()); vt.add("SESSION.CREATE", java.sql.Types.VARCHAR); vt.setValue( "SESSION.CREATE", DBOperation.toString( new java.util.Date(session.getCreationTime()), "yyyy-MM-dd HH:mm:ss")); vt.add("SESSION.ACCESS", java.sql.Types.VARCHAR); vt.setValue( "SESSION.ACCESS", DBOperation.toString( new java.util.Date(session.getLastAccessedTime()), "yyyy-MM-dd HH:mm:ss")); } e = request.getParameterNames(); while (e.hasMoreElements()) { String name = (String) e.nextElement(); String value = request.getParameter(name); ; String par_values[] = request.getParameterValues(name); name = name.toUpperCase(); if (name.equalsIgnoreCase("WEBCHART.SECURITY") || name.equalsIgnoreCase("WEBCHART.DEFAULTACCESS") || name.equalsIgnoreCase("WEBCHART.ALLOW") || name.equalsIgnoreCase("WEBCHART.DENY") || name.equalsIgnoreCase("WEBCHART.IPSECURITY") || name.equalsIgnoreCase("WEBCHART.IPACCESS") || name.equalsIgnoreCase("WEBCHART.IPALLOW") || name.equalsIgnoreCase("WEBCHART.IPDENY") || name.equalsIgnoreCase("WEBCHART.XSLDOC") || name.equalsIgnoreCase("WEBCHART.IMAGEONLY") || name.equalsIgnoreCase("WEBCHART.XMLDATA") || name.equalsIgnoreCase("WEBCHART.LOGSQL") || name.equalsIgnoreCase("WEBCHART.DATATYPE") || name.equalsIgnoreCase("WEBCHART.URLS") || name.equalsIgnoreCase("WEBCHART.TOPURLS") || name.equalsIgnoreCase("WEBCHART.TOPCURR") || name.equalsIgnoreCase("WEBCHART.LEFTURLS") || name.equalsIgnoreCase("WEBCHART.LEFTCURR") || name.equalsIgnoreCase("WEBCHART.INPUTS") || name.equalsIgnoreCase("WEBCHART.CACHE") || name.equalsIgnoreCase("WEBCHART.DATA") || name.equalsIgnoreCase("WEBCHART.CSS") || name.equalsIgnoreCase("WEBCHART.RELOAD") || name.equalsIgnoreCase("WEBCHART.EXPIRE") || name.equalsIgnoreCase("WEBCHART.DMLKEY") || name.equalsIgnoreCase("WEBCHART.ENGINE") || name.equalsIgnoreCase("WEBCHART.EXCELURL") || name.equalsIgnoreCase("WEBCHART.DBID") || name.equalsIgnoreCase("WEBCHART.DBIDSEED") || name.equalsIgnoreCase("WEBCHART.SECUREFIELDS") || name.equalsIgnoreCase("WEBCHART.KEEP_CACHE_IMAGE") || name.equalsIgnoreCase("WEBCHART.KEEP_CACHE_TIME") || name.startsWith("WEBCHART.SECUREMEMO") || name.startsWith("WEBCHART.QUERY_") || name.startsWith("WEBCHART.HEADHTML_") || name.startsWith("WEBCHART.DATAHTML_") || name.startsWith("WEBCHART.VARLIST_") || name.startsWith("WEBCHART.FORALL_") || name.startsWith("WEBCHART.XMLDATA_") || name.startsWith("WEBCHART.TABLE_") || name.startsWith("WEBCHART.COLUMN_") || name.startsWith("SESSION.")) continue; if (name.startsWith("WEBCHART.") && !name.equals("WEBCHART.DOCTYPE")) continue; vt.add(name, java.sql.Types.VARCHAR); if (par_values != null && par_values.length > 1) { StringBuffer temp = new StringBuffer(); for (int i = 0; i < par_values.length; i++) { if (par_values[i] != null && par_values[i].trim().length() > 0) { if (temp.length() > 0) { temp.append(","); } temp.append(par_values[i]); } } value = temp.toString(); } if (url_charset != null) { try { value = new String(value.getBytes(url_charset), db_charset); } catch (java.io.UnsupportedEncodingException uee) { } ; } vt.setValue(name, value); } vt.add("REQUEST.REMOTEADDR", java.sql.Types.VARCHAR); vt.setValue("REQUEST.REMOTEADDR", getClientIPAddr()); vt.add("REQUEST.REMOTEHOST", java.sql.Types.VARCHAR); vt.setValue("REQUEST.REMOTEHOST", request.getRemoteAddr()); vt.add("REQUEST.REFERER", java.sql.Types.VARCHAR); vt.setValue("REQUEST.REFERER", request.getHeader("Referer")); vt.add("REQUEST.QUERYSTRING", java.sql.Types.VARCHAR); vt.setValue("REQUEST.QUERYSTRING", request.getQueryString()); }
@Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { // create the workbook, its worksheet, and its title row Workbook workbook = new HSSFWorkbook(); Sheet sheet = workbook.createSheet("User table"); Row row = sheet.createRow(0); row.createCell(0).setCellValue("The User table"); // create the header row row = sheet.createRow(2); row.createCell(0).setCellValue("UserID"); row.createCell(1).setCellValue("LastName"); row.createCell(2).setCellValue("FirstName"); row.createCell(3).setCellValue("Email"); try { // read database rows ConnectionPool pool = ConnectionPool.getInstance(); Connection connection = pool.getConnection(); Statement statement = connection.createStatement(); String query = "SELECT * FROM User ORDER BY UserID"; ResultSet results = statement.executeQuery(query); // create spreadsheet rows int i = 3; while (results.next()) { row = sheet.createRow(i); row.createCell(0).setCellValue(results.getInt("UserID")); row.createCell(1).setCellValue(results.getString("LastName")); row.createCell(2).setCellValue(results.getString("FirstName")); row.createCell(3).setCellValue(results.getString("Email")); i++; } results.close(); statement.close(); connection.close(); } catch (SQLException e) { this.log(e.toString()); } // set response object headers response.setHeader("content-disposition", "attachment; filename=users.xls"); response.setHeader("cache-control", "no-cache"); // get the output stream String encodingString = request.getHeader("accept-encoding"); OutputStream out; if (encodingString != null && encodingString.contains("gzip")) { out = new GZIPOutputStream(response.getOutputStream()); response.setHeader("content-encoding", "gzip"); // System.out.println("User table encoded with gzip"); } else { out = response.getOutputStream(); // System.out.println("User table not encoded with gzip"); } // send the workbook to the browser workbook.write(out); out.close(); }
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType(XML_RESPONSE_HEADER); // Talkback happens in XML form. response.setCharacterEncoding("UTF-8"); // Unicode++ request.setCharacterEncoding("UTF-8"); PrintWriter out = null; // The talkback buffer. // handle startrecord Integer startRecord = 0; if (!(request.getParameter("startRecord") == null)) { try { startRecord = Integer.parseInt(request.getParameter("startRecord")) - 1; } catch (NumberFormatException e) { startRecord = 0; } } // maximumrecords Integer maximumRecords = Integer.parseInt(this.config.getProperty("default_maximumRecords")); if (!(request.getParameter("maximumRecords") == null)) { maximumRecords = Integer.parseInt(request.getParameter("maximumRecords")); } // operation String operation = request.getParameter("operation"); // x_collection String x_collection = request.getParameter("x-collection"); if (x_collection == null) x_collection = this.config.getProperty("default_x_collection"); if (x_collection == null) operation = null; // sortkeys String sortKeys = request.getParameter("sortKeys"); // sortorder String sortOrder = request.getParameter("sortOrder"); // recordschema String recordSchema = request.getParameter("recordSchema"); if (recordSchema == null) recordSchema = "dc"; if (recordSchema.equalsIgnoreCase("dcx")) { recordSchema = "dcx"; } if (recordSchema.equalsIgnoreCase("solr")) { recordSchema = "solr"; } // query request String query = request.getParameter("query"); String q = request.getParameter("q"); // who is requestor ? String remote_ip = request.getHeader("X-FORWARDED-FOR"); if (remote_ip == null) { remote_ip = request.getRemoteAddr().trim(); } else { remote_ip = request.getHeader("X-FORWARDED-FOR"); } // handle debug Boolean debug = Boolean.parseBoolean(request.getParameter("debug")); if (!debug) { out = new PrintWriter(new OutputStreamWriter(response.getOutputStream(), "UTF8"), true); } // handle query if ((query == null) && (q != null)) { query = q; } else { if ((query != null) && (q == null)) { q = query; } else { operation = null; } } // handle operation if (operation == null) { if (query != null) { operation = "searchRetrieve"; } else { operation = "explain"; } } // searchRetrieve if (operation.equalsIgnoreCase("searchRetrieve")) { if (query == null) { operation = "explain"; log.debug(operation + ":" + query); } } // start talking back. String[] sq = {""}; String solrquery = ""; // facet String facet = null; List<FacetField> fct = null; if (request.getParameter("facet") != null) { facet = request.getParameter("facet"); log.debug("facet : " + facet); } if (operation == null) { operation = "searchretrieve"; } else { // explain response if (operation.equalsIgnoreCase("explain")) { log.debug("operation = explain"); out.write("<srw:explainResponse xmlns:srw=\"http://www.loc.gov/zing/srw/\">"); out.write("</srw:explainResponse>"); } else { // DEBUG routine operation = "searchretrieve"; String triplequery = null; if (query.matches(".*?\\[.+?\\].*?")) { // New symantic syntax triplequery = symantic_query(query); query = query.split("\\[")[0] + " " + triplequery; log.fatal(triplequery); solrquery = CQLtoLucene.translate(query, log, config); } else { solrquery = CQLtoLucene.translate(query, log, config); } log.debug(solrquery); if (debug == true) { response.setContentType(HTML_RESPONSE_HEADER); out = new PrintWriter(new OutputStreamWriter(response.getOutputStream(), "UTF8"), true); out.write("<html><body>\n\n"); out.write("'" + remote_ip + "'<br>\n"); out.write("<form action='http://www.kbresearch.nl/kbSRU'>"); out.write("<input type=text name=q value='" + query + "' size=120>"); out.write("<input type=hidden name=debug value=True>"); out.write("<input type=submit>"); out.write("<table border=1><tr><td>"); out.write("q</td><td>" + query + "</td></tr><tr>"); out.write("<td>query out</td><td>" + URLDecoder.decode(solrquery) + "</td></tr>"); out.write( "<tr><td>SOLR_URL</td><td> <a href='" + this.config.getProperty( "collection." + x_collection.toLowerCase() + ".solr_baseurl") + "/?q=" + solrquery + "'>" + this.config.getProperty( "collection." + x_collection.toLowerCase() + ".solr_baseurl") + "/select/?q=" + solrquery + "</a><br>" + this.config.getProperty("solr_url") + solrquery + "</td></tr>"); out.write( "<b>SOLR_QUERY</b> : <BR> <iframe width=900 height=400 src='" + this.config.getProperty( "collection." + x_collection.toLowerCase() + ".solr_baseurl") + "/../?q=" + solrquery + "'></iframe><BR>"); out.write( "<b>SRU_QUERY</b> : <BR> <a href=" + this.config.getProperty("baseurl") + "?q=" + query + "'>" + this.config.getProperty("baseurl") + "?q=" + query + "</a><br><iframe width=901 height=400 src='http://www.kbresearch.nl/kbSRU/?q=" + query + "'></iframe><BR>"); out.write( "<br><b>JSRU_QUERY</b> : <BR><a href='http://jsru.kb.nl/sru/?query=" + query + "&x-collection=" + x_collection + "'>http://jsru.kb.nl/sru/?query=" + query + "&x-collection=GGC</a><br><iframe width=900 height=400 src='http://jsru.kb.nl/sru/?query=" + query + "&x-collection=GGC'></iframe>"); } else { // XML SearchRetrieve response String url = this.config.getProperty("collection." + x_collection.toLowerCase() + ".solr_baseurl"); String buffer = ""; CommonsHttpSolrServer server = null; server = new CommonsHttpSolrServer(url); log.fatal("URSING " + url); server.setParser(new XMLResponseParser()); int numfound = 0; try { SolrQuery do_query = new SolrQuery(); do_query.setQuery(solrquery); do_query.setRows(maximumRecords); do_query.setStart(startRecord); if ((sortKeys != null) && (sortKeys.length() > 1)) { if (sortOrder != null) { if (sortOrder.equals("asc")) { do_query.setSortField(sortKeys, SolrQuery.ORDER.asc); } if (sortOrder.equals("desc")) { do_query.setSortField(sortKeys, SolrQuery.ORDER.desc); } } else { for (String str : sortKeys.trim().split(",")) { str = str.trim(); if (str.length() > 1) { if (str.equals("date")) { do_query.setSortField("date_date", SolrQuery.ORDER.desc); log.debug("SORTORDERDEBUG | DATE! " + str + " | "); break; } else { do_query.setSortField(str + "_str", SolrQuery.ORDER.asc); log.debug("SORTORDERDEBUG | " + str + " | "); break; } } } } } if (facet != null) { if (facet.indexOf(",") > 1) { for (String str : facet.split(",")) { if (str.indexOf("date") > 1) { do_query.addFacetField(str); } else { do_query.addFacetField(str); } // do_query.setParam("facet.method", "enum"); } // q.setFacetSort(false); } else { do_query.addFacetField(facet); } do_query.setFacet(true); do_query.setFacetMinCount(1); do_query.setFacetLimit(-1); } log.fatal(solrquery); QueryResponse rsp = null; boolean do_err = false; boolean do_sugg = false; SolrDocumentList sdl = null; String diag = ""; StringBuffer suggest = new StringBuffer(""); String content = "1"; SolrQuery spellq = do_query; try { rsp = server.query(do_query); } catch (SolrServerException e) { String header = this.SRW_HEADER.replaceAll("\\$numberOfRecords", "0"); out.write(header); diag = this.SRW_DIAG.replaceAll("\\$error", e.getMessage()); do_err = true; rsp = null; } log.fatal("query done.."); if (!(do_err)) { // XML dc response SolrDocumentList docs = rsp.getResults(); numfound = (int) docs.getNumFound(); int count = startRecord; String header = this.SRW_HEADER.replaceAll("\\$numberOfRecords", Integer.toString(numfound)); out.write(header); out.write("<srw:records>"); Iterator<SolrDocument> iter = rsp.getResults().iterator(); while (iter.hasNext()) { count += 1; if (recordSchema.equalsIgnoreCase("dc")) { SolrDocument resultDoc = iter.next(); content = (String) resultDoc.getFieldValue("id"); out.write("<srw:record>"); out.write("<srw:recordPacking>xml</srw:recordPacking>"); out.write("<srw:recordSchema>info:srw/schema/1/dc-v1.1</srw:recordSchema>"); out.write( "<srw:recordData xmlns:srw_dc=\"info:srw/schema/1/dc-v1.1\" xmlns:mods=\"http://www.loc.gov/mods\" xmlns:dcterms=\"http://purl.org/dc/terms/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:dcx=\"http://krait.kb.nl/coop/tel/handbook/telterms.html\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:marcrel=\"http://www.loc.gov/loc.terms/relators/OTH\" xmlns:facets=\"info:srw/extension/4/facets\" >"); StringBuffer result = new StringBuffer(""); construct_lucene_dc(result, resultDoc); out.write(result.toString()); out.write("</srw:recordData>"); out.write( "<srw:recordPosition>" + Integer.toString(count) + "</srw:recordPosition>"); out.write("</srw:record>"); } if (recordSchema.equalsIgnoreCase("solr")) { SolrDocument resultDoc = iter.next(); content = (String) resultDoc.getFieldValue("id"); out.write("<srw:record>"); out.write("<srw:recordPacking>xml</srw:recordPacking>"); out.write("<srw:recordSchema>info:srw/schema/1/solr</srw:recordSchema>"); out.write("<srw:recordData xmlns:expand=\"http://www.kbresearch.nl/expand\">"); StringBuffer result = new StringBuffer(""); construct_lucene_solr(result, resultDoc); out.write(result.toString()); out.write("</srw:recordData>"); out.write( "<srw:recordPosition>" + Integer.toString(count) + "</srw:recordPosition>"); out.write("</srw:record>"); } if (recordSchema.equalsIgnoreCase("dcx")) { // XML dcx response out.write("<srw:record>"); out.write("<srw:recordPacking>xml</srw:recordPacking>"); out.write("<srw:recordSchema>info:srw/schema/1/dc-v1.1</srw:recordSchema>"); out.write( "<srw:recordData><srw_dc:dc xmlns:srw_dc=\"info:srw/schema/1/dc-v1.1\" xmlns:mods=\"http://www.loc.gov/mods\" xmlns:dcterms=\"http://purl.org/dc/terms/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:dcx=\"http://krait.kb.nl/coop/tel/handbook/telterms.html\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:marcrel=\"http://www.loc.gov/marc.relators/\" xmlns:expand=\"http://www.kbresearch.nl/expand\" xmlns:skos=\"http://www.w3.org/2004/02/skos/core#\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" >"); SolrDocument resultDoc = iter.next(); content = (String) resultDoc.getFieldValue("id"); String dcx_data = helpers.getOAIdcx( "http://services.kb.nl/mdo/oai?verb=GetRecord&identifier=" + content, log); if (x_collection.equalsIgnoreCase("ggc-thes")) { dcx_data = helpers.getOAIdcx( "http://serviceso.kb.nl/mdo/oai?verb=GetRecord&identifier=" + content, log); } if (!(dcx_data.length() == 0)) { out.write(dcx_data); } else { // Should not do this!! out.write("<srw:record>"); out.write("<srw:recordPacking>xml</srw:recordPacking>"); out.write("<srw:recordSchema>info:srw/schema/1/dc-v1.1</srw:recordSchema>"); out.write( "<srw:recordData xmlns:srw_dc=\"info:srw/schema/1/dc-v1.1\" xmlns:mods=\"http://www.loc.gov/mods\" xmlns:dcterms=\"http://purl.org/dc/terms/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:dcx=\"http://krait.kb.nl/coop/tel/handbook/telterms.html\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:marcrel=\"http://www.loc.gov/loc.terms/relators/OTH\" >"); StringBuffer result = new StringBuffer(""); construct_lucene_dc(result, resultDoc); out.write(result.toString()); out.write("</srw:recordData>"); out.write( "<srw:recordPosition>" + Integer.toString(count) + "</srw:recordPosition>"); out.write("</srw:record>"); } out.write("</srw_dc:dc>"); StringBuffer expand_data; boolean expand = false; if (content.startsWith("GGC-THES:AC:")) { String tmp_content = ""; tmp_content = content.replaceFirst("GGC-THES:AC:", ""); log.fatal("calling get"); expand_data = new StringBuffer( helpers.getExpand( "http://www.kbresearch.nl/general/lod_new/get/" + tmp_content + "?format=rdf", log)); log.fatal("get finini"); if (expand_data.toString().length() > 4) { out.write( "<srw_dc:expand xmlns:srw_dc=\"info:srw/schema/1/dc-v1.1\" xmlns:expand=\"http://www.kbresearch.nl/expand\" xmlns:skos=\"http://www.w3.org/2004/02/skos/core#\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" >"); out.write(expand_data.toString()); expand = true; } } else { expand_data = new StringBuffer( helpers.getExpand( "http://www.kbresearch.nl/ANP.cgi?q=" + content, log)); if (expand_data.toString().length() > 0) { if (!expand) { out.write( "<srw_dc:expand xmlns:srw_dc=\"info:srw/schema/1/dc-v1.1\" xmlns:expand=\"http://www.kbresearch.nl/expand\" xmlns:skos=\"http://www.w3.org/2004/02/skos/core#\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\" >"); expand = true; } out.write(expand_data.toString()); } } if (expand) { out.write("</srw_dc:expand>"); } out.write("</srw:recordData>"); out.write( "<srw:recordPosition>" + Integer.toString(count) + "</srw:recordPosition>"); out.write("</srw:record>"); } } } if ((do_err) || (numfound == 0)) { log.fatal("I haz suggestions"); try { spellq.setParam("spellcheck", true); spellq.setQueryType("/spell"); server = new CommonsHttpSolrServer(url); rsp = server.query(spellq); sdl = rsp.getResults(); SpellCheckResponse spell; spell = rsp.getSpellCheckResponse(); List<SpellCheckResponse.Suggestion> suggestions = spell.getSuggestions(); if (suggestions.isEmpty() == false) { suggest.append("<srw:extraResponseData>"); suggest.append("<suggestions>"); for (SpellCheckResponse.Suggestion sugg : suggestions) { suggest.append("<suggestionfor>" + sugg.getToken() + "</suggestionfor>"); for (String item : sugg.getSuggestions()) { suggest.append("<suggestion>" + item + "</suggestion>"); } suggest.append("</suggestions>"); suggest.append("</srw:extraResponseData>"); } do_sugg = true; } } catch (Exception e) { rsp = null; // log.fatal(e.toString()); } ; } ; if (!do_err) { if (facet != null) { try { fct = rsp.getFacetFields(); out.write("<srw:facets>"); for (String str : facet.split(",")) { out.write("<srw:facet>"); out.write("<srw:facetType>"); out.write(str); out.write("</srw:facetType>"); for (FacetField f : fct) { log.debug(f.getName()); // if (f.getName().equals(str+"_str") || (f.getName().equals(str+"_date")) ) { List<FacetField.Count> facetEnties = f.getValues(); for (FacetField.Count fcount : facetEnties) { out.write("<srw:facetValue>"); out.write("<srw:valueString>"); out.write(helpers.xmlEncode(fcount.getName())); out.write("</srw:valueString>"); out.write("<srw:count>"); out.write(Double.toString(fcount.getCount())); out.write("</srw:count>"); out.write("</srw:facetValue>"); // } } } out.write("</srw:facet>"); } out.write("</srw:facets>"); startRecord += 1; } catch (Exception e) { } // log.fatal(e.toString()); } } } else { out.write(diag); } out.write("</srw:records>"); // SearchRetrieve response footer String footer = this.SRW_FOOTER.replaceAll("\\$query", helpers.xmlEncode(query)); footer = footer.replaceAll("\\$startRecord", (startRecord).toString()); footer = footer.replaceAll("\\$maximumRecords", maximumRecords.toString()); footer = footer.replaceAll("\\$recordSchema", recordSchema); if (do_sugg) { out.write(suggest.toString()); } out.write(footer); } catch (MalformedURLException e) { out.write(e.getMessage()); } catch (IOException e) { out.write("TO ERR is Human"); } } } } out.close(); }
/** Common request handling. */ public void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resetState(); boolean success = false; HttpSession session = req.getSession(false); try { this.req = req; this.resp = resp; if (log.isDebug()) { logParams(); } resp.setContentType("text/html"); if (!mayPageBeCached()) { resp.setHeader("pragma", "no-cache"); resp.setHeader("Cache-control", "no-cache"); } reqURL = new URL(UrlUtil.getRequestURL(req)); clientAddr = getLocalIPAddr(); // check that current user has permission to run this servlet if (!isServletAllowed(myServletDescr())) { displayWarningInLieuOfPage("You are not authorized to use " + myServletDescr().heading); return; } // check whether servlet is disabled String reason = ServletUtil.servletDisabledReason(myServletDescr().getServletName()); if (reason != null) { displayWarningInLieuOfPage("This function is disabled. " + reason); return; } if (session != null) { session.setAttribute(SESSION_KEY_RUNNING_SERVLET, getHeading()); String reqHost = req.getRemoteHost(); String forw = req.getHeader(HttpFields.__XForwardedFor); if (!StringUtil.isNullString(forw)) { reqHost += " (proxies for " + forw + ")"; } session.setAttribute(SESSION_KEY_REQUEST_HOST, reqHost); } lockssHandleRequest(); success = (errMsg == null); } catch (ServletException e) { log.error("Servlet threw", e); throw e; } catch (IOException e) { log.error("Servlet threw", e); throw e; } catch (RuntimeException e) { log.error("Servlet threw", e); throw e; } finally { if (session != null) { session.setAttribute(SESSION_KEY_RUNNING_SERVLET, null); session.setAttribute(LockssFormAuthenticator.__J_AUTH_ACTIVITY, TimeBase.nowMs()); } if ("please".equalsIgnoreCase(req.getHeader("X-Lockss-Result"))) { log.debug3("X-Lockss-Result: " + (success ? "Ok" : "Fail")); resp.setHeader("X-Lockss-Result", success ? "Ok" : "Fail"); } resetMyLocals(); resetLocals(); } }
/* * Procesamiento de peticiones GET y POST * @param request * @param response * @throws ServletException * @throws IOException */ public final void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Comprobar si es un GET if (request.getMethod().equalsIgnoreCase("GET")) { return; } // Se trata de un POST // La respuesta es JSON response.setContentType("application/json; charset=UTF-8"); // Crear los filtros definidos para todos los servicios es.tid.frawa.service.servlet.Filter[] filters = new es.tid.frawa.service.servlet.Filter[0]; PrintWriter output = null; StringBuffer input = null; String action = ""; try { // Crea una sesión si no existe (esta opción está marcada en el modelo de servicios) request.getSession(true); // Invocar el método startService() de los filtros for (int i = 0; i < filters.length; i++) { filters[i].startService(request, response); } // Invocar el método frawaService() de la clase derivada (si está implementado) if (!frawaService(request, response)) { // Ha retornado false, por tanto abortamos el procesamiento del servicio return; } // Mensaje por defecto para los filtros que no necesitan el texto JSON StringBuffer soapStr = new StringBuffer(""); // Leer el mensaje JSON if (request.getParameter("JSONAction") != null && request.getParameter("JSONAction").length() > 0) { action = request.getParameter("JSONAction"); String tmp = request.getParameter("JSON"); if (tmp == null || tmp.length() == 0) { throw new Exception( getClass().getName() + ".service() JSONAction viene en la URL pero no viene el parámetro JSON con los datos"); } input = new StringBuffer(tmp); } else { action = request.getHeader("JSONAction"); if (action == null || action.length() == 0) { throw new Exception( getClass().getName() + ".service() La cabecera HTTP JSONAction no esta definida"); } // new es.tid.frawa.common.TdiFrawaTraceListener().trace(getClass().getName()+".service() // Leyendo mensaje JSON"); BufferedReader input_r = new BufferedReader(request.getReader()); input = new StringBuffer(); String line = input_r.readLine(); while (line != null) { input.append(line); line = input_r.readLine(); } } // Invocar el método beforeParse() de los filtros for (int i = 0; i < filters.length; i++) { filters[i].beforeParse(request, response, input.toString()); } // // Invocar al servicio adecuado en función del header JSONAction // if (action.equals("http://www.qualipso.org/advdoc/ws/storage/CreateFolder")) { // SERVICIO: CreateFolder // Parámetro de entrada al servicio CreateFolder_req inbean = new CreateFolder_req(); inbean.fromJSON(input.toString()); // Invocar el método beforeService() de los filtros for (int i = 0; i < filters.length; i++) { filters[i].beforeService(request, response, inbean, "QualiPSoStorage", action); } // Parámetro de salida del servicio CreateFolder_resp outbean = new CreateFolder_resp(); // Crear un objeto que implementa la operación CreateFolderService serviceImplementation = new CreateFolderService(); // Invocar la implementación de la operación Throwable applicationException = serviceImplementation.executeImpl(this, request, response, inbean, outbean); // Si ha ocurrido una excepción, enviarla al cliente if (applicationException != null) { // Traza // new es.tid.frawa.common.TdiFrawaTraceListener().trace(applicationException); new es.tid.frawa.common.TdiFrawaTraceListener().trace(applicationException); output = response.getWriter(); if (applicationException instanceof TdiServiceException) { sendError(output, (TdiServiceException) applicationException); } else { String inputBean = tdi.text.StringUtil.escapeXML(inbean.toString(), false); String rc = "\n"; sendError( output, new TdiServiceException( 1, "." + rc + "[Operation: CreateFolder]" + rc + inputBean + rc + ".", applicationException.getClass().getName() + ":" + applicationException.getMessage())); } return; } // Invocar el método afterService() de los filtros for (int i = 0; i < filters.length; i++) { filters[i].afterService(request, response, outbean, "QualiPSoStorage", action); } // Respuesta output = response.getWriter(); // Bean de salida String output_str = outbean.toJSON(false); // Invocar el método afterParse() de los filtros for (int i = 0; i < filters.length; i++) { filters[i].afterParse(request, response, output_str.toString()); } // Enviar la respuesta output.println(output_str); // Invocar el método endService() de los filtros for (int i = 0; i < filters.length; i++) { filters[i].endService(request, response); } } else if (action.equals("http://www.qualipso.org/advdoc/ws/storage/GetFiles")) { // SERVICIO: GetFiles // Parámetro de entrada al servicio GetFiles_req inbean = new GetFiles_req(); inbean.fromJSON(input.toString()); // Invocar el método beforeService() de los filtros for (int i = 0; i < filters.length; i++) { filters[i].beforeService(request, response, inbean, "QualiPSoStorage", action); } // Parámetro de salida del servicio GetFiles_resp outbean = new GetFiles_resp(); // Crear un objeto que implementa la operación GetFilesService serviceImplementation = new GetFilesService(); // Invocar la implementación de la operación Throwable applicationException = serviceImplementation.executeImpl(this, request, response, inbean, outbean); // Si ha ocurrido una excepción, enviarla al cliente if (applicationException != null) { // Traza // new es.tid.frawa.common.TdiFrawaTraceListener().trace(applicationException); new es.tid.frawa.common.TdiFrawaTraceListener().trace(applicationException); output = response.getWriter(); if (applicationException instanceof TdiServiceException) { sendError(output, (TdiServiceException) applicationException); } else { String inputBean = tdi.text.StringUtil.escapeXML(inbean.toString(), false); String rc = "\n"; sendError( output, new TdiServiceException( 1, "." + rc + "[Operation: GetFiles]" + rc + inputBean + rc + ".", applicationException.getClass().getName() + ":" + applicationException.getMessage())); } return; } // Invocar el método afterService() de los filtros for (int i = 0; i < filters.length; i++) { filters[i].afterService(request, response, outbean, "QualiPSoStorage", action); } // Respuesta output = response.getWriter(); // Bean de salida String output_str = outbean.toJSON(false); // Invocar el método afterParse() de los filtros for (int i = 0; i < filters.length; i++) { filters[i].afterParse(request, response, output_str.toString()); } // Enviar la respuesta output.println(output_str); // Invocar el método endService() de los filtros for (int i = 0; i < filters.length; i++) { filters[i].endService(request, response); } } else if (action.equals("http://www.qualipso.org/advdoc/ws/storage/GetSubFolders")) { // SERVICIO: GetSubFolders // Parámetro de entrada al servicio GetSubFolders_req inbean = new GetSubFolders_req(); inbean.fromJSON(input.toString()); // Invocar el método beforeService() de los filtros for (int i = 0; i < filters.length; i++) { filters[i].beforeService(request, response, inbean, "QualiPSoStorage", action); } // Parámetro de salida del servicio GetSubFolders_resp outbean = new GetSubFolders_resp(); // Crear un objeto que implementa la operación GetSubFoldersService serviceImplementation = new GetSubFoldersService(); // Invocar la implementación de la operación Throwable applicationException = serviceImplementation.executeImpl(this, request, response, inbean, outbean); // Si ha ocurrido una excepción, enviarla al cliente if (applicationException != null) { // Traza // new es.tid.frawa.common.TdiFrawaTraceListener().trace(applicationException); new es.tid.frawa.common.TdiFrawaTraceListener().trace(applicationException); output = response.getWriter(); if (applicationException instanceof TdiServiceException) { sendError(output, (TdiServiceException) applicationException); } else { String inputBean = tdi.text.StringUtil.escapeXML(inbean.toString(), false); String rc = "\n"; sendError( output, new TdiServiceException( 1, "." + rc + "[Operation: GetSubFolders]" + rc + inputBean + rc + ".", applicationException.getClass().getName() + ":" + applicationException.getMessage())); } return; } // Invocar el método afterService() de los filtros for (int i = 0; i < filters.length; i++) { filters[i].afterService(request, response, outbean, "QualiPSoStorage", action); } // Respuesta output = response.getWriter(); // Bean de salida String output_str = outbean.toJSON(false); // Invocar el método afterParse() de los filtros for (int i = 0; i < filters.length; i++) { filters[i].afterParse(request, response, output_str.toString()); } // Enviar la respuesta output.println(output_str); // Invocar el método endService() de los filtros for (int i = 0; i < filters.length; i++) { filters[i].endService(request, response); } } else if (action.equals("http://www.qualipso.org/advdoc/ws/storage/LoadBinaryFile")) { // SERVICIO: LoadBinaryFile // Parámetro de entrada al servicio LoadBinaryFile_req inbean = new LoadBinaryFile_req(); inbean.fromJSON(input.toString()); // Invocar el método beforeService() de los filtros for (int i = 0; i < filters.length; i++) { filters[i].beforeService(request, response, inbean, "QualiPSoStorage", action); } // Parámetro de salida del servicio LoadBinaryFile_resp outbean = new LoadBinaryFile_resp(); // Crear un objeto que implementa la operación LoadBinaryFileService serviceImplementation = new LoadBinaryFileService(); // Invocar la implementación de la operación Throwable applicationException = serviceImplementation.executeImpl(this, request, response, inbean, outbean); // Si ha ocurrido una excepción, enviarla al cliente if (applicationException != null) { // Traza // new es.tid.frawa.common.TdiFrawaTraceListener().trace(applicationException); new es.tid.frawa.common.TdiFrawaTraceListener().trace(applicationException); output = response.getWriter(); if (applicationException instanceof TdiServiceException) { sendError(output, (TdiServiceException) applicationException); } else { String inputBean = tdi.text.StringUtil.escapeXML(inbean.toString(), false); String rc = "\n"; sendError( output, new TdiServiceException( 1, "." + rc + "[Operation: LoadBinaryFile]" + rc + inputBean + rc + ".", applicationException.getClass().getName() + ":" + applicationException.getMessage())); } return; } // Invocar el método afterService() de los filtros for (int i = 0; i < filters.length; i++) { filters[i].afterService(request, response, outbean, "QualiPSoStorage", action); } // Respuesta output = response.getWriter(); // Bean de salida String output_str = outbean.toJSON(false); // Invocar el método afterParse() de los filtros for (int i = 0; i < filters.length; i++) { filters[i].afterParse(request, response, output_str.toString()); } // Enviar la respuesta output.println(output_str); // Invocar el método endService() de los filtros for (int i = 0; i < filters.length; i++) { filters[i].endService(request, response); } } else if (action.equals("http://www.qualipso.org/advdoc/ws/storage/LoadFile")) { // SERVICIO: LoadFile // Parámetro de entrada al servicio LoadFile_req inbean = new LoadFile_req(); inbean.fromJSON(input.toString()); // Invocar el método beforeService() de los filtros for (int i = 0; i < filters.length; i++) { filters[i].beforeService(request, response, inbean, "QualiPSoStorage", action); } // Parámetro de salida del servicio LoadFile_resp outbean = new LoadFile_resp(); // Crear un objeto que implementa la operación LoadFileService serviceImplementation = new LoadFileService(); // Invocar la implementación de la operación Throwable applicationException = serviceImplementation.executeImpl(this, request, response, inbean, outbean); // Si ha ocurrido una excepción, enviarla al cliente if (applicationException != null) { // Traza // new es.tid.frawa.common.TdiFrawaTraceListener().trace(applicationException); new es.tid.frawa.common.TdiFrawaTraceListener().trace(applicationException); output = response.getWriter(); if (applicationException instanceof TdiServiceException) { sendError(output, (TdiServiceException) applicationException); } else { String inputBean = tdi.text.StringUtil.escapeXML(inbean.toString(), false); String rc = "\n"; sendError( output, new TdiServiceException( 1, "." + rc + "[Operation: LoadFile]" + rc + inputBean + rc + ".", applicationException.getClass().getName() + ":" + applicationException.getMessage())); } return; } // Invocar el método afterService() de los filtros for (int i = 0; i < filters.length; i++) { filters[i].afterService(request, response, outbean, "QualiPSoStorage", action); } // Respuesta output = response.getWriter(); // Bean de salida String output_str = outbean.toJSON(false); // Invocar el método afterParse() de los filtros for (int i = 0; i < filters.length; i++) { filters[i].afterParse(request, response, output_str.toString()); } // Enviar la respuesta output.println(output_str); // Invocar el método endService() de los filtros for (int i = 0; i < filters.length; i++) { filters[i].endService(request, response); } } else if (action.equals("http://www.qualipso.org/advdoc/ws/storage/RemoveFile")) { // SERVICIO: RemoveFile // Parámetro de entrada al servicio RemoveFile_req inbean = new RemoveFile_req(); inbean.fromJSON(input.toString()); // Invocar el método beforeService() de los filtros for (int i = 0; i < filters.length; i++) { filters[i].beforeService(request, response, inbean, "QualiPSoStorage", action); } // Parámetro de salida del servicio RemoveFile_resp outbean = new RemoveFile_resp(); // Crear un objeto que implementa la operación RemoveFileService serviceImplementation = new RemoveFileService(); // Invocar la implementación de la operación Throwable applicationException = serviceImplementation.executeImpl(this, request, response, inbean, outbean); // Si ha ocurrido una excepción, enviarla al cliente if (applicationException != null) { // Traza // new es.tid.frawa.common.TdiFrawaTraceListener().trace(applicationException); new es.tid.frawa.common.TdiFrawaTraceListener().trace(applicationException); output = response.getWriter(); if (applicationException instanceof TdiServiceException) { sendError(output, (TdiServiceException) applicationException); } else { String inputBean = tdi.text.StringUtil.escapeXML(inbean.toString(), false); String rc = "\n"; sendError( output, new TdiServiceException( 1, "." + rc + "[Operation: RemoveFile]" + rc + inputBean + rc + ".", applicationException.getClass().getName() + ":" + applicationException.getMessage())); } return; } // Invocar el método afterService() de los filtros for (int i = 0; i < filters.length; i++) { filters[i].afterService(request, response, outbean, "QualiPSoStorage", action); } // Respuesta output = response.getWriter(); // Bean de salida String output_str = outbean.toJSON(false); // Invocar el método afterParse() de los filtros for (int i = 0; i < filters.length; i++) { filters[i].afterParse(request, response, output_str.toString()); } // Enviar la respuesta output.println(output_str); // Invocar el método endService() de los filtros for (int i = 0; i < filters.length; i++) { filters[i].endService(request, response); } } else if (action.equals("http://www.qualipso.org/advdoc/ws/storage/RemoveFolder")) { // SERVICIO: RemoveFolder // Parámetro de entrada al servicio RemoveFolder_req inbean = new RemoveFolder_req(); inbean.fromJSON(input.toString()); // Invocar el método beforeService() de los filtros for (int i = 0; i < filters.length; i++) { filters[i].beforeService(request, response, inbean, "QualiPSoStorage", action); } // Parámetro de salida del servicio RemoveFolder_resp outbean = new RemoveFolder_resp(); // Crear un objeto que implementa la operación RemoveFolderService serviceImplementation = new RemoveFolderService(); // Invocar la implementación de la operación Throwable applicationException = serviceImplementation.executeImpl(this, request, response, inbean, outbean); // Si ha ocurrido una excepción, enviarla al cliente if (applicationException != null) { // Traza // new es.tid.frawa.common.TdiFrawaTraceListener().trace(applicationException); new es.tid.frawa.common.TdiFrawaTraceListener().trace(applicationException); output = response.getWriter(); if (applicationException instanceof TdiServiceException) { sendError(output, (TdiServiceException) applicationException); } else { String inputBean = tdi.text.StringUtil.escapeXML(inbean.toString(), false); String rc = "\n"; sendError( output, new TdiServiceException( 1, "." + rc + "[Operation: RemoveFolder]" + rc + inputBean + rc + ".", applicationException.getClass().getName() + ":" + applicationException.getMessage())); } return; } // Invocar el método afterService() de los filtros for (int i = 0; i < filters.length; i++) { filters[i].afterService(request, response, outbean, "QualiPSoStorage", action); } // Respuesta output = response.getWriter(); // Bean de salida String output_str = outbean.toJSON(false); // Invocar el método afterParse() de los filtros for (int i = 0; i < filters.length; i++) { filters[i].afterParse(request, response, output_str.toString()); } // Enviar la respuesta output.println(output_str); // Invocar el método endService() de los filtros for (int i = 0; i < filters.length; i++) { filters[i].endService(request, response); } } else if (action.equals("http://www.qualipso.org/advdoc/ws/storage/StoreBinaryFile")) { // SERVICIO: StoreBinaryFile // Parámetro de entrada al servicio StoreBinaryFile_req inbean = new StoreBinaryFile_req(); inbean.fromJSON(input.toString()); // Invocar el método beforeService() de los filtros for (int i = 0; i < filters.length; i++) { filters[i].beforeService(request, response, inbean, "QualiPSoStorage", action); } // Parámetro de salida del servicio StoreBinaryFile_resp outbean = new StoreBinaryFile_resp(); // Crear un objeto que implementa la operación StoreBinaryFileService serviceImplementation = new StoreBinaryFileService(); // Invocar la implementación de la operación Throwable applicationException = serviceImplementation.executeImpl(this, request, response, inbean, outbean); // Si ha ocurrido una excepción, enviarla al cliente if (applicationException != null) { // Traza // new es.tid.frawa.common.TdiFrawaTraceListener().trace(applicationException); new es.tid.frawa.common.TdiFrawaTraceListener().trace(applicationException); output = response.getWriter(); if (applicationException instanceof TdiServiceException) { sendError(output, (TdiServiceException) applicationException); } else { String inputBean = tdi.text.StringUtil.escapeXML(inbean.toString(), false); String rc = "\n"; sendError( output, new TdiServiceException( 1, "." + rc + "[Operation: StoreBinaryFile]" + rc + inputBean + rc + ".", applicationException.getClass().getName() + ":" + applicationException.getMessage())); } return; } // Invocar el método afterService() de los filtros for (int i = 0; i < filters.length; i++) { filters[i].afterService(request, response, outbean, "QualiPSoStorage", action); } // Respuesta output = response.getWriter(); // Bean de salida String output_str = outbean.toJSON(false); // Invocar el método afterParse() de los filtros for (int i = 0; i < filters.length; i++) { filters[i].afterParse(request, response, output_str.toString()); } // Enviar la respuesta output.println(output_str); // Invocar el método endService() de los filtros for (int i = 0; i < filters.length; i++) { filters[i].endService(request, response); } } else if (action.equals("http://www.qualipso.org/advdoc/ws/storage/StoreFile")) { // SERVICIO: StoreFile // Parámetro de entrada al servicio StoreFile_req inbean = new StoreFile_req(); inbean.fromJSON(input.toString()); // Invocar el método beforeService() de los filtros for (int i = 0; i < filters.length; i++) { filters[i].beforeService(request, response, inbean, "QualiPSoStorage", action); } // Parámetro de salida del servicio StoreFile_resp outbean = new StoreFile_resp(); // Crear un objeto que implementa la operación StoreFileService serviceImplementation = new StoreFileService(); // Invocar la implementación de la operación Throwable applicationException = serviceImplementation.executeImpl(this, request, response, inbean, outbean); // Si ha ocurrido una excepción, enviarla al cliente if (applicationException != null) { // Traza // new es.tid.frawa.common.TdiFrawaTraceListener().trace(applicationException); new es.tid.frawa.common.TdiFrawaTraceListener().trace(applicationException); output = response.getWriter(); if (applicationException instanceof TdiServiceException) { sendError(output, (TdiServiceException) applicationException); } else { String inputBean = tdi.text.StringUtil.escapeXML(inbean.toString(), false); String rc = "\n"; sendError( output, new TdiServiceException( 1, "." + rc + "[Operation: StoreFile]" + rc + inputBean + rc + ".", applicationException.getClass().getName() + ":" + applicationException.getMessage())); } return; } // Invocar el método afterService() de los filtros for (int i = 0; i < filters.length; i++) { filters[i].afterService(request, response, outbean, "QualiPSoStorage", action); } // Respuesta output = response.getWriter(); // Bean de salida String output_str = outbean.toJSON(false); // Invocar el método afterParse() de los filtros for (int i = 0; i < filters.length; i++) { filters[i].afterParse(request, response, output_str.toString()); } // Enviar la respuesta output.println(output_str); // Invocar el método endService() de los filtros for (int i = 0; i < filters.length; i++) { filters[i].endService(request, response); } } else if (action.equals("http://www.qualipso.org/advdoc/ws/storage/TestLoopback")) { // SERVICIO: TestLoopback // Parámetro de entrada al servicio org.qualipso.advdoc.ws.client.storage.beans.TestLoopback inbean = new org.qualipso.advdoc.ws.client.storage.beans.TestLoopback(); inbean.fromJSON(input.toString()); // Invocar el método beforeService() de los filtros for (int i = 0; i < filters.length; i++) { filters[i].beforeService(request, response, inbean, "QualiPSoStorage", action); } // Parámetro de salida del servicio org.qualipso.advdoc.ws.client.storage.beans.TestLoopback outbean = new org.qualipso.advdoc.ws.client.storage.beans.TestLoopback(); // Crear un objeto que implementa la operación TestLoopbackService serviceImplementation = new TestLoopbackService(); // Invocar la implementación de la operación Throwable applicationException = serviceImplementation.executeImpl(this, request, response, inbean, outbean); // Si ha ocurrido una excepción, enviarla al cliente if (applicationException != null) { // Traza // new es.tid.frawa.common.TdiFrawaTraceListener().trace(applicationException); new es.tid.frawa.common.TdiFrawaTraceListener().trace(applicationException); output = response.getWriter(); if (applicationException instanceof TdiServiceException) { sendError(output, (TdiServiceException) applicationException); } else { String inputBean = tdi.text.StringUtil.escapeXML(inbean.toString(), false); String rc = "\n"; sendError( output, new TdiServiceException( 1, "." + rc + "[Operation: TestLoopback]" + rc + inputBean + rc + ".", applicationException.getClass().getName() + ":" + applicationException.getMessage())); } return; } // Invocar el método afterService() de los filtros for (int i = 0; i < filters.length; i++) { filters[i].afterService(request, response, outbean, "QualiPSoStorage", action); } // Respuesta output = response.getWriter(); // Bean de salida String output_str = outbean.toJSON(false); // Invocar el método afterParse() de los filtros for (int i = 0; i < filters.length; i++) { filters[i].afterParse(request, response, output_str.toString()); } // Enviar la respuesta output.println(output_str); // Invocar el método endService() de los filtros for (int i = 0; i < filters.length; i++) { filters[i].endService(request, response); } } else if (action.equals("http://www.qualipso.org/advdoc/ws/storage/TestParser")) { // SERVICIO: TestParser // Parámetro de entrada al servicio org.qualipso.advdoc.ws.client.storage.beans.TestParser inbean = new org.qualipso.advdoc.ws.client.storage.beans.TestParser(); inbean.fromJSON(input.toString()); // Invocar el método beforeService() de los filtros for (int i = 0; i < filters.length; i++) { filters[i].beforeService(request, response, inbean, "QualiPSoStorage", action); } // Parámetro de salida del servicio org.qualipso.advdoc.ws.client.storage.beans.TestParser outbean = new org.qualipso.advdoc.ws.client.storage.beans.TestParser(); // Crear un objeto que implementa la operación TestParserService serviceImplementation = new TestParserService(); // Invocar la implementación de la operación Throwable applicationException = serviceImplementation.executeImpl(this, request, response, inbean, outbean); // Si ha ocurrido una excepción, enviarla al cliente if (applicationException != null) { // Traza // new es.tid.frawa.common.TdiFrawaTraceListener().trace(applicationException); new es.tid.frawa.common.TdiFrawaTraceListener().trace(applicationException); output = response.getWriter(); if (applicationException instanceof TdiServiceException) { sendError(output, (TdiServiceException) applicationException); } else { String inputBean = tdi.text.StringUtil.escapeXML(inbean.toString(), false); String rc = "\n"; sendError( output, new TdiServiceException( 1, "." + rc + "[Operation: TestParser]" + rc + inputBean + rc + ".", applicationException.getClass().getName() + ":" + applicationException.getMessage())); } return; } // Invocar el método afterService() de los filtros for (int i = 0; i < filters.length; i++) { filters[i].afterService(request, response, outbean, "QualiPSoStorage", action); } // Respuesta output = response.getWriter(); // Bean de salida String output_str = outbean.toJSON(false); // Invocar el método afterParse() de los filtros for (int i = 0; i < filters.length; i++) { filters[i].afterParse(request, response, output_str.toString()); } // Enviar la respuesta output.println(output_str); // Invocar el método endService() de los filtros for (int i = 0; i < filters.length; i++) { filters[i].endService(request, response); } } else { throw new Exception(getClass().getName() + ".service() Operación " + action + " no válida"); } } catch (ServletException e) { // Ha ocurrido un error en los filtros // Traza // new es.tid.frawa.common.TdiFrawaTraceListener().trace(e); new es.tid.frawa.common.TdiFrawaTraceListener().trace(e); // Enviar <Fault> al cliente if (output == null) { output = response.getWriter(); } TdiServiceException se = new TdiServiceException(-1, "Filter exception", e.getMessage()); sendError(output, se); } catch (Throwable t) { // Invocar el método onException() de los filtros for (int i = 0; i < filters.length; i++) { filters[i].onException(request, response, t, "QualiPSoStorage", action); } // Traza // new es.tid.frawa.common.TdiFrawaTraceListener().trace(t); new es.tid.frawa.common.TdiFrawaTraceListener().trace(t); // Elevar una ServletException throw new ServletException( getClass().getName() + ".service() Server Exception: " + t.getClass().getName() + " -> " + t.getMessage()); // if (output == null) { // output = response.getWriter(); // } // TdiServiceException se = new TdiServiceException(-2,t.getClass().getName(),t.getMessage()); // sendError(output,se); } finally { // Invocar el método onFinally() de los filtros for (int i = 0; i < filters.length; i++) { filters[i].onFinally(request, response, "QualiPSoStorage", action); } } }
/** * Write a file to the response stream. Handles Range requests. * * @param req request * @param res response * @param file must exists and not be a directory * @param contentType must not be null * @throws IOException or error */ public static void returnFile( HttpServletRequest req, HttpServletResponse res, File file, String contentType) throws IOException { res.setContentType(contentType); // see if its a Range Request boolean isRangeRequest = false; long startPos = 0, endPos = Long.MAX_VALUE; String rangeRequest = req.getHeader("Range"); if (rangeRequest != null) { // bytes=12-34 or bytes=12- int pos = rangeRequest.indexOf("="); if (pos > 0) { int pos2 = rangeRequest.indexOf("-"); if (pos2 > 0) { String startString = rangeRequest.substring(pos + 1, pos2); String endString = rangeRequest.substring(pos2 + 1); startPos = Long.parseLong(startString); if (endString.length() > 0) endPos = Long.parseLong(endString) + 1; isRangeRequest = true; } } } // set content length long fileSize = file.length(); long contentLength = fileSize; if (isRangeRequest) { endPos = Math.min(endPos, fileSize); contentLength = endPos - startPos; } if (contentLength > Integer.MAX_VALUE) res.addHeader( "Content-Length", Long.toString(contentLength)); // allow content length > MAX_INT else res.setContentLength((int) contentLength); // note HEAD only allows this String filename = file.getPath(); boolean debugRequest = Debug.isSet("returnFile"); if (debugRequest) log.debug( "returnFile(): filename = " + filename + " contentType = " + contentType + " contentLength = " + contentLength); // indicate we allow Range Requests res.addHeader("Accept-Ranges", "bytes"); if (req.getMethod().equals("HEAD")) { log.info( "returnFile(): " + UsageLog.closingMessageForRequestContext(HttpServletResponse.SC_OK, 0)); return; } try { if (isRangeRequest) { // set before content is sent res.addHeader("Content-Range", "bytes " + startPos + "-" + (endPos - 1) + "/" + fileSize); res.setStatus(HttpServletResponse.SC_PARTIAL_CONTENT); FileCacheRaf.Raf craf = null; try { craf = fileCacheRaf.acquire(filename); IO.copyRafB( craf.getRaf(), startPos, contentLength, res.getOutputStream(), new byte[60000]); log.info( "returnFile(): " + UsageLog.closingMessageForRequestContext( HttpServletResponse.SC_PARTIAL_CONTENT, contentLength)); return; } finally { if (craf != null) fileCacheRaf.release(craf); } } // Return the file ServletOutputStream out = res.getOutputStream(); IO.copyFileB(file, out, 60000); res.flushBuffer(); out.close(); if (debugRequest) log.debug("returnFile(): returnFile ok = " + filename); log.info( "returnFile(): " + UsageLog.closingMessageForRequestContext(HttpServletResponse.SC_OK, contentLength)); } // @todo Split up this exception handling: those from file access vs those from dealing with // response // File access: catch and res.sendError() // response: don't catch (let bubble up out of doGet() etc) catch (FileNotFoundException e) { log.error("returnFile(): FileNotFoundException= " + filename); log.info( "returnFile(): " + UsageLog.closingMessageForRequestContext(HttpServletResponse.SC_NOT_FOUND, 0)); if (!res.isCommitted()) res.sendError(HttpServletResponse.SC_NOT_FOUND); } catch (java.net.SocketException e) { log.info("returnFile(): SocketException sending file: " + filename + " " + e.getMessage()); log.info("returnFile(): " + UsageLog.closingMessageForRequestContext(STATUS_CLIENT_ABORT, 0)); } catch (IOException e) { String eName = e.getClass().getName(); // dont want compile time dependency on ClientAbortException if (eName.equals("org.apache.catalina.connector.ClientAbortException")) { log.info( "returnFile(): ClientAbortException while sending file: " + filename + " " + e.getMessage()); log.info( "returnFile(): " + UsageLog.closingMessageForRequestContext(STATUS_CLIENT_ABORT, 0)); return; } log.error("returnFile(): IOException (" + e.getClass().getName() + ") sending file ", e); log.error( "returnFile(): " + UsageLog.closingMessageForRequestContext(HttpServletResponse.SC_NOT_FOUND, 0)); if (!res.isCommitted()) res.sendError(HttpServletResponse.SC_NOT_FOUND, "Problem sending file: " + e.getMessage()); } }