public ContainerResponse call(ContainerRequest containerRequest) { ByteBuffer byteBuf = ByteBuffer.allocate(BUFFER_CAPACITY); ContainerResponse response; try { response = handler.apply(containerRequest, new ByteBufferOutputStream(byteBuf)).get(); } catch (Exception e) { logger.debug("Failed while handling the request - " + containerRequest, e); response = new ContainerResponse(containerRequest, Response.serverError().build()); } ContainerResponseWriter responseWriter = containerRequest.getResponseWriter(); OutputStream os = responseWriter.writeResponseStatusAndHeaders(response.getLength(), response); response.setEntityStream(os); return response; }
/** * Suspend the request/response processing. * * @param timeOut time-out value. Value less or equal to 0, indicates that the processing is * suspended indefinitely. * @param unit time-out time unit. * @param handler time-out handler to process a time-out event if it occurs. * @return {@code true} if the suspend operation completed successfully, {@code false} otherwise. * @see ContainerResponseWriter#suspend(long, TimeUnit, ContainerResponseWriter.TimeoutHandler) */ public boolean suspend(long timeOut, TimeUnit unit, final TimeoutHandler handler) { synchronized (runtimeLock) { if (suspended) { return false; } suspended = true; timeoutHandler = handler; containerResponseWriter.setSuspendTimeout(timeOut, unit); return true; } }