private HttpRequestDispatch createRequestDispatch(HttpServletRequest request, HttpServletResponse response) { try { final AccessLogEntry accessLogEntry = null; // Not used in this context. return new HttpRequestDispatch(jDiscContext, accessLogEntry, getConnector(request).getRequestMetricContext(request), request, response); } catch (IOException e) { throw throwUnchecked(e); } }
@Override public void write(ByteBuffer buf, CompletionHandler handler) { commitResponse(); servletOutputStreamWriter.writeBuffer(buf, handlerOrNoopHandler(handler)); }
@Override public void close(CompletionHandler handler) { commitResponse(); servletOutputStreamWriter.close(handlerOrNoopHandler(handler)); }
private static RequestHandler newRequestHandler(JDiscContext context, AccessLogEntry accessLogEntry, HttpServletRequest servletRequest) { RequestHandler requestHandler = wrapHandlerIfFormPost( new FilteringRequestHandler(context.requestFilters, context.responseFilters), servletRequest, context.serverConfig.removeRawPostBodyForWwwUrlEncodedPost()); return new AccessLoggingRequestHandler(requestHandler, accessLogEntry); }
@Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest httpRequest = (HttpServletRequest)request; HttpServletResponse httpResponse = (HttpServletResponse)response; URI uri = HttpRequestFactory.getUri(httpRequest); AtomicReference<Boolean> responseReturned = new AtomicReference<>(null); HttpServletRequest newRequest = runRequestFilterWithMatchingBinding(responseReturned, uri, httpRequest, httpResponse); assert newRequest != null; responseReturned.compareAndSet(null, false); if (!responseReturned.get()) { runChainAndResponseFilters(uri, newRequest, httpResponse, chain); } }
@Override public void onWritePossible() throws IOException { synchronized (monitor) { if (state == State.FINISHED_OR_ERROR) { return; } assertStateIs(state, State.WAITING_FOR_WRITE_POSSIBLE_CALLBACK); state = State.WRITING_BUFFERS; } writeBuffersInQueueToOutputStream(); }
@Override protected void doDelete(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { dispatchHttpRequest(request, response); }
private static void callCompletionHandlerWhenDone(CompletionHandler handler, IORunnable runnable) throws Exception { try { runnable.run(); } catch (Throwable e) { runCompletionHandler_logOnExceptions(() -> handler.failed(e)); throw e; } handler.completed(); //Might throw an exception, handling in the enclosing scope. }
@Override public void close() throws IOException { throwAssertionError(); } });
@Override public ContentChannel handleResponse(Response response) { setResponse(response); return responseContentChannel; } };
/** * Creates an instance with the supplied value. */ public static <T> Alternative<T> preferred(final T value) { return new Alternative<>(value); }
@Override public void onAllDataRead() { doneReading(); }
@Override public void completed() { decreaseOutstandingUserCallsAndCloseRequestContentChannelConditionally(); }
@Override public void onAccepting(SelectableChannel channel) { throttleIfAnyThresholdIsExceeded(); }
@Override protected void doTrace(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { dispatchHttpRequest(request, response); }
@Override public void flush() throws IOException { throwAssertionError(); }
@Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { dispatchHttpRequest(request, response); }
@Override protected void doPut(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { dispatchHttpRequest(request, response); }
@Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { dispatchHttpRequest(request, response); }
@Override protected void doHead(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { dispatchHttpRequest(request, response); }