diff --git a/spring-cloud-function-adapters/spring-cloud-function-serverless-web/.jdk8 b/spring-cloud-function-adapters/spring-cloud-function-serverless-web/.jdk8
new file mode 100644
index 000000000..e69de29bb
diff --git a/spring-cloud-function-adapters/spring-cloud-function-serverless-web/README.md b/spring-cloud-function-adapters/spring-cloud-function-serverless-web/README.md
new file mode 100644
index 000000000..b5f51b0ec
--- /dev/null
+++ b/spring-cloud-function-adapters/spring-cloud-function-serverless-web/README.md
@@ -0,0 +1,14 @@
+#### Introduction
+
+This module represents a concept of a light weight AWS forwarding proxy which deploys and interacts with existing
+Spring Boot web application deployed as AWS Lambda.
+
+
+A sample is provided in [sample](https://github.com/spring-cloud/spring-cloud-function/tree/serverless-web/spring-cloud-function-adapters/spring-cloud-function-adapter-aws-web/sample/pet-store) directory. It contain README and SAM template file to simplify the deployment. This module is identified as the only additional dependnecy to the existing web-app.
+
+_NOTE: Although this module is AWS specific, this dependency is protocol only (not binary), therefore there is no AWS dependnecies._
+
+The aformentioned proxy is identified as AWS Lambda [handler](https://github.com/spring-cloud/spring-cloud-function/blob/serverless-web/spring-cloud-function-adapters/spring-cloud-function-adapter-aws-web/sample/pet-store/template.yml#L14)
+
+The main Spring Boot configuration file is identified as [MAIN_CLASS](https://github.com/spring-cloud/spring-cloud-function/blob/serverless-web/spring-cloud-function-adapters/spring-cloud-function-adapter-aws-web/sample/pet-store/template.yml#L22)
+
diff --git a/spring-cloud-function-adapters/spring-cloud-function-serverless-web/pom.xml b/spring-cloud-function-adapters/spring-cloud-function-serverless-web/pom.xml
new file mode 100644
index 000000000..9fdb644a0
--- /dev/null
+++ b/spring-cloud-function-adapters/spring-cloud-function-serverless-web/pom.xml
@@ -0,0 +1,44 @@
+
+
+ 4.0.0
+ spring-cloud-function-serverless-web
+ jar
+ spring-cloud-function-serverless-web
+ Base serverless web adapter
+
+ org.springframework.cloud
+ spring-cloud-function-adapter-parent
+ 3.2.9-SNAPSHOT
+
+
+ UTF-8
+ UTF-8
+ 1.8
+
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+
+
+ org.springframework
+ spring-webmvc
+
+
+ javax.servlet
+ javax.servlet-api
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+ test
+
+
+
diff --git a/spring-cloud-function-adapters/spring-cloud-function-serverless-web/sample/pet-store/.aws-sam/build.toml b/spring-cloud-function-adapters/spring-cloud-function-serverless-web/sample/pet-store/.aws-sam/build.toml
new file mode 100644
index 000000000..05c08b5fa
--- /dev/null
+++ b/spring-cloud-function-adapters/spring-cloud-function-serverless-web/sample/pet-store/.aws-sam/build.toml
@@ -0,0 +1,13 @@
+# This file is auto generated by SAM CLI build command
+
+[function_build_definitions]
+[function_build_definitions.9341c1d5-9265-48ef-836e-25df000b0c59]
+codeuri = "/Users/ozhurakousky/Documents/dev/repo/spring-cloud-function/spring-cloud-function-adapters/spring-cloud-function-adapter-aws-web/sample/pet-store"
+runtime = "java11"
+architecture = "x86_64"
+handler = "org.springframework.cloud.function.adapter.aws.web.WebProxyInvoker::handleRequest"
+manifest_hash = ""
+packagetype = "Zip"
+functions = ["PetStoreFunction"]
+
+[layer_build_definitions]
diff --git a/spring-cloud-function-adapters/spring-cloud-function-serverless-web/sample/pet-store/README.md b/spring-cloud-function-adapters/spring-cloud-function-serverless-web/sample/pet-store/README.md
new file mode 100644
index 000000000..bbe5db289
--- /dev/null
+++ b/spring-cloud-function-adapters/spring-cloud-function-serverless-web/sample/pet-store/README.md
@@ -0,0 +1,38 @@
+Copied from https://github.com/awslabs/aws-serverless-java-container/tree/main/samples/spring/pet-store
+
+# Serverless Spring example
+A basic pet store written with the [Spring framework](https://projects.spring.io/spring-framework/). The `StreamLambdaHandler` object is the main entry point for Lambda.
+
+The application can be deployed in an AWS account using the [Serverless Application Model](https://github.com/awslabs/serverless-application-model). The `template.yml` file in the root folder contains the application definition.
+
+## Pre-requisites
+* [AWS CLI](https://aws.amazon.com/cli/)
+* [SAM CLI](https://github.com/awslabs/aws-sam-cli)
+* [Gradle](https://gradle.org/) or [Maven](https://maven.apache.org/)
+
+## Deployment
+In a shell, navigate to the sample's folder and use the SAM CLI to build a deployable package
+```
+$ sam build
+```
+
+This command compiles the application and prepares a deployment package in the `.aws-sam` sub-directory.
+
+To deploy the application in your AWS account, you can use the SAM CLI's guided deployment process and follow the instructions on the screen
+
+```
+$ sam deploy --guided
+```
+
+Once the deployment is completed, the SAM CLI will print out the stack's outputs, including the new application URL. You can use `curl` or a web browser to make a call to the URL
+
+```
+...
+---------------------------------------------------------------------------------------------------------
+OutputKey-Description OutputValue
+---------------------------------------------------------------------------------------------------------
+PetStoreApi - URL for application https://xxxxxxxxxx.execute-api.us-west-2.amazonaws.com/pets
+---------------------------------------------------------------------------------------------------------
+
+$ curl https://xxxxxxxxxx.execute-api.us-west-2.amazonaws.com/pets
+```
\ No newline at end of file
diff --git a/spring-cloud-function-adapters/spring-cloud-function-serverless-web/sample/pet-store/pom.xml b/spring-cloud-function-adapters/spring-cloud-function-serverless-web/sample/pet-store/pom.xml
new file mode 100644
index 000000000..59aa050ae
--- /dev/null
+++ b/spring-cloud-function-adapters/spring-cloud-function-serverless-web/sample/pet-store/pom.xml
@@ -0,0 +1,192 @@
+
+
+ 4.0.0
+
+ oz.spring.petstore
+ pet-store
+ 1.0-SNAPSHOT
+ pet-store
+ Simple pet store written with the Spring framework
+ https://aws.amazon.com/lambda/
+
+
+ https://github.com/awslabs/aws-serverless-java-container.git
+
+
+
+
+ The Apache Software License, Version 2.0
+ http://www.apache.org/licenses/LICENSE-2.0.txt
+ repo
+
+
+
+
+ 1.8
+ 1.8
+ 5.3.25
+ 4.13.2
+ 2.19.0
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-function-adapter-aws-web
+ 3.2.9-SNAPSHOT
+
+
+
+ org.springframework
+ spring-context-indexer
+ ${spring.version}
+ true
+
+
+
+ org.apache.logging.log4j
+ log4j-core
+ ${log4j.version}
+
+
+
+ org.apache.logging.log4j
+ log4j-api
+ ${log4j.version}
+
+
+
+ org.apache.logging.log4j
+ log4j-slf4j-impl
+ ${log4j.version}
+
+
+
+ com.amazonaws
+ aws-lambda-java-log4j2
+ 1.5.1
+
+
+
+ junit
+ junit
+ ${junit.version}
+ test
+
+
+
+
+
+ shaded-jar
+
+
+
+ org.apache.maven.plugins
+ maven-shade-plugin
+ 3.2.4
+
+
+ package
+
+ shade
+
+
+ false
+
+
+
+
+
+
+
+
+
+ com.github.edwgiz
+ maven-shade-plugin.log4j2-cachefile-transformer
+ 2.8.1
+
+
+
+
+
+
+
+ assembly-zip
+
+ true
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-jar-plugin
+ 3.2.0
+
+
+ default-jar
+ none
+
+
+
+
+ org.apache.maven.plugins
+ maven-install-plugin
+ 3.0.0-M1
+
+ true
+
+
+
+
+ org.apache.maven.plugins
+ maven-dependency-plugin
+ 3.2.0
+
+
+ copy-dependencies
+ package
+
+ copy-dependencies
+
+
+ ${project.build.directory}/lib
+ runtime
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-assembly-plugin
+ 3.3.0
+
+
+ zip-assembly
+ package
+
+ single
+
+
+ ${project.artifactId}-${project.version}
+
+ src${file.separator}assembly${file.separator}bin.xml
+
+ false
+
+
+
+
+
+
+
+
+
diff --git a/spring-cloud-function-adapters/spring-cloud-function-serverless-web/sample/pet-store/src/assembly/bin.xml b/spring-cloud-function-adapters/spring-cloud-function-serverless-web/sample/pet-store/src/assembly/bin.xml
new file mode 100644
index 000000000..1ffd82d1c
--- /dev/null
+++ b/spring-cloud-function-adapters/spring-cloud-function-serverless-web/sample/pet-store/src/assembly/bin.xml
@@ -0,0 +1,24 @@
+
+ lambda-package
+
+ zip
+
+ false
+
+
+
+ ${project.build.directory}${file.separator}lib
+ lib
+
+
+
+ ${project.build.directory}${file.separator}classes
+
+ **
+
+ ${file.separator}
+
+
+
\ No newline at end of file
diff --git a/spring-cloud-function-adapters/spring-cloud-function-serverless-web/sample/pet-store/src/main/java/oz/spring/petstore/PetStoreSpringAppConfig.java b/spring-cloud-function-adapters/spring-cloud-function-serverless-web/sample/pet-store/src/main/java/oz/spring/petstore/PetStoreSpringAppConfig.java
new file mode 100644
index 000000000..3969ea641
--- /dev/null
+++ b/spring-cloud-function-adapters/spring-cloud-function-serverless-web/sample/pet-store/src/main/java/oz/spring/petstore/PetStoreSpringAppConfig.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright 2023-2023 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package oz.spring.petstore;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Import;
+import org.springframework.web.servlet.HandlerAdapter;
+import org.springframework.web.servlet.HandlerExceptionResolver;
+import org.springframework.web.servlet.HandlerMapping;
+import org.springframework.web.servlet.ModelAndView;
+import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter;
+import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
+
+
+@Configuration
+@Import({ PetsController.class })
+public class PetStoreSpringAppConfig {
+ /*
+ * Create required HandlerMapping, to avoid several default HandlerMapping instances being created
+ */
+ @Bean
+ public HandlerMapping handlerMapping() {
+ return new RequestMappingHandlerMapping();
+ }
+
+ /*
+ * Create required HandlerAdapter, to avoid several default HandlerAdapter instances being created
+ */
+ @Bean
+ public HandlerAdapter handlerAdapter() {
+ return new RequestMappingHandlerAdapter();
+ }
+
+ /*
+ * optimization - avoids creating default exception resolvers; not required as the serverless container handles
+ * all exceptions
+ *
+ * By default, an ExceptionHandlerExceptionResolver is created which creates many dependent object, including
+ * an expensive ObjectMapper instance.
+ *
+ * To enable custom @ControllerAdvice classes remove this bean.
+ */
+ @Bean
+ public HandlerExceptionResolver handlerExceptionResolver() {
+ return new HandlerExceptionResolver() {
+
+ @Override
+ public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
+ return null;
+ }
+ };
+ }
+}
diff --git a/spring-cloud-function-adapters/spring-cloud-function-serverless-web/sample/pet-store/src/main/java/oz/spring/petstore/PetsController.java b/spring-cloud-function-adapters/spring-cloud-function-serverless-web/sample/pet-store/src/main/java/oz/spring/petstore/PetsController.java
new file mode 100644
index 000000000..b04a26d92
--- /dev/null
+++ b/spring-cloud-function-adapters/spring-cloud-function-serverless-web/sample/pet-store/src/main/java/oz/spring/petstore/PetsController.java
@@ -0,0 +1,80 @@
+/*
+ * Copyright 2023-2023 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+package oz.spring.petstore;
+
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.config.annotation.EnableWebMvc;
+
+import oz.spring.petstore.model.Pet;
+import oz.spring.petstore.model.PetData;
+
+import java.security.Principal;
+import java.util.Optional;
+import java.util.UUID;
+
+@RestController
+@EnableWebMvc
+public class PetsController {
+ @RequestMapping(path = "/pets", method = RequestMethod.POST)
+ public Pet createPet(@RequestBody Pet newPet) {
+ if (newPet.getName() == null || newPet.getBreed() == null) {
+ return null;
+ }
+
+ Pet dbPet = newPet;
+ dbPet.setId(UUID.randomUUID().toString());
+ return dbPet;
+ }
+
+ @RequestMapping(path = "/pets", method = RequestMethod.GET)
+ public Pet[] listPets(@RequestParam("limit") Optional limit, Principal principal) {
+ int queryLimit = 10;
+ if (limit.isPresent()) {
+ queryLimit = limit.get();
+ }
+
+ Pet[] outputPets = new Pet[queryLimit];
+
+ for (int i = 0; i < queryLimit; i++) {
+ Pet newPet = new Pet();
+ newPet.setId(UUID.randomUUID().toString());
+ newPet.setName(PetData.getRandomName());
+ newPet.setBreed(PetData.getRandomBreed());
+ newPet.setDateOfBirth(PetData.getRandomDoB());
+ outputPets[i] = newPet;
+ }
+
+ return outputPets;
+ }
+
+ @GetMapping("favicon.ico")
+ @ResponseBody
+ void returnNoFavicon() {
+ }
+
+ @RequestMapping(path = "/pets/{petId}", method = RequestMethod.GET)
+ public Pet listPets() {
+ Pet newPet = new Pet();
+ newPet.setId(UUID.randomUUID().toString());
+ newPet.setBreed(PetData.getRandomBreed());
+ newPet.setDateOfBirth(PetData.getRandomDoB());
+ newPet.setName(PetData.getRandomName());
+ return newPet;
+ }
+
+}
diff --git a/spring-cloud-function-adapters/spring-cloud-function-serverless-web/sample/pet-store/src/main/java/oz/spring/petstore/model/Error.java b/spring-cloud-function-adapters/spring-cloud-function-serverless-web/sample/pet-store/src/main/java/oz/spring/petstore/model/Error.java
new file mode 100644
index 000000000..bb19a9027
--- /dev/null
+++ b/spring-cloud-function-adapters/spring-cloud-function-serverless-web/sample/pet-store/src/main/java/oz/spring/petstore/model/Error.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2023-2023 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package oz.spring.petstore.model;
+
+public class Error {
+ private String message;
+
+ public Error(String errorMessage) {
+ message = errorMessage;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+}
diff --git a/spring-cloud-function-adapters/spring-cloud-function-serverless-web/sample/pet-store/src/main/java/oz/spring/petstore/model/Pet.java b/spring-cloud-function-adapters/spring-cloud-function-serverless-web/sample/pet-store/src/main/java/oz/spring/petstore/model/Pet.java
new file mode 100644
index 000000000..20f170a99
--- /dev/null
+++ b/spring-cloud-function-adapters/spring-cloud-function-serverless-web/sample/pet-store/src/main/java/oz/spring/petstore/model/Pet.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2023-2023 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package oz.spring.petstore.model;
+
+import java.util.Date;
+
+public class Pet {
+ private String id;
+ private String breed;
+ private String name;
+ private Date dateOfBirth;
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getBreed() {
+ return breed;
+ }
+
+ public void setBreed(String breed) {
+ this.breed = breed;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public Date getDateOfBirth() {
+ return dateOfBirth;
+ }
+
+ public void setDateOfBirth(Date dateOfBirth) {
+ this.dateOfBirth = dateOfBirth;
+ }
+}
diff --git a/spring-cloud-function-adapters/spring-cloud-function-serverless-web/sample/pet-store/src/main/java/oz/spring/petstore/model/PetData.java b/spring-cloud-function-adapters/spring-cloud-function-serverless-web/sample/pet-store/src/main/java/oz/spring/petstore/model/PetData.java
new file mode 100644
index 000000000..1df3632cc
--- /dev/null
+++ b/spring-cloud-function-adapters/spring-cloud-function-serverless-web/sample/pet-store/src/main/java/oz/spring/petstore/model/PetData.java
@@ -0,0 +1,115 @@
+/*
+ * Copyright 2023-2023 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package oz.spring.petstore.model;
+
+import java.util.*;
+import java.util.concurrent.ThreadLocalRandom;
+
+public class PetData {
+ private static List breeds = new ArrayList<>();
+ static {
+ breeds.add("Afghan Hound");
+ breeds.add("Beagle");
+ breeds.add("Bernese Mountain Dog");
+ breeds.add("Bloodhound");
+ breeds.add("Dalmatian");
+ breeds.add("Jack Russell Terrier");
+ breeds.add("Norwegian Elkhound");
+ }
+
+ private static List names = new ArrayList<>();
+ static {
+ names.add("Bailey");
+ names.add("Bella");
+ names.add("Max");
+ names.add("Lucy");
+ names.add("Charlie");
+ names.add("Molly");
+ names.add("Buddy");
+ names.add("Daisy");
+ names.add("Rocky");
+ names.add("Maggie");
+ names.add("Jake");
+ names.add("Sophie");
+ names.add("Jack");
+ names.add("Sadie");
+ names.add("Toby");
+ names.add("Chloe");
+ names.add("Cody");
+ names.add("Bailey");
+ names.add("Buster");
+ names.add("Lola");
+ names.add("Duke");
+ names.add("Zoe");
+ names.add("Cooper");
+ names.add("Abby");
+ names.add("Riley");
+ names.add("Ginger");
+ names.add("Harley");
+ names.add("Roxy");
+ names.add("Bear");
+ names.add("Gracie");
+ names.add("Tucker");
+ names.add("Coco");
+ names.add("Murphy");
+ names.add("Sasha");
+ names.add("Lucky");
+ names.add("Lily");
+ names.add("Oliver");
+ names.add("Angel");
+ names.add("Sam");
+ names.add("Princess");
+ names.add("Oscar");
+ names.add("Emma");
+ names.add("Teddy");
+ names.add("Annie");
+ names.add("Winston");
+ names.add("Rosie");
+ }
+
+ public static List getBreeds() {
+ return breeds;
+ }
+
+ public static List getNames() {
+ return names;
+ }
+
+ public static String getRandomBreed() {
+ return breeds.get(ThreadLocalRandom.current().nextInt(0, breeds.size() - 1));
+ }
+
+ public static String getRandomName() {
+ return names.get(ThreadLocalRandom.current().nextInt(0, names.size() - 1));
+ }
+
+ public static Date getRandomDoB() {
+ GregorianCalendar gc = new GregorianCalendar();
+
+ int year = ThreadLocalRandom.current().nextInt(
+ Calendar.getInstance().get(Calendar.YEAR) - 15,
+ Calendar.getInstance().get(Calendar.YEAR)
+ );
+
+ gc.set(Calendar.YEAR, year);
+
+ int dayOfYear = ThreadLocalRandom.current().nextInt(1, gc.getActualMaximum(Calendar.DAY_OF_YEAR));
+
+ gc.set(Calendar.DAY_OF_YEAR, dayOfYear);
+ return gc.getTime();
+ }
+}
diff --git a/spring-cloud-function-adapters/spring-cloud-function-serverless-web/sample/pet-store/template.yml b/spring-cloud-function-adapters/spring-cloud-function-serverless-web/sample/pet-store/template.yml
new file mode 100644
index 000000000..7c5cea2e3
--- /dev/null
+++ b/spring-cloud-function-adapters/spring-cloud-function-serverless-web/sample/pet-store/template.yml
@@ -0,0 +1,37 @@
+AWSTemplateFormatVersion: '2010-09-09'
+Transform: AWS::Serverless-2016-10-31
+Description: Example Pet Store API written with spring-cloud-function web-proxy support
+
+Globals:
+ Api:
+ # API Gateway regional endpoints
+ EndpointConfiguration: REGIONAL
+
+Resources:
+ PetStoreFunction:
+ Type: AWS::Serverless::Function
+ Properties:
+ Handler: org.springframework.cloud.function.adapter.aws.web.WebProxyInvoker::handleRequest
+ Runtime: java11
+ CodeUri: .
+ MemorySize: 512
+ Policies: AWSLambdaBasicExecutionRole
+ Timeout: 30
+ Environment:
+ Variables:
+ MAIN_CLASS: oz.spring.petstore.PetStoreSpringAppConfig
+ Events:
+ HttpApiEvent:
+ Type: HttpApi
+ Properties:
+ TimeoutInMillis: 20000
+ PayloadFormatVersion: '1.0'
+
+Outputs:
+ SpringPetStoreApi:
+ Description: URL for application
+ Value: !Sub 'https://${ServerlessHttpApi}.execute-api.${AWS::Region}.amazonaws.com/pets'
+ Export:
+ Name: PetStoreLambda
+
+
diff --git a/spring-cloud-function-adapters/spring-cloud-function-serverless-web/src/main/java/org/springframework/cloud/function/serverless/web/HeaderValueHolder.java b/spring-cloud-function-adapters/spring-cloud-function-serverless-web/src/main/java/org/springframework/cloud/function/serverless/web/HeaderValueHolder.java
new file mode 100644
index 000000000..b654d2d3c
--- /dev/null
+++ b/spring-cloud-function-adapters/spring-cloud-function-serverless-web/src/main/java/org/springframework/cloud/function/serverless/web/HeaderValueHolder.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2023-2023 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.cloud.function.serverless.web;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.springframework.lang.Nullable;
+import org.springframework.util.CollectionUtils;
+
+class HeaderValueHolder {
+
+ private final List