/** * <p>Attempts to resolve and connect to the {@link RequestHandler} appropriate for the {@link URI} of this Request. * An exception is thrown if this operation fails at any point. This method is exception-safe.</p> * * @param responseHandler The handler to pass the corresponding {@link Response} to. * @return The {@link ContentChannel} to write the Request content to. * @throws NullPointerException If the {@link ResponseHandler} is null. * @throws BindingNotFoundException If the corresponding call to {@link Container#resolveHandler(Request)} returns * null. */ public ContentChannel connect(ResponseHandler responseHandler) { try { Objects.requireNonNull(responseHandler, "responseHandler"); RequestHandler requestHandler = container().resolveHandler(this); if (requestHandler == null) { throw new BindingNotFoundException(uri); } requestHandler = new ProxyRequestHandler(requestHandler); ContentChannel content = requestHandler.handleRequest(this, responseHandler); if (content == null) { throw new RequestDeniedException(this); } return content; } catch (Throwable t) { cancel(); throw t; } }
ResponseFilter responseFilter = responseFilters.resolve(request.getUri()); RequestHandler resolvedRequestHandler = request.container().resolveHandler(request);