Пример #1
0
  public void handleAction(ActionParameters params) throws ActionException {

    final HttpServletResponse response = params.getResponse();
    final HttpServletRequest httpRequest = params.getRequest();
    // default print format is application/pdf
    final String pformat = params.getHttpParam(PARM_FORMAT, "application/pdf");
    final JSONObject jsonprint = getPrintJSON(params);
    String file_save = params.getHttpParam(PARM_SAVE, "");
    boolean geojsCase = false;
    if (!params.getHttpParam(PARM_GEOJSON, "").isEmpty()) geojsCase = true;

    final HttpURLConnection con = getConnection(pformat, geojsCase);
    for (Enumeration<String> e = httpRequest.getHeaderNames(); e.hasMoreElements(); ) {
      final String key = e.nextElement();
      final String value = httpRequest.getHeader(key);
      con.setRequestProperty(key, value);
    }
    try {
      con.setRequestMethod("POST");
      con.setDoOutput(true);
      con.setDoInput(true);
      HttpURLConnection.setFollowRedirects(false);
      con.setUseCaches(false);
      con.setRequestProperty(HEADER_CONTENT_TYPE, "application/json");
      con.connect();
      if (log.isDebugEnabled()) {
        log.debug(jsonprint.toString(2));
      }

      IOHelper.writeToConnection(con, jsonprint.toString());

      final byte[] presponse = IOHelper.readBytes(con.getInputStream());
      // Save plot for future use
      if (!file_save.isEmpty()) savePdfPng(presponse, file_save, pformat);

      final String contentType = con.getHeaderField(HEADER_CONTENT_TYPE);
      response.addHeader(HEADER_CONTENT_TYPE, contentType);

      response.getOutputStream().write(presponse, 0, presponse.length);
      response.getOutputStream().flush();
      response.getOutputStream().close();
    } catch (Exception e) {
      throw new ActionException("Couldn't proxy request to print server", e);
    } finally {
      con.disconnect();
    }
  }