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);
}
}
}