示例#1
0
 private static void sendServerProblemResponse(HttpServletResponse res, String s)
     throws IOException {
   // Commenting out the status code because we want the client to eval the error() call
   // res.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
   res.setContentType("x-marklogic/xquery; charset=UTF-8");
   if (s != null && s.length() > 4096) { // Cap super long errors
     s = s.substring(0, 2048) + " ...[trimmed]... " + s.substring(s.length() - 2048);
   }
   Writer writer = res.getWriter();
   writer.write("error('" + escapeSingleQuotes(s) + "')");
   writer.flush();
 }
示例#2
0
 @Override
 public void render(Parameters blockParameters, Writer w, RenderHints hints)
     throws FrameworkException {
   log.debug("Error rendering " + blockParameters);
   switch (getType()) {
     case BODY:
       try {
         decorateIntro(hints, w, "error");
         w.write("<h1>" + error.status);
         w.write(": ");
         CharTransformer escape = new Xml(Xml.ESCAPE);
         w.write(escape.transform(error.exception.getMessage()));
         w.write(" ");
         w.write(escape.transform(url));
         w.write("</h1>");
         w.write("<pre>");
         HttpServletRequest request = blockParameters.get(Parameter.REQUEST);
         error.getErrorReport(w, request, escape);
         w.write("</pre>");
         decorateOutro(hints, w);
       } catch (IOException eio) {
         throw new FrameworkException(eio.getMessage(), eio);
       }
       break;
     default:
   }
 }
示例#3
0
  public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    String path = request.getPathInfo();
    boolean htmlOutput = true;
    String language = null;
    String contentType = "text/html; charset='utf-8'";

    if (path != null) {
      if (path.endsWith(".rdf")) {
        contentType = "application/rdf+xml; charset='utf-8'";
        htmlOutput = false;
        language = "RDF/XML";
      } else if (path.endsWith(".xml")) {
        contentType = "application/xml; charset='utf-8'";
        htmlOutput = false;
        language = "RDF/XML";
      } else if (path.endsWith(".n3")) {
        contentType = "text/n3; charset='utf-8'";
        htmlOutput = false;
        language = "N3";
      }
    }

    response.setContentType(contentType);
    response.setStatus(HttpServletResponse.SC_OK);

    Writer writer = response.getWriter();

    synchronized (board) {
      if (htmlOutput) {
        writer.write(
            "<!DOCTYPE html>\n"
                + "<html lang='en'>"
                + "<head><meta charset='utf-8'/><title>MATe model</title></head>"
                + "<body><ul>");
        StmtIterator it = model.listStatements();
        /* TODO: well, this could be prettier */
        while (it.hasNext()) writer.write("<li>" + it.nextStatement() + "</li>");
        writer.write("<ul></body></html>");
      } else model.write(writer, language);
    }
  }
示例#4
0
  protected void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    // get the number of workers to run
    int count = this.getRequestedCount(request, 4);
    // get the executor service
    final ServletContext sc = this.getServletContext();
    final ExecutorService executorService = (ExecutorService) sc.getAttribute("myExecutorService");
    // create work coordinator
    CountDownLatch countDownLatch = new CountDownLatch(count);

    Long t1 = System.nanoTime();
    // create the workers
    List<RunnableWorkUnit2> workers = new ArrayList<RunnableWorkUnit2>();
    for (int i = 0; i < count; i++) {
      RunnableWorkUnit2 wu =
          new RunnableWorkUnit2("RunnableTask" + String.valueOf(i + 1), countDownLatch);
      workers.add(wu);
    }
    // run the workers through the executor
    for (RunnableWorkUnit2 wu : workers) {
      executorService.execute(wu);
    }

    try {
      System.out.println("START WAITING");
      countDownLatch.await();
      System.out.println("DONE WAITING");
    } catch (InterruptedException ex) {
      ex.printStackTrace();
    }

    Long t2 = System.nanoTime();
    Writer w = response.getWriter();
    w.write(String.format("\n Request processed in %dms!", (t2 - t1) / 1000000));
    w.flush();
    w.close();
  }
示例#5
0
 public void flush() throws IOException {
   writer.flush();
 }
示例#6
0
 public void write(String str, int off, int len) throws IOException {
   writer.write(str, off, len);
 }
示例#7
0
 public void write(String str) throws IOException {
   writer.write(str);
 }
示例#8
0
 public void write(int c) throws IOException {
   writer.write(c);
 }
示例#9
0
 public void write(char[] cbuf, int off, int len) throws IOException {
   writer.write(cbuf, off, len);
 }
示例#10
0
 public void write(char cbuf) throws IOException {
   writer.write(cbuf);
 }
示例#11
0
 public void writeText(char text[], int off, int len) throws IOException {
   System.out.println("YYY-Writer:writeText");
   writer.write(text, off, len);
 }
示例#12
0
    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;
    }
示例#13
0
  private static void sendXQueryResponse(HttpServletResponse res, Object o) throws IOException {
    // Make sure to leave the status code alone.  It defaults to 200, but sometimes
    // callers of this method will have set it to a custom code.
    res.setContentType("x-marklogic/xquery; charset=UTF-8");
    // res.setContentType("text/plain");
    Writer writer = res.getWriter(); // care to handle errors later?

    if (o == null) {
      writer.write("()");
    } else if (o instanceof byte[]) {
      writer.write("binary {'");
      writer.write(hexEncode((byte[]) o));
      writer.write("'}");
    } else if (o instanceof Object[]) {
      Object[] arr = (Object[]) o;
      writer.write("(");
      for (int i = 0; i < arr.length; i++) {
        sendXQueryResponse(res, arr[i]);
        if (i + 1 < arr.length) writer.write(", ");
      }
      writer.write(")");
    } else if (o instanceof String) {
      writer.write("'");
      writer.write(escapeSingleQuotes(o.toString()));
      writer.write("'");
    } else if (o instanceof Integer) {
      writer.write("xs:int(");
      writer.write(o.toString());
      writer.write(")");
    } else if (o instanceof Long) {
      writer.write("xs:integer(");
      writer.write(o.toString());
      writer.write(")");
    } else if (o instanceof Float) {
      Float flt = (Float) o;
      writer.write("xs:float(");
      if (flt.equals(Float.POSITIVE_INFINITY)) {
        writer.write("'INF'");
      } else if (flt.equals(Float.NEGATIVE_INFINITY)) {
        writer.write("'-INF'");
      } else if (flt.equals(Float.NaN)) {
        writer.write("fn:number(())"); // poor man's way to write NaN
      } else {
        writer.write(o.toString());
      }
      writer.write(")");
    } else if (o instanceof Double) {
      Double dbl = (Double) o;
      writer.write("xs:double(");
      if (dbl.equals(Double.POSITIVE_INFINITY)) {
        writer.write("'INF'");
      } else if (dbl.equals(Double.NEGATIVE_INFINITY)) {
        writer.write("'-INF'");
      } else if (dbl.equals(Double.NaN)) {
        writer.write("fn:number(())"); // poor man's way to write NaN
      } else {
        writer.write(o.toString());
      }
      writer.write(")");
    } else if (o instanceof Boolean) {
      writer.write("xs:boolean('");
      writer.write(o.toString());
      writer.write("')");
    } else if (o instanceof BigDecimal) {
      writer.write("xs:decimal(");
      writer.write(o.toString());
      writer.write(")");
    } else if (o instanceof Date) {
      // We want something like: 2006-04-30T01:28:30.499-07:00
      // We format to get:       2006-04-30T01:28:30.499-0700
      // Then we add in the colon
      writer.write("xs:dateTime('");
      String d = dateFormat.format((Date) o);
      writer.write(d.substring(0, d.length() - 2));
      writer.write(":");
      writer.write(d.substring(d.length() - 2));
      writer.write("')");
    } else if (o instanceof XMLGregorianCalendar) {
      XMLGregorianCalendar greg = (XMLGregorianCalendar) o;
      QName type = greg.getXMLSchemaType();
      if (type.equals(DatatypeConstants.DATETIME)) {
        writer.write("xs:dateTime('");
      } else if (type.equals(DatatypeConstants.DATE)) {
        writer.write("xs:date('");
      } else if (type.equals(DatatypeConstants.TIME)) {
        writer.write("xs:time('");
      } else if (type.equals(DatatypeConstants.GYEARMONTH)) {
        writer.write("xs:gYearMonth('");
      } else if (type.equals(DatatypeConstants.GMONTHDAY)) {
        writer.write("xs:gMonthDay('");
      } else if (type.equals(DatatypeConstants.GYEAR)) {
        writer.write("xs:gYear('");
      } else if (type.equals(DatatypeConstants.GMONTH)) {
        writer.write("xs:gMonth('");
      } else if (type.equals(DatatypeConstants.GDAY)) {
        writer.write("xs:gDay('");
      }
      writer.write(greg.toXMLFormat());
      writer.write("')");
    } else if (o instanceof Duration) {
      Duration dur = (Duration) o;
      /*
      // The following fails on Xerces
      QName type = dur.getXMLSchemaType();
      if (type.equals(DatatypeConstants.DURATION)) {
        writer.write("xs:duration('");
      }
      else if (type.equals(DatatypeConstants.DURATION_DAYTIME)) {
        writer.write("xdt:dayTimeDuration('");
      }
      else if (type.equals(DatatypeConstants.DURATION_YEARMONTH)) {
        writer.write("xdt:yearMonthDuration('");
      }
      */
      // If no years or months, must be DURATION_DAYTIME
      if (dur.getYears() == 0 && dur.getMonths() == 0) {
        writer.write("xdt:dayTimeDuration('");
      }
      // If has years or months but nothing else, must be DURATION_YEARMONTH
      else if (dur.getDays() == 0
          && dur.getHours() == 0
          && dur.getMinutes() == 0
          && dur.getSeconds() == 0) {
        writer.write("xdt:yearMonthDuration('");
      } else {
        writer.write("xs:duration('");
      }
      writer.write(dur.toString());
      writer.write("')");
    } else if (o instanceof org.jdom.Element) {
      org.jdom.Element elt = (org.jdom.Element) o;
      writer.write("xdmp:unquote('");
      // Because "&lt;" in XQuery is the same as "<" I need to double escape any ampersands
      writer.write(
          new org.jdom.output.XMLOutputter()
              .outputString(elt)
              .replaceAll("&", "&amp;")
              .replaceAll("'", "''"));
      writer.write("')/*"); // make sure to return the root elt
    } else if (o instanceof org.jdom.Document) {
      org.jdom.Document doc = (org.jdom.Document) o;
      writer.write("xdmp:unquote('");
      writer.write(
          new org.jdom.output.XMLOutputter()
              .outputString(doc)
              .replaceAll("&", "&amp;")
              .replaceAll("'", "''"));
      writer.write("')");
    } else if (o instanceof org.jdom.Text) {
      org.jdom.Text text = (org.jdom.Text) o;
      writer.write("text {'");
      writer.write(escapeSingleQuotes(text.getText()));
      writer.write("'}");
    } else if (o instanceof org.jdom.Attribute) {
      // <fake xmlns:pref="http://uri.com" pref:attrname="attrvalue"/>/@*:attrname
      // <fake xmlns="http://uri.com" attrname="attrvalue"/>/@*:attrname
      org.jdom.Attribute attr = (org.jdom.Attribute) o;
      writer.write("<fake xmlns");
      if ("".equals(attr.getNamespacePrefix())) {
        writer.write("=\"");
      } else {
        writer.write(":" + attr.getNamespacePrefix() + "=\"");
      }
      writer.write(attr.getNamespaceURI());
      writer.write("\" ");
      writer.write(attr.getQualifiedName());
      writer.write("=\"");
      writer.write(escapeSingleQuotes(attr.getValue()));
      writer.write("\"/>/@*:");
      writer.write(attr.getName());
    } else if (o instanceof org.jdom.Comment) {
      org.jdom.Comment com = (org.jdom.Comment) o;
      writer.write("comment {'");
      writer.write(escapeSingleQuotes(com.getText()));
      writer.write("'}");
    } else if (o instanceof org.jdom.ProcessingInstruction) {
      org.jdom.ProcessingInstruction pi = (org.jdom.ProcessingInstruction) o;
      writer.write("processing-instruction ");
      writer.write(pi.getTarget());
      writer.write(" {'");
      writer.write(escapeSingleQuotes(pi.getData()));
      writer.write("'}");
    } else if (o instanceof QName) {
      QName q = (QName) o;
      writer.write("fn:expanded-QName('");
      writer.write(escapeSingleQuotes(q.getNamespaceURI()));
      writer.write("','");
      writer.write(q.getLocalPart());
      writer.write("')");
    } else {
      writer.write(
          "error('XQuery tried to retrieve unsupported type: " + o.getClass().getName() + "')");
    }

    writer.flush();
  }
示例#14
0
 private static void sendStringResponse(HttpServletResponse res, String s) throws IOException {
   res.setContentType("text/plain; charset=UTF-8");
   Writer w = res.getWriter();
   w.write(s);
   w.flush();
 }
示例#15
0
 public void writeText(Object text, String componentPropertyName) throws IOException {
   System.out.println("YYY-Writer:writeText prop=" + componentPropertyName + " text=" + text);
   writer.write(text.toString());
 }
示例#16
0
 public void writeText(char text) throws IOException {
   System.out.println("YYY-Writer:writeText");
   writer.write(text);
 }
示例#17
0
 public void close() throws IOException {
   writer.close();
 }