in aws-serverless-java-container-jersey/src/main/java/com/amazonaws/serverless/proxy/jersey/JerseyHandlerFilter.java [132:185]
private ContainerRequest servletRequestToContainerRequest(ServletRequest request) {
Timer.start("JERSEY_SERVLET_REQUEST_TO_CONTAINER");
HttpServletRequest servletRequest = (HttpServletRequest)request;
if (baseUri == null) {
baseUri = getBaseUri(request, "/");
}
String requestFullPath = servletRequest.getRequestURI();
if (LambdaContainerHandler.getContainerConfig().getServiceBasePath() != null && LambdaContainerHandler.getContainerConfig().isStripBasePath()) {
if (requestFullPath.startsWith(LambdaContainerHandler.getContainerConfig().getServiceBasePath())) {
requestFullPath = requestFullPath.replaceFirst(LambdaContainerHandler.getContainerConfig().getServiceBasePath(), "");
if (!requestFullPath.startsWith("/")) {
requestFullPath = "/" + requestFullPath;
}
}
}
UriBuilder uriBuilder = UriBuilder.fromUri(baseUri).path(requestFullPath);
uriBuilder.replaceQuery(servletRequest.getQueryString());
PropertiesDelegate apiGatewayProperties = new MapPropertiesDelegate();
apiGatewayProperties.setProperty(API_GATEWAY_CONTEXT_PROPERTY, servletRequest.getAttribute(API_GATEWAY_CONTEXT_PROPERTY));
apiGatewayProperties.setProperty(API_GATEWAY_STAGE_VARS_PROPERTY, servletRequest.getAttribute(API_GATEWAY_STAGE_VARS_PROPERTY));
apiGatewayProperties.setProperty(LAMBDA_CONTEXT_PROPERTY, servletRequest.getAttribute(LAMBDA_CONTEXT_PROPERTY));
apiGatewayProperties.setProperty(JERSEY_SERVLET_REQUEST_PROPERTY, servletRequest);
ContainerRequest requestContext = new ContainerRequest(
null, // jersey uses "/" by default
uriBuilder.build(),
servletRequest.getMethod().toUpperCase(Locale.ENGLISH),
(SecurityContext)servletRequest.getAttribute(JAX_SECURITY_CONTEXT_PROPERTY),
apiGatewayProperties);
InputStream requestInputStream;
try {
requestInputStream = servletRequest.getInputStream();
if (requestInputStream != null) {
requestContext.setEntityStream(requestInputStream);
}
} catch (IOException e) {
log.error("Could not read input stream from request", e);
throw new RuntimeException("Could not read request input stream", e);
}
Enumeration<String> headerNames = servletRequest.getHeaderNames();
while (headerNames.hasMoreElements()) {
String headerKey = headerNames.nextElement();
requestContext.getHeaders().addAll(headerKey, Collections.list(servletRequest.getHeaders(headerKey)));
}
Timer.stop("JERSEY_SERVLET_REQUEST_TO_CONTAINER");
return requestContext;
}