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(); } }