private void eventLoop()

in aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringWebCustomRuntimeEventLoop.java [95:155]


	private void eventLoop(ServletWebServerApplicationContext context) {
		ServerlessMVC mvc = ServerlessMVC.INSTANCE(context);

		Environment environment = context.getEnvironment();
		logger.info("Starting AWSWebRuntimeEventLoop");

		String runtimeApi = environment.getProperty("AWS_LAMBDA_RUNTIME_API");
		String eventUri = MessageFormat.format(LAMBDA_RUNTIME_URL_TEMPLATE, runtimeApi, LAMBDA_VERSION_DATE);
		if (logger.isDebugEnabled()) {
			logger.debug("Event URI: " + eventUri);
		}

		RequestEntity<Void> requestEntity = RequestEntity.get(URI.create(eventUri))
				.header("User-Agent", USER_AGENT_VALUE).build();
		RestTemplate rest = new RestTemplate();
		ObjectMapper mapper = new ObjectMapper();//.getBean(ObjectMapper.class);
		mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
		AwsProxyHttpServletResponseWriter responseWriter = new AwsProxyHttpServletResponseWriter();

		logger.info("Entering event loop");
		while (this.isRunning()) {
			logger.debug("Attempting to get new event");
			ResponseEntity<String> incomingEvent = rest.exchange(requestEntity, String.class);

			if (incomingEvent != null && incomingEvent.hasBody()) {
				if (logger.isDebugEnabled()) {
					logger.debug("New Event received from AWS Gateway: " + incomingEvent.getBody());
				}
				String requestId = incomingEvent.getHeaders().getFirst("Lambda-Runtime-Aws-Request-Id");
				
				try {
					logger.debug("Submitting request to the user's web application");

					AwsProxyResponse awsResponse = AwsSpringHttpProcessingUtils.processRequest(
							AwsSpringHttpProcessingUtils.generateHttpServletRequest(incomingEvent.getBody(),
									null, mvc.getServletContext(), mapper), mvc, responseWriter);
					if (logger.isDebugEnabled()) {
						logger.debug("Received response - body: " + awsResponse.getBody() + 
								"; status: " + awsResponse.getStatusCode() + "; headers: " + awsResponse.getHeaders());
					}

					String invocationUrl = MessageFormat.format(LAMBDA_INVOCATION_URL_TEMPLATE, runtimeApi,
							LAMBDA_VERSION_DATE, requestId);
					
		            ResponseEntity<byte[]> result = rest.exchange(RequestEntity.post(URI.create(invocationUrl))
							.header("User-Agent", USER_AGENT_VALUE).body(awsResponse), byte[].class);
		            if (logger.isDebugEnabled()) {
						logger.debug("Response sent: body: " + result.getBody() + 
								"; status: " + result.getStatusCode() + "; headers: " + result.getHeaders());
					}
		            if (logger.isInfoEnabled()) {
						logger.info("Result POST status: " + result);
					}
				} 
				catch (Exception e) {
					logger.error(e);
					this.propagateAwsError(requestId, e, mapper, runtimeApi, rest);
				}
			}
		}
	}