/** * Returns the request method. * * @return The request method. */ @Override public String getMethod() { return getRequest().getMethod(); }
/** * Returns the response stream if it exists, null otherwise. * * @return The response stream if it exists, null otherwise. */ @Override public OutputStream getResponseEntityStream() { try { return getResponse().getOutputStream(); } catch (IOException e) { return null; } }
/** * Creates a new Servlet call wrapping a Servlet request/response couple and * a Server connector. * * @param server * The Server connector. * @param request * The Servlet request. * @param response * The Servlet response. * @return The new ServletCall instance. */ protected HttpServerCall createCall(Server server, HttpServletRequest request, HttpServletResponse response) { return new ServletCall(server, request, response); }
if (request instanceof HttpRequest && ((HttpRequest) request).getHttpCall() instanceof ServletCall) { ServletCall httpCall = (ServletCall) ((HttpRequest) request).getHttpCall(); // fetch the HTTP dispatcher RequestDispatcher dispatcher = httpCall.getRequest().getRequestDispatcher("representation.jsp"); HttpServletRequest proxyReq = new HttpServletRequestWrapper(httpCall.getRequest()); // Overload the http response stream to grab the JSP output into a dedicated proxy buffer // The BufferedServletResponseWrapper is a custom response wrapper that 'hijacks' the // output of the JSP engine and stores it on the side instead of forwarding it to the original // HTTP response. // This is needed to avoid having the JSP engine mess with the actual HTTP stream of the // current request, which must stay under the control of the restlet engine. BufferedServletResponseWrapper proxyResp = new BufferedServletResponseWrapper(httpCall.getResponse()); // Add any objects to be encoded in the http request scope proxyReq.setAttribute("myobjects", someObjects); // Actual JSP encoding dispatcher.include(proxyReq, proxyResp); // Return the content of the proxy buffer Representation rep = new InputRepresentation(proxyResp.toInputStream(),someMediaType);
if (Status.isError(getStatusCode()) && (response.getEntity() == null)) { try { for (final Iterator<Parameter> iter = getResponseHeaders() .iterator(); iter.hasNext();) { header = iter.next(); getResponse().addHeader(header.getName(), header.getValue()); getResponse().sendError(getStatusCode(), getReasonPhrase()); } catch (IOException ioe) { getLogger().log(Level.WARNING, "Unable to set the response error status", ioe); getResponse().setStatus(getStatusCode()); for (final Iterator<Parameter> iter = getResponseHeaders() .iterator(); iter.hasNext();) { header = iter.next(); contentLengthHeader = header; } else { getResponse() .addHeader(header.getName(), header.getValue()); getResponse().addHeader(contentLengthHeader.getName(), contentLengthHeader.getValue());
/** * Returns the response address.<br> * Corresponds to the IP address of the responding server. * * @return The response address. */ @Override public String getServerAddress() { return getRequest().getLocalAddr(); }
final ServletCall servletCall = new ServletCall(request .getLocalAddr(), request.getLocalPort(), request, response); final HttpRequest httpRequest = toRequest(servletCall);
/** * Returns the server port. * * @return The server port. */ @Override public int getServerPort() { return getRequest().getServerPort(); }
@Override public String getSslCipherSuite() { return (String) getRequest().getAttribute( "javax.servlet.request.cipher_suite"); }
/** * Indicates if the request was made using a confidential mean.<br> * * @return True if the request was made using a confidential mean.<br> */ @Override public boolean isConfidential() { return getRequest().isSecure(); }
/** * Returns the server domain name. * * @return The server domain name. */ @Override public String getHostDomain() { return getRequest().getServerName(); }
@Override public InputStream getRequestEntityStream(long size) { try { return getRequest().getInputStream(); } catch (IOException e) { return null; } }
@Override public String getClientAddress() { return getRequest().getRemoteAddr(); }
@Override public int getClientPort() { return getRequest().getRemotePort(); }
@Override public List<Certificate> getSslClientCertificates() { final Certificate[] certificateArray = (Certificate[]) getRequest() .getAttribute("javax.servlet.request.X509Certificate"); if (certificateArray != null) { return Arrays.asList(certificateArray); } else { return null; } }
/** * Returns the full request URI. * * @return The full request URI. */ @Override public String getRequestUri() { final String queryString = getRequest().getQueryString(); if ((queryString == null) || (queryString.equals(""))) { return getRequest().getRequestURI(); } else { return getRequest().getRequestURI() + '?' + queryString; } }
@Override public String getVersion() { String result = null; final int index = getRequest().getProtocol().indexOf('/'); if (index != -1) { result = getRequest().getProtocol().substring(index + 1); } return result; }
/** * Returns the server protocol. * * @return The server protocol. */ @Override public Protocol getProtocol() { return Protocol.valueOf(getRequest().getScheme()); }
@Override public Integer getSslKeySize() { Integer keySize = (Integer) getRequest().getAttribute( "javax.servlet.request.key_size"); if (keySize == null) { keySize = super.getSslKeySize(); } return keySize; }
/** * <p> * Retrieves the original servlet request. * </p> * * @param req The Restlet request to handle. * @return httpServletRequest The original HTTP servlet request. */ protected static HttpServletRequest getHttpRequest(Request req) { if (req instanceof HttpRequest) { HttpRequest httpRequest = (HttpRequest) req; HttpCall httpCall = httpRequest.getHttpCall(); if (httpCall instanceof ServletCall) { return ((ServletCall) httpCall).getRequest(); } } return null; }