public ResponseType proxy()

in aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/LambdaContainerHandler.java [200:240]


    public ResponseType proxy(RequestType request, Context context) {
        lambdaContext = context;
        CountDownLatch latch = new CountDownLatch(1);
        try {
            SecurityContext securityContext = securityContextWriter.writeSecurityContext(request, context);
            ContainerRequestType containerRequest = requestReader.readRequest(request, securityContext, context, config);
            ContainerResponseType containerResponse = getContainerResponse(containerRequest, latch);

            if (initializationWrapper != null && initializationWrapper.getInitializationLatch() != null) {
                // we let the potential InterruptedException bubble up
                if (!initializationWrapper.getInitializationLatch().await(config.getInitializationTimeout(), TimeUnit.MILLISECONDS)) {
                    throw new ContainerInitializationException("Could not initialize framework within the " + config.getInitializationTimeout() + "ms timeout", null);
                }
            }

            handleRequest(containerRequest, containerResponse, context);

            latch.await();

            if (logFormatter != null) {
                log.info(SecurityUtils.crlf(logFormatter.format(containerRequest, containerResponse, securityContext)));
            }

            return responseWriter.writeResponse(containerResponse, context);
        } catch (Exception e) {
            log.error("Error while handling request", e);
            // release all waiting threads. This is safe here because if the count was already 0
            // the latch will do nothing
            latch.countDown();

            if (getContainerConfig().isDisableExceptionMapper()) {
                if (e instanceof RuntimeException) {
                    throw (RuntimeException) e;
                } else {
                    throw new RuntimeException(e);
                }
            } else {
                return exceptionHandler.handle(e);
            }
        }
    }