if (requestMethod.equals("POST")){
transferHTTPRequestHeadersForPOST(connection, request);
int clength = request.getContentLength();//clength is for checking if there is a POST body. Is that sufficient
if(clength > 0) {
istream = request.getInputStream();
connection.setDoOutput(true);//for POST we need to write to connection
connection.setRequestProperty( "Content-Length",Integer.toString(clength)); //only valid for POST request
connectionOstream = connection.getOutputStream();
//copy the request body to remote outputStream
copy(istream, connectionOstream);
}
connectionIstream = connection.getInputStream();
}
//step 3: return output
//can output be the same for GET/POST or different return headers
//servlet may return 3 things: status code, response headers, response body
// status code and headers have to be set before response body
response.setContentType(connection.getContentType());
ostream = response.getOutputStream();
copy(connectionIstream, ostream);
}
// if not targetURL send page that targetURL is required param
} catch (Exception e){
response.setStatus(500); //what will user get default page for response code
//WMS/WFS have specific responses to errors
//response.getWriter();//will writing custom result help
e.printStackTrace();
} finally {
if(istream != null) { istream.close(); }
if(ostream != null) { ostream.close(); }
if(connectionIstream != null) { connectionIstream.close(); }
if(connectionOstream != null) { connectionOstream.close(); }
}
}
private void copy(InputStream istream, OutputStream ostream) throws Exception {
int bufferSize = 4*4*1024;//same buffer size as in Jetty utils (2*8192)
byte[] buffer = new byte[bufferSize];
int read;
while ((read = istream.read(buffer)) != -1) {
ostream.write(buffer, 0, read);
}
}
private void transferHTTPRequestHeaders(HttpURLConnection connection, HttpServletRequest request){
//TODO make sure all headers are copied to target, see for HTTP headers http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
//Do request.getProperties to get request properties
if(request.getHeader("Accept") != null){
connection.setRequestProperty("Accept", request.getHeader("Accept"));
}
if(request.getHeader("Accept-Charset") != null){
connection.setRequestProperty("Accept-Charset", request.getHeader("Accept-Charset"));
}
if(request.getHeader("Accept-Encoding") != null){
//TODO browsers accept gzipped, should proxy accept gzip and how to handle it
//connection.setRequestProperty("Accept-Encoding", request.getHeader("Accept-Encoding"));
}
if(request.getHeader("Authorization") != nul