From e48449c046bd4dc6c59c9539f6288a0272ba8937 Mon Sep 17 00:00:00 2001 From: Damien Metzler Date: Thu, 18 Apr 2019 11:58:36 -0700 Subject: [PATCH 001/888] expose the Jersey injection manager to be able to use it outside of Jersey resources --- .../jersey/JerseyLambdaContainerHandler.java | 9 +++ .../proxy/jersey/JerseyInjectionTest.java | 59 +++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyInjectionTest.java diff --git a/aws-serverless-java-container-jersey/src/main/java/com/amazonaws/serverless/proxy/jersey/JerseyLambdaContainerHandler.java b/aws-serverless-java-container-jersey/src/main/java/com/amazonaws/serverless/proxy/jersey/JerseyLambdaContainerHandler.java index 576d2b66c..dd9166f7d 100644 --- a/aws-serverless-java-container-jersey/src/main/java/com/amazonaws/serverless/proxy/jersey/JerseyLambdaContainerHandler.java +++ b/aws-serverless-java-container-jersey/src/main/java/com/amazonaws/serverless/proxy/jersey/JerseyLambdaContainerHandler.java @@ -34,6 +34,7 @@ import com.amazonaws.services.lambda.runtime.Context; import org.glassfish.jersey.internal.inject.AbstractBinder; +import org.glassfish.jersey.internal.inject.InjectionManager; import org.glassfish.jersey.process.internal.RequestScoped; import org.glassfish.jersey.server.ResourceConfig; @@ -196,4 +197,12 @@ public void initialize() { Timer.stop("JERSEY_COLD_START_INIT"); initialized = true; } + + + public InjectionManager getInjectionManager() { + if (!initialized) { + initialize(); + } + return jerseyFilter.getApplicationHandler().getInjectionManager(); + } } diff --git a/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyInjectionTest.java b/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyInjectionTest.java new file mode 100644 index 000000000..0af2785ee --- /dev/null +++ b/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyInjectionTest.java @@ -0,0 +1,59 @@ +/* + * Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance + * with the License. A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.proxy.jersey; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import javax.inject.Singleton; + +import org.glassfish.jersey.internal.inject.AbstractBinder; +import org.glassfish.jersey.media.multipart.MultiPartFeature; +import org.glassfish.jersey.server.ResourceConfig; +import org.junit.Test; + +import com.amazonaws.serverless.proxy.model.AwsProxyRequest; +import com.amazonaws.serverless.proxy.model.AwsProxyResponse; + +/** + * Test that one can access the Jersey injection manager + */ +public class JerseyInjectionTest { + + // Test ressource binder + private static class ResourceBinder extends AbstractBinder { + + @Override + protected void configure() { + bind(new JerseyInjectionTest()).to(JerseyInjectionTest.class).in(Singleton.class); + } + + } + + private static ResourceConfig app = new ResourceConfig().register(MultiPartFeature.class) + .register(new ResourceBinder()); + + private static JerseyLambdaContainerHandler handler = JerseyLambdaContainerHandler.getAwsProxyHandler( + app); + + @Test + public void can_get_injected_resources() throws Exception { + + JerseyInjectionTest instance1 = handler.getInjectionManager().getInstance(JerseyInjectionTest.class); + assertNotNull(instance1); + + JerseyInjectionTest instance2 = handler.getInjectionManager().getInstance(JerseyInjectionTest.class); + assertEquals(instance1, instance2); + + } +} From 2a4de7fa06d2ad0aef53444f0b6b80287c016b47 Mon Sep 17 00:00:00 2001 From: sapessi Date: Thu, 20 Jun 2019 08:41:12 -0700 Subject: [PATCH 002/888] Bump jackson version to 2.9.9 to address security alerts --- aws-serverless-java-container-core/pom.xml | 2 +- aws-serverless-java-container-jersey/pom.xml | 2 +- aws-serverless-java-container-spring/pom.xml | 2 +- aws-serverless-java-container-struts2/pom.xml | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/jersey/pet-store/pom.xml | 2 +- samples/spark/pet-store/pom.xml | 2 +- samples/struts/pet-store/pom.xml | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 02a535a35..82d218f9d 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -16,7 +16,7 @@ - 2.9.8 + 2.9.9 2.1 3.1.0 diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index b278936f0..f92c9d702 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -60,7 +60,7 @@ com.fasterxml.jackson.core jackson-databind - 2.9.8 + 2.9.9 true test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 22ce578bd..bbab50a57 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -19,7 +19,7 @@ 5.1.1.RELEASE 1.5.17.RELEASE 5.1.1.RELEASE - 2.9.8 + 2.9.9 diff --git a/aws-serverless-java-container-struts2/pom.xml b/aws-serverless-java-container-struts2/pom.xml index 49942915c..f981e0876 100644 --- a/aws-serverless-java-container-struts2/pom.xml +++ b/aws-serverless-java-container-struts2/pom.xml @@ -16,7 +16,7 @@ 2.5.20 - 2.9.8 + 2.9.9 diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml index b94697c7f..549511720 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml @@ -15,7 +15,7 @@ 1.8 1.8 2.27 - 2.9.8 + 2.9.9 diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml index eec41cd2a..ca9d4dd18 100644 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 1.8 - 2.9.8 + 2.9.9 2.8.0 diff --git a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml index a1ca2962f..3e224f4a5 100644 --- a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 1.8 2.5.20 - 2.9.8 + 2.9.9 4.12 2.11.1 diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index daf6b67c0..d85e13b08 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -77,7 +77,7 @@ com.fasterxml.jackson.core jackson-databind - 2.9.8 + 2.9.9 diff --git a/samples/spark/pet-store/pom.xml b/samples/spark/pet-store/pom.xml index 09502efd0..32181f3c9 100644 --- a/samples/spark/pet-store/pom.xml +++ b/samples/spark/pet-store/pom.xml @@ -26,7 +26,7 @@ 1.8 1.8 - 2.9.8 + 2.9.9 2.8.0 diff --git a/samples/struts/pet-store/pom.xml b/samples/struts/pet-store/pom.xml index b104bd716..5763b94a8 100644 --- a/samples/struts/pet-store/pom.xml +++ b/samples/struts/pet-store/pom.xml @@ -27,7 +27,7 @@ 1.8 1.8 2.5.20 - 2.9.8 + 2.9.9 4.12 2.11.1 From 2d1646380d9c0a09428c84f7f030952372f1754d Mon Sep 17 00:00:00 2001 From: sapessi Date: Thu, 20 Jun 2019 09:06:16 -0700 Subject: [PATCH 003/888] Added tests to validate #262 and jackson annotation to isBase64Encoded field in the request object --- .../proxy/model/AwsProxyRequest.java | 3 +- .../proxy/model/AwsProxyRequestTest.java | 92 ++++++++++++++++++- 2 files changed, 90 insertions(+), 5 deletions(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/AwsProxyRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/AwsProxyRequest.java index afea70f98..d361d6741 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/AwsProxyRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/AwsProxyRequest.java @@ -14,6 +14,7 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; import java.util.HashMap; import java.util.Map; @@ -167,7 +168,7 @@ public void setPath(String path) { this.path = path; } - + @JsonProperty("isBase64Encoded") public boolean isBase64Encoded() { return isBase64Encoded; } diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/model/AwsProxyRequestTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/model/AwsProxyRequestTest.java index 6763bbda5..0b82c4bd3 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/model/AwsProxyRequestTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/model/AwsProxyRequestTest.java @@ -1,12 +1,13 @@ package com.amazonaws.serverless.proxy.model; import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; +import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.Test; import java.io.IOException; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; +import static junit.framework.TestCase.assertTrue; +import static org.junit.Assert.*; public class AwsProxyRequestTest { private static final String CUSTOM_HEADER_KEY_LOWER_CASE = "custom-header"; @@ -67,13 +68,96 @@ public class AwsProxyRequestTest { " \"apiId\": \"apiId\"\n" + " },\n" + " \"body\": null,\n" + - " \"isBase64Encoded\": false\n" + + " \"isBase64Encoded\": true\n" + "}"; @Test public void deserialize_multiValuedHeaders_caseInsensitive() throws IOException { - AwsProxyRequest req = new AwsProxyRequestBuilder().fromJsonString(REQUEST_JSON).build(); + AwsProxyRequest req = new AwsProxyRequestBuilder() + .fromJsonString(getRequestJson(true, CUSTOM_HEADER_KEY_LOWER_CASE, CUSTOM_HEADER_VALUE)).build(); assertNotNull(req.getMultiValueHeaders().get(CUSTOM_HEADER_KEY_LOWER_CASE.toUpperCase())); assertEquals(CUSTOM_HEADER_VALUE, req.getMultiValueHeaders().get(CUSTOM_HEADER_KEY_LOWER_CASE.toUpperCase()).get(0)); + assertTrue(req.isBase64Encoded()); + } + + @Test + public void deserialize_base64Encoded_readsBoolCorrectly() throws IOException { + AwsProxyRequest req = new AwsProxyRequestBuilder() + .fromJsonString(getRequestJson(true, CUSTOM_HEADER_KEY_LOWER_CASE, CUSTOM_HEADER_VALUE)).build(); + assertTrue(req.isBase64Encoded()); + req = new AwsProxyRequestBuilder() + .fromJsonString(getRequestJson(false, CUSTOM_HEADER_KEY_LOWER_CASE, CUSTOM_HEADER_VALUE)).build(); + assertFalse(req.isBase64Encoded()); + } + + @Test + public void serialize_base64Encoded_fieldContainsIsPrefix() throws IOException { + AwsProxyRequest req = new AwsProxyRequestBuilder() + .fromJsonString(getRequestJson(true, CUSTOM_HEADER_KEY_LOWER_CASE, CUSTOM_HEADER_VALUE)).build(); + ObjectMapper mapper = new ObjectMapper(); + String serializedRequest = mapper.writeValueAsString(req); + System.out.println(serializedRequest); + assertTrue(serializedRequest.contains("\"isBase64Encoded\":true")); + } + + private String getRequestJson(boolean base64Encoded, String headerKey, String headerValue) { + return "{\n" + + " \"resource\": \"/api/{proxy+}\",\n" + + " \"path\": \"/api/endpoint\",\n" + + " \"httpMethod\": \"OPTIONS\",\n" + + " \"headers\": {\n" + + " \"Accept\": \"*/*\",\n" + + " \"User-Agent\": \"PostmanRuntime/7.1.1\",\n" + + " \"" + headerKey +"\":" + "\"" + headerValue + "\"\n" + + " },\n" + + " \"multiValueHeaders\": {\n" + + " \"Accept\": [\n" + + " \"*/*\"\n" + + " ],\n" + + " \"User-Agent\": [\n" + + " \"PostmanRuntime/7.1.1\"\n" + + " ],\n" + + " \"" + headerKey + "\": [\n" + + " \"" + headerValue + "\"\n" + + " ]\n" + + " },\n" + + " \"queryStringParameters\": null,\n" + + " \"multiValueQueryStringParameters\": null,\n" + + " \"pathParameters\": {\n" + + " \"proxy\": \"endpoint\"\n" + + " },\n" + + " \"stageVariables\": null,\n" + + " \"requestContext\": {\n" + + " \"resourceId\": null,\n" + + " \"resourcePath\": \"/api/{proxy+}\",\n" + + " \"httpMethod\": \"OPTIONS\",\n" + + " \"extendedRequestId\": null,\n" + + " \"requestTime\": \"15/Dec/2018:20:37:47 +0000\",\n" + + " \"path\": \"/api/endpoint\",\n" + + " \"accountId\": null,\n" + + " \"protocol\": \"HTTP/1.1\",\n" + + " \"stage\": \"stage_name\",\n" + + " \"domainPrefix\": null,\n" + + " \"requestTimeEpoch\": 1544906267828,\n" + + " \"requestId\": null,\n" + + " \"identity\": {\n" + + " \"cognitoIdentityPoolId\": null,\n" + + " \"accountId\": null,\n" + + " \"cognitoIdentityId\": null,\n" + + " \"caller\": null,\n" + + " \"sourceIp\": \"54.240.196.171\",\n" + + " \"accessKey\": null,\n" + + " \"cognitoAuthenticationType\": null,\n" + + " \"cognitoAuthenticationProvider\": null,\n" + + " \"userArn\": null,\n" + + " \"userAgent\": \"PostmanRuntime/7.1.1\",\n" + + " \"user\": null\n" + + " },\n" + + " \"domainName\": \"https://apiId.execute-api.eu-central-1.amazonaws.com/\",\n" + + " \"apiId\": \"apiId\"\n" + + " },\n" + + " \"body\": null,\n" + + " \"isBase64Encoded\": " + (base64Encoded?"true":"false") + "\n" + + "}"; } } From 0e6468c5be98e38352a84c002db258fe46f05eb9 Mon Sep 17 00:00:00 2001 From: sapessi Date: Thu, 20 Jun 2019 09:08:01 -0700 Subject: [PATCH 004/888] Changed log message severity in setCharacterEncoding to debug to address issue #261 --- .../proxy/internal/servlet/AwsProxyHttpServletRequest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java index 7783a95a6..96c925b76 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java @@ -366,7 +366,7 @@ public void setCharacterEncoding(String s) throws UnsupportedEncodingException { String currentContentType = request.getMultiValueHeaders().getFirst(HttpHeaders.CONTENT_TYPE); if (currentContentType == null || "".equals(currentContentType)) { - log.error("Called set character encoding to " + SecurityUtils.crlf(s) + " on a request without a content type. Character encoding will not be set"); + log.debug("Called set character encoding to " + SecurityUtils.crlf(s) + " on a request without a content type. Character encoding will not be set"); return; } From 4032d14733c43a48e09634e3136c29fc2ccac642 Mon Sep 17 00:00:00 2001 From: sapessi Date: Thu, 20 Jun 2019 10:34:03 -0700 Subject: [PATCH 005/888] Change parse header function to handle base64 encoded values in headers (#263) --- .../internal/servlet/AwsHttpServletRequest.java | 12 +++++++++++- .../internal/servlet/AwsHttpServletRequestTest.java | 12 ++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java index 86ce62500..7fa9d138f 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java @@ -13,12 +13,18 @@ package com.amazonaws.serverless.proxy.internal.servlet; import com.amazonaws.serverless.proxy.RequestReader; +import com.amazonaws.serverless.proxy.internal.LambdaContainerHandler; import com.amazonaws.serverless.proxy.internal.SecurityUtils; import com.amazonaws.serverless.proxy.model.AwsProxyRequestContext; import com.amazonaws.serverless.proxy.model.ContainerConfig; import com.amazonaws.serverless.proxy.model.MultiValuedTreeMap; import com.amazonaws.services.lambda.runtime.Context; +import com.fasterxml.jackson.core.JsonProcessingException; +import org.apache.http.HeaderElement; +import org.apache.http.message.BasicHeaderValueParser; +import org.apache.http.message.ParserCursor; +import org.apache.http.util.CharArrayBuffer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -77,6 +83,7 @@ public abstract class AwsHttpServletRequest implements HttpServletRequest { private ServletContext servletContext; private AwsHttpSession session; private String queryString; + private BasicHeaderValueParser headerParser; protected DispatcherType dispatcherType; @@ -95,6 +102,7 @@ public abstract class AwsHttpServletRequest implements HttpServletRequest { AwsHttpServletRequest(Context lambdaContext) { this.lambdaContext = lambdaContext; attributes = new HashMap<>(); + headerParser = new BasicHeaderValueParser(); } @@ -352,6 +360,7 @@ protected List parseHeaderValue(String headerValue, String valueSep // Accept: text/html, application/xhtml+xml, application/xml;q=0.9, */*;q=0.8 // Accept-Language: fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5 // Cookie: name=value; name2=value2; name3=value3 + // X-Custom-Header: YQ== List values = new ArrayList<>(); if (headerValue == null) { @@ -365,7 +374,8 @@ protected List parseHeaderValue(String headerValue, String valueSep newValue.setRawValue(v); for (String q : curValue.split(qualifierSeparator)) { - if (q.contains(HEADER_KEY_VALUE_SEPARATOR)) { + // contains key/value pairs and it's not a base64-encoded value. + if (q.contains(HEADER_KEY_VALUE_SEPARATOR) && !q.trim().endsWith("==")) { String[] kv = q.split(HEADER_KEY_VALUE_SEPARATOR); // TODO: Should we concatenate the rest of the values? if (newValue.getValue() == null) { diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestTest.java index 453a01af6..c0f20f193 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestTest.java @@ -14,6 +14,7 @@ import static org.junit.Assert.*; +import java.util.Base64; import java.util.List; @@ -75,6 +76,17 @@ public void headers_parseHeaderValue_complexAccept() { assertEquals(4, values.size()); } + @Test + public void headers_parseHeaderValue_encodedContentWithEquals() { + AwsHttpServletRequest context = new AwsProxyHttpServletRequest(null,null,null); + + String value = Base64.getUrlEncoder().encodeToString("a".getBytes()); + + List result = context.parseHeaderValue(value); + + assertEquals("YQ==", result.get(0).getValue()); + } + @Test public void queryString_generateQueryString_validQuery() { AwsProxyHttpServletRequest request = new AwsProxyHttpServletRequest(queryString, mockContext, null, config); From 9098e3e6e44b69c06f5e368b2fc9fc64554af941 Mon Sep 17 00:00:00 2001 From: sapessi Date: Thu, 20 Jun 2019 10:43:29 -0700 Subject: [PATCH 006/888] Fixed bug with multipart form field name and file name being inverted and added unit test (#258) --- .../proxy/internal/servlet/AwsProxyHttpServletRequest.java | 4 ++-- .../servlet/AwsProxyHttpServletRequestFormTest.java | 6 +++++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java index 96c925b76..dd77135fa 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java @@ -709,8 +709,8 @@ private Map getMultipartFormParametersMap() { for (FileItem item : items) { String fileName = FilenameUtils.getName(item.getName()); AwsProxyRequestPart newPart = new AwsProxyRequestPart(item.get()); - newPart.setName(fileName); - newPart.setSubmittedFileName(item.getFieldName()); + newPart.setName(item.getFieldName()); + newPart.setSubmittedFileName(fileName); newPart.setContentType(item.getContentType()); newPart.setSize(item.getSize()); item.getHeaders().getHeaderNames().forEachRemaining(h -> { diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestFormTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestFormTest.java index ff09b7dd6..b20982b7c 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestFormTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestFormTest.java @@ -6,6 +6,7 @@ import org.apache.commons.io.IOUtils; import org.apache.http.HttpEntity; +import org.apache.http.entity.ContentType; import org.apache.http.entity.mime.MultipartEntityBuilder; import org.junit.Test; @@ -31,6 +32,7 @@ public class AwsProxyHttpServletRequestFormTest { private static final String PART_KEY_2 = "test2"; private static final String PART_VALUE_2 = "value2"; private static final String FILE_KEY = "file_upload_1"; + private static final String FILE_NAME = "testImage.jpg"; private static final String ENCODED_VALUE = "test123a%3D1%262@3"; @@ -46,7 +48,7 @@ public class AwsProxyHttpServletRequestFormTest { private static final HttpEntity MULTIPART_BINARY_DATA = MultipartEntityBuilder.create() .addTextBody(PART_KEY_1, PART_VALUE_1) .addTextBody(PART_KEY_2, PART_VALUE_2) - .addBinaryBody(FILE_KEY, FILE_BYTES) + .addBinaryBody(FILE_KEY, FILE_BYTES, ContentType.IMAGE_JPEG, FILE_NAME) .build(); private static final String ENCODED_FORM_ENTITY = PART_KEY_1 + "=" + ENCODED_VALUE + "&" + PART_KEY_2 + "=" + PART_VALUE_2; @@ -99,6 +101,8 @@ public void multipart_getParts_binary() { assertEquals(3, request.getParts().size()); assertNotNull(request.getPart(FILE_KEY)); assertEquals(FILE_SIZE, request.getPart(FILE_KEY).getSize()); + assertEquals(FILE_KEY, request.getPart(FILE_KEY).getName()); + assertEquals(FILE_NAME, request.getPart(FILE_KEY).getSubmittedFileName()); assertEquals(PART_VALUE_1, IOUtils.toString(request.getPart(PART_KEY_1).getInputStream())); assertEquals(PART_VALUE_2, IOUtils.toString(request.getPart(PART_KEY_2).getInputStream())); } catch (IOException | ServletException e) { From c6f96b4f0b444a90c6b28ca390c7310ccd1c97af Mon Sep 17 00:00:00 2001 From: sapessi Date: Thu, 20 Jun 2019 11:08:59 -0700 Subject: [PATCH 007/888] Fix for empty header values as well as empty query string values (#247) --- .../servlet/AwsHttpServletRequest.java | 27 ++++++++++++------- .../servlet/AwsHttpServletRequestTest.java | 15 +++++++++++ 2 files changed, 32 insertions(+), 10 deletions(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java index 7fa9d138f..3aabc35ff 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java @@ -320,10 +320,12 @@ protected String generateQueryString(MultiValuedTreeMap paramete queryStringBuilder.append(key); } queryStringBuilder.append("="); - if (encode) { - queryStringBuilder.append(URLEncoder.encode(val, encodeCharset)); - } else { - queryStringBuilder.append(val); + if (val != null) { + if (encode) { + queryStringBuilder.append(URLEncoder.encode(val, encodeCharset)); + } else { + queryStringBuilder.append(val); + } } } } @@ -342,7 +344,7 @@ protected String generateQueryString(MultiValuedTreeMap paramete * @param headerValue The value to be parsed * @return A list of SimpleMapEntry objects with all of the possible values for the header. */ - protected List parseHeaderValue(String headerValue) { + protected List parseHeaderValue(String headerValue) { return parseHeaderValue(headerValue, HEADER_VALUE_SEPARATOR, HEADER_QUALIFIER_SEPARATOR); } @@ -377,16 +379,21 @@ protected List parseHeaderValue(String headerValue, String valueSep // contains key/value pairs and it's not a base64-encoded value. if (q.contains(HEADER_KEY_VALUE_SEPARATOR) && !q.trim().endsWith("==")) { String[] kv = q.split(HEADER_KEY_VALUE_SEPARATOR); + String key = kv[0].trim(); + String val = null; + if (kv.length > 1) { + val = kv[1].trim(); + } // TODO: Should we concatenate the rest of the values? if (newValue.getValue() == null) { - newValue.setKey(kv[0].trim()); - newValue.setValue(kv[1].trim()); + newValue.setKey(key); + newValue.setValue(val); } else { // special case for quality q= - if ("q".equals(kv[0].trim())) { - curPreference = Float.parseFloat(kv[1].trim()); + if ("q".equals(key)) { + curPreference = Float.parseFloat(val); } else { - newValue.addAttribute(kv[0].trim(), kv[1].trim()); + newValue.addAttribute(key, val); } } } else { diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestTest.java index c0f20f193..15a98c0c2 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestTest.java @@ -28,6 +28,8 @@ public class AwsHttpServletRequestTest { .header(HttpHeaders.ACCEPT, "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8").build(); private static final AwsProxyRequest queryString = new AwsProxyRequestBuilder("/test", "GET") .queryString("one", "two").queryString("three", "four").build(); + private static final AwsProxyRequest queryStringNullValue = new AwsProxyRequestBuilder("/test", "GET") + .queryString("one", "two").queryString("three", null).build(); private static final AwsProxyRequest encodedQueryString = new AwsProxyRequestBuilder("/test", "GET") .queryString("one", "two").queryString("json", "{\"name\":\"faisal\"}").build(); private static final AwsProxyRequest multipleParams = new AwsProxyRequestBuilder("/test", "GET") @@ -104,6 +106,19 @@ public void queryString_generateQueryString_validQuery() { assertTrue(parsedString.contains("&") && parsedString.indexOf("&") > 0 && parsedString.indexOf("&") < parsedString.length()); } + @Test + public void queryString_generateQueryString_nullParameterIsEmpty() { + AwsProxyHttpServletRequest request = new AwsProxyHttpServletRequest(queryStringNullValue, mockContext, null, config);String parsedString = null; + try { + parsedString = request.generateQueryString(request.getAwsProxyRequest().getMultiValueQueryStringParameters(), true, config.getUriEncoding()); + } catch (ServletException e) { + e.printStackTrace(); + fail("Could not generate query string"); + } + + assertTrue(parsedString.endsWith("three=")); + } + @Test public void queryStringWithEncodedParams_generateQueryString_validQuery() { AwsProxyHttpServletRequest request = new AwsProxyHttpServletRequest(encodedQueryString, mockContext, null, config); From 6cf2398a1578449b5599a178e819c9e69d17ccf8 Mon Sep 17 00:00:00 2001 From: sapessi Date: Thu, 20 Jun 2019 11:48:21 -0700 Subject: [PATCH 008/888] Additional unit tests on Jersey to validate that it honors the produces annotations (#250) --- .../proxy/jersey/EchoJerseyResource.java | 8 ++++++++ .../proxy/jersey/JerseyAwsProxyTest.java | 14 ++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/EchoJerseyResource.java b/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/EchoJerseyResource.java index 1e62291d8..da67dcf36 100644 --- a/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/EchoJerseyResource.java +++ b/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/EchoJerseyResource.java @@ -41,6 +41,7 @@ import java.io.IOException; import java.io.InputStream; import java.util.Enumeration; +import java.util.HashMap; import java.util.List; import java.util.Random; @@ -272,4 +273,11 @@ public Response fileSize(@FormDataParam("file") final File uploadedFile, return Response.status(500).build(); } } + + @Path("/plain") @GET + @Produces(MediaType.TEXT_PLAIN) + @Consumes(MediaType.APPLICATION_JSON) + public Response plain() { + return Response.status(200).entity("Hello!").build(); + } } diff --git a/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyAwsProxyTest.java b/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyAwsProxyTest.java index 491797957..c54de6c5a 100644 --- a/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyAwsProxyTest.java +++ b/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyAwsProxyTest.java @@ -363,6 +363,20 @@ public void refererHeader_headerParam_expectCorrectInjection() { validateSingleValueModel(resp, refererValue); } + @Test + public void textPlainContent_plain_responseHonorsContentType() { + AwsProxyRequest req = getRequestBuilder("/echo/plain", "GET") + .nullBody() + .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON) + .header(HttpHeaders.ACCEPT, MediaType.TEXT_PLAIN) + .build(); + + AwsProxyResponse resp = handler.proxy(req, lambdaContext); + assertEquals(200, resp.getStatusCode()); + assertTrue(resp.getMultiValueHeaders().containsKey(HttpHeaders.CONTENT_TYPE)); + assertEquals(MediaType.TEXT_PLAIN, resp.getMultiValueHeaders().get(HttpHeaders.CONTENT_TYPE).get(0)); + } + private void validateMapResponseModel(AwsProxyResponse output) { validateMapResponseModel(output, CUSTOM_HEADER_KEY, CUSTOM_HEADER_VALUE); } From c01c98fc338138d264bb2dd0ff823ce22d4bf8ad Mon Sep 17 00:00:00 2001 From: sapessi Date: Fri, 21 Jun 2019 11:03:03 -0700 Subject: [PATCH 009/888] Fixed a potential null pointer in security utils and simplified header processing to continue addressing the feedback in #263 --- .../proxy/internal/SecurityUtils.java | 3 + .../servlet/AwsHttpServletRequest.java | 59 +++++++++++-------- .../servlet/AwsHttpServletRequestTest.java | 41 ++++++++++++- 3 files changed, 76 insertions(+), 27 deletions(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/SecurityUtils.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/SecurityUtils.java index 03dced873..1d39d849b 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/SecurityUtils.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/SecurityUtils.java @@ -70,6 +70,9 @@ public static boolean isValidHost(String host, String apiId, String region) { * @return A copy of the original string without CRLF characters */ public static String crlf(String s) { + if (s == null) { + return null; + } return s.replaceAll("[\r\n]", ""); } diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java index 3aabc35ff..8712285ac 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java @@ -13,18 +13,13 @@ package com.amazonaws.serverless.proxy.internal.servlet; import com.amazonaws.serverless.proxy.RequestReader; -import com.amazonaws.serverless.proxy.internal.LambdaContainerHandler; import com.amazonaws.serverless.proxy.internal.SecurityUtils; import com.amazonaws.serverless.proxy.model.AwsProxyRequestContext; import com.amazonaws.serverless.proxy.model.ContainerConfig; import com.amazonaws.serverless.proxy.model.MultiValuedTreeMap; import com.amazonaws.services.lambda.runtime.Context; -import com.fasterxml.jackson.core.JsonProcessingException; -import org.apache.http.HeaderElement; import org.apache.http.message.BasicHeaderValueParser; -import org.apache.http.message.ParserCursor; -import org.apache.http.util.CharArrayBuffer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -376,31 +371,44 @@ protected List parseHeaderValue(String headerValue, String valueSep newValue.setRawValue(v); for (String q : curValue.split(qualifierSeparator)) { - // contains key/value pairs and it's not a base64-encoded value. - if (q.contains(HEADER_KEY_VALUE_SEPARATOR) && !q.trim().endsWith("==")) { - String[] kv = q.split(HEADER_KEY_VALUE_SEPARATOR); - String key = kv[0].trim(); - String val = null; - if (kv.length > 1) { - val = kv[1].trim(); + + String[] kv = q.split(HEADER_KEY_VALUE_SEPARATOR, 2); + String key = null; + String val = null; + // no separator, set the value only + if (kv.length == 1) { + val = q.trim(); + } + // we have a separator + if (kv.length == 2) { + // if the length of the value is 0 we assume that we are looking at a + // base64 encoded value with padding so we just set the value. This is because + // we assume that empty values in a key/value pair will contain at least a white space + if (kv[1].length() == 0) { + val = q.trim(); } - // TODO: Should we concatenate the rest of the values? - if (newValue.getValue() == null) { - newValue.setKey(key); - newValue.setValue(val); - } else { - // special case for quality q= - if ("q".equals(key)) { - curPreference = Float.parseFloat(val); - } else { - newValue.addAttribute(key, val); - } + // this was a base64 string with an additional = for padding, set the value only + if ("=".equals(kv[1].trim())) { + val = q.trim(); + } else { // it's a proper key/value set both + key = kv[0].trim(); + val = ("".equals(kv[1].trim()) ? null : kv[1].trim()); } + } + + if (newValue.getValue() == null) { + newValue.setKey(key); + newValue.setValue(val); } else { - newValue.setValue(q.trim()); + // special case for quality q= + if ("q".equals(key)) { + curPreference = Float.parseFloat(val); + } else { + newValue.addAttribute(key, val); + } } - newValue.setPriority(curPreference); } + newValue.setPriority(curPreference); values.add(newValue); } @@ -428,7 +436,6 @@ protected String decodeRequestPath(String requestPath, ContainerConfig config) { } - /** * Class that represents a header value. */ diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestTest.java index 15a98c0c2..3cebc02fb 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestTest.java @@ -10,6 +10,7 @@ import org.junit.Test; import javax.servlet.ServletException; +import javax.servlet.http.Cookie; import javax.ws.rs.core.HttpHeaders; import static org.junit.Assert.*; @@ -85,10 +86,48 @@ public void headers_parseHeaderValue_encodedContentWithEquals() { String value = Base64.getUrlEncoder().encodeToString("a".getBytes()); List result = context.parseHeaderValue(value); - + assertTrue(result.size() > 0); assertEquals("YQ==", result.get(0).getValue()); } + @Test + public void headers_parseHeaderValue_base64EncodedCookieValue() { + String value = Base64.getUrlEncoder().encodeToString("a".getBytes()); + String cookieValue = "jwt=" + value + "; secondValue=second"; + AwsProxyRequest req = new AwsProxyRequestBuilder("/test", "GET").header(HttpHeaders.COOKIE, cookieValue).build(); + AwsHttpServletRequest context = new AwsProxyHttpServletRequest(req,null,null); + + Cookie[] cookies = context.getCookies(); + + assertEquals(2, cookies.length); + assertEquals("jwt", cookies[0].getName()); + assertEquals(value, cookies[0].getValue()); + } + + @Test + public void headers_parseHeaderValue_cookieWithSeparatorInValue() { + String cookieValue = "jwt==test; secondValue=second"; + AwsProxyRequest req = new AwsProxyRequestBuilder("/test", "GET").header(HttpHeaders.COOKIE, cookieValue).build(); + AwsHttpServletRequest context = new AwsProxyHttpServletRequest(req,null,null); + + Cookie[] cookies = context.getCookies(); + + assertEquals(2, cookies.length); + assertEquals("jwt", cookies[0].getName()); + assertEquals("=test", cookies[0].getValue()); + } + + @Test + public void headers_parseHeaderValue_headerWithPaddingButNotBase64Encoded() { + AwsHttpServletRequest context = new AwsProxyHttpServletRequest(null,null,null); + + List result = context.parseHeaderValue("hello="); + assertTrue(result.size() > 0); + assertEquals("hello", result.get(0).getKey()); + System.out.println("\"" + result.get(0).getValue() + "\""); + assertNull(result.get(0).getValue()); + } + @Test public void queryString_generateQueryString_validQuery() { AwsProxyHttpServletRequest request = new AwsProxyHttpServletRequest(queryString, mockContext, null, config); From f25293917725374804b08e00fa44408d6e5e22f9 Mon Sep 17 00:00:00 2001 From: sapessi Date: Wed, 26 Jun 2019 13:40:40 -0700 Subject: [PATCH 010/888] Added unit test for static files (#254) and fixed typo in unit test name --- .../proxy/spring/SpringAwsProxyTest.java | 2 +- .../proxy/spring/SpringBootAppTest.java | 16 ++++++++++++++++ .../src/test/resources/static/static.html | 5 +++++ 3 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 aws-serverless-java-container-spring/src/test/resources/static/static.html diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringAwsProxyTest.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringAwsProxyTest.java index e287aa953..3fe730da1 100644 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringAwsProxyTest.java +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringAwsProxyTest.java @@ -382,7 +382,7 @@ public void contextPath_generateLink_returnsCorrectPath() { } @Test - public void multipart_getFileName_rerutrnsCorrectFileName() + public void multipart_getFileName_returnsCorrectFileName() throws IOException { AwsProxyRequest request = new AwsProxyRequestBuilder("/echo/attachment", "POST") .formFilePart("testFile", "myFile.txt", "hello".getBytes()) diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringBootAppTest.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringBootAppTest.java index 5e3922f7a..f27d6e57a 100644 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringBootAppTest.java +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringBootAppTest.java @@ -1,6 +1,7 @@ package com.amazonaws.serverless.proxy.spring; +import com.amazonaws.serverless.proxy.internal.LambdaContainerHandler; import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; import com.amazonaws.serverless.proxy.internal.testutils.MockLambdaContext; import com.amazonaws.serverless.proxy.model.AwsProxyRequest; @@ -13,6 +14,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.Test; +import javax.ws.rs.core.HttpHeaders; import java.io.IOException; import static org.junit.Assert.*; @@ -74,6 +76,20 @@ public void queryString_commaSeparatedList_expectUnmarshalAsList() { validateSingleValueModel(resp, "3"); } + @Test + public void staticContent_getHtmlFile_returnsHtmlContent() { + LambdaContainerHandler.getContainerConfig().addValidFilePath("/Users/bulianis/workspace/aws-serverless-java-container/aws-serverless-java-container-spring"); + AwsProxyRequest request = new AwsProxyRequestBuilder("/static.html", "GET") + .header(HttpHeaders.ACCEPT, "text/html") + .header(HttpHeaders.CONTENT_TYPE, "text/plain") + .build(); + AwsProxyResponse output = handler.handleRequest(request, context); + System.out.println("Response: " + output.getBody()); + assertEquals(200, output.getStatusCode()); + assertTrue(output.getBody().contains("

Static

")); + } + + private void validateSingleValueModel(AwsProxyResponse output, String value) { try { SingleValueModel response = mapper.readValue(output.getBody(), SingleValueModel.class); diff --git a/aws-serverless-java-container-spring/src/test/resources/static/static.html b/aws-serverless-java-container-spring/src/test/resources/static/static.html new file mode 100644 index 000000000..5231067b7 --- /dev/null +++ b/aws-serverless-java-container-spring/src/test/resources/static/static.html @@ -0,0 +1,5 @@ + + +

Static

+ + \ No newline at end of file From 120129687af65ab4bf9f8d09d87e5b31645aa495 Mon Sep 17 00:00:00 2001 From: sapessi Date: Wed, 26 Jun 2019 13:55:00 -0700 Subject: [PATCH 011/888] Added null check before reading from the request input stream (#147) --- .../proxy/internal/servlet/AwsProxyHttpServletRequest.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java index dd77135fa..a4d0ab816 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java @@ -892,6 +892,9 @@ public void setReadListener(ReadListener readListener) { @Override public int read() throws IOException { + if (bodyStream == null || bodyStream instanceof NullInputStream) { + return -1; + } int readByte = bodyStream.read(); if (bodyStream.available() == 0 && listener != null) { listener.onAllDataRead(); From 6ff3b669e8ccf6ebef04f40c11cee02abde5e941 Mon Sep 17 00:00:00 2001 From: sapessi Date: Thu, 27 Jun 2019 09:41:39 -0700 Subject: [PATCH 012/888] changed the behavior of the getMimeType method to always try to load the mime type from the file name, without probing the file system. Updated unit tests to match (#254) --- .../internal/servlet/AwsServletContext.java | 17 +++++++++------ .../servlet/AwsServletContextTest.java | 21 ++++++++++++------- 2 files changed, 24 insertions(+), 14 deletions(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java index 5a6dc85d4..09cc00d3b 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java @@ -20,6 +20,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import javax.activation.MimetypesFileTypeMap; import javax.servlet.Filter; import javax.servlet.FilterRegistration; import javax.servlet.RequestDispatcher; @@ -72,6 +73,7 @@ public class AwsServletContext private Map initParameters; private AwsLambdaServletContainerHandler containerHandler; private Logger log = LoggerFactory.getLogger(AwsServletContext.class); + private MimetypesFileTypeMap mimeTypes; // lazily loaded in the getMimeType method //------------------------------------------------------------- @@ -142,13 +144,16 @@ public int getEffectiveMinorVersion() { @Override @SuppressFBWarnings("PATH_TRAVERSAL_IN") // suppressing because we are using the getValidFilePath public String getMimeType(String s) { - try { - String validatedPath = SecurityUtils.getValidFilePath(s); - return Files.probeContentType(Paths.get(validatedPath)); - } catch (IOException e) { - log.warn("Could not find content type for file: " + SecurityUtils.encode(s), e); + if (!s.contains(".")) { return null; } + if (mimeTypes == null) { + mimeTypes = new MimetypesFileTypeMap(); + } + // TODO: The getContentType method of the MimetypesFileTypeMap returns application/octet-stream + // instead of null when the type cannot be found. We should replace with an implementation that + // loads the System mime types ($JAVA_HOME/lib/mime.types + return mimeTypes.getContentType(s); } @@ -232,7 +237,7 @@ public String getRealPath(String s) { try { absPath = new File(fileUrl.toURI()).getAbsolutePath(); } catch (URISyntaxException e) { - log.error("Error while looking for real path: {}", SecurityUtils.encode(s), SecurityUtils.encode(e.getMessage())); + log.error("Error while looking for real path {}: {}", SecurityUtils.encode(s), SecurityUtils.encode(e.getMessage())); } } return absPath; diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContextTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContextTest.java index faf298558..0023be659 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContextTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContextTest.java @@ -4,6 +4,7 @@ import com.amazonaws.serverless.proxy.internal.servlet.filters.UrlPathValidator; import org.junit.BeforeClass; +import org.junit.Ignore; import org.junit.Test; import javax.servlet.Filter; @@ -43,7 +44,7 @@ public static void setUp() { LambdaContainerHandler.getContainerConfig().addValidFilePath("C:\\MyTestFolder"); } - @Test + @Test @Ignore public void getMimeType_disabledPath_expectException() { AwsServletContext ctx = new AwsServletContext(null); try { @@ -64,7 +65,7 @@ public void getMimeType_nonExistentFileInTaskPath_expectNull() { @Test public void getMimeType_mimeTypeOfCorrectFile_expectMime() { - String tmpFilePath = TMP_DIR + "/test_text.txt"; + String tmpFilePath = TMP_DIR + "test_text.txt"; try { System.out.println("Writing to tmp file " + tmpFilePath); PrintWriter tmpWriter = new PrintWriter(tmpFilePath, "UTF-8"); @@ -73,23 +74,27 @@ public void getMimeType_mimeTypeOfCorrectFile_expectMime() { AwsServletContext ctx = new AwsServletContext(null); String mimeType = ctx.getMimeType(tmpFilePath); - String deducedMimeType = Files.probeContentType(Paths.get(tmpFilePath)); - assertEquals(deducedMimeType, mimeType); + assertEquals("text/plain", mimeType); mimeType = ctx.getMimeType("file://" + tmpFilePath); - assertEquals(deducedMimeType, mimeType); + assertEquals("text/plain", mimeType); } catch (FileNotFoundException e) { fail("tmp file not found"); e.printStackTrace(); } catch (UnsupportedEncodingException e) { fail("Unsupported encoding"); e.printStackTrace(); - } catch (IOException e) { - fail("Failed to prove tmp file content type"); - e.printStackTrace(); } } + @Test + public void getMimeType_unknownExtension_expectAppOctetStream() { + AwsServletContext ctx = new AwsServletContext(null); + String mimeType = ctx.getMimeType("myfile.unkext"); + assertEquals("application/octet-stream", mimeType); + } + + @Test public void addFilter_nonExistentFilterClass_expectException() { AwsServletContext ctx = new AwsServletContext(null); From 915bee3743ef777a32ad9aeaba6099d673db84cb Mon Sep 17 00:00:00 2001 From: sapessi Date: Thu, 27 Jun 2019 09:43:30 -0700 Subject: [PATCH 013/888] whoops, null check. You'd think I would have learned by now (#254) --- .../serverless/proxy/internal/servlet/AwsServletContext.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java index 09cc00d3b..cb72e9532 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java @@ -144,7 +144,7 @@ public int getEffectiveMinorVersion() { @Override @SuppressFBWarnings("PATH_TRAVERSAL_IN") // suppressing because we are using the getValidFilePath public String getMimeType(String s) { - if (!s.contains(".")) { + if (s == null || !s.contains(".")) { return null; } if (mimeTypes == null) { From 445abc6bd3ca3783b8ef91b356ef8f5e33942ee3 Mon Sep 17 00:00:00 2001 From: sapessi Date: Thu, 27 Jun 2019 10:45:15 -0700 Subject: [PATCH 014/888] Changed unit test not to write to actual file since the getMimeType method does not require the file to exist anymore. --- .../servlet/AwsServletContextTest.java | 25 +++++-------------- 1 file changed, 6 insertions(+), 19 deletions(-) diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContextTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContextTest.java index 0023be659..64c91b8db 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContextTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContextTest.java @@ -66,25 +66,12 @@ public void getMimeType_nonExistentFileInTaskPath_expectNull() { @Test public void getMimeType_mimeTypeOfCorrectFile_expectMime() { String tmpFilePath = TMP_DIR + "test_text.txt"; - try { - System.out.println("Writing to tmp file " + tmpFilePath); - PrintWriter tmpWriter = new PrintWriter(tmpFilePath, "UTF-8"); - tmpWriter.write("Test case for aws-serverless-java-container"); - tmpWriter.close(); - - AwsServletContext ctx = new AwsServletContext(null); - String mimeType = ctx.getMimeType(tmpFilePath); - assertEquals("text/plain", mimeType); - - mimeType = ctx.getMimeType("file://" + tmpFilePath); - assertEquals("text/plain", mimeType); - } catch (FileNotFoundException e) { - fail("tmp file not found"); - e.printStackTrace(); - } catch (UnsupportedEncodingException e) { - fail("Unsupported encoding"); - e.printStackTrace(); - } + AwsServletContext ctx = new AwsServletContext(null); + String mimeType = ctx.getMimeType(tmpFilePath); + assertEquals("text/plain", mimeType); + + mimeType = ctx.getMimeType("file://" + tmpFilePath); + assertEquals("text/plain", mimeType); } @Test From 9f20bd98076ae305201861f7e319ef98332f7af5 Mon Sep 17 00:00:00 2001 From: sapessi Date: Thu, 27 Jun 2019 13:14:52 -0700 Subject: [PATCH 015/888] Bump dependency check plugin version --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 74903bc77..c4585ec53 100644 --- a/pom.xml +++ b/pom.xml @@ -44,7 +44,7 @@ 0.5 - 4.0.1 + 5.0.0 From d37629ffad99eb36939867b9635df13d92340762 Mon Sep 17 00:00:00 2001 From: sapessi Date: Thu, 27 Jun 2019 13:51:55 -0700 Subject: [PATCH 016/888] Added temporary jackson-databind:2.9.9 suppression since there's no new version available --- owasp-suppression.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/owasp-suppression.xml b/owasp-suppression.xml index fe70f749b..be75cff23 100644 --- a/owasp-suppression.xml +++ b/owasp-suppression.xml @@ -36,5 +36,10 @@ cpe:/a:slf4j:slf4j:1.8.0 + + + + cpe:/a:fasterxml:jackson-databind:2.9.9 + \ No newline at end of file From ccce1163b13b48e8433ee6ac7e79d96ed16beaf8 Mon Sep 17 00:00:00 2001 From: sapessi Date: Thu, 27 Jun 2019 13:52:22 -0700 Subject: [PATCH 017/888] Bump Sparkjava version to address volnerabilities in older dependencies --- aws-serverless-java-container-spark/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws-serverless-java-container-spark/pom.xml b/aws-serverless-java-container-spark/pom.xml index ce884e6ec..8dce826b1 100644 --- a/aws-serverless-java-container-spark/pom.xml +++ b/aws-serverless-java-container-spark/pom.xml @@ -16,7 +16,7 @@ - 2.8.0 + 2.9.1 From 89f49468dd0ff83c038cd5c076b59bb72af26e15 Mon Sep 17 00:00:00 2001 From: sapessi Date: Thu, 27 Jun 2019 13:52:57 -0700 Subject: [PATCH 018/888] Bump spring-core, spring-security-config, and spring-boot to the latest version to address security vulnerabilities reported by the latest dependency check --- aws-serverless-java-container-spring/pom.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index bbab50a57..e1a3e9c24 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -16,9 +16,9 @@ - 5.1.1.RELEASE - 1.5.17.RELEASE - 5.1.1.RELEASE + 5.1.8.RELEASE + 1.5.21.RELEASE + 5.1.5.RELEASE 2.9.9 From 586c62f914ac18f1020247c6eed74ac88b249615 Mon Sep 17 00:00:00 2001 From: sapessi Date: Thu, 27 Jun 2019 14:37:41 -0700 Subject: [PATCH 019/888] [maven-release-plugin] prepare release aws-serverless-java-container-1.3.2 --- aws-serverless-java-container-core/pom.xml | 4 ++-- aws-serverless-java-container-jersey/pom.xml | 6 +++--- aws-serverless-java-container-spark/pom.xml | 6 +++--- aws-serverless-java-container-spring/pom.xml | 6 +++--- aws-serverless-java-container-struts2/pom.xml | 6 +++--- aws-serverless-jersey-archetype/pom.xml | 4 ++-- aws-serverless-spark-archetype/pom.xml | 4 ++-- aws-serverless-spring-archetype/pom.xml | 4 ++-- aws-serverless-springboot-archetype/pom.xml | 4 ++-- aws-serverless-springboot2-archetype/pom.xml | 4 ++-- aws-serverless-struts2-archetype/pom.xml | 4 ++-- pom.xml | 2 +- 12 files changed, 27 insertions(+), 27 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 82d218f9d..8b9dd264b 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Core Allows Java applications written for a servlet container to run in AWS Lambda https://aws.amazon.com/lambda - 1.4-SNAPSHOT + 1.3.2 com.amazonaws.serverless aws-serverless-java-container - 1.4-SNAPSHOT + 1.3.2 .. diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index f92c9d702..6774a804b 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Jersey implementation Allows Java applications written for Jersey to run in AWS Lambda https://aws.amazon.com/lambda - 1.4-SNAPSHOT + 1.3.2 com.amazonaws.serverless aws-serverless-java-container - 1.4-SNAPSHOT + 1.3.2 .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.4-SNAPSHOT + 1.3.2 com.fasterxml.jackson.core diff --git a/aws-serverless-java-container-spark/pom.xml b/aws-serverless-java-container-spark/pom.xml index 8dce826b1..2a64bab33 100644 --- a/aws-serverless-java-container-spark/pom.xml +++ b/aws-serverless-java-container-spark/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spark implementation Allows Java applications written for Spark to run in AWS Lambda https://aws.amazon.com/lambda - 1.4-SNAPSHOT + 1.3.2 com.amazonaws.serverless aws-serverless-java-container - 1.4-SNAPSHOT + 1.3.2 .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.4-SNAPSHOT + 1.3.2 diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index e1a3e9c24..470a6745a 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spring implementation Allows Java applications written for the Spring framework to run in AWS Lambda https://aws.amazon.com/lambda - 1.4-SNAPSHOT + 1.3.2 com.amazonaws.serverless aws-serverless-java-container - 1.4-SNAPSHOT + 1.3.2 .. @@ -27,7 +27,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.4-SNAPSHOT + 1.3.2 diff --git a/aws-serverless-java-container-struts2/pom.xml b/aws-serverless-java-container-struts2/pom.xml index f981e0876..8d3b272f9 100644 --- a/aws-serverless-java-container-struts2/pom.xml +++ b/aws-serverless-java-container-struts2/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Struts2 implementation Allows Java applications written for the Struts2 framework to run in AWS Lambda https://aws.amazon.com/lambda - 1.4-SNAPSHOT + 1.3.2 com.amazonaws.serverless aws-serverless-java-container - 1.4-SNAPSHOT + 1.3.2 @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.4-SNAPSHOT + 1.3.2 diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index d89ca75b6..367727222 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -4,12 +4,12 @@ com.amazonaws.serverless aws-serverless-java-container - 1.4-SNAPSHOT + 1.3.2 com.amazonaws.serverless.archetypes aws-serverless-jersey-archetype - 1.4-SNAPSHOT + 1.3.2 maven-archetype diff --git a/aws-serverless-spark-archetype/pom.xml b/aws-serverless-spark-archetype/pom.xml index 65c870e59..c39a1f9bd 100644 --- a/aws-serverless-spark-archetype/pom.xml +++ b/aws-serverless-spark-archetype/pom.xml @@ -4,12 +4,12 @@ com.amazonaws.serverless aws-serverless-java-container - 1.4-SNAPSHOT + 1.3.2 com.amazonaws.serverless.archetypes aws-serverless-spark-archetype - 1.4-SNAPSHOT + 1.3.2 maven-archetype diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index 35331470f..c3e6f32ba 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -4,12 +4,12 @@ com.amazonaws.serverless aws-serverless-java-container - 1.4-SNAPSHOT + 1.3.2 com.amazonaws.serverless.archetypes aws-serverless-spring-archetype - 1.4-SNAPSHOT + 1.3.2 maven-archetype diff --git a/aws-serverless-springboot-archetype/pom.xml b/aws-serverless-springboot-archetype/pom.xml index 011cc1a95..4eb5acc57 100644 --- a/aws-serverless-springboot-archetype/pom.xml +++ b/aws-serverless-springboot-archetype/pom.xml @@ -4,12 +4,12 @@ com.amazonaws.serverless aws-serverless-java-container - 1.4-SNAPSHOT + 1.3.2 com.amazonaws.serverless.archetypes aws-serverless-springboot-archetype - 1.4-SNAPSHOT + 1.3.2 maven-archetype diff --git a/aws-serverless-springboot2-archetype/pom.xml b/aws-serverless-springboot2-archetype/pom.xml index 2ade62df5..aa33c2a6c 100644 --- a/aws-serverless-springboot2-archetype/pom.xml +++ b/aws-serverless-springboot2-archetype/pom.xml @@ -4,12 +4,12 @@ com.amazonaws.serverless aws-serverless-java-container - 1.4-SNAPSHOT + 1.3.2 com.amazonaws.serverless.archetypes aws-serverless-springboot2-archetype - 1.4-SNAPSHOT + 1.3.2 maven-archetype diff --git a/aws-serverless-struts2-archetype/pom.xml b/aws-serverless-struts2-archetype/pom.xml index c35780681..552769c7a 100644 --- a/aws-serverless-struts2-archetype/pom.xml +++ b/aws-serverless-struts2-archetype/pom.xml @@ -4,12 +4,12 @@ com.amazonaws.serverless aws-serverless-java-container - 1.4-SNAPSHOT + 1.3.2 com.amazonaws.serverless.archetypes aws-serverless-struts2-archetype - 1.4-SNAPSHOT + 1.3.2 maven-archetype diff --git a/pom.xml b/pom.xml index c4585ec53..3ce224eb4 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazonaws.serverless aws-serverless-java-container pom - 1.4-SNAPSHOT + 1.3.2 AWS Serverless Java container From 1a38751976c8188cd09dba9d8c9776991478d188 Mon Sep 17 00:00:00 2001 From: sapessi Date: Thu, 27 Jun 2019 14:37:48 -0700 Subject: [PATCH 020/888] [maven-release-plugin] prepare for next development iteration --- aws-serverless-java-container-core/pom.xml | 4 ++-- aws-serverless-java-container-jersey/pom.xml | 6 +++--- aws-serverless-java-container-spark/pom.xml | 6 +++--- aws-serverless-java-container-spring/pom.xml | 6 +++--- aws-serverless-java-container-struts2/pom.xml | 6 +++--- aws-serverless-jersey-archetype/pom.xml | 4 ++-- aws-serverless-spark-archetype/pom.xml | 4 ++-- aws-serverless-spring-archetype/pom.xml | 4 ++-- aws-serverless-springboot-archetype/pom.xml | 4 ++-- aws-serverless-springboot2-archetype/pom.xml | 4 ++-- aws-serverless-struts2-archetype/pom.xml | 4 ++-- pom.xml | 2 +- 12 files changed, 27 insertions(+), 27 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 8b9dd264b..82d218f9d 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Core Allows Java applications written for a servlet container to run in AWS Lambda https://aws.amazon.com/lambda - 1.3.2 + 1.4-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.3.2 + 1.4-SNAPSHOT .. diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index 6774a804b..f92c9d702 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Jersey implementation Allows Java applications written for Jersey to run in AWS Lambda https://aws.amazon.com/lambda - 1.3.2 + 1.4-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.3.2 + 1.4-SNAPSHOT .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.3.2 + 1.4-SNAPSHOT com.fasterxml.jackson.core diff --git a/aws-serverless-java-container-spark/pom.xml b/aws-serverless-java-container-spark/pom.xml index 2a64bab33..8dce826b1 100644 --- a/aws-serverless-java-container-spark/pom.xml +++ b/aws-serverless-java-container-spark/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spark implementation Allows Java applications written for Spark to run in AWS Lambda https://aws.amazon.com/lambda - 1.3.2 + 1.4-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.3.2 + 1.4-SNAPSHOT .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.3.2 + 1.4-SNAPSHOT diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 470a6745a..e1a3e9c24 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spring implementation Allows Java applications written for the Spring framework to run in AWS Lambda https://aws.amazon.com/lambda - 1.3.2 + 1.4-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.3.2 + 1.4-SNAPSHOT .. @@ -27,7 +27,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.3.2 + 1.4-SNAPSHOT diff --git a/aws-serverless-java-container-struts2/pom.xml b/aws-serverless-java-container-struts2/pom.xml index 8d3b272f9..f981e0876 100644 --- a/aws-serverless-java-container-struts2/pom.xml +++ b/aws-serverless-java-container-struts2/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Struts2 implementation Allows Java applications written for the Struts2 framework to run in AWS Lambda https://aws.amazon.com/lambda - 1.3.2 + 1.4-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.3.2 + 1.4-SNAPSHOT @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.3.2 + 1.4-SNAPSHOT diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index 367727222..d89ca75b6 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -4,12 +4,12 @@ com.amazonaws.serverless aws-serverless-java-container - 1.3.2 + 1.4-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-jersey-archetype - 1.3.2 + 1.4-SNAPSHOT maven-archetype diff --git a/aws-serverless-spark-archetype/pom.xml b/aws-serverless-spark-archetype/pom.xml index c39a1f9bd..65c870e59 100644 --- a/aws-serverless-spark-archetype/pom.xml +++ b/aws-serverless-spark-archetype/pom.xml @@ -4,12 +4,12 @@ com.amazonaws.serverless aws-serverless-java-container - 1.3.2 + 1.4-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-spark-archetype - 1.3.2 + 1.4-SNAPSHOT maven-archetype diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index c3e6f32ba..35331470f 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -4,12 +4,12 @@ com.amazonaws.serverless aws-serverless-java-container - 1.3.2 + 1.4-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-spring-archetype - 1.3.2 + 1.4-SNAPSHOT maven-archetype diff --git a/aws-serverless-springboot-archetype/pom.xml b/aws-serverless-springboot-archetype/pom.xml index 4eb5acc57..011cc1a95 100644 --- a/aws-serverless-springboot-archetype/pom.xml +++ b/aws-serverless-springboot-archetype/pom.xml @@ -4,12 +4,12 @@ com.amazonaws.serverless aws-serverless-java-container - 1.3.2 + 1.4-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-springboot-archetype - 1.3.2 + 1.4-SNAPSHOT maven-archetype diff --git a/aws-serverless-springboot2-archetype/pom.xml b/aws-serverless-springboot2-archetype/pom.xml index aa33c2a6c..2ade62df5 100644 --- a/aws-serverless-springboot2-archetype/pom.xml +++ b/aws-serverless-springboot2-archetype/pom.xml @@ -4,12 +4,12 @@ com.amazonaws.serverless aws-serverless-java-container - 1.3.2 + 1.4-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-springboot2-archetype - 1.3.2 + 1.4-SNAPSHOT maven-archetype diff --git a/aws-serverless-struts2-archetype/pom.xml b/aws-serverless-struts2-archetype/pom.xml index 552769c7a..c35780681 100644 --- a/aws-serverless-struts2-archetype/pom.xml +++ b/aws-serverless-struts2-archetype/pom.xml @@ -4,12 +4,12 @@ com.amazonaws.serverless aws-serverless-java-container - 1.3.2 + 1.4-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-struts2-archetype - 1.3.2 + 1.4-SNAPSHOT maven-archetype diff --git a/pom.xml b/pom.xml index 3ce224eb4..c4585ec53 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazonaws.serverless aws-serverless-java-container pom - 1.3.2 + 1.4-SNAPSHOT AWS Serverless Java container From 949807a24af0114e8e9ceeada0b6a28f7e964ae0 Mon Sep 17 00:00:00 2001 From: sapessi Date: Thu, 27 Jun 2019 15:03:57 -0700 Subject: [PATCH 021/888] Attempt to repair build. Travis is complaining that the build log is too long so added -q to both maven and gradle builds --- travis.sh | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/travis.sh b/travis.sh index 13996f103..d61e696c7 100755 --- a/travis.sh +++ b/travis.sh @@ -4,7 +4,7 @@ IFS=$'\n' echo "STARTING TRAVIS BUILD in $(pwd)" cd $TRAVIS_BUILD_DIR -mvn install +mvn -q install if [[ "$?" -ne 0 ]]; then exit 1 fi @@ -15,11 +15,11 @@ for SAMPLE in $(find samples -type d -maxdepth 2 -mindepth 2); do echo "BUILDING SAMPLE '$SAMPLE'" cd $SAMPLE - mvn clean package + mvn -q clean package if [[ "$?" -ne 0 ]]; then exit 1 fi - $GRADLE wrapper + $GRADLE -q wrapper if [[ "$?" -ne 0 ]]; then exit 1 fi @@ -27,7 +27,7 @@ do if [[ "$?" -ne 0 ]]; then exit 1 fi - ./gradlew clean build + ./gradlew -q clean build if [[ "$?" -ne 0 ]]; then exit 1 fi @@ -67,16 +67,16 @@ do exit 1 fi cd ${TEST_PROJ} - mvn clean package -Pshaded-jar + mvn -q clean package -Pshaded-jar if [[ "$?" -ne 0 ]]; then exit 1 fi - mvn clean package + mvn -q clean package if [[ "$?" -ne 0 ]]; then exit 1 fi if [[ -f "$TRAVIS_BUILD_DIR/tmp/$TEST_PROJ/build.gradle" ]]; then - $GRADLE wrapper + $GRADLE -q wrapper if [[ "$?" -ne 0 ]]; then exit 1 fi @@ -84,7 +84,7 @@ do if [[ "$?" -ne 0 ]]; then exit 1 fi - ./gradlew clean build + ./gradlew -q clean build if [[ "$?" -ne 0 ]]; then exit 1 fi From 3368df11e275a7cd23a49e8958518d5be12d41f4 Mon Sep 17 00:00:00 2001 From: Jack Gough Date: Sat, 13 Jul 2019 14:47:37 +0100 Subject: [PATCH 022/888] Bug Fix: Log request time from ALB requests - Previously logged as 01/01/1970:00:00:00Z as RequestTimeEpoch == 0 --- .../ApacheCombinedServletLogFormatter.java | 22 ++--- ...ApacheCombinedServletLogFormatterTest.java | 86 +++++++++++++++++++ 2 files changed, 98 insertions(+), 10 deletions(-) create mode 100644 aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/ApacheCombinedServletLogFormatterTest.java diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/ApacheCombinedServletLogFormatter.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/ApacheCombinedServletLogFormatter.java index def4ecdfd..2105ffae3 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/ApacheCombinedServletLogFormatter.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/ApacheCombinedServletLogFormatter.java @@ -11,15 +11,11 @@ import javax.servlet.http.HttpServletResponse; import javax.ws.rs.core.SecurityContext; -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.time.ZoneOffset; -import java.time.ZonedDateTime; +import java.time.*; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatterBuilder; import java.util.Locale; -import static com.amazonaws.serverless.proxy.RequestReader.API_GATEWAY_CONTEXT_PROPERTY; import static com.amazonaws.serverless.proxy.RequestReader.API_GATEWAY_EVENT_PROPERTY; import static java.time.temporal.ChronoField.DAY_OF_MONTH; import static java.time.temporal.ChronoField.HOUR_OF_DAY; @@ -37,10 +33,16 @@ */ public class ApacheCombinedServletLogFormatter implements LogFormatter { - DateTimeFormatter dateFormat; + private final DateTimeFormatter dateFormat; + private final Clock clock; public ApacheCombinedServletLogFormatter() { - dateFormat = new DateTimeFormatterBuilder() + this(Clock.systemDefaultZone()); + } + + ApacheCombinedServletLogFormatter(Clock clock) { + this.clock = clock; + this.dateFormat = new DateTimeFormatterBuilder() .parseCaseInsensitive() .appendLiteral("[") .appendValue(DAY_OF_MONTH, 2) @@ -93,17 +95,17 @@ public String format(ContainerRequestType servletRequest, ContainerResponseType // %t - if (gatewayContext != null) { + if (gatewayContext != null && gatewayContext.getRequestTimeEpoch() > 0) { logLineBuilder.append( dateFormat.format( ZonedDateTime.of( LocalDateTime.ofEpochSecond(gatewayContext.getRequestTimeEpoch() / 1000, 0, ZoneOffset.UTC), - ZoneId.systemDefault() + clock.getZone() ) ) ); } else { - logLineBuilder.append(dateFormat.format(ZonedDateTime.now())); + logLineBuilder.append(dateFormat.format(ZonedDateTime.now(clock))); } logLineBuilder.append(" "); diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/ApacheCombinedServletLogFormatterTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/ApacheCombinedServletLogFormatterTest.java new file mode 100644 index 000000000..1c9527a32 --- /dev/null +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/ApacheCombinedServletLogFormatterTest.java @@ -0,0 +1,86 @@ +package com.amazonaws.serverless.proxy.internal.servlet; + + +import com.amazonaws.serverless.proxy.model.ApiGatewayRequestIdentity; +import com.amazonaws.serverless.proxy.model.AwsProxyRequest; +import com.amazonaws.serverless.proxy.model.AwsProxyRequestContext; +import org.junit.Before; +import org.junit.Test; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import java.time.Clock; +import java.time.Instant; +import java.time.ZoneId; + +import static com.amazonaws.serverless.proxy.RequestReader.API_GATEWAY_EVENT_PROPERTY; +import static org.hamcrest.CoreMatchers.containsString; +import static org.junit.Assert.assertThat; +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +public class ApacheCombinedServletLogFormatterTest { + + private ApacheCombinedServletLogFormatter sut; + + private HttpServletRequest mockServletRequest; + private HttpServletResponse mockServletResponse; + private AwsProxyRequest proxyRequest; + private AwsProxyRequestContext context; + + @Before + public void setup() { + proxyRequest = new AwsProxyRequest(); + Clock fixedClock = Clock.fixed(Instant.ofEpochSecond(665888523L), ZoneId.of("UTC")); + mockServletRequest = mock(HttpServletRequest.class); + when(mockServletRequest.getAttribute(eq(API_GATEWAY_EVENT_PROPERTY))) + .thenReturn(proxyRequest); + when(mockServletRequest.getMethod()) + .thenReturn("GET"); + mockServletResponse = mock(HttpServletResponse.class); + context = new AwsProxyRequestContext(); + context.setIdentity(new ApiGatewayRequestIdentity()); + proxyRequest.setRequestContext(context); + + sut = new ApacheCombinedServletLogFormatter(fixedClock); + } + + @Test + public void logsCurrentTimeWhenContextNull() { + // given + proxyRequest.setRequestContext(null); + + // when + String actual = sut.format(mockServletRequest, mockServletResponse, null); + + // then + assertThat(actual, containsString("[07/02/1991:01:02:03Z]")); + } + + @Test + public void logsCurrentTimeWhenRequestTimeZero() { + // given + context.setRequestTimeEpoch(0); + + // when + String actual = sut.format(mockServletRequest, mockServletResponse, null); + + // then + assertThat(actual, containsString("[07/02/1991:01:02:03Z]")); + } + + @Test + public void logsRequestTimeWhenRequestTimeEpochGreaterThanZero() { + // given + context.setRequestTimeEpoch(1563023494000L); + + // when + String actual = sut.format(mockServletRequest, mockServletResponse, null); + + // then + assertThat(actual, containsString("[13/07/2019:13:11:34Z]")); + } + +} From d8c1c4e1c4f026685a0b8d16e0fc034f573f03cc Mon Sep 17 00:00:00 2001 From: sapessi Date: Fri, 19 Jul 2019 11:02:46 -0700 Subject: [PATCH 023/888] Addressed bug reported in #269. Explictly setting the character encoding in the response overwrites whatever is passed in with the content type header --- .../servlet/AwsHttpServletResponse.java | 39 ++++++++++++------- .../servlet/AwsHttpServletResponseTest.java | 22 +++++------ .../proxy/spring/SpringBootAppTest.java | 16 +++++++- .../spring/springbootapp/TestApplication.java | 2 + .../spring/springbootapp/TestController.java | 11 ++++++ .../resources/boot-application.properties | 3 ++ 6 files changed, 68 insertions(+), 25 deletions(-) create mode 100644 aws-serverless-java-container-spring/src/test/resources/boot-application.properties diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponse.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponse.java index e603a8c37..3a61c07de 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponse.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponse.java @@ -12,6 +12,7 @@ */ package com.amazonaws.serverless.proxy.internal.servlet; +import com.amazonaws.serverless.proxy.internal.LambdaContainerHandler; import com.amazonaws.serverless.proxy.internal.SecurityUtils; import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.serverless.proxy.model.Headers; @@ -60,6 +61,7 @@ public class AwsHttpServletResponse private int statusCode; private String statusMessage; private String responseBody; + private String characterEncoding; private PrintWriter writer; private ByteArrayOutputStream bodyOutputStream = new ByteArrayOutputStream(); private CountDownLatch writersCountDownLatch; @@ -80,6 +82,7 @@ public class AwsHttpServletResponse */ public AwsHttpServletResponse(AwsHttpServletRequest req, CountDownLatch latch) { writersCountDownLatch = latch; + characterEncoding = null; request = req; statusCode = 0; } @@ -207,7 +210,7 @@ public void setHeader(String s, String s1) { public void addHeader(String s, String s1) { // TODO: We should probably have a list of headers that we are not allowed to have multiple values for if (s.toLowerCase(Locale.getDefault()).equals(HttpHeaders.CONTENT_TYPE.toLowerCase(Locale.getDefault()))) { - setHeader(s, s1, true); + setContentType(s1); } else { setHeader(s, s1, false); } @@ -273,12 +276,7 @@ public Collection getHeaderNames() { @Override public String getCharacterEncoding() { - final String contentType = Optional.ofNullable(getContentType()).orElse(""); - if (contentType.contains(";")) { - return contentType.split(";")[1].split("=")[1].trim().toLowerCase(Locale.getDefault()); - } else { - return ""; - } + return characterEncoding; } @@ -345,10 +343,11 @@ public PrintWriter getWriter() throws IOException { @Override public void setCharacterEncoding(String s) { - final String characterEncoding = Optional.ofNullable(s).orElse("").toLowerCase(Locale.getDefault()); - final String oldValue = Optional.ofNullable(getHeader(HttpHeaders.CONTENT_TYPE)).orElse(""); - String contentType = oldValue.contains(";") ? oldValue.split(";")[0].trim(): oldValue; - setHeader(HttpHeaders.CONTENT_TYPE, String.format("%s; charset=%s", contentType, characterEncoding), true); + characterEncoding = s.toUpperCase(Locale.getDefault()); + // The char encoding is being forced, if we already have a content-type header we recreate it + if (headers.getFirst(HttpHeaders.CONTENT_TYPE) != null) { + setContentType(headers.getFirst(HttpHeaders.CONTENT_TYPE)); + } } @@ -366,7 +365,21 @@ public void setContentLengthLong(long l) { @Override public void setContentType(String s) { - setHeader(HttpHeaders.CONTENT_TYPE, s, true); + if (s == null) { + return; + } + + // we have no forced character encoding + if (characterEncoding == null) { + setHeader(HttpHeaders.CONTENT_TYPE, s, true); + return; + } + + if (s.contains(";")) { // we have a forced charset + setHeader(HttpHeaders.CONTENT_TYPE, String.format("%s; charset=%s", s.split(";")[0], characterEncoding), true); + } else { + setHeader(HttpHeaders.CONTENT_TYPE, String.format("%s; charset=%s", s, characterEncoding), true); + } } @@ -387,7 +400,7 @@ public void flushBuffer() throws IOException { if (null != writer) { writer.flush(); } - responseBody = new String(bodyOutputStream.toByteArray(), StandardCharsets.UTF_8); + responseBody = new String(bodyOutputStream.toByteArray(), LambdaContainerHandler.getContainerConfig().getDefaultContentCharset()); log.debug("Response buffer flushed with {} bytes, latch={}", responseBody.length(), writersCountDownLatch.getCount()); isCommitted = true; writersCountDownLatch.countDown(); diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponseTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponseTest.java index d9a4e742b..1feeb5e94 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponseTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponseTest.java @@ -272,8 +272,8 @@ public void characterEncoding_setCharacterEncoding() { resp.setContentType("application/json"); resp.setCharacterEncoding("UTF-8"); assertNotEquals("UTF-8", resp.getHeader("Content-Encoding")); - assertEquals("application/json; charset=utf-8", resp.getContentType()); - assertEquals("application/json; charset=utf-8", resp.getHeader("Content-Type")); + assertEquals("application/json; charset=UTF-8", resp.getContentType()); + assertEquals("application/json; charset=UTF-8", resp.getHeader("Content-Type")); } @Test @@ -282,9 +282,9 @@ public void characterEncoding_setContentType() { resp.setContentType("application/json; charset=utf-8"); resp.setCharacterEncoding("UTF-8"); - assertEquals("application/json; charset=utf-8", resp.getContentType()); - assertEquals("application/json; charset=utf-8", resp.getHeader("Content-Type")); - assertEquals("utf-8", resp.getCharacterEncoding()); + assertEquals("application/json; charset=UTF-8", resp.getContentType()); + assertEquals("application/json; charset=UTF-8", resp.getHeader("Content-Type")); + assertEquals("UTF-8", resp.getCharacterEncoding()); } @Test @@ -293,9 +293,9 @@ public void characterEncoding_setContentTypeAndsetCharacterEncoding() { resp.setContentType("application/json"); resp.setCharacterEncoding("UTF-8"); - assertEquals("application/json; charset=utf-8", resp.getContentType()); - assertEquals("application/json; charset=utf-8", resp.getHeader("Content-Type")); - assertEquals("utf-8", resp.getCharacterEncoding()); + assertEquals("application/json; charset=UTF-8", resp.getContentType()); + assertEquals("application/json; charset=UTF-8", resp.getHeader("Content-Type")); + assertEquals("UTF-8", resp.getCharacterEncoding()); } @Test @@ -304,9 +304,9 @@ public void characterEncoding_setCharacterEncodingAndsetContentType() { resp.setCharacterEncoding("UTF-8"); resp.setContentType("application/json"); - assertEquals("application/json", resp.getContentType()); - assertEquals("application/json", resp.getHeader("Content-Type")); - assertEquals("", resp.getCharacterEncoding()); + assertEquals("application/json; charset=UTF-8", resp.getContentType()); + assertEquals("application/json; charset=UTF-8", resp.getHeader("Content-Type")); + assertEquals("UTF-8", resp.getCharacterEncoding()); } private int getMaxAge(String header) { diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringBootAppTest.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringBootAppTest.java index f27d6e57a..0a17814d9 100644 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringBootAppTest.java +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringBootAppTest.java @@ -42,7 +42,7 @@ public void defaultError_requestForward_springBootForwardsToDefaultErrorPage() { assertEquals(404, resp.getStatusCode()); assertNotNull(resp.getMultiValueHeaders()); assertTrue(resp.getMultiValueHeaders().containsKey("Content-Type")); - assertEquals("application/json;charset=UTF-8", resp.getMultiValueHeaders().getFirst("Content-Type")); + assertEquals("application/json; charset=UTF-8", resp.getMultiValueHeaders().getFirst("Content-Type")); try { JsonNode errorData = mapper.readTree(resp.getBody()); assertNotNull(errorData.findValue("status")); @@ -89,6 +89,20 @@ public void staticContent_getHtmlFile_returnsHtmlContent() { assertTrue(output.getBody().contains("

Static

")); } + @Test + public void utf8_returnUtf8String_expectCorrectHeaderMediaAndCharset() { + LambdaContainerHandler.getContainerConfig().setDefaultContentCharset("UTF-8"); + AwsProxyRequest request = new AwsProxyRequestBuilder("/test/utf8", "GET") + .build(); + AwsProxyResponse output = handler.handleRequest(request, context); + System.out.println("Response: " + output.getBody()); + System.out.println("Content-Type:" + output.getMultiValueHeaders().getFirst(HttpHeaders.CONTENT_TYPE)); + validateSingleValueModel(output, TestController.UTF8_TEST_STRING); + assertTrue(output.getMultiValueHeaders().containsKey(HttpHeaders.CONTENT_TYPE)); + assertTrue(output.getMultiValueHeaders().getFirst(HttpHeaders.CONTENT_TYPE).contains(";")); + assertTrue(output.getMultiValueHeaders().getFirst(HttpHeaders.CONTENT_TYPE).contains("charset=UTF-8")); + } + private void validateSingleValueModel(AwsProxyResponse output, String value) { try { diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springbootapp/TestApplication.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springbootapp/TestApplication.java index d203a56e0..fda1f8012 100644 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springbootapp/TestApplication.java +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springbootapp/TestApplication.java @@ -4,9 +4,11 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.web.support.SpringBootServletInitializer; import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.PropertySource; @SpringBootApplication @ComponentScan(basePackages = "com.amazonaws.serverless.proxy.spring.springbootapp") +@PropertySource("classpath:boot-application.properties") public class TestApplication extends SpringBootServletInitializer { } diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springbootapp/TestController.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springbootapp/TestController.java index e03ff434a..51094bd1c 100644 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springbootapp/TestController.java +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springbootapp/TestController.java @@ -16,13 +16,17 @@ import org.springframework.web.servlet.config.annotation.PathMatchConfigurer; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; +import javax.servlet.http.HttpServletResponse; +import java.util.HashMap; import java.util.List; +import java.util.Map; @RestController @EnableWebSecurity public class TestController extends WebSecurityConfigurerAdapter { public static final String TEST_VALUE = "test"; + public static final String UTF8_TEST_STRING = "health心跳测试完成。可正常使用"; // workaround to address the most annoying issue in the world: https://blog.georgovassilis.com/2015/10/29/spring-mvc-rest-controller-says-406-when-emails-are-part-url-path/ @Configuration @@ -61,6 +65,13 @@ public SingleValueModel testQueryStringList(@RequestParam("list") List q return value; } + @RequestMapping(value="/test/utf8",method=RequestMethod.GET) + public Object testUtf8(String name, HttpServletResponse response){ + SingleValueModel model = new SingleValueModel(); + model.setValue(UTF8_TEST_STRING); + return model; + } + @Override protected void configure(HttpSecurity http) throws Exception { http.sessionManagement().disable(); diff --git a/aws-serverless-java-container-spring/src/test/resources/boot-application.properties b/aws-serverless-java-container-spring/src/test/resources/boot-application.properties new file mode 100644 index 000000000..c57cb12a4 --- /dev/null +++ b/aws-serverless-java-container-spring/src/test/resources/boot-application.properties @@ -0,0 +1,3 @@ +spring.http.encoding.charset=UTF-8 +spring.http.encoding.enabled=true +spring.http.encoding.force=true \ No newline at end of file From 130eedaf8f67d3b1d0dbbff3bb8bc39b22b991cc Mon Sep 17 00:00:00 2001 From: sapessi Date: Fri, 19 Jul 2019 11:03:48 -0700 Subject: [PATCH 024/888] Bump owasp plugin version to address NPE on build and bump Spring versions to address vulnerability from wasp database --- aws-serverless-java-container-spring/pom.xml | 6 +++--- pom.xml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index bbab50a57..e1a3e9c24 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -16,9 +16,9 @@ - 5.1.1.RELEASE - 1.5.17.RELEASE - 5.1.1.RELEASE + 5.1.8.RELEASE + 1.5.21.RELEASE + 5.1.5.RELEASE 2.9.9 diff --git a/pom.xml b/pom.xml index 74903bc77..72fc1071c 100644 --- a/pom.xml +++ b/pom.xml @@ -44,7 +44,7 @@ 0.5 - 4.0.1 + 5.1.0 From 5da368ef082a78edd21702b096c9926f3be335b3 Mon Sep 17 00:00:00 2001 From: Mikael Quist Date: Tue, 30 Jul 2019 16:22:37 -0700 Subject: [PATCH 025/888] Added handling of all exceptions in LambdaContainerHandler.proxyStream() to return an error rather than a 200. --- .../serverless/proxy/internal/LambdaContainerHandler.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/LambdaContainerHandler.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/LambdaContainerHandler.java index 0e61495a0..9af153f56 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/LambdaContainerHandler.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/LambdaContainerHandler.java @@ -215,6 +215,9 @@ public void proxyStream(InputStream input, OutputStream output, Context context) } catch (JsonMappingException e) { log.error("Error while mapping object to RequestType class", e); getObjectMapper().writeValue(output, exceptionHandler.handle(e)); + } catch (Exception e) { + log.error("Error while proxying request.", e); + getObjectMapper().writeValue(output, exceptionHandler.handle(e)); } finally { output.flush(); output.close(); From 089637083e74e626a777399356bdf27543a5378c Mon Sep 17 00:00:00 2001 From: Mikael Quist Date: Wed, 31 Jul 2019 12:16:59 -0700 Subject: [PATCH 026/888] Adding InternalServerError to exception handler, modified the JerseyServletResponseWriter.failure() to throw if an error occured rather than return ultimately returning a 200 --- .../proxy/AwsProxyExceptionHandler.java | 6 ++- .../internal/LambdaContainerHandler.java | 3 -- .../proxy/AwsProxyExceptionHandlerTest.java | 43 ++++++++++++++++- .../jersey/JerseyServletResponseWriter.java | 10 +--- .../proxy/jersey/EchoJerseyResource.java | 4 ++ .../proxy/jersey/JerseyAwsProxyTest.java | 47 ++++++++++++++----- .../proxy/jersey/JerseyDependency.java | 6 +++ .../proxy/jersey/JerseyInjectionTest.java | 2 +- .../proxy/jersey/JerseyParamEncodingTest.java | 6 +-- .../proxy/jersey/ResourceBinder.java | 12 +++++ 10 files changed, 108 insertions(+), 31 deletions(-) create mode 100644 aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyDependency.java create mode 100644 aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/ResourceBinder.java diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/AwsProxyExceptionHandler.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/AwsProxyExceptionHandler.java index d2b96d8e2..cf2aae3e7 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/AwsProxyExceptionHandler.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/AwsProxyExceptionHandler.java @@ -22,6 +22,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import javax.ws.rs.InternalServerErrorException; import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.MediaType; @@ -31,7 +32,8 @@ /** * Default implementation of the ExceptionHandler object that returns AwsProxyResponse objects. * - * Returns application/json messages with a status code of 500 when the RequestReader failed to read the incoming event. + * Returns application/json messages with a status code of 500 when the RequestReader failed to read the incoming event + * or if InternalServerErrorException is thrown. * For all other exceptions returns a 502. Responses are populated with a JSON object containing a message property. * * @see ExceptionHandler @@ -76,7 +78,7 @@ public AwsProxyResponse handle(Throwable ex) { // adding a print stack trace in case we have no appender or we are running inside SAM local, where need the // output to go to the stderr. ex.printStackTrace(); - if (ex instanceof InvalidRequestEventException) { + if (ex instanceof InvalidRequestEventException || ex instanceof InternalServerErrorException) { return new AwsProxyResponse(500, headers, getErrorJson(INTERNAL_SERVER_ERROR)); } else { return new AwsProxyResponse(502, headers, getErrorJson(GATEWAY_TIMEOUT_ERROR)); diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/LambdaContainerHandler.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/LambdaContainerHandler.java index 9af153f56..0e61495a0 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/LambdaContainerHandler.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/LambdaContainerHandler.java @@ -215,9 +215,6 @@ public void proxyStream(InputStream input, OutputStream output, Context context) } catch (JsonMappingException e) { log.error("Error while mapping object to RequestType class", e); getObjectMapper().writeValue(output, exceptionHandler.handle(e)); - } catch (Exception e) { - log.error("Error while proxying request.", e); - getObjectMapper().writeValue(output, exceptionHandler.handle(e)); } finally { output.flush(); output.close(); diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/AwsProxyExceptionHandlerTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/AwsProxyExceptionHandlerTest.java index b5ed6f77a..cf86c57a6 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/AwsProxyExceptionHandlerTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/AwsProxyExceptionHandlerTest.java @@ -3,7 +3,6 @@ import com.amazonaws.serverless.exceptions.InvalidRequestEventException; import com.amazonaws.serverless.exceptions.InvalidResponseObjectException; -import com.amazonaws.serverless.proxy.AwsProxyExceptionHandler; import com.amazonaws.serverless.proxy.model.AwsProxyResponse; import com.amazonaws.serverless.proxy.model.ErrorModel; import com.fasterxml.jackson.core.JsonProcessingException; @@ -16,18 +15,22 @@ import org.junit.Before; import org.junit.Test; +import org.mockito.Mockito; +import javax.ws.rs.InternalServerErrorException; import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.MediaType; import java.io.*; public class AwsProxyExceptionHandlerTest { + private static final String INTERNAL_SERVER_ERROR_MESSAGE = "Internal server error"; private static final String INVALID_REQUEST_MESSAGE = "Invalid request error"; private static final String INVALID_RESPONSE_MESSAGE = "Invalid response error"; private AwsProxyExceptionHandler exceptionHandler; private ObjectMapper objectMapper; + @Before public void setUp() { exceptionHandler = new AwsProxyExceptionHandler(); @@ -88,6 +91,44 @@ public void typedHandle_InvalidResponseObjectException_jsonContentTypeHeader() { assertEquals(MediaType.APPLICATION_JSON, resp.getMultiValueHeaders().getFirst(HttpHeaders.CONTENT_TYPE)); } + @Test + public void typedHandle_InternalServerErrorException_500State() { + // Needed to mock InternalServerErrorException because it leverages RuntimeDelegate to set an internal + // response object. + InternalServerErrorException mockInternalServerErrorException = Mockito.mock(InternalServerErrorException.class); + Mockito.when(mockInternalServerErrorException.getMessage()).thenReturn(INTERNAL_SERVER_ERROR_MESSAGE); + + AwsProxyResponse resp = exceptionHandler.handle(mockInternalServerErrorException); + + assertNotNull(resp); + assertEquals(500, resp.getStatusCode()); + } + + @Test + public void typedHandle_InternalServerErrorException_responseString() + throws JsonProcessingException { + InternalServerErrorException mockInternalServerErrorException = Mockito.mock(InternalServerErrorException.class); + Mockito.when(mockInternalServerErrorException.getMessage()).thenReturn(INTERNAL_SERVER_ERROR_MESSAGE); + + AwsProxyResponse resp = exceptionHandler.handle(mockInternalServerErrorException); + + assertNotNull(resp); + String body = objectMapper.writeValueAsString(new ErrorModel(AwsProxyExceptionHandler.INTERNAL_SERVER_ERROR)); + assertEquals(body, resp.getBody()); + } + + @Test + public void typedHandle_InternalServerErrorException_jsonContentTypeHeader() { + InternalServerErrorException mockInternalServerErrorException = Mockito.mock(InternalServerErrorException.class); + Mockito.when(mockInternalServerErrorException.getMessage()).thenReturn(INTERNAL_SERVER_ERROR_MESSAGE); + + AwsProxyResponse resp = exceptionHandler.handle(mockInternalServerErrorException); + + assertNotNull(resp); + assertTrue(resp.getMultiValueHeaders().containsKey(HttpHeaders.CONTENT_TYPE)); + assertEquals(MediaType.APPLICATION_JSON, resp.getMultiValueHeaders().getFirst(HttpHeaders.CONTENT_TYPE)); + } + @Test public void typedHandle_NullPointerException_responseObject() throws JsonProcessingException { diff --git a/aws-serverless-java-container-jersey/src/main/java/com/amazonaws/serverless/proxy/jersey/JerseyServletResponseWriter.java b/aws-serverless-java-container-jersey/src/main/java/com/amazonaws/serverless/proxy/jersey/JerseyServletResponseWriter.java index c2cba7319..938c6f9ff 100644 --- a/aws-serverless-java-container-jersey/src/main/java/com/amazonaws/serverless/proxy/jersey/JerseyServletResponseWriter.java +++ b/aws-serverless-java-container-jersey/src/main/java/com/amazonaws/serverless/proxy/jersey/JerseyServletResponseWriter.java @@ -122,14 +122,8 @@ public void commit() { public void failure(Throwable throwable) { - try { - log.error("failure", throwable); - jerseyLatch.countDown(); - servletResponse.flushBuffer(); - } catch (IOException e) { - log.error("Could not fail response", e); - throw new InternalServerErrorException(e); - } + log.error("failure", throwable); + throw new InternalServerErrorException("Jersey failed to process request", throwable); } diff --git a/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/EchoJerseyResource.java b/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/EchoJerseyResource.java index da67dcf36..ec0f4b2ac 100644 --- a/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/EchoJerseyResource.java +++ b/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/EchoJerseyResource.java @@ -24,6 +24,7 @@ import org.glassfish.jersey.media.multipart.FormDataMultiPart; import org.glassfish.jersey.media.multipart.FormDataParam; +import javax.inject.Inject; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -59,6 +60,9 @@ public class EchoJerseyResource { @Context SecurityContext securityCtx; + @Inject + JerseyDependency jerseyDependency; + @Path("/decoded-param") @GET @Produces(MediaType.APPLICATION_JSON) public SingleValueModel echoDecodedParam(@QueryParam("param") String param) { diff --git a/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyAwsProxyTest.java b/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyAwsProxyTest.java index c54de6c5a..e791ae810 100644 --- a/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyAwsProxyTest.java +++ b/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyAwsProxyTest.java @@ -14,16 +14,15 @@ import com.amazonaws.serverless.proxy.internal.LambdaContainerHandler; -import com.amazonaws.serverless.proxy.jersey.providers.ServletRequestFilter; -import com.amazonaws.serverless.proxy.model.AwsProxyRequest; -import com.amazonaws.serverless.proxy.model.AwsProxyResponse; import com.amazonaws.serverless.proxy.internal.servlet.AwsServletContext; -import com.amazonaws.serverless.proxy.jersey.model.MapResponseModel; -import com.amazonaws.serverless.proxy.jersey.model.SingleValueModel; import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; import com.amazonaws.serverless.proxy.internal.testutils.MockLambdaContext; +import com.amazonaws.serverless.proxy.jersey.model.MapResponseModel; +import com.amazonaws.serverless.proxy.jersey.model.SingleValueModel; +import com.amazonaws.serverless.proxy.jersey.providers.ServletRequestFilter; +import com.amazonaws.serverless.proxy.model.AwsProxyRequest; +import com.amazonaws.serverless.proxy.model.AwsProxyResponse; import com.amazonaws.services.lambda.runtime.Context; - import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.commons.codec.binary.Base64; @@ -37,13 +36,15 @@ import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; - import java.io.IOException; import java.util.Arrays; import java.util.Collection; import java.util.UUID; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; /** * Unit test class for the Jersey AWS_PROXY default implementation @@ -57,13 +58,26 @@ public class JerseyAwsProxyTest { private static ObjectMapper objectMapper = new ObjectMapper(); + private static ResourceConfig app = new ResourceConfig().packages("com.amazonaws.serverless.proxy.jersey") + .register(LoggingFeature.class) + .register(ServletRequestFilter.class) + .register(MultiPartFeature.class) + .register(new ResourceBinder()) + .property(LoggingFeature.LOGGING_FEATURE_VERBOSITY_SERVER, LoggingFeature.Verbosity.PAYLOAD_ANY); + + private static ResourceConfig appWithoutRegisteredDependencies = new ResourceConfig() + .packages("com.amazonaws.serverless.proxy.jersey") .register(LoggingFeature.class) .register(ServletRequestFilter.class) .register(MultiPartFeature.class) .property(LoggingFeature.LOGGING_FEATURE_VERBOSITY_SERVER, LoggingFeature.Verbosity.PAYLOAD_ANY); + private static JerseyLambdaContainerHandler handler = JerseyLambdaContainerHandler.getAwsProxyHandler(app); + private static JerseyLambdaContainerHandler handlerWithoutRegisteredDependencies + = JerseyLambdaContainerHandler.getAwsProxyHandler(appWithoutRegisteredDependencies); + private static Context lambdaContext = new MockLambdaContext(); private boolean isAlb; @@ -76,15 +90,14 @@ public JerseyAwsProxyTest(boolean alb) { public static Collection data() { return Arrays.asList(new Object[] { false, true }); } - + private AwsProxyRequestBuilder getRequestBuilder(String path, String method) { AwsProxyRequestBuilder builder = new AwsProxyRequestBuilder(path, method); if (isAlb) builder.alb(); - + return builder; } - @Test public void alb_basicRequest_expectSuccess() { AwsProxyRequest request = getRequestBuilder("/echo/headers", "GET") @@ -130,6 +143,18 @@ public void headers_servletRequest_echo() { validateMapResponseModel(output); } + @Test + public void headers_servletRequest_failedDependencyInjection_expectInternalServerError() { + AwsProxyRequest request = getRequestBuilder("/echo/servlet-headers", "GET") + .json() + .header(CUSTOM_HEADER_KEY, CUSTOM_HEADER_VALUE) + .build(); + + AwsProxyResponse output = handlerWithoutRegisteredDependencies.proxy(request, lambdaContext); + assertEquals("application/json", output.getMultiValueHeaders().getFirst("Content-Type")); + assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), output.getStatusCode()); + } + @Test public void context_servletResponse_setCustomHeader() { AwsProxyRequest request = getRequestBuilder("/echo/servlet-response", "GET") diff --git a/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyDependency.java b/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyDependency.java new file mode 100644 index 000000000..0633b96b4 --- /dev/null +++ b/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyDependency.java @@ -0,0 +1,6 @@ +package com.amazonaws.serverless.proxy.jersey; + +// This class is used to test HK2 dependency injection. +public class JerseyDependency { + +} diff --git a/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyInjectionTest.java b/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyInjectionTest.java index 0af2785ee..e8e86270b 100644 --- a/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyInjectionTest.java +++ b/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyInjectionTest.java @@ -30,7 +30,7 @@ */ public class JerseyInjectionTest { - // Test ressource binder + // Test resource binder private static class ResourceBinder extends AbstractBinder { @Override diff --git a/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyParamEncodingTest.java b/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyParamEncodingTest.java index e3eb92de6..06edbdaab 100644 --- a/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyParamEncodingTest.java +++ b/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyParamEncodingTest.java @@ -11,7 +11,6 @@ import com.amazonaws.services.lambda.runtime.Context; import com.fasterxml.jackson.databind.ObjectMapper; -import org.glassfish.jersey.logging.LoggingFeature; import org.glassfish.jersey.media.multipart.MultiPartFeature; import org.glassfish.jersey.server.ResourceConfig; import org.junit.Ignore; @@ -26,10 +25,6 @@ import java.net.URLEncoder; import java.util.Arrays; import java.util.Collection; -import java.util.logging.ConsoleHandler; -import java.util.logging.Level; -import java.util.logging.Logger; -import java.util.logging.SimpleFormatter; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @@ -69,6 +64,7 @@ public class JerseyParamEncodingTest { private static ObjectMapper objectMapper = new ObjectMapper(); private static ResourceConfig app = new ResourceConfig().packages("com.amazonaws.serverless.proxy.jersey") .register(MultiPartFeature.class) + .register(new ResourceBinder()) .property("jersey.config.server.tracing.type", "ALL") .property("jersey.config.server.tracing.threshold", "VERBOSE"); private static JerseyLambdaContainerHandler handler = JerseyLambdaContainerHandler.getAwsProxyHandler(app); diff --git a/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/ResourceBinder.java b/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/ResourceBinder.java new file mode 100644 index 000000000..e98ea805a --- /dev/null +++ b/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/ResourceBinder.java @@ -0,0 +1,12 @@ +package com.amazonaws.serverless.proxy.jersey; + +import org.glassfish.jersey.internal.inject.AbstractBinder; + +import javax.inject.Singleton; + +public class ResourceBinder extends AbstractBinder { + @Override + protected void configure() { + bind(new JerseyDependency()).to(JerseyDependency.class).in(Singleton.class); + } +} From b1574ab2d1d4e97e40bd4e4655cf1cafac55b374 Mon Sep 17 00:00:00 2001 From: sapessi Date: Wed, 14 Aug 2019 10:24:02 -0700 Subject: [PATCH 027/888] More complete implementation of include and forward methods for the request dispatcher to address #275 --- aws-serverless-java-container-core/pom.xml | 6 + .../servlet/AwsHttpServletRequest.java | 11 +- .../servlet/AwsHttpServletResponse.java | 24 ++ .../AwsLambdaServletContainerHandler.java | 60 +---- .../servlet/AwsProxyRequestDispatcher.java | 90 +++++-- .../internal/servlet/AwsServletContext.java | 2 +- .../AwsProxyRequestDispatcherTest.java | 221 ++++++++++++++++++ .../jersey/JerseyLambdaContainerHandler.java | 5 + .../spark/SparkLambdaContainerHandler.java | 5 + .../SpringBootLambdaContainerHandler.java | 4 + .../spring/SpringLambdaContainerHandler.java | 5 + .../proxy/spring/SpringBootSecurityTest.java | 63 +++++ .../spring/sbsecurityapp/LambdaHandler.java | 33 +++ .../spring/sbsecurityapp/TestApplication.java | 13 ++ .../spring/sbsecurityapp/TestController.java | 48 ++++ .../sbsecurityapp/TestSecurityConfig.java | 45 ++++ .../Struts2LambdaContainerHandler.java | 5 + 17 files changed, 557 insertions(+), 83 deletions(-) create mode 100644 aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyRequestDispatcherTest.java create mode 100644 aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringBootSecurityTest.java create mode 100644 aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/sbsecurityapp/LambdaHandler.java create mode 100644 aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/sbsecurityapp/TestApplication.java create mode 100644 aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/sbsecurityapp/TestController.java create mode 100644 aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/sbsecurityapp/TestSecurityConfig.java diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 82d218f9d..fe0e66258 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -86,6 +86,12 @@ 4.4.10 compile + + org.springframework.security + spring-security-web + 5.1.5.RELEASE + test + diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java index 8712285ac..d6a11a967 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java @@ -60,6 +60,7 @@ public abstract class AwsHttpServletRequest implements HttpServletRequest { static final String FORM_DATA_SEPARATOR = "&"; static final DateTimeFormatter dateFormatter = DateTimeFormatter.RFC_1123_DATE_TIME; static final String ENCODING_VALUE_KEY = "charset"; + static final String DISPATCHER_TYPE_ATTRIBUTE = "com.amazonaws.serverless.javacontainer.dispatchertype"; // We need this to pickup the protocol from the CloudFront header since Lambda doesn't receive this // information from anywhere else @@ -80,8 +81,6 @@ public abstract class AwsHttpServletRequest implements HttpServletRequest { private String queryString; private BasicHeaderValueParser headerParser; - protected DispatcherType dispatcherType; - private Logger log = LoggerFactory.getLogger(AwsHttpServletRequest.class); @@ -98,6 +97,7 @@ public abstract class AwsHttpServletRequest implements HttpServletRequest { this.lambdaContext = lambdaContext; attributes = new HashMap<>(); headerParser = new BasicHeaderValueParser(); + setAttribute(DISPATCHER_TYPE_ATTRIBUTE, DispatcherType.REQUEST); } @@ -250,6 +250,9 @@ public AsyncContext getAsyncContext() { @Override public DispatcherType getDispatcherType() { + if (getAttribute(DISPATCHER_TYPE_ATTRIBUTE) != null) { + return (DispatcherType) getAttribute(DISPATCHER_TYPE_ATTRIBUTE); + } return DispatcherType.REQUEST; } @@ -258,10 +261,6 @@ public DispatcherType getDispatcherType() { // Methods - Getter/Setter //------------------------------------------------------------- - public void setDispatcherType(DispatcherType type) { - dispatcherType = type; - } - public void setServletContext(ServletContext context) { servletContext = context; } diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponse.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponse.java index 3a61c07de..d477587f4 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponse.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponse.java @@ -21,6 +21,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import javax.servlet.DispatcherType; import javax.servlet.ServletOutputStream; import javax.servlet.WriteListener; import javax.servlet.http.Cookie; @@ -96,6 +97,9 @@ public AwsHttpServletResponse(AwsHttpServletRequest req, CountDownLatch latch) { @SuppressFBWarnings("COOKIE_USAGE") @Override public void addCookie(Cookie cookie) { + if (request != null && request.getDispatcherType() == DispatcherType.INCLUDE && isCommitted()) { + throw new IllegalStateException("Cannot add Cookies for include request when response is committed"); + } String cookieData = cookie.getName() + "=" + cookie.getValue(); if (cookie.getPath() != null) { cookieData += "; Path=" + cookie.getPath(); @@ -162,6 +166,7 @@ public String encodeRedirectUrl(String s) { @Override public void sendError(int i, String s) throws IOException { + request.setAttribute(AwsHttpServletRequest.DISPATCHER_TYPE_ATTRIBUTE, DispatcherType.ERROR); setStatus(i, s); flushBuffer(); } @@ -169,6 +174,7 @@ public void sendError(int i, String s) throws IOException { @Override public void sendError(int i) throws IOException { + request.setAttribute(AwsHttpServletRequest.DISPATCHER_TYPE_ATTRIBUTE, DispatcherType.ERROR); setStatus(i); flushBuffer(); } @@ -184,6 +190,7 @@ public void sendRedirect(String s) throws IOException { @Override public void setDateHeader(String s, long l) { + if (!canSetHeader()) return; SimpleDateFormat sdf = new SimpleDateFormat(HEADER_DATE_PATTERN); Date responseDate = new Date(); responseDate.setTime(l); @@ -193,6 +200,7 @@ public void setDateHeader(String s, long l) { @Override public void addDateHeader(String s, long l) { + if (!canSetHeader()) return; SimpleDateFormat sdf = new SimpleDateFormat(HEADER_DATE_PATTERN); Date responseDate = new Date(); responseDate.setTime(l); @@ -202,12 +210,14 @@ public void addDateHeader(String s, long l) { @Override public void setHeader(String s, String s1) { + if (!canSetHeader()) return; setHeader(s, s1, true); } @Override public void addHeader(String s, String s1) { + if (!canSetHeader()) return; // TODO: We should probably have a list of headers that we are not allowed to have multiple values for if (s.toLowerCase(Locale.getDefault()).equals(HttpHeaders.CONTENT_TYPE.toLowerCase(Locale.getDefault()))) { setContentType(s1); @@ -219,18 +229,21 @@ public void addHeader(String s, String s1) { @Override public void setIntHeader(String s, int i) { + if (!canSetHeader()) return; setHeader(s, "" + i, true); } @Override public void addIntHeader(String s, int i) { + if (!canSetHeader()) return; setHeader(s, "" + i, false); } @Override public void setStatus(int i) { + if (!canSetHeader()) return; statusCode = i; } @@ -238,6 +251,7 @@ public void setStatus(int i) { @Override @Deprecated public void setStatus(int i, String s) { + if (!canSetHeader()) return; statusCode = i; statusMessage = s; } @@ -343,6 +357,7 @@ public PrintWriter getWriter() throws IOException { @Override public void setCharacterEncoding(String s) { + if (!canSetHeader()) return; characterEncoding = s.toUpperCase(Locale.getDefault()); // The char encoding is being forced, if we already have a content-type header we recreate it if (headers.getFirst(HttpHeaders.CONTENT_TYPE) != null) { @@ -353,18 +368,21 @@ public void setCharacterEncoding(String s) { @Override public void setContentLength(int i) { + if (!canSetHeader()) return; setHeader(HttpHeaders.CONTENT_LENGTH, "" + i, true); } @Override public void setContentLengthLong(long l) { + if (!canSetHeader()) return; setHeader(HttpHeaders.CONTENT_LENGTH, "" + l, true); } @Override public void setContentType(String s) { + if (!canSetHeader()) return; if (s == null) { return; } @@ -430,6 +448,7 @@ public void reset() { @Override public void setLocale(Locale locale) { + if (!canSetHeader()) return; setHeader(HttpHeaders.CONTENT_LANGUAGE, locale.getLanguage(), true); } @@ -470,6 +489,7 @@ AwsProxyRequest getAwsProxyRequest() { //------------------------------------------------------------- private void setHeader(String key, String value, boolean overwrite) { + if (!canSetHeader()) return; String encodedKey = SecurityUtils.crlf(key); String encodedValue = SecurityUtils.crlf(value); List values = headers.get(encodedKey); @@ -482,4 +502,8 @@ private void setHeader(String key, String value, boolean overwrite) { headers.put(encodedKey, values); } + + private boolean canSetHeader() { + return request == null || request.getDispatcherType() != DispatcherType.INCLUDE; + } } diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsLambdaServletContainerHandler.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsLambdaServletContainerHandler.java index 991213ea6..77310a423 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsLambdaServletContainerHandler.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsLambdaServletContainerHandler.java @@ -18,6 +18,7 @@ import com.amazonaws.serverless.proxy.ResponseWriter; import com.amazonaws.serverless.proxy.SecurityContextWriter; +import com.amazonaws.services.lambda.runtime.Context; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -85,57 +86,6 @@ protected AwsLambdaServletContainerHandler(Class requestTypeClass, // Methods - Public //------------------------------------------------------------- - /** - * Forwards a request to the existing framework container. This is called by the AwsProxyRequestDispatcher object - * @param servletRequest The modified request object with the new request path - * @param servletResponse The original servlet response - * @throws ServletException - * @throws IOException - */ - public void forward(ContainerRequestType servletRequest, ContainerResponseType servletResponse) - throws ServletException, IOException { - try { - handleRequest(servletRequest, (ContainerResponseType)getServletResponse(servletResponse), lambdaContext); - } catch (Exception e) { - log.error("Could not forward request", e); - throw new ServletException(e); - } - } - - - /** - * Includes a request to the existing framework container. This is called by the AwsProxyRequestDispatcher object - * @param servletRequest The modified request object with the new request path - * @param servletResponse The original servlet response - * @throws ServletException - * @throws IOException - */ - public void include(ContainerRequestType servletRequest, ContainerResponseType servletResponse) - throws ServletException, IOException { - try { - handleRequest(servletRequest, (ContainerResponseType)getServletResponse(servletResponse), lambdaContext); - } catch (Exception e) { - log.error("Could not include request", e); - throw new ServletException(e); - } - } - - private HttpServletResponse getServletResponse(ContainerResponseType resp) { - if (HttpServletResponseWrapper.class.isAssignableFrom(resp.getClass())) { - ServletResponse servletResp = ((HttpServletResponseWrapper)resp).getResponse(); - assert servletResp instanceof HttpServletResponse : servletResp.getClass(); - return (HttpServletResponse)servletResp; - } - - if (HttpServletResponse.class.isAssignableFrom(resp.getClass())) { - return resp; - } - - - throw new UnsupportedOperationException("Response type of " + resp.getClass().getName() + " is not supported"); - } - - /** * You can use the onStartup to intercept the ServletContext as the Spring application is * initialized and inject custom values. The StartupHandler is called after the onStartup method @@ -184,7 +134,7 @@ protected void setServletContext(final ServletContext context) { filterChainManager = new AwsFilterChainManager((AwsServletContext)servletContext); } - protected FilterChain getFilterChain(ContainerRequestType req, Servlet servlet) { + protected FilterChain getFilterChain(HttpServletRequest req, Servlet servlet) { return filterChainManager.getFilterChain(req, servlet); } @@ -201,16 +151,18 @@ protected FilterChain getFilterChain(ContainerRequestType req, Servlet servlet) * @throws IOException * @throws ServletException */ - protected void doFilter(ContainerRequestType request, ContainerResponseType response, Servlet servlet) throws IOException, ServletException { + protected void doFilter(HttpServletRequest request, HttpServletResponse response, Servlet servlet) throws IOException, ServletException { FilterChain chain = getFilterChain(request, servlet); chain.doFilter(request, response); // if for some reason the response wasn't flushed yet, we force it here. - if (request.getDispatcherType() != DispatcherType.FORWARD && request.getDispatcherType() != DispatcherType.INCLUDE && !response.isCommitted()) { + if (!response.isCommitted()) { response.flushBuffer(); } } + public abstract Servlet getServlet(); + //------------------------------------------------------------- // Inner Class - //------------------------------------------------------------- diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyRequestDispatcher.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyRequestDispatcher.java index 2155323b4..bb61b7b2c 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyRequestDispatcher.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyRequestDispatcher.java @@ -1,6 +1,12 @@ package com.amazonaws.serverless.proxy.internal.servlet; +import com.amazonaws.serverless.proxy.internal.SecurityUtils; +import com.amazonaws.serverless.proxy.model.AwsProxyRequest; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import javax.servlet.DispatcherType; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; @@ -11,6 +17,9 @@ import java.io.IOException; +import static com.amazonaws.serverless.proxy.RequestReader.API_GATEWAY_EVENT_PROPERTY; +import static com.amazonaws.serverless.proxy.internal.servlet.AwsHttpServletRequest.DISPATCHER_TYPE_ATTRIBUTE; + /** * Default RequestDispatcher implementation for the AwsProxyHttpServletRequest type. A new @@ -23,8 +32,9 @@ public class AwsProxyRequestDispatcher implements RequestDispatcher { //------------------------------------------------------------- // Variables - Private //------------------------------------------------------------- - - private String dispatchPath; + private static final Logger log = LoggerFactory.getLogger(AwsHttpSession.class); + private String dispatchTo; + private boolean isNamedDispatcher; private AwsLambdaServletContainerHandler lambdaContainerHandler; //------------------------------------------------------------- @@ -32,12 +42,13 @@ public class AwsProxyRequestDispatcher implements RequestDispatcher { //------------------------------------------------------------- - public AwsProxyRequestDispatcher(final String path, final AwsLambdaServletContainerHandler handler) { - if (!path.startsWith("/")) { + public AwsProxyRequestDispatcher(final String target, final boolean namedDispatcher, final AwsLambdaServletContainerHandler handler) { + if (!namedDispatcher && !target.startsWith("/")) { throw new UnsupportedOperationException("Only dispatchers with absolute paths are supported"); } - dispatchPath = path; + isNamedDispatcher = namedDispatcher; + dispatchTo = target; lambdaContainerHandler = handler; } @@ -50,38 +61,73 @@ public AwsProxyRequestDispatcher(final String path, final AwsLambdaServletContai @SuppressWarnings("unchecked") public void forward(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { - if (!(servletRequest instanceof AwsProxyHttpServletRequest)) { - throw new IOException("Invalid request type: " + servletRequest.getClass().getSimpleName() + ". Only AwsProxyHttpServletRequest is supported"); + if (lambdaContainerHandler == null) { + throw new IllegalStateException("Null container handler in dispatcher"); + } + if (servletResponse.isCommitted()) { + throw new IllegalStateException("Cannot forward request with committed response"); } - if (lambdaContainerHandler == null) { - throw new IOException("Null container handler in dispatcher"); + try { + // Reset any output that has been buffered, but keep headers/cookies + servletResponse.resetBuffer(); + } catch (IllegalStateException e) { + throw e; } - ((AwsProxyHttpServletRequest) servletRequest).setDispatcherType(DispatcherType.FORWARD); - ((AwsProxyHttpServletRequest) servletRequest).getAwsProxyRequest().setPath(dispatchPath); + if (isNamedDispatcher) { + lambdaContainerHandler.doFilter((HttpServletRequest) servletRequest, (HttpServletResponse) servletResponse, lambdaContainerHandler.getServlet()); + return; + } - assert servletResponse instanceof HttpServletResponse : servletResponse.getClass(); - lambdaContainerHandler.forward((HttpServletRequest)servletRequest, (HttpServletResponse)servletResponse); + servletRequest.setAttribute(DISPATCHER_TYPE_ATTRIBUTE, DispatcherType.FORWARD); + setRequestPath(servletRequest, dispatchTo); + lambdaContainerHandler.doFilter((HttpServletRequest) servletRequest, (HttpServletResponse) servletResponse, lambdaContainerHandler.getServlet()); } @Override @SuppressWarnings("unchecked") + @SuppressFBWarnings("SERVLET_QUERY_STRING") public void include(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { - if (!(servletRequest instanceof AwsProxyHttpServletRequest)) { - throw new IOException("Invalid request type: " + servletRequest.getClass().getSimpleName() + ". Only AwsProxyHttpServletRequest is supported"); - } - if (lambdaContainerHandler == null) { - throw new IOException("Null container handler in dispatcher"); + throw new IllegalStateException("Null container handler in dispatcher"); + } + if (servletResponse.isCommitted()) { + throw new IllegalStateException("Cannot forward request with committed response"); + } + servletRequest.setAttribute(DISPATCHER_TYPE_ATTRIBUTE, DispatcherType.INCLUDE); + if (!isNamedDispatcher) { + servletRequest.setAttribute("javax.servlet.include.request_uri", ((HttpServletRequest)servletRequest).getRequestURI()); + servletRequest.setAttribute("javax.servlet.include.context_path", ((HttpServletRequest) servletRequest).getContextPath()); + servletRequest.setAttribute("javax.servlet.include.servlet_path", ((HttpServletRequest) servletRequest).getServletPath()); + servletRequest.setAttribute("javax.servlet.include.path_info", ((HttpServletRequest) servletRequest).getPathInfo()); + servletRequest.setAttribute("javax.servlet.include.query_string", + SecurityUtils.encode(SecurityUtils.crlf(((HttpServletRequest) servletRequest).getQueryString()))); + setRequestPath(servletRequest, dispatchTo); } + lambdaContainerHandler.doFilter((HttpServletRequest) servletRequest, (HttpServletResponse) servletResponse, lambdaContainerHandler.getServlet()); + } - ((AwsProxyHttpServletRequest) servletRequest).setDispatcherType(DispatcherType.INCLUDE); - ((AwsProxyHttpServletRequest) servletRequest).getAwsProxyRequest().setPath(dispatchPath); + /** + * Sets the destination path in the given request. Uses the AwsProxyRequest.setPath method which + * is in turn read by the HttpServletRequest implementation. + * @param req The request object to be modified + * @param destinationPath The new path for the request + * @throws IllegalStateException If the given request object does not include the API_GATEWAY_EVENT_PROPERTY + * attribute or the value for the attribute is not of the correct type: AwsProxyRequest. + */ + void setRequestPath(ServletRequest req, final String destinationPath) { + if (req instanceof AwsProxyHttpServletRequest) { + ((AwsProxyHttpServletRequest) req).getAwsProxyRequest().setPath(dispatchTo); + return; + } - assert servletResponse instanceof HttpServletResponse : servletResponse.getClass(); - lambdaContainerHandler.include((HttpServletRequest)servletRequest, (HttpServletResponse)servletResponse); + log.debug("Request is not an AwsProxyHttpServletRequest, attempting to extract the proxy event type"); + if (req.getAttribute(API_GATEWAY_EVENT_PROPERTY) == null || !(req.getAttribute(API_GATEWAY_EVENT_PROPERTY) instanceof AwsProxyRequest)) { + throw new IllegalStateException("ServletRequest object does not contain API Gateway event"); + } + ((AwsProxyRequest)req.getAttribute(API_GATEWAY_EVENT_PROPERTY)).setPath(dispatchTo); } } diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java index cb72e9532..b3f2f1fd6 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java @@ -179,7 +179,7 @@ public InputStream getResourceAsStream(String s) { @Override public RequestDispatcher getRequestDispatcher(String s) { - return new AwsProxyRequestDispatcher(s, containerHandler); + return new AwsProxyRequestDispatcher(s, false, containerHandler); } diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyRequestDispatcherTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyRequestDispatcherTest.java new file mode 100644 index 000000000..05aa6ae65 --- /dev/null +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyRequestDispatcherTest.java @@ -0,0 +1,221 @@ +package com.amazonaws.serverless.proxy.internal.servlet; + +import com.amazonaws.serverless.exceptions.ContainerInitializationException; +import com.amazonaws.serverless.exceptions.InvalidRequestEventException; +import com.amazonaws.serverless.proxy.AwsProxyExceptionHandler; +import com.amazonaws.serverless.proxy.AwsProxySecurityContextWriter; +import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; +import com.amazonaws.serverless.proxy.internal.testutils.MockLambdaContext; +import com.amazonaws.serverless.proxy.model.AwsProxyRequest; +import com.amazonaws.serverless.proxy.model.AwsProxyResponse; +import com.amazonaws.serverless.proxy.model.ContainerConfig; +import com.amazonaws.services.lambda.runtime.Context; +import org.junit.Test; +import org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestWrapper; + +import javax.servlet.Servlet; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.nio.charset.Charset; +import java.util.concurrent.CountDownLatch; + +import static junit.framework.TestCase.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +public class AwsProxyRequestDispatcherTest { + public static final String FORWARD_PATH = "/newpath"; + static AwsProxyHttpServletRequestReader requestReader = new AwsProxyHttpServletRequestReader(); + + + @Test + public void setPath_forwardByPath_proxyRequestObjectInPropertyReferencesSameProxyRequest() throws InvalidRequestEventException { + AwsProxyRequest proxyRequest = new AwsProxyRequestBuilder("/hello", "GET").build(); + AwsProxyHttpServletRequest servletRequest = requestReader.readRequest(proxyRequest,null, new MockLambdaContext(), ContainerConfig.defaultConfig()); + + AwsProxyRequestDispatcher dispatcher = new AwsProxyRequestDispatcher(FORWARD_PATH, false, null); + dispatcher.setRequestPath(servletRequest, FORWARD_PATH); + assertEquals(FORWARD_PATH, servletRequest.getRequestURI()); + } + + @Test + public void setPathForWrappedRequest_forwardByPath_proxyRequestObjectInPropertyReferencesSameProxyRequest() throws InvalidRequestEventException { + AwsProxyRequest proxyRequest = new AwsProxyRequestBuilder("/hello", "GET").build(); + AwsProxyHttpServletRequest servletRequest = requestReader.readRequest(proxyRequest,null, new MockLambdaContext(), ContainerConfig.defaultConfig()); + SecurityContextHolderAwareRequestWrapper springSecurityRequest = new SecurityContextHolderAwareRequestWrapper(servletRequest, "ADMIN"); + + AwsProxyRequestDispatcher dispatcher = new AwsProxyRequestDispatcher(FORWARD_PATH, false, null); + dispatcher.setRequestPath(springSecurityRequest, FORWARD_PATH); + assertEquals(FORWARD_PATH, springSecurityRequest.getRequestURI()); + } + + @Test + public void setPathForWrappedRequestWithoutGatewayEvent_forwardByPath_throwsException() { + AwsProxyRequest proxyRequest = new AwsProxyRequestBuilder("/hello", "GET").build(); + AwsProxyHttpServletRequest servletRequest = new AwsProxyHttpServletRequest(proxyRequest, new MockLambdaContext(), null); + SecurityContextHolderAwareRequestWrapper springSecurityRequest = new SecurityContextHolderAwareRequestWrapper(servletRequest, "ADMIN"); + + AwsProxyRequestDispatcher dispatcher = new AwsProxyRequestDispatcher(FORWARD_PATH, false, null); + try { + dispatcher.setRequestPath(springSecurityRequest, FORWARD_PATH); + } catch (Exception e) { + assertTrue(e instanceof IllegalStateException); + return; + } + fail(); + } + + @Test + public void forwardRequest_nullHandler_throwsIllegalStateException() throws InvalidRequestEventException { + AwsProxyRequest proxyRequest = new AwsProxyRequestBuilder("/hello", "GET").build(); + AwsProxyHttpServletRequest servletRequest = requestReader.readRequest(proxyRequest,null, new MockLambdaContext(), ContainerConfig.defaultConfig()); + AwsProxyRequestDispatcher dispatcher = new AwsProxyRequestDispatcher(FORWARD_PATH, false, null); + try { + dispatcher.forward(servletRequest, new AwsHttpServletResponse(servletRequest, new CountDownLatch(1))); + } catch (ServletException e) { + fail("Unexpected ServletException"); + } catch (IOException e) { + fail("Unexpected IOException"); + } catch (Exception e) { + assertTrue(e instanceof IllegalStateException); + return; + } + fail(); + } + + @Test + public void forwardRequest_committedResponse_throwsIllegalStateException() throws InvalidRequestEventException { + AwsProxyRequest proxyRequest = new AwsProxyRequestBuilder("/hello", "GET").build(); + AwsProxyHttpServletRequest servletRequest = requestReader.readRequest(proxyRequest,null, new MockLambdaContext(), ContainerConfig.defaultConfig()); + AwsProxyRequestDispatcher dispatcher = new AwsProxyRequestDispatcher(FORWARD_PATH, false, mockLambdaHandler(null)); + AwsHttpServletResponse resp = new AwsHttpServletResponse(servletRequest, new CountDownLatch(1)); + + try { + resp.flushBuffer(); + dispatcher.forward(servletRequest, resp); + } catch (ServletException e) { + fail("Unexpected ServletException"); + } catch (IOException e) { + fail("Unexpected IOException"); + } catch (Exception e) { + assertTrue(e instanceof IllegalStateException); + return; + } + fail(); + } + + @Test + public void forwardRequest_partiallyWrittenResponse_resetsBuffer() throws InvalidRequestEventException { + AwsProxyRequest proxyRequest = new AwsProxyRequestBuilder("/hello", "GET").build(); + AwsProxyHttpServletRequest servletRequest = requestReader.readRequest(proxyRequest,null, new MockLambdaContext(), ContainerConfig.defaultConfig()); + AwsProxyRequestDispatcher dispatcher = new AwsProxyRequestDispatcher(FORWARD_PATH, false, mockLambdaHandler(null)); + AwsHttpServletResponse resp = new AwsHttpServletResponse(servletRequest, new CountDownLatch(1)); + + try { + resp.getOutputStream().write("this is a test write".getBytes()); + assertEquals("this is a test write", new String(resp.getAwsResponseBodyBytes(), Charset.defaultCharset())); + dispatcher.forward(servletRequest, resp); + assertEquals(0, resp.getAwsResponseBodyBytes().length); + + } catch (ServletException e) { + fail("Unexpected ServletException"); + } catch (IOException e) { + fail("Unexpected IOException"); + } + } + + @Test + public void include_addsToResponse_appendsCorrectly() throws InvalidRequestEventException, IOException { + final String firstPart = "first"; + final String secondPart = "second"; + AwsProxyRequest proxyRequest = new AwsProxyRequestBuilder("/hello", "GET").build(); + + AwsProxyResponse resp = mockLambdaHandler((AwsProxyHttpServletRequest req, AwsHttpServletResponse res)-> { + if (req.getAttribute("cnt") == null) { + res.getOutputStream().write(firstPart.getBytes()); + req.setAttribute("cnt", 1); + req.getRequestDispatcher("/includer").include(req, res); + res.setStatus(200); + res.flushBuffer(); + } else { + res.getOutputStream().write(secondPart.getBytes()); + } + }).proxy(proxyRequest, new MockLambdaContext()); + assertEquals(firstPart + secondPart, resp.getBody()); + } + + @Test + public void include_appendsNewHeader_cannotAppendNewHeaders() throws InvalidRequestEventException, IOException { + final String firstPart = "first"; + final String secondPart = "second"; + final String headerKey = "X-Custom-Header"; + AwsProxyRequest proxyRequest = new AwsProxyRequestBuilder("/hello", "GET").build(); + + AwsProxyResponse resp = mockLambdaHandler((AwsProxyHttpServletRequest req, AwsHttpServletResponse res)-> { + if (req.getAttribute("cnt") == null) { + res.getOutputStream().write(firstPart.getBytes()); + req.setAttribute("cnt", 1); + req.getRequestDispatcher("/includer").include(req, res); + res.setStatus(200); + res.flushBuffer(); + } else { + res.getOutputStream().write(secondPart.getBytes()); + res.addHeader(headerKey, "value"); + } + }).proxy(proxyRequest, new MockLambdaContext()); + assertEquals(firstPart + secondPart, resp.getBody()); + assertFalse(resp.getMultiValueHeaders().containsKey(headerKey)); + } + + private interface RequestHandler { + void handleRequest(AwsProxyHttpServletRequest req, AwsHttpServletResponse resp) throws ServletException, IOException; + } + + + private AwsLambdaServletContainerHandler mockLambdaHandler(RequestHandler h) { + return new AwsLambdaServletContainerHandler( + AwsProxyRequest.class, + AwsProxyResponse.class, + new AwsProxyHttpServletRequestReader(), + new AwsProxyHttpServletResponseWriter(), + new AwsProxySecurityContextWriter(), + new AwsProxyExceptionHandler() + ) { + @Override + public Servlet getServlet() { + return null; + } + + @Override + protected void doFilter(HttpServletRequest request, HttpServletResponse response, Servlet servlet) throws IOException, ServletException { + if (h != null) { + h.handleRequest((AwsProxyHttpServletRequest)request, (AwsHttpServletResponse)response); + } + } + + @Override + protected AwsHttpServletResponse getContainerResponse(AwsProxyHttpServletRequest request, CountDownLatch latch) { + return new AwsHttpServletResponse(request, latch); + } + + @Override + protected void handleRequest(AwsProxyHttpServletRequest containerRequest, AwsHttpServletResponse containerResponse, Context lambdaContext) throws Exception { + if (h != null) { + + setServletContext(new AwsServletContext(this)); + containerRequest.setServletContext(getServletContext()); + + h.handleRequest(containerRequest, containerResponse); + } + containerResponse.flushBuffer(); + } + + @Override + public void initialize() throws ContainerInitializationException { + + } + }; + } +} diff --git a/aws-serverless-java-container-jersey/src/main/java/com/amazonaws/serverless/proxy/jersey/JerseyLambdaContainerHandler.java b/aws-serverless-java-container-jersey/src/main/java/com/amazonaws/serverless/proxy/jersey/JerseyLambdaContainerHandler.java index dd9166f7d..cd99133a4 100644 --- a/aws-serverless-java-container-jersey/src/main/java/com/amazonaws/serverless/proxy/jersey/JerseyLambdaContainerHandler.java +++ b/aws-serverless-java-container-jersey/src/main/java/com/amazonaws/serverless/proxy/jersey/JerseyLambdaContainerHandler.java @@ -40,6 +40,7 @@ import javax.servlet.DispatcherType; import javax.servlet.FilterRegistration; +import javax.servlet.Servlet; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -205,4 +206,8 @@ public InjectionManager getInjectionManager() { } return jerseyFilter.getApplicationHandler().getInjectionManager(); } + + public Servlet getServlet() { + return null; + } } diff --git a/aws-serverless-java-container-spark/src/main/java/com/amazonaws/serverless/proxy/spark/SparkLambdaContainerHandler.java b/aws-serverless-java-container-spark/src/main/java/com/amazonaws/serverless/proxy/spark/SparkLambdaContainerHandler.java index 247140413..dfea29017 100644 --- a/aws-serverless-java-container-spark/src/main/java/com/amazonaws/serverless/proxy/spark/SparkLambdaContainerHandler.java +++ b/aws-serverless-java-container-spark/src/main/java/com/amazonaws/serverless/proxy/spark/SparkLambdaContainerHandler.java @@ -37,6 +37,7 @@ import javax.servlet.DispatcherType; import javax.servlet.FilterRegistration; +import javax.servlet.Servlet; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; @@ -217,4 +218,8 @@ public void initialize() sparkRegistration.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), true, "/*"); Timer.stop("SPARK_COLD_START"); } + + public Servlet getServlet() { + return null; + } } diff --git a/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java b/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java index 6de1fcaf5..68cab4f79 100644 --- a/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java +++ b/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java @@ -186,6 +186,10 @@ public void initialize() Timer.stop("SPRINGBOOT_COLD_START"); } + public Servlet getServlet() { + return dispatcherServlet; + } + private class SpringBootAwsServletContext extends AwsServletContext { public SpringBootAwsServletContext() { diff --git a/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringLambdaContainerHandler.java b/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringLambdaContainerHandler.java index 28bff8af2..7fd87803b 100644 --- a/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringLambdaContainerHandler.java +++ b/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringLambdaContainerHandler.java @@ -27,6 +27,7 @@ import org.springframework.web.context.ConfigurableWebApplicationContext; import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; +import javax.servlet.Servlet; import javax.servlet.ServletException; import java.util.concurrent.CountDownLatch; @@ -197,4 +198,8 @@ public void initialize() initialized = true; Timer.stop("SPRING_COLD_START"); } + + public Servlet getServlet() { + return initializer.getDispatcherServlet(); + } } diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringBootSecurityTest.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringBootSecurityTest.java new file mode 100644 index 000000000..dc46ed339 --- /dev/null +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringBootSecurityTest.java @@ -0,0 +1,63 @@ +package com.amazonaws.serverless.proxy.spring; + + +import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; +import com.amazonaws.serverless.proxy.internal.testutils.MockLambdaContext; +import com.amazonaws.serverless.proxy.model.AwsProxyRequest; +import com.amazonaws.serverless.proxy.model.AwsProxyResponse; +import com.amazonaws.serverless.proxy.spring.echoapp.model.SingleValueModel; +import com.amazonaws.serverless.proxy.spring.sbsecurityapp.LambdaHandler; +import com.amazonaws.serverless.proxy.spring.sbsecurityapp.TestController; +import com.amazonaws.serverless.proxy.spring.sbsecurityapp.TestSecurityConfig; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import org.junit.Test; + +import javax.ws.rs.core.HttpHeaders; +import java.io.IOException; +import java.util.Base64; + +import static org.junit.Assert.*; + + +public class SpringBootSecurityTest { + private LambdaHandler handler = new LambdaHandler(); + private MockLambdaContext context = new MockLambdaContext(); + private ObjectMapper mapper = new ObjectMapper(); + + @Test + public void correctUser_springSecurityBasicAuth_requestSucceeds() throws JsonProcessingException { + String authValue = Base64.getMimeEncoder().encodeToString((TestSecurityConfig.USERNAME + ":" + TestSecurityConfig.PASSWORD).getBytes()); + AwsProxyRequest req = new AwsProxyRequestBuilder("/user", "GET") + .header(HttpHeaders.AUTHORIZATION, "Basic " + authValue).build(); + AwsProxyResponse resp = handler.handleRequest(req, context); + assertNotNull(resp); + assertEquals(200, resp.getStatusCode()); + validateSingleValueModel(resp, TestSecurityConfig.USERNAME); + } + + @Test + public void wrongUser_springSecurityBasicAuth_requestRedirectsSuccessfully() throws JsonProcessingException { + String authValue = Base64.getMimeEncoder().encodeToString((TestSecurityConfig.NO_ADMIN_USERNAME + ":" + TestSecurityConfig.PASSWORD).getBytes()); + AwsProxyRequest req = new AwsProxyRequestBuilder("/user", "GET") + .header(HttpHeaders.AUTHORIZATION, "Basic " + authValue).build(); + AwsProxyResponse resp = handler.handleRequest(req, context); + assertNotNull(resp); + mapper.enable(SerializationFeature.INDENT_OUTPUT); + System.out.println(mapper.writeValueAsString(resp.getMultiValueHeaders())); + assertEquals(403, resp.getStatusCode()); + validateSingleValueModel(resp, TestController.ACCESS_DENIED); + } + + private void validateSingleValueModel(AwsProxyResponse output, String value) { + try { + SingleValueModel response = mapper.readValue(output.getBody(), SingleValueModel.class); + assertNotNull(response.getValue()); + assertEquals(value, response.getValue()); + } catch (IOException e) { + fail("Exception while parsing response body: " + e.getMessage()); + e.printStackTrace(); + } + } +} diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/sbsecurityapp/LambdaHandler.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/sbsecurityapp/LambdaHandler.java new file mode 100644 index 000000000..b5a7ea96d --- /dev/null +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/sbsecurityapp/LambdaHandler.java @@ -0,0 +1,33 @@ +package com.amazonaws.serverless.proxy.spring.sbsecurityapp; + + +import com.amazonaws.serverless.exceptions.ContainerInitializationException; +import com.amazonaws.serverless.proxy.model.AwsProxyRequest; +import com.amazonaws.serverless.proxy.model.AwsProxyResponse; +import com.amazonaws.serverless.proxy.spring.SpringBootLambdaContainerHandler; +import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.RequestHandler; + + +public class LambdaHandler + implements RequestHandler +{ + SpringBootLambdaContainerHandler handler; + boolean isinitialized = false; + + public AwsProxyResponse handleRequest(AwsProxyRequest awsProxyRequest, Context context) + { + if (!isinitialized) { + isinitialized = true; + try { + handler = SpringBootLambdaContainerHandler.getAwsProxyHandler(TestApplication.class); + } catch (ContainerInitializationException e) { + e.printStackTrace(); + return null; + } + } + AwsProxyResponse res = handler.proxy(awsProxyRequest, context); + return res; + } +} + diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/sbsecurityapp/TestApplication.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/sbsecurityapp/TestApplication.java new file mode 100644 index 000000000..34be320f0 --- /dev/null +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/sbsecurityapp/TestApplication.java @@ -0,0 +1,13 @@ +package com.amazonaws.serverless.proxy.spring.sbsecurityapp; + + +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.web.support.SpringBootServletInitializer; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.PropertySource; + + +@SpringBootApplication +@ComponentScan(basePackages = "com.amazonaws.serverless.proxy.spring.sbsecurityapp") +public class TestApplication extends SpringBootServletInitializer { +} diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/sbsecurityapp/TestController.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/sbsecurityapp/TestController.java new file mode 100644 index 000000000..351ddce17 --- /dev/null +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/sbsecurityapp/TestController.java @@ -0,0 +1,48 @@ +package com.amazonaws.serverless.proxy.spring.sbsecurityapp; + + +import com.amazonaws.serverless.proxy.spring.echoapp.model.SingleValueModel; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.config.annotation.ContentNegotiationConfigurer; +import org.springframework.web.servlet.config.annotation.PathMatchConfigurer; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; + +import javax.servlet.http.HttpServletResponse; +import java.security.Principal; +import java.util.List; + + +@RestController +public class TestController { + public static final String ACCESS_DENIED = "AccessDenied"; + + @RequestMapping(path = "/user", method = { RequestMethod.GET }) + public SingleValueModel testGet() { + Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal(); + SingleValueModel value = new SingleValueModel(); + + if (principal instanceof UserDetails) { + String username = ((UserDetails)principal).getUsername(); + value.setValue(username); + } else { + value.setValue(null); + } + System.out.println("Principal: " + value.getValue()); + return value; + } + + @RequestMapping(path = "/access-denied", method = { RequestMethod.GET }) + public SingleValueModel accessDenied() { + SingleValueModel model = new SingleValueModel(); + model.setValue(ACCESS_DENIED); + return model; + } + + +} diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/sbsecurityapp/TestSecurityConfig.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/sbsecurityapp/TestSecurityConfig.java new file mode 100644 index 000000000..13b1ed874 --- /dev/null +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/sbsecurityapp/TestSecurityConfig.java @@ -0,0 +1,45 @@ +package com.amazonaws.serverless.proxy.spring.sbsecurityapp; + +import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; +import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.builders.WebSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; +import org.springframework.security.config.http.SessionCreationPolicy; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; + + +@Configuration +@EnableGlobalMethodSecurity(prePostEnabled = true) +@EnableWebSecurity +public class TestSecurityConfig extends WebSecurityConfigurerAdapter { + public static final String USERNAME = "test"; + public static final String NO_ADMIN_USERNAME = "test2"; + public static final String PASSWORD = "123"; + public static BCryptPasswordEncoder pEncoder = new BCryptPasswordEncoder(); + @Override + protected void configure(AuthenticationManagerBuilder auth) throws Exception { + auth.inMemoryAuthentication().withUser(USERNAME).password(pEncoder.encode(PASSWORD)).roles("ADMIN") + .and().withUser(NO_ADMIN_USERNAME).password(pEncoder.encode(PASSWORD)).roles("USER") + .and().passwordEncoder(pEncoder); + System.out.println("Configure authentication manager"); + } + + @Override + public void configure(WebSecurity web) throws Exception { + System.out.println("Configure Web security"); + } + + @Override + protected void configure(HttpSecurity http) throws Exception { + http.csrf().disable(); + http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS); + http.httpBasic(); + http + .authorizeRequests() + .antMatchers("/user").hasRole("ADMIN") + .and().exceptionHandling().accessDeniedPage("/access-denied"); + } +} diff --git a/aws-serverless-java-container-struts2/src/main/java/com/amazonaws/serverless/proxy/struts2/Struts2LambdaContainerHandler.java b/aws-serverless-java-container-struts2/src/main/java/com/amazonaws/serverless/proxy/struts2/Struts2LambdaContainerHandler.java index 003390ec0..b9f4f587e 100644 --- a/aws-serverless-java-container-struts2/src/main/java/com/amazonaws/serverless/proxy/struts2/Struts2LambdaContainerHandler.java +++ b/aws-serverless-java-container-struts2/src/main/java/com/amazonaws/serverless/proxy/struts2/Struts2LambdaContainerHandler.java @@ -22,6 +22,7 @@ import javax.servlet.DispatcherType; import javax.servlet.FilterRegistration; +import javax.servlet.Servlet; import java.util.EnumSet; import java.util.concurrent.CountDownLatch; @@ -109,4 +110,8 @@ public void initialize() throws ContainerInitializationException { Timer.stop(TIMER_STRUTS_2_COLD_START_INIT); log.info("... initialize of Struts2 Lambda Application completed!"); } + + public Servlet getServlet() { + return null; + } } From d22d84bc38dd88540d64f0fa96ee353cdd85b677 Mon Sep 17 00:00:00 2001 From: sapessi Date: Wed, 14 Aug 2019 11:10:35 -0700 Subject: [PATCH 028/888] Updated filter chain to skip filters that should not be applied based on their registration's DispatcherTypes. Changed the default registration to include REQUEST and ASYNC types. This completes the changes for #275 --- .../proxy/internal/servlet/FilterChainHolder.java | 6 ++++++ .../serverless/proxy/internal/servlet/FilterHolder.java | 1 + .../proxy/jersey/JerseyLambdaContainerHandler.java | 5 ++++- .../serverless/proxy/spark/SparkLambdaContainerHandler.java | 4 +++- .../proxy/struts2/Struts2LambdaContainerHandler.java | 4 +++- 5 files changed, 17 insertions(+), 3 deletions(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/FilterChainHolder.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/FilterChainHolder.java index 44c8fa95b..bec7a8f4b 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/FilterChainHolder.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/FilterChainHolder.java @@ -75,6 +75,12 @@ public void doFilter(ServletRequest servletRequest, ServletResponse servletRespo if (currentFilter <= filters.size() - 1) { FilterHolder holder = filters.get(currentFilter); + // confirm that this filter needs to be executed + if (!holder.getRegistration().getDispatcherTypes().contains(servletRequest.getDispatcherType())) { + // skip to the next filter - we have already incremented the currentFilter + doFilter(servletRequest, servletResponse); + } + // lazily initialize filters when they are needed if (!holder.isFilterInitialized()) { holder.init(); diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/FilterHolder.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/FilterHolder.java index 2610622d6..893075d2c 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/FilterHolder.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/FilterHolder.java @@ -289,6 +289,7 @@ public Collection getServletNameMappings() { public void addMappingForUrlPatterns(EnumSet types, boolean isLast, String... patterns) { if (types == null) { dispatcherTypes.add(DispatcherType.REQUEST); + dispatcherTypes.add(DispatcherType.ASYNC); } else { dispatcherTypes.addAll(types); } diff --git a/aws-serverless-java-container-jersey/src/main/java/com/amazonaws/serverless/proxy/jersey/JerseyLambdaContainerHandler.java b/aws-serverless-java-container-jersey/src/main/java/com/amazonaws/serverless/proxy/jersey/JerseyLambdaContainerHandler.java index cd99133a4..83c01a334 100644 --- a/aws-serverless-java-container-jersey/src/main/java/com/amazonaws/serverless/proxy/jersey/JerseyLambdaContainerHandler.java +++ b/aws-serverless-java-container-jersey/src/main/java/com/amazonaws/serverless/proxy/jersey/JerseyLambdaContainerHandler.java @@ -193,7 +193,10 @@ public void initialize() { // manually add the spark filter to the chain. This should the last one and match all uris FilterRegistration.Dynamic jerseyFilterReg = getServletContext().addFilter("JerseyFilter", jerseyFilter); - jerseyFilterReg.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), true, "/*"); + jerseyFilterReg.addMappingForUrlPatterns( + EnumSet.of(DispatcherType.REQUEST, DispatcherType.ASYNC, DispatcherType.INCLUDE, DispatcherType.FORWARD), + true, "/*" + ); Timer.stop("JERSEY_COLD_START_INIT"); initialized = true; diff --git a/aws-serverless-java-container-spark/src/main/java/com/amazonaws/serverless/proxy/spark/SparkLambdaContainerHandler.java b/aws-serverless-java-container-spark/src/main/java/com/amazonaws/serverless/proxy/spark/SparkLambdaContainerHandler.java index dfea29017..368a5e815 100644 --- a/aws-serverless-java-container-spark/src/main/java/com/amazonaws/serverless/proxy/spark/SparkLambdaContainerHandler.java +++ b/aws-serverless-java-container-spark/src/main/java/com/amazonaws/serverless/proxy/spark/SparkLambdaContainerHandler.java @@ -215,7 +215,9 @@ public void initialize() // manually add the spark filter to the chain. This should the last one and match all uris FilterRegistration.Dynamic sparkRegistration = getServletContext().addFilter("SparkFilter", embeddedServer.getSparkFilter()); - sparkRegistration.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), true, "/*"); + sparkRegistration.addMappingForUrlPatterns( + EnumSet.of(DispatcherType.REQUEST, DispatcherType.ASYNC, DispatcherType.INCLUDE, DispatcherType.FORWARD), + true, "/*"); Timer.stop("SPARK_COLD_START"); } diff --git a/aws-serverless-java-container-struts2/src/main/java/com/amazonaws/serverless/proxy/struts2/Struts2LambdaContainerHandler.java b/aws-serverless-java-container-struts2/src/main/java/com/amazonaws/serverless/proxy/struts2/Struts2LambdaContainerHandler.java index b9f4f587e..25a2f7f96 100644 --- a/aws-serverless-java-container-struts2/src/main/java/com/amazonaws/serverless/proxy/struts2/Struts2LambdaContainerHandler.java +++ b/aws-serverless-java-container-struts2/src/main/java/com/amazonaws/serverless/proxy/struts2/Struts2LambdaContainerHandler.java @@ -101,7 +101,9 @@ public void initialize() throws ContainerInitializationException { StrutsPrepareAndExecuteFilter filter = new StrutsPrepareAndExecuteFilter(); FilterRegistration.Dynamic filterRegistration = this.getServletContext() .addFilter(STRUTS_FILTER_NAME, filter); - filterRegistration.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), true, "/*"); + filterRegistration.addMappingForUrlPatterns( + EnumSet.of(DispatcherType.REQUEST, DispatcherType.ASYNC, DispatcherType.INCLUDE, DispatcherType.FORWARD), + true, "/*"); } catch (Exception e) { throw new ContainerInitializationException("Could not initialize Struts2", e); } From ce6710efa750d17a2d09425db60061cfbdcaaa8b Mon Sep 17 00:00:00 2001 From: sapessi Date: Wed, 14 Aug 2019 11:59:35 -0700 Subject: [PATCH 029/888] Bump jackson version to address vulnerability reported by github --- aws-serverless-java-container-core/pom.xml | 10 ++++++++-- aws-serverless-java-container-jersey/pom.xml | 2 +- aws-serverless-java-container-spring/pom.xml | 2 +- aws-serverless-java-container-struts2/pom.xml | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/jersey/pet-store/pom.xml | 2 +- samples/spark/pet-store/pom.xml | 2 +- samples/struts/pet-store/pom.xml | 2 +- 9 files changed, 16 insertions(+), 10 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index fe0e66258..52d05b29e 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -16,7 +16,7 @@ - 2.9.9 + 2.9.9.3 2.1 3.1.0 @@ -54,7 +54,13 @@ com.fasterxml.jackson.module jackson-module-afterburner - ${jackson.version} + 2.9.9 + + + com.fasterxml.jackson.core + jackson-databind + + diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index f92c9d702..80a21388e 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -60,7 +60,7 @@ com.fasterxml.jackson.core jackson-databind - 2.9.9 + 2.9.9.3 true test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index e1a3e9c24..15e629305 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -19,7 +19,7 @@ 5.1.8.RELEASE 1.5.21.RELEASE 5.1.5.RELEASE - 2.9.9 + 2.9.9.3 diff --git a/aws-serverless-java-container-struts2/pom.xml b/aws-serverless-java-container-struts2/pom.xml index f981e0876..e414eab51 100644 --- a/aws-serverless-java-container-struts2/pom.xml +++ b/aws-serverless-java-container-struts2/pom.xml @@ -16,7 +16,7 @@ 2.5.20 - 2.9.9 + 2.9.9.3 diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml index 549511720..fd34a171e 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml @@ -15,7 +15,7 @@ 1.8 1.8 2.27 - 2.9.9 + 2.9.9.3 diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml index ca9d4dd18..6d8db9922 100644 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 1.8 - 2.9.9 + 2.9.9.3 2.8.0 diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index d85e13b08..ddf808ceb 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -77,7 +77,7 @@ com.fasterxml.jackson.core jackson-databind - 2.9.9 + 2.9.9.3 diff --git a/samples/spark/pet-store/pom.xml b/samples/spark/pet-store/pom.xml index 32181f3c9..e71a773bc 100644 --- a/samples/spark/pet-store/pom.xml +++ b/samples/spark/pet-store/pom.xml @@ -26,7 +26,7 @@ 1.8 1.8 - 2.9.9 + 2.9.9.3 2.8.0 diff --git a/samples/struts/pet-store/pom.xml b/samples/struts/pet-store/pom.xml index 5763b94a8..5d278dd0e 100644 --- a/samples/struts/pet-store/pom.xml +++ b/samples/struts/pet-store/pom.xml @@ -27,7 +27,7 @@ 1.8 1.8 2.5.20 - 2.9.9 + 2.9.9.3 4.12 2.11.1 From 0e72367669eee8132bddf6a3f1f476b56b2614cd Mon Sep 17 00:00:00 2001 From: sapessi Date: Wed, 14 Aug 2019 13:53:39 -0700 Subject: [PATCH 030/888] Fixed Jackson versions to only bump databind --- samples/struts/pet-store/pom.xml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/samples/struts/pet-store/pom.xml b/samples/struts/pet-store/pom.xml index 5d278dd0e..2cff49e5a 100644 --- a/samples/struts/pet-store/pom.xml +++ b/samples/struts/pet-store/pom.xml @@ -27,7 +27,8 @@ 1.8 1.8 2.5.20 - 2.9.9.3 + 2.9.9 + 2.9.9.3 4.12 2.11.1 @@ -97,7 +98,7 @@ com.fasterxml.jackson.core jackson-databind - ${jackson.version} + ${jackson-databind.version} From cf60ea63b9ddc0bfc5aa29378107b8900559b026 Mon Sep 17 00:00:00 2001 From: sapessi Date: Wed, 14 Aug 2019 17:59:50 -0700 Subject: [PATCH 031/888] Unit tests for SecurityUtils and new jacoco coverage check to block the build at 70%. Finally closing #160 --- aws-serverless-java-container-core/pom.xml | 3 + .../proxy/internal/SecurityUtilsTest.java | 81 +++++++++++++++++++ pom.xml | 2 +- 3 files changed, 85 insertions(+), 1 deletion(-) create mode 100644 aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/SecurityUtilsTest.java diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 52d05b29e..f5fafe2ec 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -109,6 +109,9 @@ ${basedir}/target/coverage-reports/jacoco-unit.exec ${basedir}/target/coverage-reports/jacoco-unit.exec + + com/amazonaws/serverless/proxy/internal/testutils/** + diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/SecurityUtilsTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/SecurityUtilsTest.java new file mode 100644 index 000000000..2e8fb5c27 --- /dev/null +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/SecurityUtilsTest.java @@ -0,0 +1,81 @@ +package com.amazonaws.serverless.proxy.internal; + +import org.junit.Test; + +import java.util.HashMap; +import java.util.Map; + +import static junit.framework.TestCase.fail; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +public class SecurityUtilsTest { + + private static final HashMap NAUGHTY_UNICODE_STRINGS = new HashMap<>(); + static { + NAUGHTY_UNICODE_STRINGS.put("Ω≈ç√∫˜µ≤≥÷", "\\u03A9\\u2248\\u00E7\\u221A\\u222B\\u02DC\\u00B5\\u2264\\u2265\\u00F7"); + NAUGHTY_UNICODE_STRINGS.put("åß∂ƒ©˙∆˚¬…æ", "\\u00E5\\u00DF\\u2202\\u0192\\u00A9\\u02D9\\u2206\\u02DA\\u00AC\\u2026\\u00E6"); + NAUGHTY_UNICODE_STRINGS.put("œ∑´®†¥¨ˆøπ“‘", "\\u0153\\u2211\\u00B4\\u00AE\\u2020\\u00A5\\u00A8\\u02C6\\u00F8\\u03C0\\u201C\\u2018"); + NAUGHTY_UNICODE_STRINGS.put("¡™£¢∞§¶•ªº–≠", "\\u00A1\\u2122\\u00A3\\u00A2\\u221E\\u00A7\\u00B6\\u2022\\u00AA\\u00BA\\u2013\\u2260"); + NAUGHTY_UNICODE_STRINGS.put("¸˛Ç◊ı˜Â¯˘¿", "\\u00B8\\u02DB\\u00C7\\u25CA\\u0131\\u02DC\\u00C2\\u00AF\\u02D8\\u00BF"); + NAUGHTY_UNICODE_STRINGS.put("ÅÍÎÏ˝ÓÔÒÚÆ☃", "\\u00C5\\u00CD\\u00CE\\u00CF\\u02DD\\u00D3\\u00D4\\uF8FF\\u00D2\\u00DA\\u00C6\\u2603"); + NAUGHTY_UNICODE_STRINGS.put("Œ„´‰ˇÁ¨ˆØ∏”’", "\\u0152\\u201E\\u00B4\\u2030\\u02C7\\u00C1\\u00A8\\u02C6\\u00D8\\u220F\\u201D\\u2019"); + NAUGHTY_UNICODE_STRINGS.put("⅛⅜⅝⅞", "\\u215B\\u215C\\u215D\\u215E"); + NAUGHTY_UNICODE_STRINGS.put("ЁЂЃЄЅІЇЈЉЊЋЌЍЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя", "\\u0401\\u0402\\u0403\\u0404\\u0405\\u0406\\u0407\\u0408\\u0409\\u040A\\u040B\\u040C\\u040D\\u040E\\u040F\\u0410\\u0411\\u0412\\u0413\\u0414\\u0415\\u0416\\u0417\\u0418\\u0419\\u041A\\u041B\\u041C\\u041D\\u041E\\u041F\\u0420\\u0421\\u0422\\u0423\\u0424\\u0425\\u0426\\u0427\\u0428\\u0429\\u042A\\u042B\\u042C\\u042D\\u042E\\u042F\\u0430\\u0431\\u0432\\u0433\\u0434\\u0435\\u0436\\u0437\\u0438\\u0439\\u043A\\u043B\\u043C\\u043D\\u043E\\u043F\\u0440\\u0441\\u0442\\u0443\\u0444\\u0445\\u0446\\u0447\\u0448\\u0449\\u044A\\u044B\\u044C\\u044D\\u044E\\u044F"); + NAUGHTY_UNICODE_STRINGS.put("\bhello\nhello\thello\fhello\r", "\\bhello\\nhello\\thello\\fhello\\r"); + NAUGHTY_UNICODE_STRINGS.put("\'", "\'"); + NAUGHTY_UNICODE_STRINGS.put("\"", "\\\""); + NAUGHTY_UNICODE_STRINGS.put("\\", "\\\\"); + NAUGHTY_UNICODE_STRINGS.put("ò", "\\u00F2"); + } + + + @Test + public void encode_nullString_returnsNullIfStringIsNull() { + assertNull(SecurityUtils.encode(null)); + } + + @Test + public void encode_naughtyStrings_encodedCorrectly() { + for (Map.Entry e : NAUGHTY_UNICODE_STRINGS.entrySet()) { + assertEquals(e.getValue(), SecurityUtils.encode(e.getKey())); + } + } + + @Test + public void getValidFilePath_nullOrEmpty_returnsNull() { + assertNull(SecurityUtils.getValidFilePath("")); + assertNull(SecurityUtils.getValidFilePath(null)); + } + + @Test + public void getValidFilePath_writeToTaskPath_throwsIllegalArgumentException() { + boolean thrown = false; + try { + SecurityUtils.getValidFilePath("/var/task/test.txt", true); + } catch (IllegalArgumentException e) { + thrown = true; + } + if (!thrown) { + fail("Did not throw exception"); + } + + try { + SecurityUtils.getValidFilePath("file:///var/task/test.txt", true); + } catch (IllegalArgumentException e) { + return; + } + + fail(); + } + + @Test + public void getValidFilePath_writeToBlockedPath_throwsIllegalArgumentException() { + try { + SecurityUtils.getValidFilePath("/usr/lib/test.txt"); + } catch (IllegalArgumentException e) { + return; + } + fail("Did not throw exception"); + } +} diff --git a/pom.xml b/pom.xml index 72fc1071c..807aecd9b 100644 --- a/pom.xml +++ b/pom.xml @@ -43,7 +43,7 @@ - 0.5 + 0.7 5.1.0 From fa6b5961a5bf25eb9b5f4bc9957c17e73e306d94 Mon Sep 17 00:00:00 2001 From: sapessi Date: Thu, 15 Aug 2019 09:17:05 -0700 Subject: [PATCH 032/888] New unit tests for path validation filter and response writer --- .../servlet/filters/UrlPathValidator.java | 12 ++ .../serverless/proxy/ResponseWriterTest.java | 76 +++++++++++ .../servlet/filters/UrlPathValidatorTest.java | 120 ++++++++++++++++++ 3 files changed, 208 insertions(+) create mode 100644 aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/ResponseWriterTest.java create mode 100644 aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/filters/UrlPathValidatorTest.java diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/filters/UrlPathValidator.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/filters/UrlPathValidator.java index a8df22176..23214a3ed 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/filters/UrlPathValidator.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/filters/UrlPathValidator.java @@ -54,6 +54,10 @@ public class UrlPathValidator implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { + if (filterConfig == null) { + invalidStatusCode = DEFAULT_ERROR_CODE; + return; + } if (filterConfig.getInitParameter(PARAM_INVALID_STATUS_CODE) != null) { String statusCode = filterConfig.getInitParameter(PARAM_INVALID_STATUS_CODE); try { @@ -104,6 +108,14 @@ public void destroy() { } + /** + * Returns the status code used in the errors generated by this filter. + * @return The default status code the filter will use + */ + public int getInvalidStatusCode() { + return invalidStatusCode; + } + //------------------------------------------------------------- // Methods - Private diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/ResponseWriterTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/ResponseWriterTest.java new file mode 100644 index 000000000..863ea583f --- /dev/null +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/ResponseWriterTest.java @@ -0,0 +1,76 @@ +package com.amazonaws.serverless.proxy; + +import com.amazonaws.serverless.exceptions.InvalidResponseObjectException; +import com.amazonaws.serverless.proxy.internal.servlet.AwsProxyHttpServletRequest; +import com.amazonaws.services.lambda.runtime.Context; +import org.junit.Test; + +import javax.servlet.http.HttpServletRequest; + +import java.nio.ByteBuffer; + +import static junit.framework.TestCase.assertTrue; +import static org.junit.Assert.assertFalse; + +public class ResponseWriterTest { + private static int[][] NAUGHTY_STRINGS = { + new int[] { 0b11111110 }, new int[] { 0xff }, new int[] {0xfe, 0xfe, 0xff, 0xff } + }; + + private static String[] VALID_STRINGS = { + "ᚠᛇᚻ᛫ᛒᛦᚦ᛫ᚠᚱᚩᚠᚢᚱ᛫ᚠᛁᚱᚪ᛫ᚷᛖᚻᚹᛦᛚᚳᚢᛗ\nᛋᚳᛖᚪᛚ᛫ᚦᛖᚪᚻ᛫ᛗᚪᚾᚾᚪ᛫ᚷᛖᚻᚹᛦᛚᚳ᛫ᛗᛁᚳᛚᚢᚾ᛫ᚻᛦᛏ᛫ᛞᚫᛚᚪᚾ\nᚷᛁᚠ᛫ᚻᛖ᛫ᚹᛁᛚᛖ᛫ᚠᚩᚱ᛫ᛞᚱᛁᚻᛏᚾᛖ᛫ᛞᚩᛗᛖᛋ᛫ᚻᛚᛇᛏᚪᚾ᛬", + "Τη γλώσσα μου έδωσαν ελληνική\nτο σπίτι φτωχικό στις αμμουδιές του Ομήρου.\nΜονάχη έγνοια η γλώσσα μου στις αμμουδιές του Ομήρου.", + "ვეპხის ტყაოსანი შოთა რუსთაველი\nღმერთსი შემვედრე, ნუთუ კვლა დამხსნას სოფლისა შრომასა, ცეცხლს, წყალსა და მიწასა, ჰაერთა თანა მრომასა; მომცნეს ფრთენი და აღვფრინდე, მივჰხვდე მას ჩემსა ნდომასა, დღისით და ღამით ვჰხედვიდე მზისა ელვათა კრთომაასა.", + "ಬಾ ಇಲ್ಲಿ ಸಂಭವಿಸು ಇಂದೆನ್ನ ಹೃದಯದಲಿ \nನಿತ್ಯವೂ ಅವತರಿಪ ಸತ್ಯಾವತಾರ\nಮಣ್ಣಾಗಿ ಮರವಾಗಿ ಮಿಗವಾಗಿ ಕಗವಾಗೀ... \nಮಣ್ಣಾಗಿ ಮರವಾಗಿ ಮಿಗವಾಗಿ ಕಗವಾಗಿ \nಭವ ಭವದಿ ಭತಿಸಿಹೇ ಭವತಿ ದೂರ \nನಿತ್ಯವೂ ಅವತರಿಪ ಸತ್ಯಾವತಾರ || ಬಾ ಇಲ್ಲಿ ||" + }; + + @Test + public void isValidUtf8_testNaughtyStrings_allShouldFail() { + MockResponseWriter rw = new MockResponseWriter(); + for (int[] s : NAUGHTY_STRINGS) { + byte[] buf = new byte[s.length * 4]; + int pos = 0; + for (int v : s) { + for (byte b : convert2Bytes(v)) { + buf[pos] = b; + pos++; + } + } + assertFalse(rw.isValidUtf8(buf)); + } + } + + @Test + public void isValidUtf8_testUtf8Strings_allShouldSucceed() { + MockResponseWriter rw = new MockResponseWriter(); + for (String s : VALID_STRINGS) { + assertTrue(rw.isValidUtf8(s.getBytes())); + } + } + + //little endian + public static byte[] convert2Bytes(int src) { + //an int is equivalent to 32 bits, 4 bytes + byte tgt[] = new byte[4]; + int mask = 0377; /* 0377 in octal*/ + + tgt[3] = (byte)(src >>> 24); + tgt[2] = (byte)((src >> 16) & 0xff); + tgt[1] = (byte)((src >> 8) & 0xff); + tgt[0] = (byte)(src & 0xff); + + return tgt; + } + + public class MockResponseWriter extends ResponseWriter { + + @Override + public HttpServletRequest writeResponse(AwsProxyHttpServletRequest containerResponse, Context lambdaContext) throws InvalidResponseObjectException { + return null; + } + + public boolean testValidUtf8(final byte[] input) { + return isValidUtf8(input); + } + } +} diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/filters/UrlPathValidatorTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/filters/UrlPathValidatorTest.java new file mode 100644 index 000000000..beb273d56 --- /dev/null +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/filters/UrlPathValidatorTest.java @@ -0,0 +1,120 @@ +package com.amazonaws.serverless.proxy.internal.servlet.filters; + +import com.amazonaws.serverless.proxy.internal.servlet.AwsHttpServletRequest; +import com.amazonaws.serverless.proxy.internal.servlet.AwsHttpServletResponse; +import com.amazonaws.serverless.proxy.internal.servlet.AwsProxyHttpServletRequest; +import com.amazonaws.serverless.proxy.internal.servlet.FilterHolder; +import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; +import org.junit.Test; + +import javax.servlet.FilterConfig; +import javax.servlet.ServletContext; +import javax.servlet.ServletException; + +import java.io.IOException; +import java.util.Collections; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.Map; + +import static junit.framework.TestCase.assertEquals; +import static junit.framework.TestCase.fail; + +public class UrlPathValidatorTest { + @Test + public void init_noConfig_setsDefaultStatusCode() { + UrlPathValidator pathValidator = new UrlPathValidator(); + try { + pathValidator.init(null); + assertEquals(UrlPathValidator.DEFAULT_ERROR_CODE, pathValidator.getInvalidStatusCode()); + } catch (ServletException e) { + e.printStackTrace(); + fail("Unexpected ServletException"); + } + } + + @Test + public void init_withConfig_setsCorrectStatusCode() { + UrlPathValidator pathValidator = new UrlPathValidator(); + Map params = new HashMap<>(); + params.put(UrlPathValidator.PARAM_INVALID_STATUS_CODE, "401"); + FilterConfig cnf = mockFilterConfig(params); + try { + pathValidator.init(cnf); + assertEquals(401, pathValidator.getInvalidStatusCode()); + } catch (ServletException e) { + e.printStackTrace(); + fail("Unexpected ServletException"); + } + } + + @Test + public void init_withWrongConfig_setsDefaultStatusCode() { + UrlPathValidator pathValidator = new UrlPathValidator(); + Map params = new HashMap<>(); + params.put(UrlPathValidator.PARAM_INVALID_STATUS_CODE, "hello"); + FilterConfig cnf = mockFilterConfig(params); + try { + pathValidator.init(cnf); + assertEquals(UrlPathValidator.DEFAULT_ERROR_CODE, pathValidator.getInvalidStatusCode()); + } catch (ServletException e) { + e.printStackTrace(); + fail("Unexpected ServletException"); + } + } + + @Test + public void doFilter_invalidRelativePathUri_setsDefaultStatusCode() { + AwsProxyHttpServletRequest req = new AwsProxyHttpServletRequest(new AwsProxyRequestBuilder("../..", "GET").build(), null, null); + AwsHttpServletResponse resp = new AwsHttpServletResponse(req, null); + UrlPathValidator pathValidator = new UrlPathValidator(); + try { + pathValidator.init(null); + pathValidator.doFilter(req, resp, null); + assertEquals(UrlPathValidator.DEFAULT_ERROR_CODE, resp.getStatus()); + } catch (Exception e) { + e.printStackTrace(); + fail("Unexpected exception"); + } + } + + @Test + public void doFilter_invalidUri_setsDefaultStatusCode() { + AwsProxyHttpServletRequest req = new AwsProxyHttpServletRequest(new AwsProxyRequestBuilder("wonkyprotocol://˝Ó#\u0009", "GET").build(), null, null); + AwsHttpServletResponse resp = new AwsHttpServletResponse(req, null); + UrlPathValidator pathValidator = new UrlPathValidator(); + try { + pathValidator.init(null); + pathValidator.doFilter(req, resp, null); + assertEquals(UrlPathValidator.DEFAULT_ERROR_CODE, resp.getStatus()); + } catch (Exception e) { + e.printStackTrace(); + fail("Unexpected exception"); + } + } + + + private FilterConfig mockFilterConfig(Map initParams) { + return new FilterConfig() { + @Override + public String getFilterName() { + return null; + } + + @Override + public ServletContext getServletContext() { + return null; + } + + @Override + public String getInitParameter(String s) { + return initParams.get(s); + } + + @Override + public Enumeration getInitParameterNames() { + return Collections.enumeration(initParams.keySet()); + } + }; + } +} From 8128f7809611642f35a66bdbfa77d85067074ca9 Mon Sep 17 00:00:00 2001 From: sapessi Date: Wed, 11 Sep 2019 12:37:13 -0700 Subject: [PATCH 033/888] First basic implementation of the AsyncContext. This allows us to support WebFlux and reactive embedded servers for Spring to address #239 --- .../internal/servlet/AwsAsyncContext.java | 205 +++++++++ .../servlet/AwsHttpServletRequest.java | 17 +- .../servlet/AwsHttpServletRequestWrapper.java | 393 ++++++++++++++++++ .../servlet/AwsHttpServletResponse.java | 5 +- .../internal/servlet/AwsHttpSession.java | 2 +- .../AwsLambdaServletContainerHandler.java | 12 +- .../servlet/AwsProxyHttpServletRequest.java | 48 ++- .../servlet/AwsProxyRequestDispatcher.java | 16 +- .../internal/servlet/AwsServletContext.java | 114 +++-- .../servlet/AwsServletRegistration.java | 157 +++++++ .../internal/servlet/AwsAsyncContextTest.java | 140 +++++++ .../servlet/AwsFilterChainManagerTest.java | 5 +- .../servlet/AwsHttpServletRequestTest.java | 7 - .../servlet/AwsHttpServletResponseTest.java | 9 - .../internal/servlet/AwsHttpSessionTest.java | 109 +++++ .../AwsProxyHttpServletRequestTest.java | 109 +++-- .../AwsProxyRequestDispatcherTest.java | 4 - .../servlet/AwsServletContextTest.java | 150 ++++--- .../servlet/AwsServletRegistrationTest.java | 109 +++++ .../proxy/model/AwsProxyRequestTest.java | 2 +- .../LambdaSpringApplicationInitializer.java | 222 ---------- 21 files changed, 1415 insertions(+), 420 deletions(-) create mode 100644 aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContext.java create mode 100644 aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestWrapper.java create mode 100644 aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletRegistration.java create mode 100644 aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContextTest.java create mode 100644 aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpSessionTest.java create mode 100644 aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletRegistrationTest.java delete mode 100644 aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/LambdaSpringApplicationInitializer.java diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContext.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContext.java new file mode 100644 index 000000000..ae6d18694 --- /dev/null +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContext.java @@ -0,0 +1,205 @@ +package com.amazonaws.serverless.proxy.internal.servlet; + + +import com.amazonaws.serverless.proxy.internal.SecurityUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.servlet.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +/** + * Async context for Serverless Java Container. This is used to support reactive embedded servers for our support for + * Spring Boot 2. Behind the scenes, the Async context still uses the CountDownLatch to synchronize response + * generation. + */ +public class AwsAsyncContext implements AsyncContext { + private HttpServletRequest req; + private HttpServletResponse res; + private AwsLambdaServletContainerHandler handler; + private List listeners; + private long timeout; + + private Logger log = LoggerFactory.getLogger(AwsAsyncContext.class); + + public AwsAsyncContext(HttpServletRequest request, HttpServletResponse response, AwsLambdaServletContainerHandler servletHandler) { + log.debug("Initializing async context for request: " + SecurityUtils.crlf(request.getPathInfo()) + " - " + SecurityUtils.crlf(request.getMethod())); + req = request; + res = response; + handler = servletHandler; + listeners = new ArrayList<>(); + timeout = 3000; + } + + @Override + public ServletRequest getRequest() { + return req; + } + + @Override + public ServletResponse getResponse() { + return res; + } + + @Override + public boolean hasOriginalRequestAndResponse() { + return true; + } + + @Override + public void dispatch() { + try { + log.debug("Dispatching request"); + notifyListeners(NotificationType.START_ASYNC, null); + Servlet servlet = ((AwsServletContext)handler.getServletContext()).getServletForPath(req.getPathInfo()); + handler.doFilter(req, res, servlet); + } catch (ServletException | IOException e) { + notifyListeners(NotificationType.ERROR, e); + } + } + + @Override + public void dispatch(String s) { + // amend the request path + req = new AwsHttpServletRequestWrapper(req, s); + + dispatch(); + } + + @Override + public void dispatch(ServletContext servletContext, String s) { + req = new AwsHttpServletRequestWrapper(req, s); + ((AwsHttpServletRequestWrapper)req).setServletContext(servletContext); + dispatch(s); + } + + @Override + public void complete() { + try { + log.debug("Completing request"); + notifyListeners(NotificationType.COMPLETE, null); + res.flushBuffer(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + @Override + public void start(Runnable runnable) { + throw new UnsupportedOperationException("Cannot start background tasks"); + } + + @Override + public void addListener(AsyncListener asyncListener) { + listeners.add(new AsyncListenerHolder(asyncListener, this)); + } + + @Override + public void addListener(AsyncListener asyncListener, ServletRequest servletRequest, ServletResponse servletResponse) { + AsyncListenerHolder holder = new AsyncListenerHolder(asyncListener, this); + holder.setSuppliedRequest(servletRequest); + holder.setSuppliedResponse(servletResponse); + listeners.add(holder); + } + + @Override + public T createListener(Class aClass) throws ServletException { + return null; + } + + @Override + public void setTimeout(long l) { + timeout = l; + } + + @Override + public long getTimeout() { + return timeout; + } + + private void notifyListeners(NotificationType type, Throwable t) { + listeners.forEach((h) -> { + try { + switch (type) { + case COMPLETE: + case START_ASYNC: + case TIMEOUT: + h.getListener().onComplete(h.getAsyncEvent()); + break; + case ERROR: + h.getListener().onError(h.getAsyncEvent(t)); + break; + } + } catch (IOException e) { + if (type != NotificationType.ERROR) { + notifyListeners(NotificationType.ERROR, e); + } + } + }); + } + + private enum NotificationType { + COMPLETE, + ERROR, + START_ASYNC, + TIMEOUT + } + + /** + * The listener holder wraps and AsyncListener with information about its context such as the request, + * response, and async servlet context. + */ + private static final class AsyncListenerHolder { + private AsyncListener listener; + private ServletRequest suppliedRequest; + private ServletResponse suppliedResponse; + private AsyncContext context; + + public AsyncListenerHolder(AsyncListener l, AsyncContext ctx) { + listener = l; + context = ctx; + } + + public AsyncListener getListener() { + return listener; + } + + public void setListener(AsyncListener listener) { + this.listener = listener; + } + + public ServletRequest getSuppliedRequest() { + return suppliedRequest; + } + + public void setSuppliedRequest(ServletRequest suppliedRequest) { + this.suppliedRequest = suppliedRequest; + } + + public ServletResponse getSuppliedResponse() { + return suppliedResponse; + } + + public void setSuppliedResponse(ServletResponse suppliedResponse) { + this.suppliedResponse = suppliedResponse; + } + + public AsyncEvent getAsyncEvent(Throwable t) { + if (suppliedRequest != null && suppliedResponse != null) { + if (t != null) { + return new AsyncEvent(context, suppliedRequest, suppliedResponse, t); + } + return new AsyncEvent(context, suppliedRequest, suppliedResponse); + } + return new AsyncEvent(context); + } + + public AsyncEvent getAsyncEvent() { + return getAsyncEvent(null); + } + } +} diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java index d6a11a967..35773cee9 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java @@ -23,12 +23,10 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.servlet.AsyncContext; -import javax.servlet.DispatcherType; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; +import javax.servlet.*; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.UnsupportedEncodingException; @@ -81,7 +79,7 @@ public abstract class AwsHttpServletRequest implements HttpServletRequest { private String queryString; private BasicHeaderValueParser headerParser; - private Logger log = LoggerFactory.getLogger(AwsHttpServletRequest.class); + private static Logger log = LoggerFactory.getLogger(AwsHttpServletRequest.class); //------------------------------------------------------------- @@ -241,13 +239,6 @@ public boolean isAsyncSupported() { return false; } - - @Override - public AsyncContext getAsyncContext() { - return null; - } - - @Override public DispatcherType getDispatcherType() { if (getAttribute(DISPATCHER_TYPE_ATTRIBUTE) != null) { @@ -424,7 +415,7 @@ protected List parseHeaderValue(String headerValue, String valueSep return values; } - protected String decodeRequestPath(String requestPath, ContainerConfig config) { + static String decodeRequestPath(String requestPath, ContainerConfig config) { try { return URLDecoder.decode(requestPath, config.getUriEncoding()); } catch (UnsupportedEncodingException ex) { diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestWrapper.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestWrapper.java new file mode 100644 index 000000000..a8ee1840c --- /dev/null +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestWrapper.java @@ -0,0 +1,393 @@ +package com.amazonaws.serverless.proxy.internal.servlet; + +import com.amazonaws.serverless.proxy.internal.LambdaContainerHandler; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; + +import javax.servlet.*; +import javax.servlet.http.*; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.security.Principal; +import java.util.Collection; +import java.util.Enumeration; +import java.util.Locale; +import java.util.Map; + +import static com.amazonaws.serverless.proxy.internal.servlet.AwsProxyHttpServletRequest.cleanUri; + +public class AwsHttpServletRequestWrapper implements HttpServletRequest { + private HttpServletRequest originalRequest; + private String newPath; + private ServletContext ctx; + + public AwsHttpServletRequestWrapper(HttpServletRequest req, String path) { + originalRequest = req; + newPath = path; + ctx = originalRequest.getServletContext(); + } + + public void setServletContext(ServletContext newContext) { + ctx = newContext; + } + + @Override + public String getAuthType() { + return originalRequest.getAuthType(); + } + + @Override + public Cookie[] getCookies() { + return originalRequest.getCookies(); + } + + @Override + public long getDateHeader(String s) { + return originalRequest.getDateHeader(s); + } + + @Override + @SuppressFBWarnings("SERVLET_HEADER") + public String getHeader(String s) { + return originalRequest.getHeader(s); + } + + @Override + public Enumeration getHeaders(String s) { + return originalRequest.getHeaders(s); + } + + @Override + public Enumeration getHeaderNames() { + return originalRequest.getHeaderNames(); + } + + @Override + public int getIntHeader(String s) { + return originalRequest.getIntHeader(s); + } + + @Override + public String getMethod() { + return originalRequest.getMethod(); + } + + @Override + public String getPathInfo() { + String pathInfo = cleanUri(newPath); + return AwsHttpServletRequest.decodeRequestPath(pathInfo, LambdaContainerHandler.getContainerConfig()); + } + + @Override + public String getPathTranslated() { + return originalRequest.getPathTranslated(); + } + + @Override + public String getContextPath() { + return originalRequest.getContextPath(); + } + + @Override + @SuppressFBWarnings(value = "SERVLET_QUERY_STRING", justification = "Already Validated on AwsProxyHttpServletRequest") + public String getQueryString() { + return originalRequest.getQueryString(); + } + + @Override + public String getRemoteUser() { + return originalRequest.getRemoteUser(); + } + + @Override + public boolean isUserInRole(String s) { + return originalRequest.isUserInRole(s); + } + + @Override + public Principal getUserPrincipal() { + return originalRequest.getUserPrincipal(); + } + + @Override + @SuppressFBWarnings(value = "SERVLET_SESSION_ID", justification = "Already Validated on AwsProxyHttpServletRequest") + public String getRequestedSessionId() { + return originalRequest.getRequestedSessionId(); + } + + @Override + public String getRequestURI() { + return cleanUri(getContextPath()) + cleanUri(newPath); + } + + @Override + public StringBuffer getRequestURL() { + String url = ""; + url += getServerName(); + url += cleanUri(getContextPath()); + url += cleanUri(newPath); + + return new StringBuffer(getScheme() + "://" + url); + } + + @Override + public String getServletPath() { + return originalRequest.getServletPath(); + } + + @Override + public HttpSession getSession(boolean b) { + return originalRequest.getSession(b); + } + + @Override + public HttpSession getSession() { + return originalRequest.getSession(); + } + + @Override + public String changeSessionId() { + return originalRequest.changeSessionId(); + } + + @Override + public boolean isRequestedSessionIdValid() { + return originalRequest.isRequestedSessionIdValid(); + } + + @Override + public boolean isRequestedSessionIdFromCookie() { + return originalRequest.isRequestedSessionIdFromCookie(); + } + + @Override + public boolean isRequestedSessionIdFromURL() { + return originalRequest.isRequestedSessionIdFromURL(); + } + + @Override + public boolean isRequestedSessionIdFromUrl() { + return originalRequest.isRequestedSessionIdFromUrl(); + } + + @Override + public boolean authenticate(HttpServletResponse httpServletResponse) throws IOException, ServletException { + return originalRequest.authenticate(httpServletResponse); + } + + @Override + public void login(String s, String s1) throws ServletException { + originalRequest.login(s, s1); + } + + @Override + public void logout() throws ServletException { + originalRequest.logout(); + } + + @Override + public Collection getParts() throws IOException, ServletException { + return originalRequest.getParts(); + } + + @Override + public Part getPart(String s) throws IOException, ServletException { + return originalRequest.getPart(s); + } + + @Override + public T upgrade(Class aClass) throws IOException, ServletException { + return originalRequest.upgrade(aClass); + } + + @Override + public Object getAttribute(String s) { + return originalRequest.getAttribute(s); + } + + @Override + public Enumeration getAttributeNames() { + return originalRequest.getAttributeNames(); + } + + @Override + public String getCharacterEncoding() { + return originalRequest.getCharacterEncoding(); + } + + @Override + public void setCharacterEncoding(String s) throws UnsupportedEncodingException { + originalRequest.setCharacterEncoding(s); + } + + @Override + public int getContentLength() { + return originalRequest.getContentLength(); + } + + @Override + public long getContentLengthLong() { + return originalRequest.getContentLengthLong(); + } + + @Override + @SuppressFBWarnings(value = "SERVLET_CONTENT_TYPE", justification = "Already Validated on AwsProxyHttpServletRequest") + public String getContentType() { + return originalRequest.getContentType(); + } + + @Override + public ServletInputStream getInputStream() throws IOException { + return originalRequest.getInputStream(); + } + + @Override + @SuppressFBWarnings(value = "SERVLET_PARAMETER", justification = "Already Validated on AwsProxyHttpServletRequest") + public String getParameter(String s) { + return originalRequest.getParameter(s); + } + + @Override + @SuppressFBWarnings(value = "SERVLET_PARAMETER", justification = "Already Validated on AwsProxyHttpServletRequest") + public Enumeration getParameterNames() { + return originalRequest.getParameterNames(); + } + + @Override + @SuppressFBWarnings(value = "SERVLET_PARAMETER", justification = "Already Validated on AwsProxyHttpServletRequest") + public String[] getParameterValues(String s) { + return originalRequest.getParameterValues(s); + } + + @Override + @SuppressFBWarnings(value = "SERVLET_PARAMETER", justification = "Already Validated on AwsProxyHttpServletRequest") + public Map getParameterMap() { + return originalRequest.getParameterMap(); + } + + @Override + public String getProtocol() { + return originalRequest.getProtocol(); + } + + @Override + public String getScheme() { + return originalRequest.getScheme(); + } + + @Override + @SuppressFBWarnings(value = "SERVLET_SERVER_NAME", justification = "Already Validated on AwsProxyHttpServletRequest") + public String getServerName() { + return originalRequest.getServerName(); + } + + @Override + public int getServerPort() { + return originalRequest.getServerPort(); + } + + @Override + public BufferedReader getReader() throws IOException { + return originalRequest.getReader(); + } + + @Override + public String getRemoteAddr() { + return originalRequest.getRemoteAddr(); + } + + @Override + public String getRemoteHost() { + return originalRequest.getRemoteAddr(); + } + + @Override + public void setAttribute(String s, Object o) { + originalRequest.setAttribute(s, o); + } + + @Override + public void removeAttribute(String s) { + originalRequest.removeAttribute(s); + } + + @Override + public Locale getLocale() { + return originalRequest.getLocale(); + } + + @Override + public Enumeration getLocales() { + return originalRequest.getLocales(); + } + + @Override + public boolean isSecure() { + return originalRequest.isSecure(); + } + + @Override + public RequestDispatcher getRequestDispatcher(String s) { + return originalRequest.getRequestDispatcher(s); + } + + @Override + public String getRealPath(String s) { + return originalRequest.getRealPath(s); + } + + @Override + public int getRemotePort() { + return originalRequest.getRemotePort(); + } + + @Override + public String getLocalName() { + return originalRequest.getLocalName(); + } + + @Override + public String getLocalAddr() { + return originalRequest.getLocalAddr(); + } + + @Override + public int getLocalPort() { + return originalRequest.getLocalPort(); + } + + @Override + public ServletContext getServletContext() { + return ctx; + } + + @Override + public AsyncContext startAsync() throws IllegalStateException { + return originalRequest.startAsync(); + } + + @Override + public AsyncContext startAsync(ServletRequest servletRequest, ServletResponse servletResponse) throws IllegalStateException { + return originalRequest.startAsync(servletRequest, servletResponse); + } + + @Override + public boolean isAsyncStarted() { + return originalRequest.isAsyncStarted(); + } + + @Override + public boolean isAsyncSupported() { + return originalRequest.isAsyncSupported(); + } + + @Override + public AsyncContext getAsyncContext() { + return originalRequest.getAsyncContext(); + } + + @Override + public DispatcherType getDispatcherType() { + return originalRequest.getDispatcherType(); + } +} diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponse.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponse.java index d477587f4..da695c509 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponse.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponse.java @@ -25,6 +25,7 @@ import javax.servlet.ServletOutputStream; import javax.servlet.WriteListener; import javax.servlet.http.Cookie; +import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.ws.rs.core.HttpHeaders; import java.io.ByteArrayOutputStream; @@ -66,7 +67,7 @@ public class AwsHttpServletResponse private PrintWriter writer; private ByteArrayOutputStream bodyOutputStream = new ByteArrayOutputStream(); private CountDownLatch writersCountDownLatch; - private AwsHttpServletRequest request; + private HttpServletRequest request; private boolean isCommitted = false; private Logger log = LoggerFactory.getLogger(AwsHttpServletResponse.class); @@ -81,7 +82,7 @@ public class AwsHttpServletResponse * function while the response is asynchronously written by the underlying container/application * @param latch A latch used to inform the ContainerHandler that we are done receiving the response data */ - public AwsHttpServletResponse(AwsHttpServletRequest req, CountDownLatch latch) { + public AwsHttpServletResponse(HttpServletRequest req, CountDownLatch latch) { writersCountDownLatch = latch; characterEncoding = null; request = req; diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpSession.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpSession.java index 1372b8f3d..1ac0908fd 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpSession.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpSession.java @@ -58,7 +58,7 @@ public String getId() { @Override public long getLastAccessedTime() { - return 0; + return lastAccessedTime; } @Override diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsLambdaServletContainerHandler.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsLambdaServletContainerHandler.java index 77310a423..95af74e67 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsLambdaServletContainerHandler.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsLambdaServletContainerHandler.java @@ -22,17 +22,13 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.servlet.DispatcherType; -import javax.servlet.FilterChain; -import javax.servlet.Servlet; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; -import javax.servlet.ServletResponse; +import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponseWrapper; import java.io.IOException; +import java.util.Map; /** @@ -56,7 +52,6 @@ public abstract class AwsLambdaServletContainerHandler filterChainManager; - private boolean startupExecuted; //------------------------------------------------------------- // Variables - Protected @@ -79,7 +74,6 @@ protected AwsLambdaServletContainerHandler(Class requestTypeClass, // set the default log formatter for servlet implementations setLogFormatter(new ApacheCombinedServletLogFormatter<>()); setServletContext(new AwsServletContext(this)); - startupExecuted = false; } //------------------------------------------------------------- @@ -161,8 +155,6 @@ protected void doFilter(HttpServletRequest request, HttpServletResponse response } } - public abstract Servlet getServlet(); - //------------------------------------------------------------- // Inner Class - //------------------------------------------------------------- diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java index a4d0ab816..cf9729b5a 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java @@ -38,10 +38,7 @@ import javax.servlet.ServletInputStream; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpUpgradeHandler; -import javax.servlet.http.Part; +import javax.servlet.http.*; import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.SecurityContext; @@ -84,10 +81,13 @@ public class AwsProxyHttpServletRequest extends AwsHttpServletRequest { private AwsProxyRequest request; private SecurityContext securityContext; + private AsyncContext asyncContext; private Map> urlEncodedFormParameters; private Map multipartFormParameters; private static Logger log = LoggerFactory.getLogger(AwsProxyHttpServletRequest.class); private ContainerConfig config; + private AwsHttpServletResponse response; + private AwsLambdaServletContainerHandler containerHandler; //------------------------------------------------------------- // Constructors @@ -111,6 +111,22 @@ public AwsProxyRequest getAwsProxyRequest() { return this.request; } + public AwsHttpServletResponse getResponse() { + return response; + } + + public void setResponse(AwsHttpServletResponse response) { + this.response = response; + } + + public AwsLambdaServletContainerHandler getContainerHandler() { + return containerHandler; + } + + public void setContainerHandler(AwsLambdaServletContainerHandler containerHandler) { + this.containerHandler = containerHandler; + } + //------------------------------------------------------------- // Implementation - HttpServletRequest //------------------------------------------------------------- @@ -660,19 +676,37 @@ public int getRemotePort() { } + @Override + public boolean isAsyncSupported() { + return true; + } + + @Override public AsyncContext startAsync() throws IllegalStateException { - return null; + asyncContext = new AwsAsyncContext(this, response, containerHandler); + log.debug("Starting async context for request: " + SecurityUtils.crlf(request.getRequestContext().getRequestId())); + return asyncContext; } @Override public AsyncContext startAsync(ServletRequest servletRequest, ServletResponse servletResponse) throws IllegalStateException { - return null; + asyncContext = new AwsAsyncContext((HttpServletRequest) servletRequest, (HttpServletResponse) servletResponse, containerHandler); + log.debug("Starting async context for request: " + SecurityUtils.crlf(request.getRequestContext().getRequestId())); + return asyncContext; } + @Override + public AsyncContext getAsyncContext() { + if (asyncContext == null) { + throw new IllegalStateException("Request " + SecurityUtils.crlf(request.getRequestContext().getRequestId()) + + " is not in asynchronous mode. Call startAsync before atttempting to get the async context."); + } + return asyncContext; + } //------------------------------------------------------------- // Methods - Private @@ -728,7 +762,7 @@ private Map getMultipartFormParametersMap() { } - private String cleanUri(String uri) { + static String cleanUri(String uri) { String finalUri = (uri == null ? "/" : uri); if (finalUri.equals("/")) { return finalUri; diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyRequestDispatcher.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyRequestDispatcher.java index bb61b7b2c..da1c6d38a 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyRequestDispatcher.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyRequestDispatcher.java @@ -7,11 +7,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.servlet.DispatcherType; -import javax.servlet.RequestDispatcher; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; +import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -76,13 +72,13 @@ public void forward(ServletRequest servletRequest, ServletResponse servletRespon } if (isNamedDispatcher) { - lambdaContainerHandler.doFilter((HttpServletRequest) servletRequest, (HttpServletResponse) servletResponse, lambdaContainerHandler.getServlet()); + lambdaContainerHandler.doFilter((HttpServletRequest) servletRequest, (HttpServletResponse) servletResponse, getServlet((HttpServletRequest)servletRequest)); return; } servletRequest.setAttribute(DISPATCHER_TYPE_ATTRIBUTE, DispatcherType.FORWARD); setRequestPath(servletRequest, dispatchTo); - lambdaContainerHandler.doFilter((HttpServletRequest) servletRequest, (HttpServletResponse) servletResponse, lambdaContainerHandler.getServlet()); + lambdaContainerHandler.doFilter((HttpServletRequest) servletRequest, (HttpServletResponse) servletResponse, getServlet((HttpServletRequest)servletRequest)); } @@ -107,7 +103,7 @@ public void include(ServletRequest servletRequest, ServletResponse servletRespon SecurityUtils.encode(SecurityUtils.crlf(((HttpServletRequest) servletRequest).getQueryString()))); setRequestPath(servletRequest, dispatchTo); } - lambdaContainerHandler.doFilter((HttpServletRequest) servletRequest, (HttpServletResponse) servletResponse, lambdaContainerHandler.getServlet()); + lambdaContainerHandler.doFilter((HttpServletRequest) servletRequest, (HttpServletResponse) servletResponse, getServlet((HttpServletRequest)servletRequest)); } /** @@ -130,4 +126,8 @@ void setRequestPath(ServletRequest req, final String destinationPath) { } ((AwsProxyRequest)req.getAttribute(API_GATEWAY_EVENT_PROPERTY)).setPath(dispatchTo); } + + private Servlet getServlet(HttpServletRequest req) { + return ((AwsServletContext)lambdaContainerHandler.getServletContext()).getServletForPath(req.getPathInfo()); + } } diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java index b3f2f1fd6..97e866e78 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java @@ -21,32 +21,16 @@ import org.slf4j.LoggerFactory; import javax.activation.MimetypesFileTypeMap; -import javax.servlet.Filter; -import javax.servlet.FilterRegistration; -import javax.servlet.RequestDispatcher; -import javax.servlet.Servlet; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; -import javax.servlet.ServletRegistration; -import javax.servlet.SessionCookieConfig; -import javax.servlet.SessionTrackingMode; +import javax.servlet.*; import javax.servlet.descriptor.JspConfigDescriptor; import java.io.File; -import java.io.IOException; import java.io.InputStream; import java.net.MalformedURLException; import java.net.URISyntaxException; import java.net.URL; -import java.nio.file.Files; -import java.nio.file.Paths; -import java.util.Collections; -import java.util.Enumeration; -import java.util.EventListener; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.Map; -import java.util.Set; +import java.util.*; +import java.util.stream.Collectors; /** @@ -69,6 +53,7 @@ public class AwsServletContext // Variables - Private //------------------------------------------------------------- private Map filters; + private Map servletRegistrations; private Map attributes; private Map initParameters; private AwsLambdaServletContainerHandler containerHandler; @@ -91,6 +76,7 @@ public AwsServletContext(AwsLambdaServletContainerHandler containerHandler) { this.attributes = new HashMap<>(); this.initParameters = new HashMap<>(); this.filters = new LinkedHashMap<>(); + this.servletRegistrations = new HashMap<>(); } @@ -192,21 +178,59 @@ public RequestDispatcher getNamedDispatcher(String s) { @Override @Deprecated public Servlet getServlet(String s) throws ServletException { - throw new UnsupportedOperationException(); + return servletRegistrations.get(s).getServlet(); + } + + public Servlet getServletForPath(String path) { + String[] pathParts = path.split("/"); + for (AwsServletRegistration reg : servletRegistrations.values()) { + for (String p : reg.getMappings()) { + try { + if ("".equals(p) || "/".equals(p) || "/*".equals(p)) { + return reg.getServlet(); + } + // if I have no path and I haven't matched something now I'll just move on to the next + if ("".equals(path) || "/".equals(path)) { + continue; + } + String[] regParts = p.split("/"); + for (int i = 0; i < regParts.length; i++) { + if (!regParts[i].equals(pathParts[i]) && !"*".equals(regParts[i])) { + break; + } + if (i == regParts.length - 1 && (regParts[i].equals(pathParts[i]) || "*".equals(regParts[i]))) { + return reg.getServlet(); + } + } + } catch (ServletException e) { + return null; + } + } + } + return null; } @Override @Deprecated public Enumeration getServlets() { - throw new UnsupportedOperationException(); + return Collections.enumeration(servletRegistrations.entrySet().stream() + .map((e) -> { + try { + return e.getValue().getServlet(); + } catch (ServletException ex) { + ex.printStackTrace(); + return null; + } + } ) + .collect(Collectors.toList())); } @Override @Deprecated public Enumeration getServletNames() { - throw new UnsupportedOperationException(); + return Collections.enumeration(servletRegistrations.keySet()); } @@ -302,47 +326,61 @@ public String getServletContextName() { @Override public ServletRegistration.Dynamic addServlet(String s, String s1) { - log("Called addServlet: " + s1); - log("Implemented frameworks are responsible for registering servlets"); - throw new UnsupportedOperationException(); + try { + Class servletClass = (Class) this.getClassLoader().loadClass(s1); + Servlet servlet = createServlet(servletClass); + servletRegistrations.put(s, new AwsServletRegistration(s, servlet, this)); + return servletRegistrations.get(s); + } catch (ServletException | ClassNotFoundException e) { + throw new RuntimeException(e); + } } @Override public ServletRegistration.Dynamic addServlet(String s, Servlet servlet) { - log("Called addServlet: " + servlet.getClass().getName()); - log("Implemented frameworks are responsible for registering servlets"); - throw new UnsupportedOperationException(); + servletRegistrations.put(s, new AwsServletRegistration(s, servlet, this)); + return servletRegistrations.get(s); } @Override public ServletRegistration.Dynamic addServlet(String s, Class aClass) { - log("Called addServlet: " + aClass.getName()); - log("Implemented frameworks are responsible for registering servlets"); - throw new UnsupportedOperationException(); + try { + Servlet servlet = createServlet(aClass); + servletRegistrations.put(s, new AwsServletRegistration(s, servlet, this)); + return servletRegistrations.get(s); + } catch (ServletException e) { + throw new RuntimeException(e); + } } @Override public T createServlet(Class aClass) throws ServletException { - log("Called createServlet: " + aClass.getName()); - log("Implemented frameworks are responsible for creating servlets"); - throw new UnsupportedOperationException(); + /*log("Called createServlet: " + aClass.getName()); + log("Implemented frameworks are responsible for creating servlets");*/ + // TODO: This method introspects the given clazz for the following annotations: ServletSecurity, MultipartConfig, + // javax.annotation.security.RunAs, and javax.annotation.security.DeclareRoles. In addition, this method supports + // resource injection if the given clazz represents a Managed Bean. See the Java EE platform and JSR 299 specifications + // for additional details about Managed Beans and resource injection. + try { + return aClass.newInstance(); + } catch (InstantiationException | IllegalAccessException e) { + throw new ServletException(e); + } } @Override public ServletRegistration getServletRegistration(String s) { - // TODO: This could come from the reader interface - return null; + return servletRegistrations.get(s); } @Override public Map getServletRegistrations() { - // TODO: This could come from the reader interface - return null; + return servletRegistrations; } diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletRegistration.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletRegistration.java new file mode 100644 index 000000000..e3ce620bf --- /dev/null +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletRegistration.java @@ -0,0 +1,157 @@ +package com.amazonaws.serverless.proxy.internal.servlet; + +import javax.servlet.*; +import java.util.*; + +/** + * Stores information about a servlet registered with Serverless Java Container's ServletContext. + */ +public class AwsServletRegistration implements ServletRegistration, ServletRegistration.Dynamic { + private String servletName; + private Servlet servlet; + private AwsServletContext ctx; + private Map initParameters; + private int loadOnStartup; + private String runAsRole; + private boolean asyncSupported; + private Map servletPathMappings; + + + public AwsServletRegistration(String name, Servlet s, AwsServletContext context) { + servletName = name; + servlet = s; + ctx = context; + initParameters = new HashMap<>(); + servletPathMappings = new HashMap<>(); + loadOnStartup = -1; + asyncSupported = true; + } + + @Override + public Set addMapping(String... strings) { + Set failedMappings = new HashSet<>(); + for (String s : strings) { + if (servletPathMappings.containsKey(s)) { + failedMappings.add(s); + continue; + } + servletPathMappings.put(s, this); + } + return failedMappings; + } + + @Override + public Collection getMappings() { + return servletPathMappings.keySet(); + } + + @Override + public String getRunAsRole() { + return runAsRole; + } + + @Override + public String getName() { + return servletName; + } + + @Override + public String getClassName() { + return servlet.getClass().getName(); + } + + @Override + public boolean setInitParameter(String s, String s1) { + if (initParameters.containsKey(s)) { + return false; + } + initParameters.put(s, s1); + return true; + } + + @Override + public String getInitParameter(String s) { + return initParameters.get(s); + } + + @Override + public Set setInitParameters(Map map) { + Set failedParameters = new HashSet<>(); + for (Map.Entry param : map.entrySet()) { + if (initParameters.containsKey(param.getKey())) { + failedParameters.add(param.getKey()); + } + initParameters.put(param.getKey(), param.getValue()); + } + return failedParameters; + } + + @Override + public Map getInitParameters() { + return initParameters; + } + + public Servlet getServlet() throws ServletException { + if (servlet.getServletConfig() == null) { + servlet.init(getServletConfig()); + } + return servlet; + } + + @Override + public void setLoadOnStartup(int i) { + loadOnStartup = i; + } + + public int getLoadOnStartup() { + return loadOnStartup; + } + + @Override + public Set setServletSecurity(ServletSecurityElement servletSecurityElement) { + return null; + } + + @Override + public void setMultipartConfig(MultipartConfigElement multipartConfigElement) { + + } + + @Override + public void setRunAsRole(String s) { + runAsRole = s; + } + + @Override + public void setAsyncSupported(boolean b) { + asyncSupported = b; + } + + public boolean isAsyncSupported() { + return asyncSupported; + } + + public ServletConfig getServletConfig() { + return new ServletConfig() { + @Override + public String getServletName() { + return servletName; + } + + @Override + public ServletContext getServletContext() { + return ctx; + } + + @Override + public String getInitParameter(String s) { + return initParameters.get(s); + } + + @Override + public Enumeration getInitParameterNames() { + return Collections.enumeration(initParameters.keySet()); + } + }; + } +} diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContextTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContextTest.java new file mode 100644 index 000000000..d5c86f1c4 --- /dev/null +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContextTest.java @@ -0,0 +1,140 @@ +package com.amazonaws.serverless.proxy.internal.servlet; + +import com.amazonaws.serverless.exceptions.ContainerInitializationException; +import com.amazonaws.serverless.proxy.AwsProxyExceptionHandler; +import com.amazonaws.serverless.proxy.AwsProxySecurityContextWriter; +import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; +import com.amazonaws.serverless.proxy.internal.testutils.MockLambdaContext; +import com.amazonaws.serverless.proxy.model.AwsProxyRequest; +import com.amazonaws.serverless.proxy.model.AwsProxyResponse; +import com.amazonaws.services.lambda.runtime.Context; +import org.junit.Test; + +import javax.servlet.AsyncContext; +import javax.servlet.Servlet; +import javax.servlet.ServletException; +import javax.servlet.ServletRegistration; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.concurrent.CountDownLatch; + +import static junit.framework.TestCase.assertNotNull; +import static org.junit.Assert.assertEquals; + +public class AwsAsyncContextTest { + private MockLambdaContext lambdaCtx = new MockLambdaContext(); + private MockContainerHandler handler = new MockContainerHandler(); + private AwsServletContextTest.TestServlet srv1 = new AwsServletContextTest.TestServlet("srv1"); + private AwsServletContextTest.TestServlet srv2 = new AwsServletContextTest.TestServlet("srv2"); + private AwsServletContext ctx = getCtx(); + + @Test + public void dispatch_sendsToCorrectServlet() { + AwsProxyHttpServletRequest req = new AwsProxyHttpServletRequest(new AwsProxyRequestBuilder("/srv1/hello", "GET").build(), lambdaCtx, null); + req.setResponse(handler.getContainerResponse(req, new CountDownLatch(1))); + req.setServletContext(ctx); + req.setContainerHandler(handler); + + AsyncContext asyncCtx = req.startAsync(); + handler.setDesiredStatus(201); + asyncCtx.dispatch(); + assertNotNull(handler.getSelectedServlet()); + assertEquals(srv1, handler.getSelectedServlet()); + assertEquals(201, handler.getResponse().getStatus()); + + req = new AwsProxyHttpServletRequest(new AwsProxyRequestBuilder("/srv5/hello", "GET").build(), lambdaCtx, null); + req.setResponse(handler.getContainerResponse(req, new CountDownLatch(1))); + req.setServletContext(ctx); + req.setContainerHandler(handler); + asyncCtx = req.startAsync(); + handler.setDesiredStatus(202); + asyncCtx.dispatch(); + assertNotNull(handler.getSelectedServlet()); + assertEquals(srv2, handler.getSelectedServlet()); + assertEquals(202, handler.getResponse().getStatus()); + } + + @Test + public void dispatchNewPath_sendsToCorrectServlet() { + AwsProxyHttpServletRequest req = new AwsProxyHttpServletRequest(new AwsProxyRequestBuilder("/srv1/hello", "GET").build(), lambdaCtx, null); + req.setResponse(handler.getContainerResponse(req, new CountDownLatch(1))); + req.setServletContext(ctx); + req.setContainerHandler(handler); + + AsyncContext asyncCtx = req.startAsync(); + handler.setDesiredStatus(301); + asyncCtx.dispatch("/srv4/hello"); + assertNotNull(handler.getSelectedServlet()); + assertEquals(srv2, handler.getSelectedServlet()); + assertNotNull(handler.getResponse()); + assertEquals(301, handler.getResponse().getStatus()); + } + + private AwsServletContext getCtx() { + AwsServletContext ctx = new AwsServletContext(handler); + handler.setServletContext(ctx); + + ServletRegistration.Dynamic reg1 = ctx.addServlet("srv1", srv1); + reg1.addMapping("/srv1"); + + ServletRegistration.Dynamic reg2 = ctx.addServlet("srv2", srv2); + reg2.addMapping("/"); + return ctx; + } + + public static class MockContainerHandler extends AwsLambdaServletContainerHandler { + private int desiredStatus; + private HttpServletResponse response; + private Servlet selectedServlet; + + public MockContainerHandler() { + super(AwsProxyRequest.class, AwsProxyResponse.class, new AwsProxyHttpServletRequestReader(), new AwsProxyHttpServletResponseWriter(), new AwsProxySecurityContextWriter(), new AwsProxyExceptionHandler()); + desiredStatus = 200; + } + + @Override + protected AwsHttpServletResponse getContainerResponse(AwsProxyHttpServletRequest request, CountDownLatch latch) { + return new AwsHttpServletResponse(request, latch); + } + + @Override + protected void doFilter(HttpServletRequest request, HttpServletResponse response, Servlet servlet) throws IOException, ServletException { + selectedServlet = servlet; + try { + this.response = response; + //handleRequest((AwsProxyHttpServletRequest)request, , new MockLambdaContext()); + if (AwsProxyHttpServletRequest.class.isAssignableFrom(request.getClass())) { + ((AwsProxyHttpServletRequest)request).setResponse((AwsHttpServletResponse)this.response); + } + this.response.setStatus(desiredStatus); + this.response.flushBuffer(); + } catch (Exception e) { + e.printStackTrace(); + throw new ServletException(e); + } + } + + @Override + protected void handleRequest(AwsProxyHttpServletRequest containerRequest, AwsHttpServletResponse containerResponse, Context lambdaContext) throws Exception { + + } + + @Override + public void initialize() throws ContainerInitializationException { + + } + + public void setDesiredStatus(int status) { + desiredStatus = status; + } + + public AwsHttpServletResponse getResponse() { + return (AwsHttpServletResponse)response; + } + + public Servlet getSelectedServlet() { + return selectedServlet; + } + } +} diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsFilterChainManagerTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsFilterChainManagerTest.java index c5ed8f248..dd344d3b0 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsFilterChainManagerTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsFilterChainManagerTest.java @@ -230,19 +230,18 @@ private static class MockFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { - System.out.println("Init"); + } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { - System.out.println("DoFilter"); servletRequest.setAttribute(REQUEST_CUSTOM_ATTRIBUTE_NAME, REQUEST_CUSTOM_ATTRIBUTE_VALUE); filterChain.doFilter(servletRequest, servletResponse); } @Override public void destroy() { - System.out.println("Destroy"); + } } } diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestTest.java index 3cebc02fb..5372dfa95 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestTest.java @@ -71,11 +71,6 @@ public void headers_parseHeaderValue_complexAccept() { AwsProxyHttpServletRequest request = new AwsProxyHttpServletRequest(complexAcceptHeader, mockContext, null, config); List values = request.parseHeaderValue(request.getHeader(HttpHeaders.ACCEPT), ",", ";"); - try { - System.out.println(new ObjectMapper().writeValueAsString(values)); - } catch (JsonProcessingException e) { - e.printStackTrace(); - } assertEquals(4, values.size()); } @@ -124,7 +119,6 @@ public void headers_parseHeaderValue_headerWithPaddingButNotBase64Encoded() { List result = context.parseHeaderValue("hello="); assertTrue(result.size() > 0); assertEquals("hello", result.get(0).getKey()); - System.out.println("\"" + result.get(0).getValue() + "\""); assertNull(result.get(0).getValue()); } @@ -139,7 +133,6 @@ public void queryString_generateQueryString_validQuery() { e.printStackTrace(); fail("Could not generate query string"); } - System.out.println(parsedString); assertTrue(parsedString.contains("one=two")); assertTrue(parsedString.contains("three=four")); assertTrue(parsedString.contains("&") && parsedString.indexOf("&") > 0 && parsedString.indexOf("&") < parsedString.length()); diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponseTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponseTest.java index 1feeb5e94..65fc91776 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponseTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponseTest.java @@ -44,7 +44,6 @@ public void cookie_addCookie_verifyPath() { resp.addCookie(pathCookie); String cookieHeader = resp.getHeader(HttpHeaders.SET_COOKIE); - System.out.println("Cookie string: " + cookieHeader); assertNotNull(cookieHeader); assertTrue(cookieHeader.contains("Path=" + COOKIE_PATH)); assertTrue(cookieHeader.contains(COOKIE_NAME + "=" + COOKIE_VALUE)); @@ -58,7 +57,6 @@ public void cookie_addCookie_verifySecure() { resp.addCookie(secureCookie); String cookieHeader = resp.getHeader(HttpHeaders.SET_COOKIE); - System.out.println("Cookie string: " + cookieHeader); assertNotNull(cookieHeader); assertTrue(cookieHeader.contains("; Secure")); assertTrue(cookieHeader.contains(COOKIE_NAME + "=" + COOKIE_VALUE)); @@ -72,7 +70,6 @@ public void cookie_addCookie_verifyDomain() { resp.addCookie(domainCookie); String cookieHeader = resp.getHeader(HttpHeaders.SET_COOKIE); - System.out.println("Cookie string: " + cookieHeader); assertNotNull(cookieHeader); assertTrue(cookieHeader.contains("; Domain=" + COOKIE_DOMAIN)); assertTrue(cookieHeader.contains(COOKIE_NAME + "=" + COOKIE_VALUE)); @@ -86,7 +83,6 @@ public void cookie_addCookie_defaultMaxAgeIsNegative() { resp.addCookie(maxAgeCookie); String cookieHeader = resp.getHeader(HttpHeaders.SET_COOKIE); - System.out.println("Cookie string: " + cookieHeader); assertNotNull(cookieHeader); assertFalse(cookieHeader.contains("Max-Age=")); assertTrue(cookieHeader.contains(COOKIE_NAME + "=" + COOKIE_VALUE)); @@ -100,7 +96,6 @@ public void cookie_addCookie_positiveMaxAgeIsPresent() { resp.addCookie(maxAgeCookie); String cookieHeader = resp.getHeader(HttpHeaders.SET_COOKIE); - System.out.println("Cookie string: " + cookieHeader); assertNotNull(cookieHeader); assertTrue(cookieHeader.contains("; Max-Age=")); assertTrue(cookieHeader.contains(COOKIE_NAME + "=" + COOKIE_VALUE)); @@ -121,7 +116,6 @@ public void cookie_addCookie_positiveMaxAgeExpiresDate() { testExpiration.setTimeZone(TimeZone.getTimeZone(AwsHttpServletResponse.COOKIE_DEFAULT_TIME_ZONE)); String cookieHeader = resp.getHeader(HttpHeaders.SET_COOKIE); - System.out.println("Cookie string: " + cookieHeader); assertNotNull(cookieHeader); assertTrue(cookieHeader.contains("; Max-Age=")); assertTrue(cookieHeader.contains(COOKIE_NAME + "=" + COOKIE_VALUE)); @@ -129,8 +123,6 @@ public void cookie_addCookie_positiveMaxAgeExpiresDate() { SimpleDateFormat dateFormat = new SimpleDateFormat(AwsHttpServletResponse.HEADER_DATE_PATTERN); Calendar expiration = getExpires(cookieHeader); - System.out.println("Cookie date: " + dateFormat.format(expiration.getTime())); - System.out.println("Test date: " + dateFormat.format(testExpiration.getTime())); long dateDiff = testExpiration.getTimeInMillis() - expiration.getTimeInMillis(); assertTrue(Math.abs(dateDiff) < COOKIE_GRACE_COMPARE_MILLIS); @@ -314,7 +306,6 @@ private int getMaxAge(String header) { assertTrue(ageMatcher.find()); assertTrue(ageMatcher.groupCount() >= 1); String ageString = ageMatcher.group(1); - System.out.println("Age string: " + ageString); return Integer.parseInt(ageString); } diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpSessionTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpSessionTest.java new file mode 100644 index 000000000..bb9e0d476 --- /dev/null +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpSessionTest.java @@ -0,0 +1,109 @@ +package com.amazonaws.serverless.proxy.internal.servlet; + +import org.junit.Test; + +import java.time.Instant; +import java.util.Enumeration; + +import static junit.framework.TestCase.assertTrue; +import static junit.framework.TestCase.fail; +import static org.junit.Assert.*; + +public class AwsHttpSessionTest { + + @Test + public void new_withNullId_throwsException() { + try { + AwsHttpSession session = new AwsHttpSession(null); + } catch (RuntimeException e) { + assertTrue(e.getMessage().contains("cannot be null")); + return; + } + fail("Did not throw exception with null ID"); + } + + @Test + public void new_withValidId_setsIdCorrectly() { + AwsHttpSession session = new AwsHttpSession("id"); + assertEquals("id", session.getId()); + } + + @Test + public void new_creationTimePopulatedCorrectly() { + AwsHttpSession session = new AwsHttpSession("id"); + assertTrue(session.getCreationTime() > Instant.now().getEpochSecond() - 1); + assertEquals(AwsHttpSession.SESSION_DURATION_SEC, session.getMaxInactiveInterval()); + assertEquals(session.getLastAccessedTime(), session.getCreationTime()); + } + + @Test + public void values_throwsUnsupportedOperationException() { + int exCount = 0; + AwsHttpSession sess = new AwsHttpSession("id"); + + try { + sess.putValue("test", "test"); + } catch (UnsupportedOperationException e) { + exCount++; + } + try { + sess.removeValue("test"); + } catch (UnsupportedOperationException e) { + exCount++; + } + try { + sess.getValue("test"); + } catch (UnsupportedOperationException e) { + exCount++; + } + try { + sess.getValueNames(); + } catch (UnsupportedOperationException e) { + exCount++; + } + assertEquals(4, exCount); + } + + @Test + public void attributes_dataStoredCorrectly() throws InterruptedException { + AwsHttpSession sess = new AwsHttpSession("id"); + sess.setAttribute("test", "test"); + sess.setAttribute("test2", "test2"); + Enumeration attrs = sess.getAttributeNames(); + int attrsCnt = 0; + while (attrs.hasMoreElements()) { + attrs.nextElement(); + attrsCnt++; + } + assertEquals(2, attrsCnt); + assertEquals(sess.getAttribute("test"), "test"); + sess.removeAttribute("test2"); + attrs = sess.getAttributeNames(); + attrsCnt = 0; + while (attrs.hasMoreElements()) { + attrs.nextElement(); + attrsCnt++; + } + assertEquals(1, attrsCnt); + + + // changing attribute should touch the session + Thread.sleep(1000); + sess.setAttribute("test3", "test3"); + assertTrue(sess.getLastAccessedTime() > sess.getCreationTime()); + } + + @Test + public void validSession_expectCorrectValidationOrInvalidation() throws InterruptedException { + AwsHttpSession sess = new AwsHttpSession("id"); + assertTrue(sess.isValid()); + assertTrue(sess.isNew()); + + Thread.sleep(1000); + sess.setAttribute("test", "test"); + assertFalse(sess.isNew()); + sess.invalidate(); + assertFalse(sess.isValid()); + assertNull(sess.getAttribute("test")); + } +} diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestTest.java index 05a731a89..62c785451 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestTest.java @@ -4,11 +4,15 @@ import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; +import com.amazonaws.services.lambda.runtime.Context; import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; import javax.servlet.http.HttpServletRequest; import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.SecurityContext; import java.io.IOException; import java.io.InputStream; @@ -16,16 +20,14 @@ import java.nio.charset.StandardCharsets; import java.time.Instant; import java.time.ZonedDateTime; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Enumeration; -import java.util.List; -import java.util.Locale; -import java.util.Map; +import java.util.*; import static org.junit.Assert.*; +@RunWith(Parameterized.class) public class AwsProxyHttpServletRequestTest { + private boolean isWrapped; + private static final String CUSTOM_HEADER_KEY = "X-Custom-Header"; private static final String CUSTOM_HEADER_VALUE = "Custom-Header-Value"; private static final String FORM_PARAM_NAME = "name"; @@ -74,9 +76,27 @@ public class AwsProxyHttpServletRequestTest { .queryString(FORM_PARAM_NAME, QUERY_STRING_NAME_VALUE).build(); + public AwsProxyHttpServletRequestTest(boolean wrap) { + isWrapped = wrap; + } + + @Parameterized.Parameters + public static Collection data() { + return Arrays.asList(new Object[] { false, true }); + } + + private HttpServletRequest getRequest(AwsProxyRequest req, Context lambdaCtx, SecurityContext securityCtx) { + HttpServletRequest servletRequest = new AwsProxyHttpServletRequest(req, lambdaCtx, securityCtx); + if (isWrapped) { + servletRequest = new AwsHttpServletRequestWrapper(servletRequest, req.getPath()); + } + return servletRequest; + } + + @Test public void headers_getHeader_validRequest() { - HttpServletRequest request = new AwsProxyHttpServletRequest(getRequestWithHeaders(), null, null); + HttpServletRequest request = getRequest(getRequestWithHeaders(), null, null); assertNotNull(request.getHeader(CUSTOM_HEADER_KEY)); assertEquals(CUSTOM_HEADER_VALUE, request.getHeader(CUSTOM_HEADER_KEY)); assertEquals(MediaType.APPLICATION_JSON, request.getContentType()); @@ -84,7 +104,7 @@ public void headers_getHeader_validRequest() { @Test public void headers_getRefererAndUserAgent_returnsContextValues() { - HttpServletRequest request = new AwsProxyHttpServletRequest(REQUEST_USER_AGENT_REFERER, null, null); + HttpServletRequest request = getRequest(REQUEST_USER_AGENT_REFERER, null, null); assertNotNull(request.getHeader("Referer")); assertEquals(REFERER, request.getHeader("Referer")); assertEquals(REFERER, request.getHeader("referer")); @@ -96,7 +116,7 @@ public void headers_getRefererAndUserAgent_returnsContextValues() { @Test public void formParams_getParameter_validForm() { - HttpServletRequest request = new AwsProxyHttpServletRequest(REQUEST_FORM_URLENCODED, null, null); + HttpServletRequest request = getRequest(REQUEST_FORM_URLENCODED, null, null); assertNotNull(request); assertNotNull(request.getParameter(FORM_PARAM_NAME)); assertEquals(FORM_PARAM_NAME_VALUE, request.getParameter(FORM_PARAM_NAME)); @@ -104,21 +124,21 @@ public void formParams_getParameter_validForm() { @Test public void formParams_getParameter_null() { - HttpServletRequest request = new AwsProxyHttpServletRequest(REQUEST_INVALID_FORM_URLENCODED, null, null); + HttpServletRequest request = getRequest(REQUEST_INVALID_FORM_URLENCODED, null, null); assertNotNull(request); assertNull(request.getParameter(FORM_PARAM_NAME)); } @Test public void formParams_getParameter_multipleParams() { - HttpServletRequest request = new AwsProxyHttpServletRequest(REQUEST_FORM_URLENCODED_AND_QUERY, null, null); + HttpServletRequest request = getRequest(REQUEST_FORM_URLENCODED_AND_QUERY, null, null); assertNotNull(request); assertEquals(2, request.getParameterValues(FORM_PARAM_NAME).length); } @Test public void formParams_getParameter_queryStringPrecendence() { - HttpServletRequest request = new AwsProxyHttpServletRequest(REQUEST_FORM_URLENCODED_AND_QUERY, null, null); + HttpServletRequest request = getRequest(REQUEST_FORM_URLENCODED_AND_QUERY, null, null); assertNotNull(request); assertEquals(2, request.getParameterValues(FORM_PARAM_NAME).length); assertEquals(QUERY_STRING_NAME_VALUE, request.getParameter(FORM_PARAM_NAME)); @@ -126,14 +146,14 @@ public void formParams_getParameter_queryStringPrecendence() { @Test public void dateHeader_noDate_returnNegativeOne() { - HttpServletRequest request = new AwsProxyHttpServletRequest(REQUEST_FORM_URLENCODED_AND_QUERY, null, null); + HttpServletRequest request = getRequest(REQUEST_FORM_URLENCODED_AND_QUERY, null, null); assertNotNull(request); assertEquals(-1L, request.getDateHeader(HttpHeaders.DATE)); } @Test public void dateHeader_correctDate_parseToCorrectLong() { - HttpServletRequest request = new AwsProxyHttpServletRequest(REQUEST_WITH_DATE, null, null); + HttpServletRequest request = getRequest(REQUEST_WITH_DATE, null, null); assertNotNull(request); String instantString = AwsHttpServletRequest.dateFormatter.format(REQUEST_DATE); @@ -143,7 +163,7 @@ public void dateHeader_correctDate_parseToCorrectLong() { @Test public void scheme_getScheme_https() { - HttpServletRequest request = new AwsProxyHttpServletRequest(REQUEST_FORM_URLENCODED, null, null); + HttpServletRequest request = getRequest(REQUEST_FORM_URLENCODED, null, null); assertNotNull(request); assertNotNull(request.getScheme()); assertEquals("https", request.getScheme()); @@ -151,7 +171,7 @@ public void scheme_getScheme_https() { @Test public void scheme_getScheme_http() { - HttpServletRequest request = new AwsProxyHttpServletRequest(getRequestWithHeaders(), null, null); + HttpServletRequest request = getRequest(getRequestWithHeaders(), null, null); assertNotNull(request); assertNotNull(request.getScheme()); assertEquals(REQUEST_SCHEME_HTTP, request.getScheme()); @@ -159,7 +179,7 @@ public void scheme_getScheme_http() { @Test public void cookie_getCookies_noCookies() { - HttpServletRequest request = new AwsProxyHttpServletRequest(getRequestWithHeaders(), null, null); + HttpServletRequest request = getRequest(getRequestWithHeaders(), null, null); assertNotNull(request); assertNotNull(request.getCookies()); assertEquals(0, request.getCookies().length); @@ -167,7 +187,7 @@ public void cookie_getCookies_noCookies() { @Test public void cookie_getCookies_singleCookie() { - HttpServletRequest request = new AwsProxyHttpServletRequest(REQUEST_SINGLE_COOKIE, null, null); + HttpServletRequest request = getRequest(REQUEST_SINGLE_COOKIE, null, null); assertNotNull(request); assertNotNull(request.getCookies()); assertEquals(1, request.getCookies().length); @@ -177,7 +197,7 @@ public void cookie_getCookies_singleCookie() { @Test public void cookie_getCookies_multipleCookies() { - HttpServletRequest request = new AwsProxyHttpServletRequest(REQUEST_MULTIPLE_COOKIES, null, null); + HttpServletRequest request = getRequest(REQUEST_MULTIPLE_COOKIES, null, null); assertNotNull(request); assertNotNull(request.getCookies()); assertEquals(2, request.getCookies().length); @@ -189,7 +209,7 @@ public void cookie_getCookies_multipleCookies() { @Test public void cookie_getCookies_emptyCookies() { - HttpServletRequest request = new AwsProxyHttpServletRequest(REQUEST_MALFORMED_COOKIE, null, null); + HttpServletRequest request = getRequest(REQUEST_MALFORMED_COOKIE, null, null); assertNotNull(request); assertNotNull(request.getCookies()); assertEquals(0, request.getCookies().length); @@ -197,14 +217,14 @@ public void cookie_getCookies_emptyCookies() { @Test public void queryParameters_getParameterMap_null() { - HttpServletRequest request = new AwsProxyHttpServletRequest(REQUEST_NULL_QUERY_STRING, null, null); + HttpServletRequest request = getRequest(REQUEST_NULL_QUERY_STRING, null, null); assertNotNull(request); assertEquals(0, request.getParameterMap().size()); } @Test public void queryParameters_getParameterMap_nonNull() { - HttpServletRequest request = new AwsProxyHttpServletRequest(REQUEST_QUERY, null, null); + HttpServletRequest request = getRequest(REQUEST_QUERY, null, null); assertNotNull(request); assertEquals(1, request.getParameterMap().size()); assertEquals(QUERY_STRING_NAME_VALUE, request.getParameterMap().get(FORM_PARAM_NAME)[0]); @@ -212,7 +232,7 @@ public void queryParameters_getParameterMap_nonNull() { @Test public void queryParameters_getParameterNames_null() { - HttpServletRequest request = new AwsProxyHttpServletRequest(REQUEST_NULL_QUERY_STRING, null, null); + HttpServletRequest request = getRequest(REQUEST_NULL_QUERY_STRING, null, null); List parameterNames = Collections.list(request.getParameterNames()); assertNotNull(request); assertEquals(0, parameterNames.size()); @@ -220,7 +240,7 @@ public void queryParameters_getParameterNames_null() { @Test public void queryParameters_getParameterNames_notNull() { - HttpServletRequest request = new AwsProxyHttpServletRequest(REQUEST_QUERY, null, null); + HttpServletRequest request = getRequest(REQUEST_QUERY, null, null); List parameterNames = Collections.list(request.getParameterNames()); assertNotNull(request); assertEquals(1, parameterNames.size()); @@ -229,7 +249,7 @@ public void queryParameters_getParameterNames_notNull() { @Test public void queryParameter_getParameterMap_avoidDuplicationOnMultipleCalls() { - HttpServletRequest request = new AwsProxyHttpServletRequest(REQUEST_MULTIPLE_FORM_AND_QUERY, null, null); + HttpServletRequest request = getRequest(REQUEST_MULTIPLE_FORM_AND_QUERY, null, null); Map params = request.getParameterMap(); assertNotNull(params); @@ -250,7 +270,7 @@ public void queryParameter_getParameterMap_avoidDuplicationOnMultipleCalls() { @Test public void charEncoding_getEncoding_expectNoEncodingWithoutContentType() { - HttpServletRequest request = new AwsProxyHttpServletRequest(REQUEST_SINGLE_COOKIE, null, null); + HttpServletRequest request = getRequest(REQUEST_SINGLE_COOKIE, null, null); try { request.setCharacterEncoding(StandardCharsets.UTF_8.name()); // we have not specified a content type so the encoding will not be set @@ -264,7 +284,7 @@ public void charEncoding_getEncoding_expectNoEncodingWithoutContentType() { @Test public void charEncoding_getEncoding_expectContentTypeOnly() { - HttpServletRequest request = new AwsProxyHttpServletRequest(getRequestWithHeaders(), null, null); + HttpServletRequest request = getRequest(getRequestWithHeaders(), null, null); // we have not specified a content type so the encoding will not be set assertEquals(null, request.getCharacterEncoding()); assertEquals(MediaType.APPLICATION_JSON, request.getContentType()); @@ -282,7 +302,7 @@ public void charEncoding_getEncoding_expectContentTypeOnly() { @Test public void charEncoding_addCharEncodingTwice_expectSingleMediaTypeAndEncoding() { - HttpServletRequest request = new AwsProxyHttpServletRequest(getRequestWithHeaders(), null, null); + HttpServletRequest request = getRequest(getRequestWithHeaders(), null, null); // we have not specified a content type so the encoding will not be set assertEquals(null, request.getCharacterEncoding()); assertEquals(MediaType.APPLICATION_JSON, request.getContentType()); @@ -308,7 +328,7 @@ public void charEncoding_addCharEncodingTwice_expectSingleMediaTypeAndEncoding() @Test public void contentType_lowerCaseHeaderKey_expectUpdatedMediaType() { - HttpServletRequest request = new AwsProxyHttpServletRequest(REQUEST_WITH_LOWERCASE_HEADER, null, null); + HttpServletRequest request = getRequest(REQUEST_WITH_LOWERCASE_HEADER, null, null); try { request.setCharacterEncoding(StandardCharsets.UTF_8.name()); String newHeaderValue = MediaType.APPLICATION_JSON + "; charset=" + StandardCharsets.UTF_8.name(); @@ -325,7 +345,7 @@ public void contentType_lowerCaseHeaderKey_expectUpdatedMediaType() { @Test public void contentType_duplicateCase_expectSingleContentTypeHeader() { AwsProxyRequest proxyRequest = getRequestWithHeaders(); - HttpServletRequest request = new AwsProxyHttpServletRequest(proxyRequest, null, null); + HttpServletRequest request = getRequest(proxyRequest, null, null); try { request.setCharacterEncoding(StandardCharsets.ISO_8859_1.name()); @@ -342,7 +362,7 @@ public void requestURL_getUrl_expectHttpSchemaAndLocalhostForLocalTesting() { AwsProxyRequest req = getRequestWithHeaders(); req.getRequestContext().setApiId("test-id"); LambdaContainerHandler.getContainerConfig().enableLocalhost(); - HttpServletRequest servletRequest = new AwsProxyHttpServletRequest(req, null, null); + HttpServletRequest servletRequest = getRequest(req, null, null); String requestUrl = servletRequest.getRequestURL().toString(); assertTrue(requestUrl.contains("http://")); assertTrue(requestUrl.contains("test-id.execute-api.")); @@ -350,7 +370,7 @@ public void requestURL_getUrl_expectHttpSchemaAndLocalhostForLocalTesting() { // set localhost req.getMultiValueHeaders().putSingle("Host", "localhost"); - servletRequest = new AwsProxyHttpServletRequest(req, null, null); + servletRequest = getRequest(req, null, null); requestUrl = servletRequest.getRequestURL().toString(); assertTrue(requestUrl.contains("http://localhost")); assertTrue(requestUrl.endsWith("localhost/hello")); @@ -361,7 +381,7 @@ public void requestURL_getUrl_expectHttpSchemaAndLocalhostForLocalTesting() { public void requestURL_getUrlWithCustomBasePath_expectCustomBasePath() { AwsProxyRequest req = getRequestWithHeaders(); LambdaContainerHandler.getContainerConfig().setServiceBasePath("test"); - HttpServletRequest servletRequest = new AwsProxyHttpServletRequest(req, null, null); + HttpServletRequest servletRequest = getRequest(req, null, null); String requestUrl = servletRequest.getRequestURL().toString(); assertTrue(requestUrl.contains("/test/hello")); LambdaContainerHandler.getContainerConfig().setServiceBasePath(null); @@ -372,9 +392,8 @@ public void requestURL_getUrlWithContextPath_expectStageAsContextPath() { AwsProxyRequest req = getRequestWithHeaders(); req.getRequestContext().setStage("test-stage"); LambdaContainerHandler.getContainerConfig().setUseStageAsServletContext(true); - HttpServletRequest servletRequest = new AwsProxyHttpServletRequest(req, null, null); + HttpServletRequest servletRequest = getRequest(req, null, null); String requestUrl = servletRequest.getRequestURL().toString(); - System.out.println("Url: " + requestUrl); assertTrue(requestUrl.contains("/test-stage/")); LambdaContainerHandler.getContainerConfig().setUseStageAsServletContext(false); } @@ -382,7 +401,7 @@ public void requestURL_getUrlWithContextPath_expectStageAsContextPath() { @Test public void getLocales_emptyAcceptHeader_expectDefaultLocale() { AwsProxyRequest req = getRequestWithHeaders(); - HttpServletRequest servletRequest = new AwsProxyHttpServletRequest(req, null, null); + HttpServletRequest servletRequest = getRequest(req, null, null); Enumeration locales = servletRequest.getLocales(); int localesNo = 0; while (locales.hasMoreElements()) { @@ -397,7 +416,7 @@ public void getLocales_emptyAcceptHeader_expectDefaultLocale() { public void getLocales_validAcceptHeader_expectSingleLocale() { AwsProxyRequest req = getRequestWithHeaders(); req.getMultiValueHeaders().putSingle(HttpHeaders.ACCEPT_LANGUAGE, "fr-CH"); - HttpServletRequest servletRequest = new AwsProxyHttpServletRequest(req, null, null); + HttpServletRequest servletRequest = getRequest(req, null, null); Enumeration locales = servletRequest.getLocales(); int localesNo = 0; while (locales.hasMoreElements()) { @@ -412,7 +431,7 @@ public void getLocales_validAcceptHeader_expectSingleLocale() { public void getLocales_validAcceptHeaderMultipleLocales_expectFullLocaleList() { AwsProxyRequest req = getRequestWithHeaders(); req.getMultiValueHeaders().putSingle(HttpHeaders.ACCEPT_LANGUAGE, "fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5"); - HttpServletRequest servletRequest = new AwsProxyHttpServletRequest(req, null, null); + HttpServletRequest servletRequest = getRequest(req, null, null); Enumeration locales = servletRequest.getLocales(); List localesList = new ArrayList<>(); while (locales.hasMoreElements()) { @@ -433,7 +452,7 @@ public void getLocales_validAcceptHeaderMultipleLocales_expectFullLocaleList() { public void getLocales_validAcceptHeaderMultipleLocales_expectFullLocaleListOrdered() { AwsProxyRequest req = getRequestWithHeaders(); req.getMultiValueHeaders().putSingle(HttpHeaders.ACCEPT_LANGUAGE, "fr-CH, en;q=0.8, de;q=0.7, *;q=0.5, fr;q=0.9"); - HttpServletRequest servletRequest = new AwsProxyHttpServletRequest(req, null, null); + HttpServletRequest servletRequest = getRequest(req, null, null); Enumeration locales = servletRequest.getLocales(); List localesList = new ArrayList<>(); while (locales.hasMoreElements()) { @@ -450,7 +469,7 @@ public void getLocales_validAcceptHeaderMultipleLocales_expectFullLocaleListOrde @Test public void nullQueryString_expectNoExceptions() { AwsProxyRequest req = new AwsProxyRequestBuilder("/hello", "GET").build(); - AwsProxyHttpServletRequest servletReq = new AwsProxyHttpServletRequest(req, null, null); + HttpServletRequest servletReq = getRequest(req, null, null); assertNull(servletReq.getQueryString()); assertEquals(0, servletReq.getParameterMap().size()); assertFalse(servletReq.getParameterNames().hasMoreElements()); @@ -462,7 +481,7 @@ public void nullQueryString_expectNoExceptions() { public void inputStream_emptyBody_expectNullInputStream() { AwsProxyRequest proxyReq = getRequestWithHeaders(); assertNull(proxyReq.getBody()); - HttpServletRequest req = new AwsProxyHttpServletRequest(proxyReq, null, null); + HttpServletRequest req = getRequest(proxyReq, null, null); try { InputStream is = req.getInputStream(); @@ -476,13 +495,13 @@ public void inputStream_emptyBody_expectNullInputStream() { @Test public void getHeaders_emptyHeaders_expectEmptyEnumeration() { AwsProxyRequest proxyReq = new AwsProxyRequestBuilder("/hello", "GET").build(); - HttpServletRequest req = new AwsProxyHttpServletRequest(proxyReq, null, null); + HttpServletRequest req = getRequest(proxyReq, null, null); assertFalse(req.getHeaders("param").hasMoreElements()); } @Test public void getServerPort_defaultPort_expect443() { - HttpServletRequest req = new AwsProxyHttpServletRequest(getRequestWithHeaders(), null, null); + HttpServletRequest req = getRequest(getRequestWithHeaders(), null, null); assertEquals(443, req.getServerPort()); } @@ -490,7 +509,7 @@ public void getServerPort_defaultPort_expect443() { public void getServerPort_customPortFromHeader_expectCustomPort() { AwsProxyRequest proxyReq = getRequestWithHeaders(); proxyReq.getMultiValueHeaders().putSingle(AwsProxyHttpServletRequest.PORT_HEADER_NAME, "80"); - HttpServletRequest req = new AwsProxyHttpServletRequest(proxyReq, null, null); + HttpServletRequest req = getRequest(proxyReq, null, null); assertEquals(80, req.getServerPort()); } @@ -498,7 +517,7 @@ public void getServerPort_customPortFromHeader_expectCustomPort() { public void getServerPort_invalidCustomPortFromHeader_expectDefaultPort() { AwsProxyRequest proxyReq = getRequestWithHeaders(); proxyReq.getMultiValueHeaders().putSingle(AwsProxyHttpServletRequest.PORT_HEADER_NAME, "7200"); - HttpServletRequest req = new AwsProxyHttpServletRequest(proxyReq, null, null); + HttpServletRequest req = getRequest(proxyReq, null, null); assertEquals(443, req.getServerPort()); } diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyRequestDispatcherTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyRequestDispatcherTest.java index 05aa6ae65..898f251bf 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyRequestDispatcherTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyRequestDispatcherTest.java @@ -183,10 +183,6 @@ private AwsLambdaServletContainerHandler invalidMappings = reg.addMapping("/"); + assertEquals(1, invalidMappings.size()); + assertEquals("/", invalidMappings.toArray(new String[]{})[0]); + reg.addMapping("/hello", "/world"); + assertEquals(3, reg.getMappings().size()); + } + + @Test + public void metadata_savedAndReturnedCorrectly() { + ServletRegistration.Dynamic reg = new AwsServletRegistration("test", null, new AwsServletContext(null)); + assertEquals("test", reg.getName()); + reg.setLoadOnStartup(2); + assertEquals(2, ((AwsServletRegistration)reg).getLoadOnStartup()); + assertNull(reg.getRunAsRole()); + reg.setRunAsRole("role"); + assertEquals("role", reg.getRunAsRole()); + reg.setAsyncSupported(true); + assertTrue(((AwsServletRegistration)reg).isAsyncSupported()); + } + + @Test + public void setInitParameter_savedCorrectly() { + ServletRegistration.Dynamic reg = new AwsServletRegistration("test", null, new AwsServletContext(null)); + assertTrue(reg.setInitParameter("param", "value")); + assertFalse(reg.setInitParameter("param", "value")); + Map params = new HashMap<>(); + params.put("param2", "value2"); + params.put("param", "value"); + Set invalidParams = reg.setInitParameters(params); + assertEquals(1, invalidParams.size()); + assertEquals("param", invalidParams.toArray(new String[]{})[0]); + assertEquals(2, reg.getInitParameters().size()); + assertEquals("value2", reg.getInitParameter("param2")); + } + + @Test + public void servletConfig_populatesConfig() throws ServletException { + AwsServletContext servletCtx = new AwsServletContext(null); + TestServlet servlet = new TestServlet(); + ServletRegistration.Dynamic reg = new AwsServletRegistration("test", servlet, servletCtx); + assertEquals(servlet, ((AwsServletRegistration)reg).getServlet()); + Map params = new HashMap<>(); + params.put("param2", "value2"); + params.put("param", "value"); + Set invalidParams = reg.setInitParameters(params); + assertEquals(0, invalidParams.size()); + ServletConfig config = ((AwsServletRegistration)reg).getServletConfig(); + assertNotNull(config); + assertEquals("test", config.getServletName()); + assertEquals(servletCtx, config.getServletContext()); + int paramCnt = 0; + Enumeration paramNames = config.getInitParameterNames(); + while (paramNames.hasMoreElements()) { + paramNames.nextElement(); + paramCnt++; + } + assertEquals(2, paramCnt); + + } + + private class TestServlet implements Servlet { + + @Override + public void init(ServletConfig servletConfig) throws ServletException { + + } + + @Override + public ServletConfig getServletConfig() { + return null; + } + + @Override + public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { + + } + + @Override + public String getServletInfo() { + return null; + } + + @Override + public void destroy() { + + } + } +} diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/model/AwsProxyRequestTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/model/AwsProxyRequestTest.java index 0b82c4bd3..50f5cf054 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/model/AwsProxyRequestTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/model/AwsProxyRequestTest.java @@ -96,7 +96,7 @@ public void serialize_base64Encoded_fieldContainsIsPrefix() throws IOException { .fromJsonString(getRequestJson(true, CUSTOM_HEADER_KEY_LOWER_CASE, CUSTOM_HEADER_VALUE)).build(); ObjectMapper mapper = new ObjectMapper(); String serializedRequest = mapper.writeValueAsString(req); - System.out.println(serializedRequest); + assertTrue(serializedRequest.contains("\"isBase64Encoded\":true")); } diff --git a/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/LambdaSpringApplicationInitializer.java b/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/LambdaSpringApplicationInitializer.java deleted file mode 100644 index af9d721d6..000000000 --- a/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/LambdaSpringApplicationInitializer.java +++ /dev/null @@ -1,222 +0,0 @@ -/* - * Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance - * with the License. A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.proxy.spring; - -import com.amazonaws.serverless.exceptions.ContainerInitializationException; -import com.amazonaws.serverless.proxy.internal.testutils.Timer; - -import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.context.ApplicationListener; -import org.springframework.context.event.ContextRefreshedEvent; -import org.springframework.web.WebApplicationInitializer; -import org.springframework.web.context.ConfigurableWebApplicationContext; -import org.springframework.web.context.ContextLoaderListener; -import org.springframework.web.context.support.ServletRequestHandledEvent; -import org.springframework.web.servlet.DispatcherServlet; - -import javax.servlet.*; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; -import java.util.*; - -/** - * Custom implementation of Spring's `WebApplicationInitializer`. Uses internal variables to keep application state - * and creates a DispatcherServlet to handle incoming events. When the first event arrives it extracts the ServletContext - * and starts the Spring application. This class assumes that the implementation of `HttpServletRequest` that is passed - * in correctly implements the `getServletContext` method. - * - * State is kept using the `initialized` boolean variable. Each time a new event is received, the app sets the - * `currentResponse` private property to the value of the new `HttpServletResponse` object. This is used to intercept - * Spring notifications for the `ServletRequestHandledEvent` and call the flush method to release the latch. - */ -@SuppressFBWarnings("MTIA_SUSPECT_SERVLET_INSTANCE_FIELD") // we assume we are running in a "single threaded" environment - AWS Lambda -public class LambdaSpringApplicationInitializer extends HttpServlet implements WebApplicationInitializer { - public static final String ERROR_NO_CONTEXT = "No application context or configuration classes provided"; - - private static final String DEFAULT_SERVLET_NAME = "aws-servless-java-container"; - - private static final long serialVersionUID = 42L; - - // all of these variables are declared as volatile for correctness, technically this class is an implementation of - // HttpServlet and could live in a multi-threaded environment. Because the library runs inside AWS Lambda, we can - // assume we will be in a single-threaded environment. - - // Configuration variables that can be passed in - @SuppressFBWarnings("SE_TRANSIENT_FIELD_NOT_RESTORED") - private transient volatile ConfigurableWebApplicationContext applicationContext; - private volatile boolean refreshContext = true; - @SuppressFBWarnings("SE_TRANSIENT_FIELD_NOT_RESTORED") - private transient volatile List contextListeners; - private volatile List springProfiles; - - // Dynamically instantiated properties - private volatile DispatcherServlet dispatcherServlet; - - // The current response is used to release the latch when Spring emits the request handled event - private transient volatile HttpServletResponse currentResponse; - - @SuppressFBWarnings("SE_TRANSIENT_FIELD_NOT_RESTORED") - private transient Logger log = LoggerFactory.getLogger(LambdaSpringApplicationInitializer.class); - - /** - * Creates a new instance of the WebApplicationInitializer - * @param applicationContext A custom ConfigurableWebApplicationContext to be used - */ - public LambdaSpringApplicationInitializer(ConfigurableWebApplicationContext applicationContext) { - this.contextListeners = new ArrayList<>(); - this.applicationContext = applicationContext; - } - - /** - * Adds a new listener for the servlet context events. At the moment the library only emits events when the application - * is initialized. Because we don't have container lifecycle notifications from Lambda the `contextDestroyed` - * method is never called - * @param listener An implementation of `ServletContextListener` - */ - public void addListener(ServletContextListener listener) { - contextListeners.add(listener); - } - - public void setRefreshContext(boolean refreshContext) { - this.refreshContext = refreshContext; - } - - /** - * Given a request and response objects, triggers the filters set in the servlet context and - * @param request The incoming request - * @param response The response object Spring should write to. - * @throws ServletException When an error occurs during processing or of the request - * @throws IOException When an error occurs while writing the response - */ - public void dispatch(HttpServletRequest request, HttpServletResponse response) - throws ServletException, IOException { - currentResponse = response; - dispatcherServlet.service(request, response); - } - - /** - * Gets the initialized Spring dispatcher servlet instance. - * @return The Spring dispatcher servlet - */ - public DispatcherServlet getDispatcherServlet() { - return dispatcherServlet; - } - - public void setSpringProfiles(ServletContext ctx, String... springProfiles) - throws ContainerInitializationException { - this.springProfiles = Arrays.asList(springProfiles); - - applicationContext.registerShutdownHook(); - applicationContext.close(); - contextListeners.clear(); - try { - onStartup(ctx); - } catch (ServletException e) { - throw new ContainerInitializationException("Could not reload Spring context", e); - } - - } - - @Override - public void onStartup(ServletContext servletContext) throws ServletException { - Timer.start("SPRING_INITIALIZER_ONSTARTUP"); - if (springProfiles != null) { - applicationContext.getEnvironment().setActiveProfiles(springProfiles.toArray(new String[0])); - } - applicationContext.setServletContext(servletContext); - - DefaultDispatcherConfig dispatcherConfig = new DefaultDispatcherConfig(servletContext); - applicationContext.setServletConfig(dispatcherConfig); - - // Manage the lifecycle of the root application context - this.addListener(new ContextLoaderListener(applicationContext)); - - // Register and map the dispatcher servlet - dispatcherServlet = new DispatcherServlet(applicationContext); - - if (refreshContext) { - dispatcherServlet.refresh(); - } - - dispatcherServlet.onApplicationEvent(new ContextRefreshedEvent(applicationContext)); - dispatcherServlet.init(dispatcherConfig); - - notifyStartListeners(servletContext); - Timer.stop("SPRING_INITIALIZER_ONSTARTUP"); - } - - private void notifyStartListeners(ServletContext context) { - for (ServletContextListener listener : contextListeners) { - listener.contextInitialized(new ServletContextEvent(context)); - } - } - - - /////////////////////////////////////////////////////////////// - // HttpServlet implementation // - // This is used to pass the initializer to the filter chain // - // to handle requests // - /////////////////////////////////////////////////////////////// - - @Override - public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { - Timer.start("SPRING_INITIALIZER_SERVICE"); - Timer.start("SPRING_INITIALIZER_SERVICE_CAST"); - if (!(req instanceof HttpServletRequest)) { - throw new ServletException("Cannot service request that is not instance of HttpServletRequest"); - } - - if (!(res instanceof HttpServletResponse)) { - throw new ServletException("Cannot work with response that is not instance of HttpServletResponse"); - } - Timer.stop("SPRING_INITIALIZER_SERVICE_CAST"); - dispatch((HttpServletRequest)req, (HttpServletResponse)res); - Timer.stop("SPRING_INITIALIZER_SERVICE"); - } - - /** - * Default configuration class for the DispatcherServlet. This just mocks the behaviour of a default - * ServletConfig object with no init parameters - */ - private static class DefaultDispatcherConfig implements ServletConfig { - private ServletContext servletContext; - - DefaultDispatcherConfig(ServletContext context) { - servletContext = context; - } - - @Override - public String getServletName() { - return DEFAULT_SERVLET_NAME; - } - - @Override - public ServletContext getServletContext() { - return servletContext; - } - - @Override - public String getInitParameter(String s) { - return null; - } - - @Override - public Enumeration getInitParameterNames() { - return Collections.emptyEnumeration(); - } - } -} From ab0217e435afa7f4e7c86541acac9140ff4d2bc5 Mon Sep 17 00:00:00 2001 From: sapessi Date: Wed, 11 Sep 2019 12:38:41 -0700 Subject: [PATCH 034/888] Updated tests to work well with new context implementation and removed debug System.out calls (#239 contd) --- .../serverless/proxy/jersey/EchoJerseyResource.java | 7 ------- .../serverless/proxy/jersey/JerseyAwsProxyTest.java | 4 ---- .../serverless/proxy/jersey/JerseyParamEncodingTest.java | 1 - .../proxy/jersey/providers/CustomExceptionMapper.java | 3 +-- .../serverless/proxy/spark/InitExceptionHandlerTest.java | 1 - .../proxy/spark/SparkLambdaContainerHandlerTest.java | 2 -- .../serverless/proxy/spark/filter/CustomHeaderFilter.java | 5 ++--- .../proxy/spark/filter/UnauthenticatedFilter.java | 3 --- 8 files changed, 3 insertions(+), 23 deletions(-) diff --git a/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/EchoJerseyResource.java b/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/EchoJerseyResource.java index ec0f4b2ac..5da93ca08 100644 --- a/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/EchoJerseyResource.java +++ b/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/EchoJerseyResource.java @@ -86,7 +86,6 @@ public SingleValueModel returnFilterAttribute(@Context HttpServletRequest req) { @Path("/list-query-string") @GET @Produces(MediaType.APPLICATION_JSON) public SingleValueModel echoQueryStringLength(@QueryParam("list") List param) { - System.out.println("param: " + param + " = " + param.size()); SingleValueModel model = new SingleValueModel(); model.setValue(param.size() + ""); return model; @@ -157,7 +156,6 @@ public MapResponseModel echoQueryString(@Context UriInfo context) { @Produces(MediaType.APPLICATION_JSON) public SingleValueModel echoRequestScheme(@Context UriInfo context) { SingleValueModel model = new SingleValueModel(); - System.out.println("RequestUri: " + context.getRequestUri().toString()); model.setValue(context.getRequestUri().getScheme()); return model; } @@ -261,11 +259,6 @@ public Response fileSize(@FormDataParam("file") final File uploadedFile, @Context ContainerRequestContext req) { SingleValueModel sv = new SingleValueModel(); - System.out.println( - "Is base64 encoded: " + - ((AwsProxyHttpServletRequest)req.getProperty(JERSEY_SERVLET_REQUEST_PROPERTY)).getAwsProxyRequest().isBase64Encoded() - ); - try { InputStream fileIs = new FileInputStream(uploadedFile); System.out.println("File: " + fileDetail.getName() + " " + fileDetail.getFileName() + " " + fileDetail.getSize()); diff --git a/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyAwsProxyTest.java b/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyAwsProxyTest.java index e791ae810..baecb13aa 100644 --- a/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyAwsProxyTest.java +++ b/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyAwsProxyTest.java @@ -110,7 +110,6 @@ public void alb_basicRequest_expectSuccess() { assertEquals(200, output.getStatusCode()); assertEquals("application/json", output.getMultiValueHeaders().getFirst("Content-Type")); assertNotNull(output.getStatusDescription()); - System.out.println(output.getStatusDescription()); validateMapResponseModel(output); } @@ -170,9 +169,6 @@ public void context_servletResponse_setCustomHeader() { public void context_serverInfo_correctContext() { AwsProxyRequest request = getRequestBuilder("/echo/servlet-context", "GET").build(); AwsProxyResponse output = handler.proxy(request, lambdaContext); - for (String header : output.getMultiValueHeaders().keySet()) { - System.out.println(header + ": " + output.getMultiValueHeaders().getFirst(header)); - } assertEquals(200, output.getStatusCode()); assertEquals("application/json", output.getMultiValueHeaders().getFirst("Content-Type")); diff --git a/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyParamEncodingTest.java b/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyParamEncodingTest.java index 06edbdaab..0484e62d9 100644 --- a/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyParamEncodingTest.java +++ b/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyParamEncodingTest.java @@ -187,7 +187,6 @@ public void queryParam_encoding_expectFullyEncodedUrl() { assertNotNull(resp); assertEquals(resp.getStatusCode(), 200); validateSingleValueModel(resp, "%2F%2B%3D"); - System.out.println("body:" + resp.getBody()); } @Test diff --git a/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/providers/CustomExceptionMapper.java b/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/providers/CustomExceptionMapper.java index a800d114b..e435aff96 100644 --- a/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/providers/CustomExceptionMapper.java +++ b/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/providers/CustomExceptionMapper.java @@ -12,7 +12,7 @@ public class CustomExceptionMapper implements ExceptionMapper { public CustomExceptionMapper() { - System.out.println("Starting custom exception mapper"); + } @Inject @@ -23,7 +23,6 @@ public Response toResponse(UnsupportedOperationException throwable) { if (request == null) { return Response.status(Response.Status.NOT_FOUND).build(); } else { - System.out.println("Request uri: " + request.get().getRequestURI()); return Response.ok(throwable.getMessage()).status(Response.Status.NOT_IMPLEMENTED).build(); } } diff --git a/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/InitExceptionHandlerTest.java b/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/InitExceptionHandlerTest.java index fb39d9b69..6042899e4 100644 --- a/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/InitExceptionHandlerTest.java +++ b/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/InitExceptionHandlerTest.java @@ -67,7 +67,6 @@ public static void stopSpark() { private static void configureRoutes() { initExceptionHandler((e) -> { - System.out.println("Exception Handler called: " + e.getLocalizedMessage()); assertEquals(TEST_EXCEPTION_MESSAGE, e.getLocalizedMessage()); }); diff --git a/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/SparkLambdaContainerHandlerTest.java b/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/SparkLambdaContainerHandlerTest.java index 400373a40..c778bd57e 100644 --- a/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/SparkLambdaContainerHandlerTest.java +++ b/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/SparkLambdaContainerHandlerTest.java @@ -38,7 +38,6 @@ public void filters_onStartupMethod_executeFilters() { handler.onStartup(c -> { if (c == null) { - System.out.println("Null servlet context"); fail(); } FilterRegistration.Dynamic registration = c.addFilter("CustomHeaderFilter", CustomHeaderFilter.class); @@ -75,7 +74,6 @@ public void filters_unauthenticatedFilter_stopRequestProcessing() { handler.onStartup(c -> { if (c == null) { - System.out.println("Null servlet context"); fail(); } FilterRegistration.Dynamic registration = c.addFilter("UnauthenticatedFilter", UnauthenticatedFilter.class); diff --git a/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/filter/CustomHeaderFilter.java b/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/filter/CustomHeaderFilter.java index 349994456..e3733f3a9 100644 --- a/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/filter/CustomHeaderFilter.java +++ b/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/filter/CustomHeaderFilter.java @@ -18,12 +18,11 @@ public class CustomHeaderFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { - System.out.println("Called init on filter"); + } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { - System.out.println("Called doFilter"); HttpServletResponse resp = (HttpServletResponse)servletResponse; resp.addHeader(HEADER_NAME, HEADER_VALUE); @@ -33,6 +32,6 @@ public void doFilter(ServletRequest servletRequest, ServletResponse servletRespo @Override public void destroy() { - System.out.println("Called destroy"); + } } \ No newline at end of file diff --git a/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/filter/UnauthenticatedFilter.java b/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/filter/UnauthenticatedFilter.java index 60e8eb429..742072ca5 100644 --- a/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/filter/UnauthenticatedFilter.java +++ b/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/filter/UnauthenticatedFilter.java @@ -27,13 +27,10 @@ public void init(FilterConfig filterConfig) @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { - System.out.println("Running unauth filter"); if (((HttpServletRequest)servletRequest).getHeader(HEADER_NAME) != null) { ((HttpServletResponse) servletResponse).setStatus(401); - System.out.println("Returning 401"); return; } - System.out.println("Continue chain"); filterChain.doFilter(servletRequest, servletResponse); } From 961ed1b114d881b3b1df2ade66f774519dd63947 Mon Sep 17 00:00:00 2001 From: sapessi Date: Wed, 11 Sep 2019 12:40:42 -0700 Subject: [PATCH 035/888] Simplified Spring and SpringBoot 1.x integration to use an embedded servlet container (#239 contd) --- aws-serverless-java-container-spring/pom.xml | 16 ++ .../SpringBootLambdaContainerHandler.java | 195 ++++-------------- ...SpringBootServletConfigurationSupport.java | 12 ++ .../spring/SpringLambdaContainerHandler.java | 68 +++--- ...erverlessServletEmbeddedServerFactory.java | 55 +++++ .../proxy/spring/SpringAwsProxyTest.java | 3 - .../proxy/spring/SpringBootAppTest.java | 18 +- .../proxy/spring/SpringBootSecurityTest.java | 1 - .../proxy/spring/echoapp/ContextResource.java | 1 - .../spring/echoapp/CustomHeaderFilter.java | 5 +- .../proxy/spring/echoapp/EchoResource.java | 3 +- .../spring/echoapp/EchoSpringAppConfig.java | 10 +- .../spring/echoapp/UnauthenticatedFilter.java | 3 - ...rlessServletEmbeddedServerFactoryTest.java | 106 ++++++++++ .../spring/sbsecurityapp/TestController.java | 1 - .../sbsecurityapp/TestSecurityConfig.java | 3 +- .../spring/springbootapp/TestController.java | 1 - .../proxy/struts2/Struts2AwsProxyTest.java | 5 - 18 files changed, 265 insertions(+), 241 deletions(-) create mode 100644 aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootServletConfigurationSupport.java create mode 100644 aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactory.java create mode 100644 aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactoryTest.java diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 15e629305..8862e4787 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -81,6 +81,22 @@ 2.2.4 test + + org.springframework.boot + spring-boot + ${springboot.version} + true + + + org.springframework + spring-context + + + org.springframework + spring-core + + + org.springframework.boot spring-boot-autoconfigure diff --git a/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java b/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java index 68cab4f79..f84f6ca38 100644 --- a/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java +++ b/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java @@ -23,24 +23,21 @@ import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.serverless.proxy.model.AwsProxyResponse; import com.amazonaws.serverless.proxy.internal.servlet.*; +import com.amazonaws.serverless.proxy.spring.embedded.ServerlessServletEmbeddedServerFactory; import com.amazonaws.services.lambda.runtime.Context; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.boot.SpringApplication; import org.springframework.core.env.ConfigurableEnvironment; import org.springframework.core.env.StandardEnvironment; -import org.springframework.web.SpringServletContainerInitializer; import org.springframework.web.WebApplicationInitializer; -import org.springframework.web.context.WebApplicationContext; -import org.springframework.web.context.support.WebApplicationContextUtils; -import org.springframework.web.servlet.DispatcherServlet; import javax.servlet.*; -import java.util.*; import java.util.concurrent.CountDownLatch; /** - * Spring implementation of the `LambdaContainerHandler` abstract class. This class uses the `LambdaSpringApplicationInitializer` + * SpringBoot 1.x implementation of the `LambdaContainerHandler` abstract class. This class uses the `LambdaSpringApplicationInitializer` * object behind the scenes to proxy requests. The default implementation leverages the `AwsProxyHttpServletRequest` and * `AwsHttpServletResponse` implemented in the `aws-serverless-java-container-core` package. * @@ -53,11 +50,24 @@ public class SpringBootLambdaContainerHandler extends private final Class springBootInitializer; private static final Logger log = LoggerFactory.getLogger(SpringBootLambdaContainerHandler.class); private String[] springProfiles = null; - private DispatcherServlet dispatcherServlet; + + private static SpringBootLambdaContainerHandler instance; // State vars private boolean initialized; + /** + * We need to rely on the static instance of this for SpringBoot because we need it to access the ServletContext. + * Normally, SpringBoot would initialize its own embedded container through the SpringApplication.run() + * method. However, in our case we need to rely on the pre-initialized handler and need to fetch information from it + * for our mock {@link com.amazonaws.serverless.proxy.spring.embedded.ServerlessServletEmbeddedServerFactory}. + * + * @return The initialized instance + */ + public static SpringBootLambdaContainerHandler getInstance() { + return instance; + } + /** * Creates a default SpringLambdaContainerHandler initialized with the `AwsProxyRequest` and `AwsProxyResponse` objects * @param springBootInitializer {@code SpringBootServletInitializer} class @@ -121,12 +131,20 @@ public SpringBootLambdaContainerHandler(Class requestTypeClass, throws ContainerInitializationException { super(requestTypeClass, responseTypeClass, requestReader, responseWriter, securityContextWriter, exceptionHandler); Timer.start("SPRINGBOOT_CONTAINER_HANDLER_CONSTRUCTOR"); - setServletContext(new SpringBootAwsServletContext()); initialized = false; this.springBootInitializer = springBootInitializer; + SpringBootLambdaContainerHandler.setInstance(this); + Timer.stop("SPRINGBOOT_CONTAINER_HANDLER_CONSTRUCTOR"); } + // this is not pretty. However, because SpringBoot wants to control all of the initialization + // we need to access this handler as a singleton from the EmbeddedContainer to set the servlet + // context and from the ServletConfigurationSupport implementation + private static void setInstance(SpringBootLambdaContainerHandler h) { + SpringBootLambdaContainerHandler.instance = h; + } + public void activateSpringProfiles(String... profiles) { springProfiles = profiles; // force a re-initialization @@ -151,7 +169,8 @@ protected void handleRequest(AwsProxyHttpServletRequest containerRequest, AwsHtt containerRequest.setServletContext(getServletContext()); // process filters & invoke servlet - doFilter(containerRequest, containerResponse, dispatcherServlet); + Servlet reqServlet = ((AwsServletContext)getServletContext()).getServletForPath(containerRequest.getPathInfo()); + doFilter(containerRequest, containerResponse, reqServlet); Timer.stop("SPRINGBOOT_HANDLE_REQUEST"); } @@ -161,163 +180,19 @@ public void initialize() throws ContainerInitializationException { Timer.start("SPRINGBOOT_COLD_START"); - if (springProfiles != null && springProfiles.length > 0) { - System.setProperty("spring.profiles.active", String.join(",", springProfiles)); - } - SpringServletContainerInitializer springServletContainerInitializer = new SpringServletContainerInitializer(); - LinkedHashSet> webAppInitializers = new LinkedHashSet<>(); - webAppInitializers.add(springBootInitializer); - try { - springServletContainerInitializer.onStartup(webAppInitializers, getServletContext()); - } catch (ServletException e) { - throw new ContainerInitializationException("Could not initialize Spring Boot", e); - } - + SpringApplication app = new SpringApplication( + springBootInitializer, + ServerlessServletEmbeddedServerFactory.class, + SpringBootServletConfigurationSupport.class + ); if (springProfiles != null && springProfiles.length > 0) { ConfigurableEnvironment springEnv = new StandardEnvironment(); springEnv.setActiveProfiles(springProfiles); + app.setEnvironment(springEnv); } - - WebApplicationContext applicationContext = WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext()); - - dispatcherServlet = applicationContext.getBean("dispatcherServlet", DispatcherServlet.class); + app.run(); initialized = true; Timer.stop("SPRINGBOOT_COLD_START"); } - - public Servlet getServlet() { - return dispatcherServlet; - } - - - private class SpringBootAwsServletContext extends AwsServletContext { - public SpringBootAwsServletContext() { - super(SpringBootLambdaContainerHandler.this); - } - - @Override - public ServletRegistration.Dynamic addServlet(String s, String s1) { - throw new UnsupportedOperationException("Only dispatcherServlet is supported"); - } - - @Override - public ServletRegistration.Dynamic addServlet(String s, Class aClass) { - throw new UnsupportedOperationException("Only dispatcherServlet is supported"); - } - - @Override - public ServletRegistration.Dynamic addServlet(String s, Servlet servlet) { - if ("dispatcherServlet".equals(s)) { - try { - servlet.init(new ServletConfig() { - @Override - public String getServletName() { - return s; - } - - @Override - public ServletContext getServletContext() { - return SpringBootAwsServletContext.this; - } - - @Override - public String getInitParameter(String name) { - return null; - } - - @Override - public Enumeration getInitParameterNames() { - return new Enumeration() { - @Override - public boolean hasMoreElements() { - return false; - } - - @Override - public String nextElement() { - return null; - } - }; - } - }); - } catch (ServletException e) { - throw new RuntimeException("Cannot add servlet " + servlet, e); - } - return new ServletRegistration.Dynamic() { - @Override - public String getName() { - return s; - } - - @Override - public String getClassName() { - return null; - } - - @Override - public boolean setInitParameter(String name, String value) { - return false; - } - - @Override - public String getInitParameter(String name) { - return null; - } - - @Override - public Set setInitParameters(Map initParameters) { - return null; - } - - @Override - public Map getInitParameters() { - return null; - } - - @Override - public Set addMapping(String... urlPatterns) { - return null; - } - - @Override - public Collection getMappings() { - return null; - } - - @Override - public String getRunAsRole() { - return null; - } - - @Override - public void setAsyncSupported(boolean isAsyncSupported) { - - } - - @Override - public void setLoadOnStartup(int loadOnStartup) { - - } - - @Override - public Set setServletSecurity(ServletSecurityElement constraint) { - return null; - } - - @Override - public void setMultipartConfig(MultipartConfigElement multipartConfig) { - - } - - @Override - public void setRunAsRole(String roleName) { - - } - }; - } else { - throw new UnsupportedOperationException("Only dispatcherServlet is supported"); - } - } - } } diff --git a/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootServletConfigurationSupport.java b/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootServletConfigurationSupport.java new file mode 100644 index 000000000..d975bd20e --- /dev/null +++ b/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootServletConfigurationSupport.java @@ -0,0 +1,12 @@ +package com.amazonaws.serverless.proxy.spring; + +import org.springframework.boot.context.embedded.WebApplicationContextServletContextAwareProcessor; +import org.springframework.web.context.ConfigurableWebApplicationContext; + + +public class SpringBootServletConfigurationSupport extends WebApplicationContextServletContextAwareProcessor { + public SpringBootServletConfigurationSupport(ConfigurableWebApplicationContext webApplicationContext) { + super(webApplicationContext); + webApplicationContext.setServletContext(SpringBootLambdaContainerHandler.getInstance().getServletContext()); + } +} diff --git a/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringLambdaContainerHandler.java b/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringLambdaContainerHandler.java index 7fd87803b..fcd9e7fd4 100644 --- a/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringLambdaContainerHandler.java +++ b/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringLambdaContainerHandler.java @@ -26,9 +26,10 @@ import com.amazonaws.services.lambda.runtime.Context; import org.springframework.web.context.ConfigurableWebApplicationContext; import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; +import org.springframework.web.servlet.DispatcherServlet; import javax.servlet.Servlet; -import javax.servlet.ServletException; +import javax.servlet.ServletRegistration; import java.util.concurrent.CountDownLatch; @@ -40,10 +41,11 @@ * @param The expected return type */ public class SpringLambdaContainerHandler extends AwsLambdaServletContainerHandler { - private LambdaSpringApplicationInitializer initializer; + private ConfigurableWebApplicationContext appContext; + private String[] profiles; // State vars - private boolean initialized; + private boolean refreshContext = false; /** * Creates a default SpringLambdaContainerHandler initialized with the `AwsProxyRequest` and `AwsProxyResponse` objects @@ -120,30 +122,21 @@ public SpringLambdaContainerHandler(Class requestTypeClass, throws ContainerInitializationException { super(requestTypeClass, responseTypeClass, requestReader, responseWriter, securityContextWriter, exceptionHandler); Timer.start("SPRING_CONTAINER_HANDLER_CONSTRUCTOR"); - initialized = false; - initializer = new LambdaSpringApplicationInitializer(applicationContext); + appContext = applicationContext; Timer.stop("SPRING_CONTAINER_HANDLER_CONSTRUCTOR"); } /** * Asks the custom web application initializer to refresh the Spring context. - * @param refreshContext true if the context should be refreshed + * @param refresh true if the context should be refreshed */ - public void setRefreshContext(boolean refreshContext) { - this.initializer.setRefreshContext(refreshContext); + public void setRefreshContext(boolean refresh) { + //this.initializer.setRefreshContext(refreshContext); + refreshContext = refresh; } - /** - * Returns the custom web application initializer used by the object. The custom application initializer gives you access - * to the dispatcher servlet. - * @return The instance of the custom {@link org.springframework.web.WebApplicationInitializer} - */ - public LambdaSpringApplicationInitializer getApplicationInitializer() { - return initializer; - } - @Override protected AwsHttpServletResponse getContainerResponse(AwsProxyHttpServletRequest request, CountDownLatch latch) { return new AwsHttpServletResponse(request, latch); @@ -153,33 +146,31 @@ protected AwsHttpServletResponse getContainerResponse(AwsProxyHttpServletRequest /** * Activates the given Spring profiles in the application. This method will cause the context to be * refreshed. To use a single Spring profile, use the static method {@link SpringLambdaContainerHandler#getAwsProxyHandler(ConfigurableWebApplicationContext, String...)} - * @param profiles A number of spring profiles + * @param p A number of spring profiles * @throws ContainerInitializationException if the initializer is not set yet. */ - public void activateSpringProfiles(String... profiles) throws ContainerInitializationException { - if (initializer == null) { - throw new ContainerInitializationException(LambdaSpringApplicationInitializer.ERROR_NO_CONTEXT, null); - } + public void activateSpringProfiles(String... p) throws ContainerInitializationException { + profiles = p; setServletContext(new AwsServletContext(this)); - initializer.setSpringProfiles(getServletContext(), profiles); + appContext.registerShutdownHook(); + appContext.close(); + initialize(); } @Override protected void handleRequest(AwsProxyHttpServletRequest containerRequest, AwsHttpServletResponse containerResponse, Context lambdaContext) throws Exception { Timer.start("SPRING_HANDLE_REQUEST"); - if (initializer == null) { - throw new ContainerInitializationException(LambdaSpringApplicationInitializer.ERROR_NO_CONTEXT, null); - } - // wire up the application context on the first invocation - if (!initialized) { - initialize(); + if (refreshContext) { + appContext.refresh(); + refreshContext = false; } containerRequest.setServletContext(getServletContext()); // process filters - doFilter(containerRequest, containerResponse, initializer); + Servlet reqServlet = ((AwsServletContext)getServletContext()).getServletForPath(containerRequest.getPathInfo()); + doFilter(containerRequest, containerResponse, reqServlet); Timer.stop("SPRING_HANDLE_REQUEST"); } @@ -188,18 +179,13 @@ protected void handleRequest(AwsProxyHttpServletRequest containerRequest, AwsHtt public void initialize() throws ContainerInitializationException { Timer.start("SPRING_COLD_START"); - - try { - initializer.onStartup(getServletContext()); - } catch (ServletException e) { - throw new ContainerInitializationException("Could not initialize Spring", e); + if (profiles != null) { + appContext.getEnvironment().setActiveProfiles(profiles); } - - initialized = true; + appContext.setServletContext(getServletContext()); + DispatcherServlet dispatcher = new DispatcherServlet(appContext); + ServletRegistration.Dynamic reg = getServletContext().addServlet("dispatcherServlet", dispatcher); + reg.addMapping("/"); Timer.stop("SPRING_COLD_START"); } - - public Servlet getServlet() { - return initializer.getDispatcherServlet(); - } } diff --git a/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactory.java b/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactory.java new file mode 100644 index 000000000..4e9a8836c --- /dev/null +++ b/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactory.java @@ -0,0 +1,55 @@ +package com.amazonaws.serverless.proxy.spring.embedded; + +import com.amazonaws.serverless.proxy.internal.servlet.AwsLambdaServletContainerHandler; +import com.amazonaws.serverless.proxy.spring.SpringBootLambdaContainerHandler; +import org.springframework.boot.context.embedded.AbstractEmbeddedServletContainerFactory; +import org.springframework.boot.context.embedded.EmbeddedServletContainer; +import org.springframework.boot.context.embedded.EmbeddedServletContainerException; +import org.springframework.boot.web.servlet.ServletContextInitializer; + +import javax.servlet.ServletException; + +/** + * Implementation of SpringBoot's embedded container factory and servlet container. This replaces SpringBoot's default + * embedded container and uses the {@link SpringBootLambdaContainerHandler} as a singleton to retrieve the current + * {@link javax.servlet.ServletContext} and pass it to the array of {@link javax.servlet.ServletContainerInitializer}. + */ +public class ServerlessServletEmbeddedServerFactory extends AbstractEmbeddedServletContainerFactory implements EmbeddedServletContainer { + private AwsLambdaServletContainerHandler handler; + private ServletContextInitializer[] initializers; + + public ServerlessServletEmbeddedServerFactory() { + super(); + handler = SpringBootLambdaContainerHandler.getInstance(); + } + + @Override + public EmbeddedServletContainer getEmbeddedServletContainer(ServletContextInitializer... servletContextInitializers) { + initializers = servletContextInitializers; + + return this; + } + + @Override + public void start() throws EmbeddedServletContainerException { + for (ServletContextInitializer i : initializers) { + try { + if (handler.getServletContext() == null) { + throw new EmbeddedServletContainerException("Attempting to initialize ServletEmbeddedWebServer without ServletContext in Handler", null); + } + i.onStartup(handler.getServletContext()); + } catch (ServletException e) { + throw new EmbeddedServletContainerException("Could not initialize Servlets", e); + } + } + } + + ServletContextInitializer[] getInitializers() { + return initializers; + } + + @Override + public void stop() throws EmbeddedServletContainerException { + + } +} diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringAwsProxyTest.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringAwsProxyTest.java index 3fe730da1..6ed37b776 100644 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringAwsProxyTest.java +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringAwsProxyTest.java @@ -246,7 +246,6 @@ public void responseBody_responseWriter_validBody() throws JsonProcessingExcepti AwsProxyResponse output = handler.proxy(request, lambdaContext); assertEquals(200, output.getStatusCode()); assertNotNull(output.getBody()); - System.out.println("Output:" + output.getBody()); validateSingleValueModel(output, CUSTOM_HEADER_VALUE); } @@ -372,7 +371,6 @@ public void contextPath_generateLink_returnsCorrectPath() { AwsProxyResponse output = handler.proxy(request, lambdaContext); assertEquals(200, output.getStatusCode()); - System.out.println("Response: " + output.getBody()); String expectedUri = "https://api.myserver.com/prod/echo/encoded-request-uri/" + EchoResource.TEST_GENERATE_URI; @@ -390,7 +388,6 @@ public void multipart_getFileName_returnsCorrectFileName() AwsProxyResponse output = handler.proxy(request, lambdaContext); assertEquals(200, output.getStatusCode()); - System.out.println("Response: " + output.getBody()); assertEquals("testFile", output.getBody()); } diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringBootAppTest.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringBootAppTest.java index 0a17814d9..57d8fda4a 100644 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringBootAppTest.java +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringBootAppTest.java @@ -10,7 +10,7 @@ import com.amazonaws.serverless.proxy.spring.springbootapp.LambdaHandler; import com.amazonaws.serverless.proxy.spring.springbootapp.TestController; -import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.Test; @@ -41,19 +41,6 @@ public void defaultError_requestForward_springBootForwardsToDefaultErrorPage() { assertNotNull(resp); assertEquals(404, resp.getStatusCode()); assertNotNull(resp.getMultiValueHeaders()); - assertTrue(resp.getMultiValueHeaders().containsKey("Content-Type")); - assertEquals("application/json; charset=UTF-8", resp.getMultiValueHeaders().getFirst("Content-Type")); - try { - JsonNode errorData = mapper.readTree(resp.getBody()); - assertNotNull(errorData.findValue("status")); - assertEquals(404, errorData.findValue("status").asInt()); - assertNotNull(errorData.findValue("message")); - assertEquals("No message available", errorData.findValue("message").asText()); - - } catch (IOException e) { - e.printStackTrace(); - fail(); - } } @Test @@ -84,7 +71,6 @@ public void staticContent_getHtmlFile_returnsHtmlContent() { .header(HttpHeaders.CONTENT_TYPE, "text/plain") .build(); AwsProxyResponse output = handler.handleRequest(request, context); - System.out.println("Response: " + output.getBody()); assertEquals(200, output.getStatusCode()); assertTrue(output.getBody().contains("

Static

")); } @@ -95,8 +81,6 @@ public void utf8_returnUtf8String_expectCorrectHeaderMediaAndCharset() { AwsProxyRequest request = new AwsProxyRequestBuilder("/test/utf8", "GET") .build(); AwsProxyResponse output = handler.handleRequest(request, context); - System.out.println("Response: " + output.getBody()); - System.out.println("Content-Type:" + output.getMultiValueHeaders().getFirst(HttpHeaders.CONTENT_TYPE)); validateSingleValueModel(output, TestController.UTF8_TEST_STRING); assertTrue(output.getMultiValueHeaders().containsKey(HttpHeaders.CONTENT_TYPE)); assertTrue(output.getMultiValueHeaders().getFirst(HttpHeaders.CONTENT_TYPE).contains(";")); diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringBootSecurityTest.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringBootSecurityTest.java index dc46ed339..2fc6dd0d5 100644 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringBootSecurityTest.java +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringBootSecurityTest.java @@ -45,7 +45,6 @@ public void wrongUser_springSecurityBasicAuth_requestRedirectsSuccessfully() thr AwsProxyResponse resp = handler.handleRequest(req, context); assertNotNull(resp); mapper.enable(SerializationFeature.INDENT_OUTPUT); - System.out.println(mapper.writeValueAsString(resp.getMultiValueHeaders())); assertEquals(403, resp.getStatusCode()); validateSingleValueModel(resp, TestController.ACCESS_DENIED); } diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/ContextResource.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/ContextResource.java index 59e74ad33..d52237566 100644 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/ContextResource.java +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/ContextResource.java @@ -47,7 +47,6 @@ public ResponseEntity getContext() { public ResponseEntity createUser(@Valid @RequestBody ValidatedUserModel newUser, BindingResult results) { if (results.hasErrors()) { - System.out.println("Has errors"); return new ResponseEntity(newUser, HttpStatus.BAD_REQUEST); } return new ResponseEntity(newUser, HttpStatus.OK); diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/CustomHeaderFilter.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/CustomHeaderFilter.java index 0d3eb903e..ca0030439 100644 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/CustomHeaderFilter.java +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/CustomHeaderFilter.java @@ -18,12 +18,11 @@ public class CustomHeaderFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { - System.out.println("Called init on filter"); + } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { - System.out.println("Called doFilter"); HttpServletResponse resp = (HttpServletResponse)servletResponse; resp.addHeader(HEADER_NAME, HEADER_VALUE); @@ -33,6 +32,6 @@ public void doFilter(ServletRequest servletRequest, ServletResponse servletRespo @Override public void destroy() { - System.out.println("Called destroy"); + } } \ No newline at end of file diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/EchoResource.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/EchoResource.java index 1487297d3..c07020013 100644 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/EchoResource.java +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/EchoResource.java @@ -156,7 +156,6 @@ public SingleValueModel echoRequestURL(HttpServletRequest request) { public SingleValueModel helloForPopulatedBody(@RequestBody(required = false) Optional input) { SingleValueModel valueModel = new SingleValueModel(); if (input.isPresent() && !"null".equals(input.get())) { - System.out.println("Input: \"" + input.get() + "\""); valueModel.setValue("true"); } @@ -194,7 +193,7 @@ public ResponseEntity echoLastModified() { public ResponseEntity receiveFile(@RequestParam("testFile") MultipartFile file) throws IOException { String fileName = file.getName(); byte[] fileContents = file.getBytes(); - System.out.println("Content length: " + fileContents.length); + return ResponseEntity.ok(fileName); } } diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/EchoSpringAppConfig.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/EchoSpringAppConfig.java index d9f49e7c8..17e09d923 100644 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/EchoSpringAppConfig.java +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/EchoSpringAppConfig.java @@ -5,6 +5,7 @@ import com.amazonaws.serverless.proxy.AwsProxySecurityContextWriter; import com.amazonaws.serverless.proxy.internal.servlet.AwsProxyHttpServletRequestReader; import com.amazonaws.serverless.proxy.internal.servlet.AwsProxyHttpServletResponseWriter; +import com.amazonaws.serverless.proxy.internal.servlet.AwsServletRegistration; import com.amazonaws.serverless.proxy.internal.testutils.MockLambdaContext; import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.serverless.proxy.model.AwsProxyResponse; @@ -17,9 +18,11 @@ import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean; import org.springframework.context.annotation.PropertySource; import org.springframework.web.context.ConfigurableWebApplicationContext; +import org.springframework.web.servlet.DispatcherServlet; import javax.servlet.DispatcherType; import javax.servlet.FilterRegistration; +import javax.servlet.ServletException; import java.util.EnumSet; @@ -50,7 +53,12 @@ public SpringLambdaContainerHandler springLambdaContainerHandler() throws Contai registration.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), true, "/echo/*"); // servlet name mappings are disabled and will throw an exception - handler.getApplicationInitializer().getDispatcherServlet().setThrowExceptionIfNoHandlerFound(true); + //handler.getApplicationInitializer().getDispatcherServlet().setThrowExceptionIfNoHandlerFound(true); + try { + ((DispatcherServlet)((AwsServletRegistration)c.getServletRegistration("dispatcherServlet")).getServlet()).setThrowExceptionIfNoHandlerFound(true); + } catch (ServletException e) { + e.printStackTrace(); + } }); return handler; } diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/UnauthenticatedFilter.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/UnauthenticatedFilter.java index b63401572..ba16d905f 100644 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/UnauthenticatedFilter.java +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/UnauthenticatedFilter.java @@ -27,13 +27,10 @@ public void init(FilterConfig filterConfig) @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { - System.out.println("Running unauth filter"); if (((HttpServletRequest)servletRequest).getHeader(HEADER_NAME) != null) { ((HttpServletResponse) servletResponse).setStatus(401); - System.out.println("Returning 401"); return; } - System.out.println("Continue chain"); filterChain.doFilter(servletRequest, servletResponse); } diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactoryTest.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactoryTest.java new file mode 100644 index 000000000..b9e31a052 --- /dev/null +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactoryTest.java @@ -0,0 +1,106 @@ +package com.amazonaws.serverless.proxy.spring.embedded; + +import com.amazonaws.serverless.exceptions.ContainerInitializationException; +import com.amazonaws.serverless.proxy.spring.SpringBootLambdaContainerHandler; +import com.amazonaws.serverless.proxy.spring.springbootapp.TestApplication; +import org.junit.Test; +import org.springframework.boot.context.embedded.EmbeddedServletContainer; +import org.springframework.boot.context.embedded.EmbeddedServletContainerException; +import org.springframework.boot.web.servlet.ServletContextInitializer; + +import javax.servlet.*; +import java.io.IOException; + +import static org.junit.Assert.*; + +public class ServerlessServletEmbeddedServerFactoryTest { + + // initialize a container handler to that the embedded factory can grab its instnace + private SpringBootLambdaContainerHandler h = SpringBootLambdaContainerHandler.getAwsProxyHandler(TestApplication.class); + + public ServerlessServletEmbeddedServerFactoryTest() throws ContainerInitializationException { + } + + @Test + public void getContainer_populatesInitializers() { + ServerlessServletEmbeddedServerFactory factory = new ServerlessServletEmbeddedServerFactory(); + TestServlet initializer = new TestServlet(false); + EmbeddedServletContainer container = factory.getEmbeddedServletContainer(initializer); + assertNotNull(((ServerlessServletEmbeddedServerFactory)container).getInitializers()); + assertEquals(1, ((ServerlessServletEmbeddedServerFactory)container).getInitializers().length); + assertEquals(initializer, ((ServerlessServletEmbeddedServerFactory)container).getInitializers()[0]); + container.stop(); // calling stop just once to get the test coverage since there's no code in it + } + + @Test + public void start_throwsException() { + ServerlessServletEmbeddedServerFactory factory = new ServerlessServletEmbeddedServerFactory(); + TestServlet initializer = new TestServlet(true); + EmbeddedServletContainer container = factory.getEmbeddedServletContainer(initializer); + try { + container.start(); + } catch (EmbeddedServletContainerException e) { + assertTrue(ServletException.class.isAssignableFrom(e.getCause().getClass())); + assertEquals(TestServlet.EXCEPTION_MESSAGE, e.getCause().getMessage()); + return; + } + fail("Did not throw the expected exception"); + } + + @Test + public void start_withoutException_setsServletContext() { + ServerlessServletEmbeddedServerFactory factory = new ServerlessServletEmbeddedServerFactory(); + TestServlet initializer = new TestServlet(false); + EmbeddedServletContainer container = factory.getEmbeddedServletContainer(initializer); + container.start(); + assertNotNull(initializer.getCtx()); + assertEquals(h.getServletContext(), initializer.getCtx()); + } + + public static class TestServlet implements Servlet, ServletContextInitializer { + private ServletContext ctx; + private boolean throwOnInit; + public static final String EXCEPTION_MESSAGE = "Throw on init"; + + public TestServlet(boolean throwOnInit) { + this.throwOnInit = throwOnInit; + } + + @Override + public void init(ServletConfig servletConfig) throws ServletException { + + } + + @Override + public ServletConfig getServletConfig() { + return null; + } + + @Override + public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { + + } + + @Override + public String getServletInfo() { + return null; + } + + @Override + public void destroy() { + + } + + @Override + public void onStartup(ServletContext servletContext) throws ServletException { + ctx = servletContext; + if (throwOnInit) { + throw new ServletException(EXCEPTION_MESSAGE); + } + } + + public ServletContext getCtx() { + return ctx; + } + } +} diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/sbsecurityapp/TestController.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/sbsecurityapp/TestController.java index 351ddce17..33be36f80 100644 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/sbsecurityapp/TestController.java +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/sbsecurityapp/TestController.java @@ -33,7 +33,6 @@ public SingleValueModel testGet() { } else { value.setValue(null); } - System.out.println("Principal: " + value.getValue()); return value; } diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/sbsecurityapp/TestSecurityConfig.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/sbsecurityapp/TestSecurityConfig.java index 13b1ed874..b3ca81eaf 100644 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/sbsecurityapp/TestSecurityConfig.java +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/sbsecurityapp/TestSecurityConfig.java @@ -24,12 +24,11 @@ protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.inMemoryAuthentication().withUser(USERNAME).password(pEncoder.encode(PASSWORD)).roles("ADMIN") .and().withUser(NO_ADMIN_USERNAME).password(pEncoder.encode(PASSWORD)).roles("USER") .and().passwordEncoder(pEncoder); - System.out.println("Configure authentication manager"); + } @Override public void configure(WebSecurity web) throws Exception { - System.out.println("Configure Web security"); } @Override diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springbootapp/TestController.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springbootapp/TestController.java index 51094bd1c..0357328e1 100644 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springbootapp/TestController.java +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springbootapp/TestController.java @@ -59,7 +59,6 @@ public SingleValueModel testDomainInPath(@PathVariable("domain") String domainNa @RequestMapping(path = "/test/query-string", method = { RequestMethod.GET }) public SingleValueModel testQueryStringList(@RequestParam("list") List qsValues) { assert qsValues != null; - System.out.println("QUERY_STRING_VALUES: " + qsValues); SingleValueModel value = new SingleValueModel(); value.setValue(qsValues.size() + ""); return value; diff --git a/aws-serverless-java-container-struts2/src/test/java/com/amazonaws/serverless/proxy/struts2/Struts2AwsProxyTest.java b/aws-serverless-java-container-struts2/src/test/java/com/amazonaws/serverless/proxy/struts2/Struts2AwsProxyTest.java index d362030f5..1e6ad63ae 100644 --- a/aws-serverless-java-container-struts2/src/test/java/com/amazonaws/serverless/proxy/struts2/Struts2AwsProxyTest.java +++ b/aws-serverless-java-container-struts2/src/test/java/com/amazonaws/serverless/proxy/struts2/Struts2AwsProxyTest.java @@ -92,12 +92,8 @@ public void context_serverInfo_correctContext() { .queryString("contentType", "true") .build(); AwsProxyResponse output = handler.proxy(request, lambdaContext); - for (String header : output.getMultiValueHeaders().keySet()) { - System.out.println(header + ": " + output.getMultiValueHeaders().getFirst(header)); - } assertEquals(200, output.getStatusCode()); assertEquals(CONTENT_TYPE_APPLICATION_JSON, output.getMultiValueHeaders().getFirst("Content-Type")); - System.out.println("Body: " + output.getBody()); validateSingleValueModel(output, "Hello Struts2"); } @@ -271,7 +267,6 @@ public void queryParam_encoding_expectUnencodedParam() { String decodedParam = ""; try { decodedParam = URLDecoder.decode(paramValue, "UTF-8"); - System.out.println(decodedParam); } catch (UnsupportedEncodingException e) { e.printStackTrace(); fail("Could not decode parameter"); From ea39ff61ce673eaba5e87def8627148aa5399e66 Mon Sep 17 00:00:00 2001 From: sapessi Date: Wed, 11 Sep 2019 12:41:18 -0700 Subject: [PATCH 036/888] Added new springboot2 module that supports both WebFlux and Servlet embedded servers, actually addressing #239. --- .../pom.xml | 171 +++++++++++++++ .../SpringBootLambdaContainerHandler.java | 204 ++++++++++++++++++ ...rverlessReactiveEmbeddedServerFactory.java | 93 ++++++++ ...erverlessServletEmbeddedServerFactory.java | 55 +++++ .../proxy/spring/ServletAppTest.java | 24 +++ .../proxy/spring/WebFluxAppTest.java | 32 +++ .../spring/servletapp/LambdaHandler.java | 25 +++ .../spring/servletapp/MessageController.java | 15 ++ .../spring/servletapp/ServletApplication.java | 8 + .../spring/webfluxapp/LambdaHandler.java | 25 +++ .../spring/webfluxapp/MessageController.java | 26 +++ .../webfluxapp/WebFluxTestApplication.java | 8 + pom.xml | 1 + 13 files changed, 687 insertions(+) create mode 100644 aws-serverless-java-container-springboot2/pom.xml create mode 100644 aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java create mode 100644 aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessReactiveEmbeddedServerFactory.java create mode 100644 aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactory.java create mode 100644 aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/servlerss/proxy/spring/ServletAppTest.java create mode 100644 aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/servlerss/proxy/spring/WebFluxAppTest.java create mode 100644 aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/servlerss/proxy/spring/servletapp/LambdaHandler.java create mode 100644 aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/servlerss/proxy/spring/servletapp/MessageController.java create mode 100644 aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/servlerss/proxy/spring/servletapp/ServletApplication.java create mode 100644 aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/servlerss/proxy/spring/webfluxapp/LambdaHandler.java create mode 100644 aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/servlerss/proxy/spring/webfluxapp/MessageController.java create mode 100644 aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/servlerss/proxy/spring/webfluxapp/WebFluxTestApplication.java diff --git a/aws-serverless-java-container-springboot2/pom.xml b/aws-serverless-java-container-springboot2/pom.xml new file mode 100644 index 000000000..f0a8258a3 --- /dev/null +++ b/aws-serverless-java-container-springboot2/pom.xml @@ -0,0 +1,171 @@ + + + + aws-serverless-java-container + com.amazonaws.serverless + 1.4-SNAPSHOT + + 4.0.0 + + com.amazonaws.serverless + aws-serverless-java-container-springboot2 + AWS Serverless Java container support - SpringBoot 2 implementation + Allows Java applications written for SpringBoot 2 to run in AWS Lambda + https://aws.amazon.com/lambda + 1.4-SNAPSHOT + + + 5.1.9.RELEASE + 2.1.8.RELEASE + + 1.8 + 1.8 + + + + + + com.amazonaws.serverless + aws-serverless-java-container-core + 1.4-SNAPSHOT + + + + org.springframework + spring-webflux + ${spring.version} + true + + + org.springframework.boot + spring-boot + ${springboot.version} + true + + + org.springframework.boot + spring-boot-autoconfigure + ${springboot.version} + true + + + + + + + + org.jacoco + jacoco-maven-plugin + 0.8.1 + + ${basedir}/target/coverage-reports/jacoco-unit.exec + ${basedir}/target/coverage-reports/jacoco-unit.exec + + + + default-prepare-agent + + prepare-agent + + + + jacoco-site + package + + report + + + + jacoco-check + test + + check + + + true + + BUNDLE + + + INSTRUCTION + COVEREDRATIO + ${jacoco.minCoverage} + + + + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.9 + + always + + + + com.github.spotbugs + spotbugs-maven-plugin + 3.1.1 + + + Max + + Low + + true + + ${project.build.directory}/spotbugs + + + + com.h3xstream.findsecbugs + findsecbugs-plugin + 1.7.1 + + + + + + + analyze-compile + compile + + check + + + + + + org.owasp + dependency-check-maven + ${dependencyCheck.version} + + true + + ${project.basedir}/../owasp-suppression.xml + + 7 + + + + + check + + + + + + + diff --git a/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java b/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java new file mode 100644 index 000000000..c111b2c87 --- /dev/null +++ b/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java @@ -0,0 +1,204 @@ +/* + * Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance + * with the License. A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.proxy.spring; + +import com.amazonaws.serverless.exceptions.ContainerInitializationException; +import com.amazonaws.serverless.proxy.*; +import com.amazonaws.serverless.proxy.internal.servlet.*; +import com.amazonaws.serverless.proxy.internal.testutils.Timer; +import com.amazonaws.serverless.proxy.model.AwsProxyRequest; +import com.amazonaws.serverless.proxy.model.AwsProxyResponse; +import com.amazonaws.serverless.proxy.spring.embedded.ServerlessReactiveEmbeddedServerFactory; +import com.amazonaws.serverless.proxy.spring.embedded.ServerlessServletEmbeddedServerFactory; +import com.amazonaws.services.lambda.runtime.Context; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.SpringApplication; +import org.springframework.core.env.ConfigurableEnvironment; +import org.springframework.core.env.StandardEnvironment; + +import javax.servlet.Servlet; +import java.util.concurrent.CountDownLatch; + +/** + * SpringBoot 1.x implementation of the `LambdaContainerHandler` abstract class. This class uses the `LambdaSpringApplicationInitializer` + * object behind the scenes to proxy requests. The default implementation leverages the `AwsProxyHttpServletRequest` and + * `AwsHttpServletResponse` implemented in the `aws-serverless-java-container-core` package. + * + * Important: Make sure to add LambdaFlushResponseListener in your SpringBootServletInitializer subclass configure(). + * + * @param The incoming event type + * @param The expected return type + */ +public class SpringBootLambdaContainerHandler extends AwsLambdaServletContainerHandler { + private final Class springBootInitializer; + private static final Logger log = LoggerFactory.getLogger(SpringBootLambdaContainerHandler.class); + private String[] springProfiles = null; + + private static SpringBootLambdaContainerHandler instance; + + // State vars + private boolean initialized; + + /** + * We need to rely on the static instance of this for SpringBoot because we need it to access the ServletContext. + * Normally, SpringBoot would initialize its own embedded container through the SpringApplication.run() + * method. However, in our case we need to rely on the pre-initialized handler and need to fetch information from it + * for our mock {@link com.amazonaws.serverless.proxy.spring.embedded.ServerlessReactiveEmbeddedServerFactory}. + * + * @return The initialized instance + */ + public static SpringBootLambdaContainerHandler getInstance() { + return instance; + } + + /** + * Creates a default SpringLambdaContainerHandler initialized with the `AwsProxyRequest` and `AwsProxyResponse` objects + * @param springBootInitializer {@code SpringBootServletInitializer} class + * @return An initialized instance of the `SpringLambdaContainerHandler` + * @throws ContainerInitializationException If an error occurs while initializing the Spring framework + */ + public static SpringBootLambdaContainerHandler getAwsProxyHandler(Class springBootInitializer) + throws ContainerInitializationException { + SpringBootLambdaContainerHandler newHandler = new SpringBootLambdaContainerHandler<>( + AwsProxyRequest.class, + AwsProxyResponse.class, + new AwsProxyHttpServletRequestReader(), + new AwsProxyHttpServletResponseWriter(), + new AwsProxySecurityContextWriter(), + new AwsProxyExceptionHandler(), + springBootInitializer); + newHandler.initialize(); + return newHandler; + } + + /** + * Creates a default SpringLambdaContainerHandler initialized with the `AwsProxyRequest` and `AwsProxyResponse` objects and the given Spring profiles + * @param springBootInitializer {@code SpringBootServletInitializer} class + * @param profiles A list of Spring profiles to activate + * @return An initialized instance of the `SpringLambdaContainerHandler` + * @throws ContainerInitializationException If an error occurs while initializing the Spring framework + */ + public static SpringBootLambdaContainerHandler getAwsProxyHandler(Class springBootInitializer, String... profiles) + throws ContainerInitializationException { + SpringBootLambdaContainerHandler newHandler = new SpringBootLambdaContainerHandler<>( + AwsProxyRequest.class, + AwsProxyResponse.class, + new AwsProxyHttpServletRequestReader(), + new AwsProxyHttpServletResponseWriter(), + new AwsProxySecurityContextWriter(), + new AwsProxyExceptionHandler(), + springBootInitializer); + newHandler.activateSpringProfiles(profiles); + newHandler.initialize(); + return newHandler; + } + + /** + * Creates a new container handler with the given reader and writer objects + * + * @param requestTypeClass The class for the incoming Lambda event + * @param requestReader An implementation of `RequestReader` + * @param responseWriter An implementation of `ResponseWriter` + * @param securityContextWriter An implementation of `SecurityContextWriter` + * @param exceptionHandler An implementation of `ExceptionHandler` + * @param springBootInitializer {@code SpringBootServletInitializer} class + * @throws ContainerInitializationException If an error occurs while initializing the Spring framework + */ + public SpringBootLambdaContainerHandler(Class requestTypeClass, + Class responseTypeClass, + RequestReader requestReader, + ResponseWriter responseWriter, + SecurityContextWriter securityContextWriter, + ExceptionHandler exceptionHandler, + Class springBootInitializer) + throws ContainerInitializationException { + super(requestTypeClass, responseTypeClass, requestReader, responseWriter, securityContextWriter, exceptionHandler); + Timer.start("SPRINGBOOT_CONTAINER_HANDLER_CONSTRUCTOR"); + initialized = false; + this.springBootInitializer = springBootInitializer; + SpringBootLambdaContainerHandler.setInstance(this); + + Timer.stop("SPRINGBOOT_CONTAINER_HANDLER_CONSTRUCTOR"); + } + + // this is not pretty. However, because SpringBoot wants to control all of the initialization + // we need to access this handler as a singleton from the EmbeddedContainer to set the servlet + // context and from the ServletConfigurationSupport implementation + private static void setInstance(SpringBootLambdaContainerHandler h) { + SpringBootLambdaContainerHandler.instance = h; + } + + public void activateSpringProfiles(String... profiles) { + springProfiles = profiles; + // force a re-initialization + initialized = false; + } + + @Override + protected AwsHttpServletResponse getContainerResponse(AwsProxyHttpServletRequest request, CountDownLatch latch) { + return new AwsHttpServletResponse(request, latch); + } + + @Override + protected void handleRequest(AwsProxyHttpServletRequest containerRequest, AwsHttpServletResponse containerResponse, Context lambdaContext) throws Exception { + // this method of the AwsLambdaServletContainerHandler sets the servlet context + Timer.start("SPRINGBOOT_HANDLE_REQUEST"); + + // wire up the application context on the first invocation + if (!initialized) { + initialize(); + } + + containerRequest.setServletContext(getServletContext()); + + // process filters & invoke servlet + Servlet reqServlet = ((AwsServletContext)getServletContext()).getServletForPath(containerRequest.getPathInfo()); + doFilter(containerRequest, containerResponse, reqServlet); + Timer.stop("SPRINGBOOT_HANDLE_REQUEST"); + } + + + @Override + public void initialize() + throws ContainerInitializationException { + Timer.start("SPRINGBOOT_COLD_START"); + + SpringApplication app = new SpringApplication(getEmbeddedContainerClasses()); + if (springProfiles != null && springProfiles.length > 0) { + ConfigurableEnvironment springEnv = new StandardEnvironment(); + springEnv.setActiveProfiles(springProfiles); + app.setEnvironment(springEnv); + } + + app.run(); + + initialized = true; + Timer.stop("SPRINGBOOT_COLD_START"); + } + + private Class[] getEmbeddedContainerClasses() { + Class[] classes = new Class[2]; + try { + // if HandlerAdapter is available we assume they are using WebFlux. Otherwise plain servlet. + this.getClass().getClassLoader().loadClass("org.springframework.web.reactive.HandlerAdapter"); + log.debug("Found WebFlux HandlerAdapter on classpath, using reactive server factory"); + classes[0] = ServerlessReactiveEmbeddedServerFactory.class; + } catch (ClassNotFoundException e) { + classes[0] = ServerlessServletEmbeddedServerFactory.class; + } + + classes[1] = springBootInitializer; + return classes; + } +} diff --git a/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessReactiveEmbeddedServerFactory.java b/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessReactiveEmbeddedServerFactory.java new file mode 100644 index 000000000..94a9d2074 --- /dev/null +++ b/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessReactiveEmbeddedServerFactory.java @@ -0,0 +1,93 @@ +package com.amazonaws.serverless.proxy.spring.embedded; + +import com.amazonaws.serverless.proxy.spring.SpringBootLambdaContainerHandler; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; +import org.springframework.boot.autoconfigure.AutoConfigureOrder; +import org.springframework.boot.web.reactive.server.AbstractReactiveWebServerFactory; +import org.springframework.boot.web.server.WebServer; +import org.springframework.boot.web.server.WebServerException; +import org.springframework.core.Ordered; +import org.springframework.http.server.reactive.HttpHandler; +import org.springframework.http.server.reactive.ServletHttpHandlerAdapter; + +import javax.servlet.*; +import java.io.IOException; +import java.util.Enumeration; + +@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE) +public class ServerlessReactiveEmbeddedServerFactory extends AbstractReactiveWebServerFactory implements WebServer, Servlet { + private ServletHttpHandlerAdapter handler; + private ServletConfig config; + static final String SERVLET_NAME = "com.amazonaws.serverless.proxy.spring.embedded.ServerlessReactiveEmbeddedServerFactory"; + static final String SERVLET_INFO = "ServerlessReactiveEmbeddedServerFactory"; + + @Override + @SuppressFBWarnings("MTIA_SUSPECT_SERVLET_INSTANCE_FIELD") + public WebServer getWebServer(HttpHandler httpHandler) { + handler = new ServletHttpHandlerAdapter(httpHandler); + return this; + } + + @Override + public void start() throws WebServerException { + // register this object as the main handler servlet with a mapping of / + SpringBootLambdaContainerHandler + .getInstance() + .getServletContext() + .addServlet(SERVLET_NAME, this) + .addMapping("/"); + handler.init(new ServletAdapterConfig()); + } + + @Override + public void stop() throws WebServerException { + // nothing to do here. + } + + @Override + public void init(ServletConfig servletConfig) throws ServletException { + config = servletConfig; + } + + @Override + public ServletConfig getServletConfig() { + return config; + } + + @Override + public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { + handler.service(servletRequest, servletResponse); + } + + @Override + public String getServletInfo() { + return SERVLET_INFO; + } + + @Override + public void destroy() { + + } + + private static class ServletAdapterConfig implements ServletConfig { + @Override + public String getServletName() { + return SERVLET_NAME; + } + + @Override + public ServletContext getServletContext() { + return SpringBootLambdaContainerHandler.getInstance().getServletContext(); + } + + @Override + public String getInitParameter(String s) { + return null; + } + + @Override + public Enumeration getInitParameterNames() { + return null; + } + } +} diff --git a/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactory.java b/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactory.java new file mode 100644 index 000000000..b47b081c7 --- /dev/null +++ b/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactory.java @@ -0,0 +1,55 @@ +package com.amazonaws.serverless.proxy.spring.embedded; + +import com.amazonaws.serverless.exceptions.ContainerInitializationException; +import com.amazonaws.serverless.proxy.internal.servlet.AwsLambdaServletContainerHandler; +import com.amazonaws.serverless.proxy.spring.SpringBootLambdaContainerHandler; +import org.springframework.boot.autoconfigure.AutoConfigureOrder; +import org.springframework.boot.web.server.WebServer; +import org.springframework.boot.web.server.WebServerException; +import org.springframework.boot.web.servlet.ServletContextInitializer; +import org.springframework.boot.web.servlet.server.ServletWebServerFactory; +import org.springframework.core.Ordered; + +import javax.servlet.ServletException; + +@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE) +public class ServerlessServletEmbeddedServerFactory implements ServletWebServerFactory, WebServer { + private ServletContextInitializer[] initializers; + private AwsLambdaServletContainerHandler handler; + + public ServerlessServletEmbeddedServerFactory() { + super(); + handler = SpringBootLambdaContainerHandler.getInstance(); + } + + @Override + public WebServer getWebServer(ServletContextInitializer... initializers) { + this.initializers = initializers; + for (ServletContextInitializer i : initializers) { + try { + if (handler.getServletContext() == null) { + throw new WebServerException("Attempting to initialize ServletEmbeddedWebServer without ServletContext in Handler", null); + } + i.onStartup(handler.getServletContext()); + } catch (ServletException e) { + throw new WebServerException("Could not initialize Servlets", e); + } + } + return this; + } + + @Override + public void start() throws WebServerException { + + } + + @Override + public void stop() throws WebServerException { + + } + + @Override + public int getPort() { + return 0; + } +} diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/servlerss/proxy/spring/ServletAppTest.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/servlerss/proxy/spring/ServletAppTest.java new file mode 100644 index 000000000..b7353cd82 --- /dev/null +++ b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/servlerss/proxy/spring/ServletAppTest.java @@ -0,0 +1,24 @@ +package com.amazonaws.servlerss.proxy.spring; + +import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; +import com.amazonaws.serverless.proxy.internal.testutils.MockLambdaContext; +import com.amazonaws.serverless.proxy.model.AwsProxyRequest; +import com.amazonaws.serverless.proxy.model.AwsProxyResponse; +import com.amazonaws.servlerss.proxy.spring.servletapp.LambdaHandler; +import com.amazonaws.servlerss.proxy.spring.servletapp.MessageController; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class ServletAppTest { + + LambdaHandler handler = new LambdaHandler(); + MockLambdaContext lambdaContext = new MockLambdaContext(); + + @Test + public void helloRequest_respondsWithSingleMessage() { + AwsProxyRequest req = new AwsProxyRequestBuilder("/hello", "GET").build(); + AwsProxyResponse resp = handler.handleRequest(req, lambdaContext); + assertEquals(MessageController.HELLO_MESSAGE, resp.getBody()); + } +} diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/servlerss/proxy/spring/WebFluxAppTest.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/servlerss/proxy/spring/WebFluxAppTest.java new file mode 100644 index 000000000..ffdb98e41 --- /dev/null +++ b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/servlerss/proxy/spring/WebFluxAppTest.java @@ -0,0 +1,32 @@ +package com.amazonaws.servlerss.proxy.spring; + +import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; +import com.amazonaws.serverless.proxy.internal.testutils.MockLambdaContext; +import com.amazonaws.serverless.proxy.model.AwsProxyRequest; +import com.amazonaws.serverless.proxy.model.AwsProxyResponse; +import com.amazonaws.servlerss.proxy.spring.webfluxapp.LambdaHandler; +import com.amazonaws.servlerss.proxy.spring.webfluxapp.MessageController; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class WebFluxAppTest { + + LambdaHandler handler = new LambdaHandler(); + MockLambdaContext lambdaContext = new MockLambdaContext(); + + @Test + public void helloRequest_respondsWithSingleMessage() { + AwsProxyRequest req = new AwsProxyRequestBuilder("/single", "GET").build(); + AwsProxyResponse resp = handler.handleRequest(req, lambdaContext); + assertEquals(MessageController.MESSAGE, resp.getBody()); + } + + @Test + public void helloDoubleRequest_respondsWithDoubleMessage() { + AwsProxyRequest req = new AwsProxyRequestBuilder("/double", "GET").build(); + AwsProxyResponse resp = handler.handleRequest(req, lambdaContext); + + assertEquals(MessageController.MESSAGE + MessageController.MESSAGE, resp.getBody()); + } +} diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/servlerss/proxy/spring/servletapp/LambdaHandler.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/servlerss/proxy/spring/servletapp/LambdaHandler.java new file mode 100644 index 000000000..c6b4e0b76 --- /dev/null +++ b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/servlerss/proxy/spring/servletapp/LambdaHandler.java @@ -0,0 +1,25 @@ +package com.amazonaws.servlerss.proxy.spring.servletapp; + +import com.amazonaws.serverless.exceptions.ContainerInitializationException; +import com.amazonaws.serverless.proxy.model.AwsProxyRequest; +import com.amazonaws.serverless.proxy.model.AwsProxyResponse; +import com.amazonaws.serverless.proxy.spring.SpringBootLambdaContainerHandler; +import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.RequestHandler; + +public class LambdaHandler implements RequestHandler { + private static SpringBootLambdaContainerHandler handler; + + static { + try { + handler = SpringBootLambdaContainerHandler.getAwsProxyHandler(ServletApplication.class); + } catch (ContainerInitializationException e) { + e.printStackTrace(); + } + } + + @Override + public AwsProxyResponse handleRequest(AwsProxyRequest awsProxyRequest, Context context) { + return handler.proxy(awsProxyRequest, context); + } +} diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/servlerss/proxy/spring/servletapp/MessageController.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/servlerss/proxy/spring/servletapp/MessageController.java new file mode 100644 index 000000000..48731347b --- /dev/null +++ b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/servlerss/proxy/spring/servletapp/MessageController.java @@ -0,0 +1,15 @@ +package com.amazonaws.servlerss.proxy.spring.servletapp; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class MessageController { + public static final String HELLO_MESSAGE = "Hello"; + + @RequestMapping(path="/hello", method= RequestMethod.GET) + public String hello() { + return HELLO_MESSAGE; + } +} diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/servlerss/proxy/spring/servletapp/ServletApplication.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/servlerss/proxy/spring/servletapp/ServletApplication.java new file mode 100644 index 000000000..c7050f1b3 --- /dev/null +++ b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/servlerss/proxy/spring/servletapp/ServletApplication.java @@ -0,0 +1,8 @@ +package com.amazonaws.servlerss.proxy.spring.servletapp; + +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; + +@SpringBootApplication +public class ServletApplication extends SpringBootServletInitializer { +} diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/servlerss/proxy/spring/webfluxapp/LambdaHandler.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/servlerss/proxy/spring/webfluxapp/LambdaHandler.java new file mode 100644 index 000000000..60dcbd4a3 --- /dev/null +++ b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/servlerss/proxy/spring/webfluxapp/LambdaHandler.java @@ -0,0 +1,25 @@ +package com.amazonaws.servlerss.proxy.spring.webfluxapp; + +import com.amazonaws.serverless.exceptions.ContainerInitializationException; +import com.amazonaws.serverless.proxy.model.AwsProxyRequest; +import com.amazonaws.serverless.proxy.model.AwsProxyResponse; +import com.amazonaws.serverless.proxy.spring.SpringBootLambdaContainerHandler; +import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.RequestHandler; + +public class LambdaHandler implements RequestHandler { + private static SpringBootLambdaContainerHandler handler; + + static { + try { + handler = SpringBootLambdaContainerHandler.getAwsProxyHandler(WebFluxTestApplication.class); + } catch (ContainerInitializationException e) { + e.printStackTrace(); + } + } + + @Override + public AwsProxyResponse handleRequest(AwsProxyRequest awsProxyRequest, Context context) { + return handler.proxy(awsProxyRequest, context); + } +} diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/servlerss/proxy/spring/webfluxapp/MessageController.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/servlerss/proxy/spring/webfluxapp/MessageController.java new file mode 100644 index 000000000..a507ff978 --- /dev/null +++ b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/servlerss/proxy/spring/webfluxapp/MessageController.java @@ -0,0 +1,26 @@ +package com.amazonaws.servlerss.proxy.spring.webfluxapp; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; +import reactor.core.publisher.Flux; + +@RestController +public class MessageController { + public static final String MESSAGE = "Hello"; + + @RequestMapping(path="/single", method= RequestMethod.GET) + Flux singleMessage(){ + return Flux.just( + MESSAGE + ); + } + + @RequestMapping(path="/double", method= RequestMethod.GET) + Flux doubleMessage(){ + return Flux.just( + MESSAGE, + MESSAGE + ); + } +} \ No newline at end of file diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/servlerss/proxy/spring/webfluxapp/WebFluxTestApplication.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/servlerss/proxy/spring/webfluxapp/WebFluxTestApplication.java new file mode 100644 index 000000000..ec06ac4d8 --- /dev/null +++ b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/servlerss/proxy/spring/webfluxapp/WebFluxTestApplication.java @@ -0,0 +1,8 @@ +package com.amazonaws.servlerss.proxy.spring.webfluxapp; + +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.web.reactive.config.EnableWebFlux; + +@SpringBootApplication +public class WebFluxTestApplication { +} diff --git a/pom.xml b/pom.xml index 807aecd9b..00617337b 100644 --- a/pom.xml +++ b/pom.xml @@ -26,6 +26,7 @@ aws-serverless-spring-archetype aws-serverless-springboot-archetype aws-serverless-springboot2-archetype + aws-serverless-java-container-springboot2 From db4664cad08322c26fb5ff5f321a7ec04691344c Mon Sep 17 00:00:00 2001 From: sapessi Date: Wed, 11 Sep 2019 13:02:49 -0700 Subject: [PATCH 037/888] Fixed springboot2 archetype to use the new module --- .../resources/archetype-resources/pom.xml | 10 +++++-- .../src/main/java/Application.java | 30 +------------------ 2 files changed, 9 insertions(+), 31 deletions(-) diff --git a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml index fcdf963fd..3dfaa1235 100644 --- a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ org.springframework.boot spring-boot-starter-parent - 2.1.1.RELEASE + 2.1.8.RELEASE @@ -27,13 +27,19 @@ com.amazonaws.serverless - aws-serverless-java-container-spring + aws-serverless-java-container-springboot2 ${project.version} org.springframework.boot spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-tomcat + + diff --git a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/src/main/java/Application.java b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/src/main/java/Application.java index 7351392ff..1b74086f7 100644 --- a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/src/main/java/Application.java +++ b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/src/main/java/Application.java @@ -5,21 +5,9 @@ #set($logging = $logging.replaceAll("\n", "").trim()) package ${groupId}; -import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; -import org.springframework.context.annotation.Bean; 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; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import ${groupId}.controller.PingController; @@ -28,23 +16,7 @@ // We use direct @Import instead of @ComponentScan to speed up cold starts // @ComponentScan(basePackages = "${groupId}.controller") @Import({ PingController.class }) -public class Application extends SpringBootServletInitializer { - - /* - * 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(); - } +public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); From 248fad3f84bbf5f8ba3538757bda53b02076e183 Mon Sep 17 00:00:00 2001 From: sapessi Date: Wed, 11 Sep 2019 13:56:04 -0700 Subject: [PATCH 038/888] Unit test for Servlet embedded factory --- ...rlessServletEmbeddedServerFactoryTest.java | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/servlerss/proxy/spring/embedded/ServerlessServletEmbeddedServerFactoryTest.java diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/servlerss/proxy/spring/embedded/ServerlessServletEmbeddedServerFactoryTest.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/servlerss/proxy/spring/embedded/ServerlessServletEmbeddedServerFactoryTest.java new file mode 100644 index 000000000..60412ec1e --- /dev/null +++ b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/servlerss/proxy/spring/embedded/ServerlessServletEmbeddedServerFactoryTest.java @@ -0,0 +1,46 @@ +package com.amazonaws.servlerss.proxy.spring.embedded; + +import com.amazonaws.serverless.exceptions.ContainerInitializationException; +import com.amazonaws.serverless.proxy.AwsProxyExceptionHandler; +import com.amazonaws.serverless.proxy.AwsProxySecurityContextWriter; +import com.amazonaws.serverless.proxy.internal.servlet.AwsProxyHttpServletRequestReader; +import com.amazonaws.serverless.proxy.internal.servlet.AwsProxyHttpServletResponseWriter; +import com.amazonaws.serverless.proxy.model.AwsProxyRequest; +import com.amazonaws.serverless.proxy.model.AwsProxyResponse; +import com.amazonaws.serverless.proxy.spring.SpringBootLambdaContainerHandler; +import com.amazonaws.serverless.proxy.spring.embedded.ServerlessServletEmbeddedServerFactory; +import org.junit.Test; +import org.springframework.boot.web.servlet.ServletContextInitializer; + +import javax.servlet.ServletContext; +import javax.servlet.ServletException; + +import static org.junit.Assert.fail; + +public class ServerlessServletEmbeddedServerFactoryTest { + private SpringBootLambdaContainerHandler handler = new SpringBootLambdaContainerHandler( + AwsProxyRequest.class, + AwsProxyResponse.class, + new AwsProxyHttpServletRequestReader(), + new AwsProxyHttpServletResponseWriter(), + new AwsProxySecurityContextWriter(), + new AwsProxyExceptionHandler(), + null + ); + + public ServerlessServletEmbeddedServerFactoryTest() throws ContainerInitializationException { + } + + @Test + public void getWebServer_callsInitializers() { + ServerlessServletEmbeddedServerFactory factory = new ServerlessServletEmbeddedServerFactory(); + factory.getWebServer(new ServletContextInitializer() { + @Override + public void onStartup(ServletContext servletContext) throws ServletException { + if (servletContext == null) { + fail("Null servlet context"); + } + } + }); + } +} From 0ddf275b7550b7e8c1f8b0d60555877b476b8130 Mon Sep 17 00:00:00 2001 From: sapessi Date: Wed, 11 Sep 2019 19:38:13 -0700 Subject: [PATCH 039/888] Correct order of submodules in pom to fix build --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 00617337b..203dd981b 100644 --- a/pom.xml +++ b/pom.xml @@ -20,13 +20,13 @@ aws-serverless-java-container-spark aws-serverless-java-container-spring aws-serverless-java-container-struts2 + aws-serverless-java-container-springboot2 aws-serverless-struts2-archetype aws-serverless-jersey-archetype aws-serverless-spark-archetype aws-serverless-spring-archetype aws-serverless-springboot-archetype aws-serverless-springboot2-archetype - aws-serverless-java-container-springboot2 From d026ca23e0e9de2e8ab71685aa0b4e7b39c13774 Mon Sep 17 00:00:00 2001 From: sapessi Date: Wed, 11 Sep 2019 19:39:32 -0700 Subject: [PATCH 040/888] Cleaned up exception dumps in unit tests --- .../internal/servlet/AwsAsyncContext.java | 3 ++- .../testutils/AwsProxyRequestBuilder.java | 1 - .../internal/servlet/AwsAsyncContextTest.java | 1 - .../servlet/AwsFilterChainManagerTest.java | 4 ++-- .../AwsProxyHttpServletRequestReaderTest.java | 4 +--- .../AwsProxyHttpServletRequestTest.java | 18 +++++++++--------- .../servlet/AwsServletContextTest.java | 4 ++-- .../model/CognitoAuthorizerClaimsTest.java | 1 - .../proxy/jersey/JerseyAwsProxyTest.java | 4 ++-- .../proxy/jersey/JerseyParamEncodingTest.java | 4 ++-- .../proxy/spring/SpringAwsProxyTest.java | 4 ++-- .../proxy/spring/SpringBootAppTest.java | 2 +- .../proxy/spring/SpringBootSecurityTest.java | 2 +- .../proxy/struts2/Struts2AwsProxyTest.java | 4 ++-- 14 files changed, 26 insertions(+), 30 deletions(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContext.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContext.java index ae6d18694..daab77e39 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContext.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContext.java @@ -84,7 +84,8 @@ public void complete() { notifyListeners(NotificationType.COMPLETE, null); res.flushBuffer(); } catch (IOException e) { - e.printStackTrace(); + log.error("Could not flush response buffer", e); + throw new RuntimeException(e); } } diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/testutils/AwsProxyRequestBuilder.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/testutils/AwsProxyRequestBuilder.java index 47c3b97c0..d861227bc 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/testutils/AwsProxyRequestBuilder.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/testutils/AwsProxyRequestBuilder.java @@ -209,7 +209,6 @@ public AwsProxyRequestBuilder queryString(String key, String value) { ); //} } catch (UnsupportedEncodingException e) { - e.printStackTrace(); throw new RuntimeException(e); } diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContextTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContextTest.java index d5c86f1c4..349a95497 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContextTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContextTest.java @@ -110,7 +110,6 @@ protected void doFilter(HttpServletRequest request, HttpServletResponse response this.response.setStatus(desiredStatus); this.response.flushBuffer(); } catch (Exception e) { - e.printStackTrace(); throw new ServletException(e); } } diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsFilterChainManagerTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsFilterChainManagerTest.java index dd344d3b0..8bc753540 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsFilterChainManagerTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsFilterChainManagerTest.java @@ -193,11 +193,11 @@ public void filerChain_executeMultipleFilters_expectRunEachTime() { try { fcHolder2.doFilter(req2, resp2); } catch (IOException e) { - fail("IO Exception while executing filters"); e.printStackTrace(); + fail("IO Exception while executing filters"); } catch (ServletException e) { - fail("Servlet exception while executing filters"); e.printStackTrace(); + fail("Servlet exception while executing filters"); } assertTrue(req2.getAttribute(REQUEST_CUSTOM_ATTRIBUTE_NAME) != null); diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestReaderTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestReaderTest.java index 72270b879..de246bc04 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestReaderTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestReaderTest.java @@ -117,8 +117,8 @@ public void readRequest_validEventEmptyPath_expectException() { AwsProxyHttpServletRequest servletReq = reader.readRequest(req, null, null, ContainerConfig.defaultConfig()); assertNotNull(servletReq); } catch (InvalidRequestEventException e) { - fail("Could not read a request with a null path"); e.printStackTrace(); + fail("Could not read a request with a null path"); } } @@ -130,7 +130,6 @@ public void readRequest_invalidEventEmptyMethod_expectException() { fail("Expected InvalidRequestEventException"); } catch (InvalidRequestEventException e) { assertEquals(AwsProxyHttpServletRequestReader.INVALID_REQUEST_ERROR, e.getMessage()); - e.printStackTrace(); } } @@ -143,7 +142,6 @@ public void readRequest_invalidEventEmptyContext_expectException() { fail("Expected InvalidRequestEventException"); } catch (InvalidRequestEventException e) { assertEquals(AwsProxyHttpServletRequestReader.INVALID_REQUEST_ERROR, e.getMessage()); - e.printStackTrace(); } } diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestTest.java index 62c785451..c73e64ab9 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestTest.java @@ -274,11 +274,12 @@ public void charEncoding_getEncoding_expectNoEncodingWithoutContentType() { try { request.setCharacterEncoding(StandardCharsets.UTF_8.name()); // we have not specified a content type so the encoding will not be set - assertEquals(null, request.getCharacterEncoding()); - assertEquals(null, request.getContentType()); + assertNull(request.getCharacterEncoding()); + assertNull(request.getContentType()); } catch (UnsupportedEncodingException e) { - fail("Unsupported encoding"); e.printStackTrace(); + fail("Unsupported encoding"); + } } @@ -286,7 +287,7 @@ public void charEncoding_getEncoding_expectNoEncodingWithoutContentType() { public void charEncoding_getEncoding_expectContentTypeOnly() { HttpServletRequest request = getRequest(getRequestWithHeaders(), null, null); // we have not specified a content type so the encoding will not be set - assertEquals(null, request.getCharacterEncoding()); + assertNull(request.getCharacterEncoding()); assertEquals(MediaType.APPLICATION_JSON, request.getContentType()); try { request.setCharacterEncoding(StandardCharsets.UTF_8.name()); @@ -295,8 +296,8 @@ public void charEncoding_getEncoding_expectContentTypeOnly() { assertEquals(newHeaderValue, request.getContentType()); assertEquals(StandardCharsets.UTF_8.name(), request.getCharacterEncoding()); } catch (UnsupportedEncodingException e) { - fail("Unsupported encoding"); e.printStackTrace(); + fail("Unsupported encoding"); } } @@ -321,8 +322,8 @@ public void charEncoding_addCharEncodingTwice_expectSingleMediaTypeAndEncoding() assertEquals(newHeaderValue, request.getContentType()); assertEquals(StandardCharsets.ISO_8859_1.name(), request.getCharacterEncoding()); } catch (UnsupportedEncodingException e) { - fail("Unsupported encoding"); e.printStackTrace(); + fail("Unsupported encoding"); } } @@ -335,10 +336,9 @@ public void contentType_lowerCaseHeaderKey_expectUpdatedMediaType() { assertEquals(newHeaderValue, request.getHeader(HttpHeaders.CONTENT_TYPE)); assertEquals(newHeaderValue, request.getContentType()); assertEquals(StandardCharsets.UTF_8.name(), request.getCharacterEncoding()); - } catch (UnsupportedEncodingException e) { - fail("Unsupported encoding"); e.printStackTrace(); + fail("Unsupported encoding"); } } @@ -352,8 +352,8 @@ public void contentType_duplicateCase_expectSingleContentTypeHeader() { assertNotNull(request.getHeader(HttpHeaders.CONTENT_TYPE)); assertNotNull(request.getHeader(HttpHeaders.CONTENT_TYPE.toLowerCase(Locale.getDefault()))); } catch (UnsupportedEncodingException e) { - fail("Unsupported encoding"); e.printStackTrace(); + fail("Unsupported encoding"); } } diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContextTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContextTest.java index ccb62bad9..07628f187 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContextTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContextTest.java @@ -34,8 +34,8 @@ public static void setUp() { try { LambdaContainerHandler.getContainerConfig().addValidFilePath(tmpFile.getCanonicalPath()); } catch (IOException e) { - fail("Could not add tmp dir to valid paths"); e.printStackTrace(); + fail("Could not add tmp dir to valid paths"); } LambdaContainerHandler.getContainerConfig().addValidFilePath("C:\\MyTestFolder"); } @@ -48,8 +48,8 @@ public void getMimeType_disabledPath_expectException() { } catch (IllegalArgumentException e) { assertTrue(e.getMessage().startsWith("File path not allowed")); } catch (Exception e) { - fail("Unrecognized exception"); e.printStackTrace(); + fail("Unrecognized exception"); } } diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/model/CognitoAuthorizerClaimsTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/model/CognitoAuthorizerClaimsTest.java index de8b36547..55b5d936f 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/model/CognitoAuthorizerClaimsTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/model/CognitoAuthorizerClaimsTest.java @@ -85,7 +85,6 @@ public void claims_serialize_validJsonString() { assertEquals(EMAIL, req.getRequestContext().getAuthorizer().getClaims().getEmail()); assertTrue(req.getRequestContext().getAuthorizer().getClaims().isEmailVerified()); } catch (IOException e) { - e.printStackTrace(); fail(); } } diff --git a/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyAwsProxyTest.java b/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyAwsProxyTest.java index baecb13aa..be89c3a06 100644 --- a/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyAwsProxyTest.java +++ b/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyAwsProxyTest.java @@ -408,8 +408,8 @@ private void validateMapResponseModel(AwsProxyResponse output, String key, Strin assertNotNull(response.getValues().get(key)); assertEquals(value, response.getValues().get(key)); } catch (IOException e) { - fail("Exception while parsing response body: " + e.getMessage()); e.printStackTrace(); + fail("Exception while parsing response body: " + e.getMessage()); } } @@ -419,8 +419,8 @@ private void validateSingleValueModel(AwsProxyResponse output, String value) { assertNotNull(response.getValue()); assertEquals(value, response.getValue()); } catch (IOException e) { - fail("Exception while parsing response body: " + e.getMessage()); e.printStackTrace(); + fail("Exception while parsing response body: " + e.getMessage()); } } } diff --git a/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyParamEncodingTest.java b/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyParamEncodingTest.java index 0484e62d9..d3b951aea 100644 --- a/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyParamEncodingTest.java +++ b/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyParamEncodingTest.java @@ -239,8 +239,8 @@ private void validateSingleValueModel(AwsProxyResponse output, String value) { assertNotNull(response.getValue()); assertEquals(value, response.getValue()); } catch (IOException e) { - fail("Exception while parsing response body: " + e.getMessage()); e.printStackTrace(); + fail("Exception while parsing response body: " + e.getMessage()); } } @@ -250,8 +250,8 @@ private void validateMapResponseModel(AwsProxyResponse output, String key, Strin assertNotNull(response.getValues().get(key)); assertEquals(value, response.getValues().get(key)); } catch (IOException e) { - fail("Exception while parsing response body: " + e.getMessage()); e.printStackTrace(); + fail("Exception while parsing response body: " + e.getMessage()); } } } diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringAwsProxyTest.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringAwsProxyTest.java index 6ed37b776..b9cb728d6 100644 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringAwsProxyTest.java +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringAwsProxyTest.java @@ -398,8 +398,8 @@ private void validateMapResponseModel(AwsProxyResponse output) { assertNotNull(response.getValues().get(CUSTOM_HEADER_KEY)); assertEquals(CUSTOM_HEADER_VALUE, response.getValues().get(CUSTOM_HEADER_KEY)); } catch (IOException e) { - fail("Exception while parsing response body: " + e.getMessage()); e.printStackTrace(); + fail("Exception while parsing response body: " + e.getMessage()); } } @@ -409,8 +409,8 @@ private void validateSingleValueModel(AwsProxyResponse output, String value) { assertNotNull(response.getValue()); assertEquals(value, response.getValue()); } catch (IOException e) { - fail("Exception while parsing response body: " + e.getMessage()); e.printStackTrace(); + fail("Exception while parsing response body: " + e.getMessage()); } } } diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringBootAppTest.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringBootAppTest.java index 57d8fda4a..6fcedce61 100644 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringBootAppTest.java +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringBootAppTest.java @@ -94,8 +94,8 @@ private void validateSingleValueModel(AwsProxyResponse output, String value) { assertNotNull(response.getValue()); assertEquals(value, response.getValue()); } catch (IOException e) { - fail("Exception while parsing response body: " + e.getMessage()); e.printStackTrace(); + fail("Exception while parsing response body: " + e.getMessage()); } } } diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringBootSecurityTest.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringBootSecurityTest.java index 2fc6dd0d5..b8d504462 100644 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringBootSecurityTest.java +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringBootSecurityTest.java @@ -55,8 +55,8 @@ private void validateSingleValueModel(AwsProxyResponse output, String value) { assertNotNull(response.getValue()); assertEquals(value, response.getValue()); } catch (IOException e) { - fail("Exception while parsing response body: " + e.getMessage()); e.printStackTrace(); + fail("Exception while parsing response body: " + e.getMessage()); } } } diff --git a/aws-serverless-java-container-struts2/src/test/java/com/amazonaws/serverless/proxy/struts2/Struts2AwsProxyTest.java b/aws-serverless-java-container-struts2/src/test/java/com/amazonaws/serverless/proxy/struts2/Struts2AwsProxyTest.java index 1e6ad63ae..45e14ccdb 100644 --- a/aws-serverless-java-container-struts2/src/test/java/com/amazonaws/serverless/proxy/struts2/Struts2AwsProxyTest.java +++ b/aws-serverless-java-container-struts2/src/test/java/com/amazonaws/serverless/proxy/struts2/Struts2AwsProxyTest.java @@ -304,8 +304,8 @@ private void validateMapResponseModel(AwsProxyResponse output, String key, Strin assertNotNull(response.get(key)); assertEquals(value, response.get(key)); } catch (IOException e) { - fail("Exception while parsing response body: " + e.getMessage()); e.printStackTrace(); + fail("Exception while parsing response body: " + e.getMessage()); } } @@ -314,8 +314,8 @@ private void validateSingleValueModel(AwsProxyResponse output, String value) { assertNotNull(output.getBody()); assertEquals(value, objectMapper.readerFor(String.class).readValue(output.getBody())); } catch (Exception e) { - fail("Exception while parsing response body: " + e.getMessage()); e.printStackTrace(); + fail("Exception while parsing response body: " + e.getMessage()); } } } From 9f28d25e34d9663466080287217987809155dea3 Mon Sep 17 00:00:00 2001 From: sapessi Date: Wed, 11 Sep 2019 19:54:37 -0700 Subject: [PATCH 041/888] Updated springboot2 sample to use new package --- samples/springboot2/pet-store/build.gradle | 6 ++++-- samples/springboot2/pet-store/pom.xml | 10 ++++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/samples/springboot2/pet-store/build.gradle b/samples/springboot2/pet-store/build.gradle index 8ad81f122..7a9c8b9f2 100644 --- a/samples/springboot2/pet-store/build.gradle +++ b/samples/springboot2/pet-store/build.gradle @@ -11,8 +11,10 @@ repositories { dependencies { compile ( - 'org.springframework.boot:spring-boot-starter-web:2.1.1.RELEASE', - 'com.amazonaws.serverless:aws-serverless-java-container-spring:[1.0,)', + implementation('org.springframework.boot:spring-boot-starter-web:2.1.1.RELEASE') { + exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat' + }, + 'com.amazonaws.serverless:aws-serverless-java-container-springboot2:[1.0,)', 'io.symphonia:lambda-logging:1.0.1' ) testCompile("junit:junit") diff --git a/samples/springboot2/pet-store/pom.xml b/samples/springboot2/pet-store/pom.xml index b9d47fc1a..547a7ead1 100644 --- a/samples/springboot2/pet-store/pom.xml +++ b/samples/springboot2/pet-store/pom.xml @@ -10,7 +10,7 @@ org.springframework.boot spring-boot-starter-parent - 2.1.1.RELEASE + 2.1.8.RELEASE @@ -22,11 +22,17 @@ org.springframework.boot spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-tomcat + + com.amazonaws.serverless - aws-serverless-java-container-spring + aws-serverless-java-container-springboot2 [0.1,) From e5a9bba2d05721d5ea83c1698ada1625529181c1 Mon Sep 17 00:00:00 2001 From: sapessi Date: Thu, 12 Sep 2019 08:50:34 -0700 Subject: [PATCH 042/888] Fixed gradle build file for springboot2 archetype to use the new dependency --- .../src/main/resources/archetype-resources/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle index 7bd0e7fec..e48a0dc99 100644 --- a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle @@ -12,7 +12,7 @@ repositories { dependencies { compile ( 'org.springframework.boot:spring-boot-starter-web:2.1.1.RELEASE', - 'com.amazonaws.serverless:aws-serverless-java-container-spring:[1.0,)', + 'com.amazonaws.serverless:aws-serverless-java-container-springboot2:[1.0,)', 'io.symphonia:lambda-logging:1.0.1' ) From d1ad9c7e36a97f27fdc850ffe2f89ba43f9a8bae Mon Sep 17 00:00:00 2001 From: sapessi Date: Fri, 20 Sep 2019 12:56:11 -0700 Subject: [PATCH 043/888] Updated getParameterValues to support multi-value query string prameters and address #280 --- .../servlet/AwsProxyHttpServletRequest.java | 13 +++---------- .../internal/testutils/AwsProxyRequestBuilder.java | 9 +++++++++ .../serverless/proxy/spring/SpringBootAppTest.java | 10 ++++++++++ 3 files changed, 22 insertions(+), 10 deletions(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java index cf9729b5a..83e99c746 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java @@ -474,7 +474,7 @@ public String getParameter(String s) { } String[] bodyParams = getFormBodyParameterCaseInsensitive(s); - if (bodyParams == null || bodyParams.length == 0) { + if (bodyParams.length == 0) { return null; } else { return bodyParams[0]; @@ -495,16 +495,9 @@ public Enumeration getParameterNames() { @Override @SuppressFBWarnings("PZLA_PREFER_ZERO_LENGTH_ARRAYS") // suppressing this as according to the specs we should be returning null here if we can't find params public String[] getParameterValues(String s) { - List values = new ArrayList<>(); - String queryValue = getFirstQueryParamValue(s, config.isQueryStringCaseSensitive()); - if (queryValue != null) { - values.add(queryValue); - } + List values = new ArrayList<>(Arrays.asList(getQueryParamValues(s, config.isQueryStringCaseSensitive()))); - String[] formBodyValues = getFormBodyParameterCaseInsensitive(s); - if (formBodyValues != null) { - values.addAll(Arrays.asList(formBodyValues)); - } + values.addAll(Arrays.asList(getFormBodyParameterCaseInsensitive(s))); if (values.size() == 0) { return null; diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/testutils/AwsProxyRequestBuilder.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/testutils/AwsProxyRequestBuilder.java index d861227bc..3260d433c 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/testutils/AwsProxyRequestBuilder.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/testutils/AwsProxyRequestBuilder.java @@ -366,6 +366,15 @@ public AwsProxyRequestBuilder referer(String referer) { return this; } + + public AwsProxyRequestBuilder basicAuth(String username, String password) { + // we remove the existing authorization strategy + request.getMultiValueHeaders().remove(HttpHeaders.AUTHORIZATION); + String authHeader = "Basic " + Base64.getMimeEncoder().encodeToString((username + ":" + password).getBytes(Charset.defaultCharset())); + request.getMultiValueHeaders().add(HttpHeaders.AUTHORIZATION, authHeader); + return this; + } + public AwsProxyRequestBuilder fromJsonString(String jsonContent) throws IOException { request = LambdaContainerHandler.getObjectMapper().readValue(jsonContent, AwsProxyRequest.class); diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringBootAppTest.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringBootAppTest.java index 6fcedce61..286d69ccd 100644 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringBootAppTest.java +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringBootAppTest.java @@ -63,6 +63,16 @@ public void queryString_commaSeparatedList_expectUnmarshalAsList() { validateSingleValueModel(resp, "3"); } + @Test + public void queryString_multipleParamsWithSameName_expectUnmarshalAsList() { + AwsProxyRequest req = new AwsProxyRequestBuilder("/test/query-string", "GET") + .queryString("list", "v1").queryString("list", "v2").build(); + AwsProxyResponse resp = handler.handleRequest(req, context); + assertNotNull(resp); + assertEquals(200, resp.getStatusCode()); + validateSingleValueModel(resp, "2"); + } + @Test public void staticContent_getHtmlFile_returnsHtmlContent() { LambdaContainerHandler.getContainerConfig().addValidFilePath("/Users/bulianis/workspace/aws-serverless-java-container/aws-serverless-java-container-spring"); From 301f718287a9155f9fd3b48865838a45d83c58e2 Mon Sep 17 00:00:00 2001 From: sapessi Date: Wed, 25 Sep 2019 21:51:15 -0700 Subject: [PATCH 044/888] Added new InitializationWrapper and Async implementation to address #210 and #234. Also added a new builder object that makes it easier to construct container handlers --- .../proxy/AsyncInitializationWrapper.java | 103 ++++++++++++ .../proxy/InitializationWrapper.java | 34 ++++ .../internal/LambdaContainerHandler.java | 46 +++++- .../ServletLambdaContainerHandlerBuilder.java | 148 ++++++++++++++++++ .../proxy/model/ContainerConfig.java | 26 +++ ...vletLambdaContainerHandlerBuilderTest.java | 106 +++++++++++++ .../SpringBootLambdaContainerHandler.java | 48 ++---- .../spring/SpringBootProxyHandlerBuilder.java | 63 ++++++++ .../spring/SpringLambdaContainerHandler.java | 57 ++----- .../spring/SpringProxyHandlerBuilder.java | 80 ++++++++++ .../SpringBootLambdaContainerHandler.java | 56 ++----- .../spring/SpringBootProxyHandlerBuilder.java | 62 ++++++++ .../proxy/spring/ServletAppTest.java | 0 .../proxy/spring/WebFluxAppTest.java | 0 ...rlessServletEmbeddedServerFactoryTest.java | 4 +- .../spring/servletapp/LambdaHandler.java | 0 .../spring/servletapp/MessageController.java | 0 .../spring/servletapp/ServletApplication.java | 13 ++ .../spring/webfluxapp/LambdaHandler.java | 0 .../spring/webfluxapp/MessageController.java | 0 .../webfluxapp/WebFluxTestApplication.java | 12 ++ .../spring/servletapp/ServletApplication.java | 8 - .../webfluxapp/WebFluxTestApplication.java | 8 - 23 files changed, 730 insertions(+), 144 deletions(-) create mode 100644 aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/AsyncInitializationWrapper.java create mode 100644 aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/InitializationWrapper.java create mode 100644 aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/ServletLambdaContainerHandlerBuilder.java create mode 100644 aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/ServletLambdaContainerHandlerBuilderTest.java create mode 100644 aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootProxyHandlerBuilder.java create mode 100644 aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringProxyHandlerBuilder.java create mode 100644 aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootProxyHandlerBuilder.java rename aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/{servlerss => serverless}/proxy/spring/ServletAppTest.java (100%) rename aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/{servlerss => serverless}/proxy/spring/WebFluxAppTest.java (100%) rename aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/{servlerss => serverless}/proxy/spring/embedded/ServerlessServletEmbeddedServerFactoryTest.java (94%) rename aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/{servlerss => serverless}/proxy/spring/servletapp/LambdaHandler.java (100%) rename aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/{servlerss => serverless}/proxy/spring/servletapp/MessageController.java (100%) create mode 100644 aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/ServletApplication.java rename aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/{servlerss => serverless}/proxy/spring/webfluxapp/LambdaHandler.java (100%) rename aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/{servlerss => serverless}/proxy/spring/webfluxapp/MessageController.java (100%) create mode 100644 aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/webfluxapp/WebFluxTestApplication.java delete mode 100644 aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/servlerss/proxy/spring/servletapp/ServletApplication.java delete mode 100644 aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/servlerss/proxy/spring/webfluxapp/WebFluxTestApplication.java diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/AsyncInitializationWrapper.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/AsyncInitializationWrapper.java new file mode 100644 index 000000000..7ef74fc8b --- /dev/null +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/AsyncInitializationWrapper.java @@ -0,0 +1,103 @@ +package com.amazonaws.serverless.proxy; + +import com.amazonaws.serverless.exceptions.ContainerInitializationException; +import com.amazonaws.serverless.proxy.internal.LambdaContainerHandler; +import com.amazonaws.services.lambda.runtime.Context; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.time.Instant; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; + +/** + * An async implementation of the InitializationWrapper interface. This initializer calls the + * {@link LambdaContainerHandler#initialize()} in a separate thread. Then uses a latch to wait for the maximum Lambda + * initialization time of 10 seconds, if the initialize method takes longer than 10 seconds to return, the + * {@link #start(LambdaContainerHandler)} returns control to the caller and lets the initialization thread continue in + * the background. The {@link LambdaContainerHandler#proxy(Object, Context)} automatically waits for the latch of the + * initializer to be released. + * + * The constructor of this class expects an epoch long. This is meant to be as close as possible to the time the Lambda + * function actually started. In most cases, the first action in the constructor of the handler class should be to populate + * this long value ({@code Instant.now().toEpochMs();}). This class uses the value to estimate how much of the init 10 + * seconds has already been used up. + */ +public class AsyncInitializationWrapper extends InitializationWrapper { + private static final int INIT_GRACE_TIME_MS = 250; + private static final int LAMBDA_MAX_INIT_TIME_MS = 10_000; + + private CountDownLatch initializationLatch; + private long actualStartTime; + private Logger log = LoggerFactory.getLogger(AsyncInitializationWrapper.class); + + /** + * Creates a new instance of the async initializer. + * @param startTime The epoch ms start time of the Lambda function, this should be measured as close as possible to + * the initialization of the function. + */ + public AsyncInitializationWrapper(long startTime) { + actualStartTime = startTime; + } + + @Override + public void start(LambdaContainerHandler handler) throws ContainerInitializationException { + initializationLatch = new CountDownLatch(1); + AsyncInitializer initializer = new AsyncInitializer(initializationLatch, handler); + Thread initThread = new Thread(initializer); + initThread.start(); + try { + long curTime = Instant.now().toEpochMilli(); + // account for the time it took to call the various constructors with the actual start time + a grace of 500ms + long awaitTime = LAMBDA_MAX_INIT_TIME_MS - (curTime - actualStartTime) - INIT_GRACE_TIME_MS; + log.info("Async initialization will wait for " + awaitTime + "ms"); + if (!initializationLatch.await(awaitTime, TimeUnit.MILLISECONDS)) { + log.info("Initialization took longer than " + LAMBDA_MAX_INIT_TIME_MS + ", setting new CountDownLatch and " + + "continuing in event handler"); + initializationLatch = new CountDownLatch(1); + initializer.replaceLatch(initializationLatch); + } + } catch (InterruptedException e) { + // at the moment we assume that this happened because of a timeout since the init thread calls System.exit + // when an exception is thrown. + throw new ContainerInitializationException("Container initialization interrupted", e); + } + } + + @Override + public CountDownLatch getInitializationLatch() { + return initializationLatch; + } + + private static class AsyncInitializer implements Runnable { + private LambdaContainerHandler handler; + private CountDownLatch initLatch; + private Logger log = LoggerFactory.getLogger(AsyncInitializationWrapper.class); + + AsyncInitializer(CountDownLatch latch, LambdaContainerHandler h) { + initLatch = latch; + handler = h; + } + + synchronized void replaceLatch(CountDownLatch newLatch) { + initLatch = newLatch; + } + + @Override + @SuppressFBWarnings("DM_EXIT") + public void run() { + log.info("Starting async initializer"); + try { + handler.initialize(); + } catch (ContainerInitializationException e) { + log.error("Failed to initialize container handler", e); + // we cannot return the exception so we crash the whole kaboodle here + System.exit(1); + } + synchronized(this) { + initLatch.countDown(); + } + } + } +} diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/InitializationWrapper.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/InitializationWrapper.java new file mode 100644 index 000000000..188a83bd3 --- /dev/null +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/InitializationWrapper.java @@ -0,0 +1,34 @@ +package com.amazonaws.serverless.proxy; + +import com.amazonaws.serverless.exceptions.ContainerInitializationException; +import com.amazonaws.serverless.proxy.internal.LambdaContainerHandler; + +import java.util.concurrent.CountDownLatch; + +/** + * This class is in charge of initializing a {@link LambdaContainerHandler}. + * In most cases, this means calling the {@link LambdaContainerHandler#initialize()} method. Some implementations may + * require additional initialization steps, in this case implementations should provide their own + * InitializationWrapper. This library includes an async implementation of this class + * {@link AsyncInitializationWrapper} for frameworks that are likely to take longer than 10 seconds to start. + */ +public class InitializationWrapper { + /** + * This is the main entry point. Container handler builder and the static getAwsProxyHandler() methods + * of the various implementations will call this to initialize the underlying framework + * @param handler The container handler to be initializer + * @throws ContainerInitializationException If anything goes wrong during container initialization. + */ + public void start(LambdaContainerHandler handler) throws ContainerInitializationException { + handler.initialize(); + } + + /** + * Asynchronous implementations of the framework should return a latch that the container handler can use to decide + * whether it can start handling events. Synchronous implementations of this interface should return null. + * @return An initialized latch if the underlying container is starting in a separate thread, null otherwise. + */ + public CountDownLatch getInitializationLatch() { + return null; + } +} diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/LambdaContainerHandler.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/LambdaContainerHandler.java index 0e61495a0..1e9bfaa80 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/LambdaContainerHandler.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/LambdaContainerHandler.java @@ -14,13 +14,9 @@ import com.amazonaws.serverless.exceptions.ContainerInitializationException; -import com.amazonaws.serverless.proxy.LogFormatter; +import com.amazonaws.serverless.proxy.*; import com.amazonaws.serverless.proxy.internal.servlet.ApacheCombinedServletLogFormatter; import com.amazonaws.serverless.proxy.model.ContainerConfig; -import com.amazonaws.serverless.proxy.ExceptionHandler; -import com.amazonaws.serverless.proxy.RequestReader; -import com.amazonaws.serverless.proxy.ResponseWriter; -import com.amazonaws.serverless.proxy.SecurityContextWriter; import com.amazonaws.services.lambda.runtime.Context; import com.fasterxml.jackson.core.JsonParseException; @@ -38,6 +34,7 @@ import java.io.InputStream; import java.io.OutputStream; import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; /** @@ -67,6 +64,7 @@ public abstract class LambdaContainerHandler exceptionHandler; private Class requestTypeClass; private Class responseTypeClass; + private InitializationWrapper initializationWrapper; protected Context lambdaContext; private LogFormatter logFormatter; @@ -97,7 +95,8 @@ protected LambdaContainerHandler(Class requestClass, RequestReader requestReader, ResponseWriter responseWriter, SecurityContextWriter securityContextWriter, - ExceptionHandler exceptionHandler) { + ExceptionHandler exceptionHandler, + InitializationWrapper init) { log.info("Starting Lambda Container Handler"); requestTypeClass = requestClass; responseTypeClass = responseClass; @@ -105,8 +104,19 @@ protected LambdaContainerHandler(Class requestClass, this.responseWriter = responseWriter; this.securityContextWriter = securityContextWriter; this.exceptionHandler = exceptionHandler; + initializationWrapper = init; objectReader = getObjectMapper().readerFor(requestTypeClass); objectWriter = getObjectMapper().writerFor(responseTypeClass); + + } + + protected LambdaContainerHandler(Class requestClass, + Class responseClass, + RequestReader requestReader, + ResponseWriter responseWriter, + SecurityContextWriter securityContextWriter, + ExceptionHandler exceptionHandler) { + this(requestClass, responseClass, requestReader, responseWriter, securityContextWriter, exceptionHandler, new InitializationWrapper()); } @@ -131,6 +141,23 @@ public static ObjectMapper getObjectMapper() { return objectMapper; } + /** + * Returns the initialization wrapper this container handler will monitor to handle events + * @return The initialization wrapper that was passed to the constructor and this instance will use to decide + * whether it can start handling events. + */ + public InitializationWrapper getInitializationWrapper() { + return initializationWrapper; + } + + /** + * Sets a new initialization wrapper. + * @param wrapper The wrapper this instance will use to decide whether it can start handling events. + */ + public void setInitializationWrapper(InitializationWrapper wrapper) { + initializationWrapper = wrapper; + } + /** * Configures the library to strip a base path from incoming requests before passing them on to the wrapped * framework. This was added in response to issue #34 (https://github.com/awslabs/aws-serverless-java-container/issues/34). @@ -174,6 +201,13 @@ public ResponseType proxy(RequestType request, Context 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(); diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/ServletLambdaContainerHandlerBuilder.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/ServletLambdaContainerHandlerBuilder.java new file mode 100644 index 000000000..50743e73f --- /dev/null +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/ServletLambdaContainerHandlerBuilder.java @@ -0,0 +1,148 @@ +package com.amazonaws.serverless.proxy.internal.servlet; + +import com.amazonaws.serverless.exceptions.ContainerInitializationException; +import com.amazonaws.serverless.proxy.*; +import com.amazonaws.serverless.proxy.model.AwsProxyRequest; +import com.amazonaws.serverless.proxy.model.AwsProxyResponse; + +import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; +import java.util.List; + +/** + * Base builder class for {@link AwsLambdaServletContainerHandler}. Implmentations can extend this class to have setters + * for the basic parameters. + * @param The event object class + * @param The output object class + * @param The container request type. For proxy implementations, this is {@link AwsProxyHttpServletRequest}. + * The response type is hardcoded to {@link AwsHttpServletResponse} since it is a generic + * servlet response implementation. + * @param The type of the handler we are building + * @param The builder object itself. This is used to allow implementations to re-use the setter method from this + * abstract class through + * "curiously recurring generic patterns" + */ +public abstract class ServletLambdaContainerHandlerBuilder< + RequestType, + ResponseType, + ContainerRequestType extends HttpServletRequest, + HandlerType extends AwsLambdaServletContainerHandler, + Builder extends ServletLambdaContainerHandlerBuilder> +{ + private static final String MISSING_FIELD_ERROR = "Missing %s in lambda container handler builder"; + + protected InitializationWrapper initializationWrapper; + protected RequestReader requestReader; + protected ResponseWriter responseWriter; + protected SecurityContextWriter securityContextWriter; + protected ExceptionHandler exceptionHandler; + protected Class requestTypeClass; + protected Class responseTypeClass; + + /** + * Validates that all of the required fields are populated. + * @throws ContainerInitializationException If values have not been set on the builder. The message in the exception + * contains a standard error message {@link ServletLambdaContainerHandlerBuilder#MISSING_FIELD_ERROR} populated with + * the list of missing fields. + */ + protected void validate() throws ContainerInitializationException { + List errFields = new ArrayList<>(); + if (requestTypeClass == null) { + errFields.add("request type class"); + } + if (responseTypeClass == null) { + errFields.add("response type class"); + } + if (requestReader == null) { + errFields.add("request reader"); + } + if (responseWriter == null) { + errFields.add("response writer"); + } + if (securityContextWriter == null) { + errFields.add("security context writer"); + } + if (exceptionHandler == null) { + errFields.add("exception handler"); + } + if (initializationWrapper == null) { + errFields.add("initialization wrapper"); + } + if (!errFields.isEmpty()) { + throw new ContainerInitializationException(String.format(MISSING_FIELD_ERROR, String.join(", ", errFields)), null); + } + } + + /** + * Sets all of the required fields in the builder to the default settings for a Servlet-compatible framework that wants + * to support AWS proxy event and output types. + * @return A populated builder + */ + public Builder defaultProxy() { + initializationWrapper(new InitializationWrapper()) + .requestReader((RequestReader) new AwsProxyHttpServletRequestReader()) + .responseWriter((ResponseWriter) new AwsProxyHttpServletResponseWriter()) + .securityContextWriter((SecurityContextWriter) new AwsProxySecurityContextWriter()) + .exceptionHandler((ExceptionHandler) new AwsProxyExceptionHandler()) + .requestTypeClass((Class) AwsProxyRequest.class) + .responseTypeClass((Class) AwsProxyResponse.class); + return self(); + } + + /** + * Sets the initialization wrapper to be used by the {@link ServletLambdaContainerHandlerBuilder#buildAndInitialize()} + * method to start the framework implementations + * @param initializationWrapper An implementation of InitializationWrapper. In most cases, this will be + * set to {@link InitializationWrapper}. The {@link ServletLambdaContainerHandlerBuilder#asyncInit(long)} + * method sets this to {@link AsyncInitializationWrapper}. + * @return This builder object + */ + public Builder initializationWrapper(InitializationWrapper initializationWrapper) { + this.initializationWrapper = initializationWrapper; + return self(); + } + + public Builder requestReader(RequestReader requestReader) { + this.requestReader = requestReader; + return self(); + } + + public Builder responseWriter(ResponseWriter responseWriter) { + this.responseWriter = responseWriter; + return self(); + } + + public Builder securityContextWriter(SecurityContextWriter securityContextWriter) { + this.securityContextWriter = securityContextWriter; + return self(); + } + + public Builder exceptionHandler(ExceptionHandler exceptionHandler) { + this.exceptionHandler = exceptionHandler; + return self(); + } + + public Builder requestTypeClass(Class requestType) { + this.requestTypeClass = requestType; + return self(); + } + + public Builder responseTypeClass(Class responseType) { + this.responseTypeClass = responseType; + return self(); + } + + public Builder asyncInit(long actualStartTime) { + this.initializationWrapper = new AsyncInitializationWrapper(actualStartTime); + return self(); + } + + /** + * Implementations should implement this method to return their type. All of the builder methods in this abstract + * class use this method to return the correct builder type. + * @return The current builder. + */ + protected abstract Builder self(); + public abstract HandlerType build() throws ContainerInitializationException; + public abstract HandlerType buildAndInitialize() throws ContainerInitializationException; +} diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/ContainerConfig.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/ContainerConfig.java index 18175dd73..e5c80d635 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/ContainerConfig.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/ContainerConfig.java @@ -16,6 +16,7 @@ public class ContainerConfig { public static final String DEFAULT_URI_ENCODING = "UTF-8"; public static final String DEFAULT_CONTENT_CHARSET = "ISO-8859-1"; private static final List DEFAULT_FILE_PATHS = new ArrayList() {{ add("/tmp"); add("/var/task"); }}; + private static final int MAX_INIT_TIMEOUT_MS = 10_000; public static ContainerConfig defaultConfig() { ContainerConfig configuration = new ContainerConfig(); @@ -27,6 +28,7 @@ public static ContainerConfig defaultConfig() { configuration.setQueryStringCaseSensitive(false); configuration.addBinaryContentTypes("application/octet-stream", "image/jpeg", "image/png", "image/gif"); configuration.setDefaultContentCharset(DEFAULT_CONTENT_CHARSET); + configuration.setInitializationTimeout(MAX_INIT_TIMEOUT_MS); return configuration; } @@ -45,6 +47,7 @@ public static ContainerConfig defaultConfig() { private List customDomainNames; private boolean queryStringCaseSensitive; private final HashSet binaryContentTypes; + private int initializationTimeout; public ContainerConfig() { validFilePaths = new ArrayList<>(); @@ -271,4 +274,27 @@ public String getDefaultContentCharset() { public void setDefaultContentCharset(String defaultContentCharset) { this.defaultContentCharset = defaultContentCharset; } + + /** + * Returns the maximum amount of time (in milliseconds) set for the initialization time. See documentation on the + * {@link #setInitializationTimeout(int)} for additional details. + * @return The max time allocated for initialization + */ + public int getInitializationTimeout() { + return initializationTimeout; + } + + /** + * Sets the initialization timeout. When using an async {@link com.amazonaws.serverless.proxy.InitializationWrapper} + * the underlying framework is initialized in a separate thread. Serverless Java Container will wait for the maximum + * time available during AWS Lambda's init step (~10 seconds) and then return control to the main thread. In the meanwhile, + * the initialization process of the underlying framework can continue in a separate thread. AWS Lambda will then call + * the handler class to handle an event. This timeout is the maximum amount of time Serverless Java Container framework + * will wait for the underlying framework to initialize before returning an error. By default, this is set to 10 seconds. + * @param initializationTimeout The maximum amount of time to wait for the underlying framework initialization after + * an event is received in milliseconds. + */ + public void setInitializationTimeout(int initializationTimeout) { + this.initializationTimeout = initializationTimeout; + } } diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/ServletLambdaContainerHandlerBuilderTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/ServletLambdaContainerHandlerBuilderTest.java new file mode 100644 index 000000000..a9fef9b19 --- /dev/null +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/ServletLambdaContainerHandlerBuilderTest.java @@ -0,0 +1,106 @@ +package com.amazonaws.serverless.proxy.internal.servlet; + +import com.amazonaws.serverless.exceptions.ContainerInitializationException; +import com.amazonaws.serverless.proxy.AwsProxyExceptionHandler; +import com.amazonaws.serverless.proxy.AwsProxySecurityContextWriter; +import com.amazonaws.serverless.proxy.model.AwsProxyRequest; +import com.amazonaws.serverless.proxy.model.AwsProxyResponse; +import com.amazonaws.services.lambda.runtime.Context; +import org.junit.Test; + +import java.util.concurrent.CountDownLatch; + +import static org.junit.Assert.*; + +public class ServletLambdaContainerHandlerBuilderTest { + + @Test + public void validation_throwsException() { + TestBuilder testBuilder = new TestBuilder(); + try { + testBuilder.validate(); + } catch (ContainerInitializationException e) { + return; + } + fail("Did not throw exception"); + } + + @Test + public void additionalMethod_testSetter() { + TestBuilder test = new TestBuilder().exceptionHandler(new AwsProxyExceptionHandler()).name("test"); + assertEquals("test", test.getName()); + } + + @Test + public void defaultProxy_setsValuesCorrectly() { + TestBuilder test = new TestBuilder().defaultProxy().name("test"); + assertNotNull(test.initializationWrapper); + assertTrue(test.exceptionHandler instanceof AwsProxyExceptionHandler); + assertTrue(test.requestReader instanceof AwsProxyHttpServletRequestReader); + assertTrue(test.responseWriter instanceof AwsProxyHttpServletResponseWriter); + assertTrue(test.securityContextWriter instanceof AwsProxySecurityContextWriter); + assertSame(test.requestTypeClass, AwsProxyRequest.class); + assertSame(test.responseTypeClass, AwsProxyResponse.class); + assertEquals("test", test.name); + } + + public static final class TestHandler extends AwsLambdaServletContainerHandler { + + public TestHandler() { + super(AwsProxyRequest.class, AwsProxyResponse.class, new AwsProxyHttpServletRequestReader(), new AwsProxyHttpServletResponseWriter(), new AwsProxySecurityContextWriter(), new AwsProxyExceptionHandler()); + } + @Override + protected AwsHttpServletResponse getContainerResponse(AwsProxyHttpServletRequest request, CountDownLatch latch) { + return null; + } + + @Override + protected void handleRequest(AwsProxyHttpServletRequest containerRequest, AwsHttpServletResponse containerResponse, Context lambdaContext) throws Exception { + + } + + @Override + public void initialize() throws ContainerInitializationException { + + } + } + + public static final class TestBuilder + extends ServletLambdaContainerHandlerBuilder< + AwsProxyRequest, + AwsProxyResponse, + AwsProxyHttpServletRequest, + TestHandler, + TestBuilder> { + + public TestBuilder() { + super(); + } + + private String name; + + public TestBuilder name(String n) { + name = n; + return this; + } + + public String getName() { + return name; + } + + @Override + protected TestBuilder self() { + return this; + } + + @Override + public TestHandler build() throws ContainerInitializationException { + return null; + } + + @Override + public TestHandler buildAndInitialize() throws ContainerInitializationException { + return null; + } + } +} diff --git a/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java b/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java index f84f6ca38..38994ed3b 100644 --- a/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java +++ b/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java @@ -13,12 +13,7 @@ package com.amazonaws.serverless.proxy.spring; import com.amazonaws.serverless.exceptions.ContainerInitializationException; -import com.amazonaws.serverless.proxy.AwsProxyExceptionHandler; -import com.amazonaws.serverless.proxy.AwsProxySecurityContextWriter; -import com.amazonaws.serverless.proxy.ExceptionHandler; -import com.amazonaws.serverless.proxy.RequestReader; -import com.amazonaws.serverless.proxy.ResponseWriter; -import com.amazonaws.serverless.proxy.SecurityContextWriter; +import com.amazonaws.serverless.proxy.*; import com.amazonaws.serverless.proxy.internal.testutils.Timer; import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.serverless.proxy.model.AwsProxyResponse; @@ -68,26 +63,6 @@ public static SpringBootLambdaContainerHandler getInstance() { return instance; } - /** - * Creates a default SpringLambdaContainerHandler initialized with the `AwsProxyRequest` and `AwsProxyResponse` objects - * @param springBootInitializer {@code SpringBootServletInitializer} class - * @return An initialized instance of the `SpringLambdaContainerHandler` - * @throws ContainerInitializationException If an error occurs while initializing the Spring framework - */ - public static SpringBootLambdaContainerHandler getAwsProxyHandler(Class springBootInitializer) - throws ContainerInitializationException { - SpringBootLambdaContainerHandler newHandler = new SpringBootLambdaContainerHandler<>( - AwsProxyRequest.class, - AwsProxyResponse.class, - new AwsProxyHttpServletRequestReader(), - new AwsProxyHttpServletResponseWriter(), - new AwsProxySecurityContextWriter(), - new AwsProxyExceptionHandler(), - springBootInitializer); - newHandler.initialize(); - return newHandler; - } - /** * Creates a default SpringLambdaContainerHandler initialized with the `AwsProxyRequest` and `AwsProxyResponse` objects and the given Spring profiles * @param springBootInitializer {@code SpringBootServletInitializer} class @@ -97,17 +72,12 @@ public static SpringBootLambdaContainerHandler getAwsProxyHandler(Class springBootInitializer, String... profiles) throws ContainerInitializationException { - SpringBootLambdaContainerHandler newHandler = new SpringBootLambdaContainerHandler<>( - AwsProxyRequest.class, - AwsProxyResponse.class, - new AwsProxyHttpServletRequestReader(), - new AwsProxyHttpServletResponseWriter(), - new AwsProxySecurityContextWriter(), - new AwsProxyExceptionHandler(), - springBootInitializer); - newHandler.activateSpringProfiles(profiles); - newHandler.initialize(); - return newHandler; + return new SpringBootProxyHandlerBuilder() + .defaultProxy() + .initializationWrapper(new InitializationWrapper()) + .springBootApplication(springBootInitializer) + .profiles(profiles) + .buildAndInitialize(); } /** @@ -127,12 +97,14 @@ public SpringBootLambdaContainerHandler(Class requestTypeClass, ResponseWriter responseWriter, SecurityContextWriter securityContextWriter, ExceptionHandler exceptionHandler, - Class springBootInitializer) + Class springBootInitializer, + InitializationWrapper init) throws ContainerInitializationException { super(requestTypeClass, responseTypeClass, requestReader, responseWriter, securityContextWriter, exceptionHandler); Timer.start("SPRINGBOOT_CONTAINER_HANDLER_CONSTRUCTOR"); initialized = false; this.springBootInitializer = springBootInitializer; + setInitializationWrapper(init); SpringBootLambdaContainerHandler.setInstance(this); Timer.stop("SPRINGBOOT_CONTAINER_HANDLER_CONSTRUCTOR"); diff --git a/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootProxyHandlerBuilder.java b/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootProxyHandlerBuilder.java new file mode 100644 index 000000000..4ead5bc4d --- /dev/null +++ b/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootProxyHandlerBuilder.java @@ -0,0 +1,63 @@ +package com.amazonaws.serverless.proxy.spring; + +import com.amazonaws.serverless.exceptions.ContainerInitializationException; +import com.amazonaws.serverless.proxy.internal.servlet.AwsProxyHttpServletRequest; +import com.amazonaws.serverless.proxy.internal.servlet.ServletLambdaContainerHandlerBuilder; +import com.amazonaws.serverless.proxy.model.AwsProxyRequest; +import com.amazonaws.serverless.proxy.model.AwsProxyResponse; +import org.springframework.web.WebApplicationInitializer; + +public final class SpringBootProxyHandlerBuilder extends ServletLambdaContainerHandlerBuilder< + AwsProxyRequest, + AwsProxyResponse, + AwsProxyHttpServletRequest, + SpringBootLambdaContainerHandler, + SpringBootProxyHandlerBuilder> { + private Class springBootInitializer; + private String[] profiles; + + @Override + protected SpringBootProxyHandlerBuilder self() { + return this; + } + + + public SpringBootProxyHandlerBuilder springBootApplication(Class app) { + springBootInitializer = app; + return self(); + } + + public SpringBootProxyHandlerBuilder profiles(String... profiles) { + this.profiles = profiles; + return self(); + } + + @Override + public SpringBootLambdaContainerHandler build() throws ContainerInitializationException { + validate(); + if (springBootInitializer == null) { + throw new ContainerInitializationException("Missing spring boot application class in builder", null); + } + SpringBootLambdaContainerHandler handler = new SpringBootLambdaContainerHandler<>( + requestTypeClass, + responseTypeClass, + requestReader, + responseWriter, + securityContextWriter, + exceptionHandler, + springBootInitializer, + initializationWrapper + ); + if (profiles != null) { + handler.activateSpringProfiles(profiles); + } + return handler; + } + + @Override + public SpringBootLambdaContainerHandler buildAndInitialize() throws ContainerInitializationException { + SpringBootLambdaContainerHandler handler = build(); + initializationWrapper.start(handler); + return handler; + } +} diff --git a/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringLambdaContainerHandler.java b/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringLambdaContainerHandler.java index fcd9e7fd4..c63165a43 100644 --- a/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringLambdaContainerHandler.java +++ b/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringLambdaContainerHandler.java @@ -13,12 +13,7 @@ package com.amazonaws.serverless.proxy.spring; import com.amazonaws.serverless.exceptions.ContainerInitializationException; -import com.amazonaws.serverless.proxy.AwsProxyExceptionHandler; -import com.amazonaws.serverless.proxy.AwsProxySecurityContextWriter; -import com.amazonaws.serverless.proxy.ExceptionHandler; -import com.amazonaws.serverless.proxy.RequestReader; -import com.amazonaws.serverless.proxy.ResponseWriter; -import com.amazonaws.serverless.proxy.SecurityContextWriter; +import com.amazonaws.serverless.proxy.*; import com.amazonaws.serverless.proxy.internal.testutils.Timer; import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.serverless.proxy.model.AwsProxyResponse; @@ -54,30 +49,11 @@ public class SpringLambdaContainerHandler extends Aws * @throws ContainerInitializationException */ public static SpringLambdaContainerHandler getAwsProxyHandler(Class... config) throws ContainerInitializationException { - AnnotationConfigWebApplicationContext applicationContext = new AnnotationConfigWebApplicationContext(); - applicationContext.register(config); - - return getAwsProxyHandler(applicationContext); - } - - /** - * Creates a default SpringLambdaContainerHandler initialized with the `AwsProxyRequest` and `AwsProxyResponse` objects - * @param applicationContext A custom ConfigurableWebApplicationContext to be used - * @return An initialized instance of the `SpringLambdaContainerHandler` - * @throws ContainerInitializationException - */ - public static SpringLambdaContainerHandler getAwsProxyHandler(ConfigurableWebApplicationContext applicationContext) - throws ContainerInitializationException { - SpringLambdaContainerHandler newHandler = new SpringLambdaContainerHandler<>( - AwsProxyRequest.class, - AwsProxyResponse.class, - new AwsProxyHttpServletRequestReader(), - new AwsProxyHttpServletResponseWriter(), - new AwsProxySecurityContextWriter(), - new AwsProxyExceptionHandler(), - applicationContext); - newHandler.initialize(); - return newHandler; + return new SpringProxyHandlerBuilder() + .defaultProxy() + .initializationWrapper(new InitializationWrapper()) + .configurationClasses(config) + .buildAndInitialize(); } /** @@ -89,17 +65,12 @@ public static SpringLambdaContainerHandler ge */ public static SpringLambdaContainerHandler getAwsProxyHandler(ConfigurableWebApplicationContext applicationContext, String... profiles) throws ContainerInitializationException { - SpringLambdaContainerHandler newHandler = new SpringLambdaContainerHandler<>( - AwsProxyRequest.class, - AwsProxyResponse.class, - new AwsProxyHttpServletRequestReader(), - new AwsProxyHttpServletResponseWriter(), - new AwsProxySecurityContextWriter(), - new AwsProxyExceptionHandler(), - applicationContext); - newHandler.activateSpringProfiles(profiles); - newHandler.initialize(); - return newHandler; + return new SpringProxyHandlerBuilder() + .defaultProxy() + .initializationWrapper(new InitializationWrapper()) + .springApplicationContext(applicationContext) + .profiles(profiles) + .buildAndInitialize(); } /** @@ -118,11 +89,13 @@ public SpringLambdaContainerHandler(Class requestTypeClass, ResponseWriter responseWriter, SecurityContextWriter securityContextWriter, ExceptionHandler exceptionHandler, - ConfigurableWebApplicationContext applicationContext) + ConfigurableWebApplicationContext applicationContext, + InitializationWrapper init) throws ContainerInitializationException { super(requestTypeClass, responseTypeClass, requestReader, responseWriter, securityContextWriter, exceptionHandler); Timer.start("SPRING_CONTAINER_HANDLER_CONSTRUCTOR"); appContext = applicationContext; + setInitializationWrapper(init); Timer.stop("SPRING_CONTAINER_HANDLER_CONSTRUCTOR"); } diff --git a/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringProxyHandlerBuilder.java b/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringProxyHandlerBuilder.java new file mode 100644 index 000000000..9bfbf3cbc --- /dev/null +++ b/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringProxyHandlerBuilder.java @@ -0,0 +1,80 @@ +package com.amazonaws.serverless.proxy.spring; + +import com.amazonaws.serverless.exceptions.ContainerInitializationException; +import com.amazonaws.serverless.proxy.internal.servlet.AwsProxyHttpServletRequest; +import com.amazonaws.serverless.proxy.internal.servlet.ServletLambdaContainerHandlerBuilder; +import com.amazonaws.serverless.proxy.model.AwsProxyRequest; +import com.amazonaws.serverless.proxy.model.AwsProxyResponse; +import org.springframework.web.WebApplicationInitializer; +import org.springframework.web.context.ConfigurableWebApplicationContext; +import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; + +public final class SpringProxyHandlerBuilder extends ServletLambdaContainerHandlerBuilder< + AwsProxyRequest, + AwsProxyResponse, + AwsProxyHttpServletRequest, + SpringLambdaContainerHandler, + SpringProxyHandlerBuilder> { + private ConfigurableWebApplicationContext springContext; + private Class[] configurationClasses; + private String[] profiles; + + @Override + protected SpringProxyHandlerBuilder self() { + return this; + } + + + public SpringProxyHandlerBuilder springApplicationContext(ConfigurableWebApplicationContext app) { + springContext = app; + return self(); + } + + public SpringProxyHandlerBuilder configurationClasses(Class... config) { + configurationClasses = config; + return self(); + } + + public SpringProxyHandlerBuilder profiles(String... profiles) { + this.profiles = profiles; + return self(); + } + + @Override + public SpringLambdaContainerHandler build() throws ContainerInitializationException { + validate(); + if (springContext == null && (configurationClasses == null || configurationClasses.length == 0)) { + throw new ContainerInitializationException("Missing both configuration classes and application context, at least" + + " one of the two must be populated", null); + } + ConfigurableWebApplicationContext ctx = springContext; + if (ctx == null) { + ctx = new AnnotationConfigWebApplicationContext(); + if (configurationClasses != null) { + ((AnnotationConfigWebApplicationContext)ctx).register(configurationClasses); + } + } + + SpringLambdaContainerHandler handler = new SpringLambdaContainerHandler<>( + requestTypeClass, + responseTypeClass, + requestReader, + responseWriter, + securityContextWriter, + exceptionHandler, + ctx, + initializationWrapper + ); + if (profiles != null) { + handler.activateSpringProfiles(profiles); + } + return handler; + } + + @Override + public SpringLambdaContainerHandler buildAndInitialize() throws ContainerInitializationException { + SpringLambdaContainerHandler handler = build(); + initializationWrapper.start(handler); + return handler; + } +} diff --git a/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java b/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java index c111b2c87..b6f6973ca 100644 --- a/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java +++ b/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java @@ -62,26 +62,6 @@ public static SpringBootLambdaContainerHandler getInstance() { return instance; } - /** - * Creates a default SpringLambdaContainerHandler initialized with the `AwsProxyRequest` and `AwsProxyResponse` objects - * @param springBootInitializer {@code SpringBootServletInitializer} class - * @return An initialized instance of the `SpringLambdaContainerHandler` - * @throws ContainerInitializationException If an error occurs while initializing the Spring framework - */ - public static SpringBootLambdaContainerHandler getAwsProxyHandler(Class springBootInitializer) - throws ContainerInitializationException { - SpringBootLambdaContainerHandler newHandler = new SpringBootLambdaContainerHandler<>( - AwsProxyRequest.class, - AwsProxyResponse.class, - new AwsProxyHttpServletRequestReader(), - new AwsProxyHttpServletResponseWriter(), - new AwsProxySecurityContextWriter(), - new AwsProxyExceptionHandler(), - springBootInitializer); - newHandler.initialize(); - return newHandler; - } - /** * Creates a default SpringLambdaContainerHandler initialized with the `AwsProxyRequest` and `AwsProxyResponse` objects and the given Spring profiles * @param springBootInitializer {@code SpringBootServletInitializer} class @@ -91,17 +71,12 @@ public static SpringBootLambdaContainerHandler getAwsProxyHandler(Class springBootInitializer, String... profiles) throws ContainerInitializationException { - SpringBootLambdaContainerHandler newHandler = new SpringBootLambdaContainerHandler<>( - AwsProxyRequest.class, - AwsProxyResponse.class, - new AwsProxyHttpServletRequestReader(), - new AwsProxyHttpServletResponseWriter(), - new AwsProxySecurityContextWriter(), - new AwsProxyExceptionHandler(), - springBootInitializer); - newHandler.activateSpringProfiles(profiles); - newHandler.initialize(); - return newHandler; + return new SpringBootProxyHandlerBuilder() + .defaultProxy() + .initializationWrapper(new InitializationWrapper()) + .springBootApplication(springBootInitializer) + .profiles(profiles) + .buildAndInitialize(); } /** @@ -121,15 +96,16 @@ public SpringBootLambdaContainerHandler(Class requestTypeClass, ResponseWriter responseWriter, SecurityContextWriter securityContextWriter, ExceptionHandler exceptionHandler, - Class springBootInitializer) - throws ContainerInitializationException { + Class springBootInitializer, + InitializationWrapper init) { super(requestTypeClass, responseTypeClass, requestReader, responseWriter, securityContextWriter, exceptionHandler); - Timer.start("SPRINGBOOT_CONTAINER_HANDLER_CONSTRUCTOR"); + Timer.start("SPRINGBOOT2_CONTAINER_HANDLER_CONSTRUCTOR"); initialized = false; this.springBootInitializer = springBootInitializer; + setInitializationWrapper(init); SpringBootLambdaContainerHandler.setInstance(this); - Timer.stop("SPRINGBOOT_CONTAINER_HANDLER_CONSTRUCTOR"); + Timer.stop("SPRINGBOOT2_CONTAINER_HANDLER_CONSTRUCTOR"); } // this is not pretty. However, because SpringBoot wants to control all of the initialization @@ -153,26 +129,24 @@ protected AwsHttpServletResponse getContainerResponse(AwsProxyHttpServletRequest @Override protected void handleRequest(AwsProxyHttpServletRequest containerRequest, AwsHttpServletResponse containerResponse, Context lambdaContext) throws Exception { // this method of the AwsLambdaServletContainerHandler sets the servlet context - Timer.start("SPRINGBOOT_HANDLE_REQUEST"); + Timer.start("SPRINGBOOT2_HANDLE_REQUEST"); // wire up the application context on the first invocation if (!initialized) { initialize(); } - containerRequest.setServletContext(getServletContext()); - // process filters & invoke servlet Servlet reqServlet = ((AwsServletContext)getServletContext()).getServletForPath(containerRequest.getPathInfo()); doFilter(containerRequest, containerResponse, reqServlet); - Timer.stop("SPRINGBOOT_HANDLE_REQUEST"); + Timer.stop("SPRINGBOOT2_HANDLE_REQUEST"); } @Override public void initialize() throws ContainerInitializationException { - Timer.start("SPRINGBOOT_COLD_START"); + Timer.start("SPRINGBOOT2_COLD_START"); SpringApplication app = new SpringApplication(getEmbeddedContainerClasses()); if (springProfiles != null && springProfiles.length > 0) { @@ -184,7 +158,7 @@ public void initialize() app.run(); initialized = true; - Timer.stop("SPRINGBOOT_COLD_START"); + Timer.stop("SPRINGBOOT2_COLD_START"); } private Class[] getEmbeddedContainerClasses() { diff --git a/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootProxyHandlerBuilder.java b/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootProxyHandlerBuilder.java new file mode 100644 index 000000000..943cc69ff --- /dev/null +++ b/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootProxyHandlerBuilder.java @@ -0,0 +1,62 @@ +package com.amazonaws.serverless.proxy.spring; + +import com.amazonaws.serverless.exceptions.ContainerInitializationException; +import com.amazonaws.serverless.proxy.internal.servlet.AwsProxyHttpServletRequest; +import com.amazonaws.serverless.proxy.internal.servlet.ServletLambdaContainerHandlerBuilder; +import com.amazonaws.serverless.proxy.model.AwsProxyRequest; +import com.amazonaws.serverless.proxy.model.AwsProxyResponse; + +public final class SpringBootProxyHandlerBuilder extends ServletLambdaContainerHandlerBuilder< + AwsProxyRequest, + AwsProxyResponse, + AwsProxyHttpServletRequest, + SpringBootLambdaContainerHandler, + SpringBootProxyHandlerBuilder> { + private Class springBootInitializer; + private String[] profiles; + + @Override + protected SpringBootProxyHandlerBuilder self() { + return this; + } + + + public SpringBootProxyHandlerBuilder springBootApplication(Class app) { + springBootInitializer = app; + return self(); + } + + public SpringBootProxyHandlerBuilder profiles(String... profiles) { + this.profiles = profiles; + return self(); + } + + @Override + public SpringBootLambdaContainerHandler build() throws ContainerInitializationException { + validate(); + if (springBootInitializer == null) { + throw new ContainerInitializationException("Missing spring boot application class in builder", null); + } + SpringBootLambdaContainerHandler handler = new SpringBootLambdaContainerHandler<>( + requestTypeClass, + responseTypeClass, + requestReader, + responseWriter, + securityContextWriter, + exceptionHandler, + springBootInitializer, + initializationWrapper + ); + if (profiles != null) { + handler.activateSpringProfiles(profiles); + } + return handler; + } + + @Override + public SpringBootLambdaContainerHandler buildAndInitialize() throws ContainerInitializationException { + SpringBootLambdaContainerHandler handler = build(); + initializationWrapper.start(handler); + return handler; + } +} diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/servlerss/proxy/spring/ServletAppTest.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/ServletAppTest.java similarity index 100% rename from aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/servlerss/proxy/spring/ServletAppTest.java rename to aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/ServletAppTest.java diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/servlerss/proxy/spring/WebFluxAppTest.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/WebFluxAppTest.java similarity index 100% rename from aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/servlerss/proxy/spring/WebFluxAppTest.java rename to aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/WebFluxAppTest.java diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/servlerss/proxy/spring/embedded/ServerlessServletEmbeddedServerFactoryTest.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactoryTest.java similarity index 94% rename from aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/servlerss/proxy/spring/embedded/ServerlessServletEmbeddedServerFactoryTest.java rename to aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactoryTest.java index 60412ec1e..e9b9cfb11 100644 --- a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/servlerss/proxy/spring/embedded/ServerlessServletEmbeddedServerFactoryTest.java +++ b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactoryTest.java @@ -3,6 +3,7 @@ import com.amazonaws.serverless.exceptions.ContainerInitializationException; import com.amazonaws.serverless.proxy.AwsProxyExceptionHandler; import com.amazonaws.serverless.proxy.AwsProxySecurityContextWriter; +import com.amazonaws.serverless.proxy.SyncInitializationWrapper; import com.amazonaws.serverless.proxy.internal.servlet.AwsProxyHttpServletRequestReader; import com.amazonaws.serverless.proxy.internal.servlet.AwsProxyHttpServletResponseWriter; import com.amazonaws.serverless.proxy.model.AwsProxyRequest; @@ -25,7 +26,8 @@ public class ServerlessServletEmbeddedServerFactoryTest { new AwsProxyHttpServletResponseWriter(), new AwsProxySecurityContextWriter(), new AwsProxyExceptionHandler(), - null + null, + new SyncInitializationWrapper() ); public ServerlessServletEmbeddedServerFactoryTest() throws ContainerInitializationException { diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/servlerss/proxy/spring/servletapp/LambdaHandler.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/LambdaHandler.java similarity index 100% rename from aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/servlerss/proxy/spring/servletapp/LambdaHandler.java rename to aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/LambdaHandler.java diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/servlerss/proxy/spring/servletapp/MessageController.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/MessageController.java similarity index 100% rename from aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/servlerss/proxy/spring/servletapp/MessageController.java rename to aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/MessageController.java diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/ServletApplication.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/ServletApplication.java new file mode 100644 index 000000000..a85851b88 --- /dev/null +++ b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/ServletApplication.java @@ -0,0 +1,13 @@ +package com.amazonaws.servlerss.proxy.spring.servletapp; + +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; + +@SpringBootApplication(exclude = { + org.springframework.boot.autoconfigure.security.reactive.ReactiveUserDetailsServiceAutoConfiguration.class, + org.springframework.boot.autoconfigure.security.reactive.ReactiveSecurityAutoConfiguration.class, + org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration.class, + org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class +}) +public class ServletApplication extends SpringBootServletInitializer { +} diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/servlerss/proxy/spring/webfluxapp/LambdaHandler.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/webfluxapp/LambdaHandler.java similarity index 100% rename from aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/servlerss/proxy/spring/webfluxapp/LambdaHandler.java rename to aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/webfluxapp/LambdaHandler.java diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/servlerss/proxy/spring/webfluxapp/MessageController.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/webfluxapp/MessageController.java similarity index 100% rename from aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/servlerss/proxy/spring/webfluxapp/MessageController.java rename to aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/webfluxapp/MessageController.java diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/webfluxapp/WebFluxTestApplication.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/webfluxapp/WebFluxTestApplication.java new file mode 100644 index 000000000..b3f14a0e4 --- /dev/null +++ b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/webfluxapp/WebFluxTestApplication.java @@ -0,0 +1,12 @@ +package com.amazonaws.servlerss.proxy.spring.webfluxapp; + +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.web.reactive.config.EnableWebFlux; + +@SpringBootApplication(exclude = { + org.springframework.boot.autoconfigure.security.reactive.ReactiveUserDetailsServiceAutoConfiguration.class, + org.springframework.boot.autoconfigure.security.reactive.ReactiveSecurityAutoConfiguration.class +}) +public class WebFluxTestApplication { +} diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/servlerss/proxy/spring/servletapp/ServletApplication.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/servlerss/proxy/spring/servletapp/ServletApplication.java deleted file mode 100644 index c7050f1b3..000000000 --- a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/servlerss/proxy/spring/servletapp/ServletApplication.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.amazonaws.servlerss.proxy.spring.servletapp; - -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; - -@SpringBootApplication -public class ServletApplication extends SpringBootServletInitializer { -} diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/servlerss/proxy/spring/webfluxapp/WebFluxTestApplication.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/servlerss/proxy/spring/webfluxapp/WebFluxTestApplication.java deleted file mode 100644 index ec06ac4d8..000000000 --- a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/servlerss/proxy/spring/webfluxapp/WebFluxTestApplication.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.amazonaws.servlerss.proxy.spring.webfluxapp; - -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.web.reactive.config.EnableWebFlux; - -@SpringBootApplication -public class WebFluxTestApplication { -} From e87a86e11b65e71db42f7b476245798c5c91621e Mon Sep 17 00:00:00 2001 From: sapessi Date: Wed, 25 Sep 2019 21:53:24 -0700 Subject: [PATCH 045/888] Bug fix in servlet request impl to null-check headers in case Lambda gets sent an event without the multiValueHeaders property (#281). Also moved the ServletContext to be managed by the ServletRequestReader istead of set on each request by the LambdaContainerHandler. Additional bug fix to set the correct dispatcher type when startAsync is called on the request --- .../servlet/AwsProxyHttpServletRequest.java | 18 +++++++----------- .../AwsProxyHttpServletRequestReader.java | 8 +++++++- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java index 83e99c746..eb5d90252 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java @@ -18,6 +18,7 @@ import com.amazonaws.serverless.proxy.internal.testutils.Timer; import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.serverless.proxy.model.ContainerConfig; +import com.amazonaws.serverless.proxy.model.Headers; import com.amazonaws.services.lambda.runtime.Context; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; @@ -31,13 +32,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.servlet.AsyncContext; -import javax.servlet.ReadListener; -import javax.servlet.RequestDispatcher; -import javax.servlet.ServletException; -import javax.servlet.ServletInputStream; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; +import javax.servlet.*; import javax.servlet.http.*; import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.MediaType; @@ -119,10 +114,6 @@ public void setResponse(AwsHttpServletResponse response) { this.response = response; } - public AwsLambdaServletContainerHandler getContainerHandler() { - return containerHandler; - } - public void setContainerHandler(AwsLambdaServletContainerHandler containerHandler) { this.containerHandler = containerHandler; } @@ -380,6 +371,9 @@ public String getCharacterEncoding() { @Override public void setCharacterEncoding(String s) throws UnsupportedEncodingException { + if (request.getMultiValueHeaders() == null) { + request.setMultiValueHeaders(new Headers()); + } String currentContentType = request.getMultiValueHeaders().getFirst(HttpHeaders.CONTENT_TYPE); if (currentContentType == null || "".equals(currentContentType)) { log.debug("Called set character encoding to " + SecurityUtils.crlf(s) + " on a request without a content type. Character encoding will not be set"); @@ -679,6 +673,7 @@ public boolean isAsyncSupported() { public AsyncContext startAsync() throws IllegalStateException { asyncContext = new AwsAsyncContext(this, response, containerHandler); + setAttribute(DISPATCHER_TYPE_ATTRIBUTE, DispatcherType.ASYNC); log.debug("Starting async context for request: " + SecurityUtils.crlf(request.getRequestContext().getRequestId())); return asyncContext; } @@ -688,6 +683,7 @@ public AsyncContext startAsync() public AsyncContext startAsync(ServletRequest servletRequest, ServletResponse servletResponse) throws IllegalStateException { asyncContext = new AwsAsyncContext((HttpServletRequest) servletRequest, (HttpServletResponse) servletResponse, containerHandler); + setAttribute(DISPATCHER_TYPE_ATTRIBUTE, DispatcherType.ASYNC); log.debug("Starting async context for request: " + SecurityUtils.crlf(request.getRequestContext().getRequestId())); return asyncContext; } diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestReader.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestReader.java index 6b687fb82..405ae9739 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestReader.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestReader.java @@ -18,6 +18,7 @@ import com.amazonaws.serverless.proxy.model.ContainerConfig; import com.amazonaws.services.lambda.runtime.Context; +import javax.servlet.ServletContext; import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.SecurityContext; @@ -27,11 +28,15 @@ */ public class AwsProxyHttpServletRequestReader extends RequestReader { static final String INVALID_REQUEST_ERROR = "The incoming event is not a valid request from Amazon API Gateway or an Application Load Balancer"; - + private ServletContext servletContext; //------------------------------------------------------------- // Methods - Implementation //------------------------------------------------------------- + public void setServletContext(ServletContext ctx) { + servletContext = ctx; + } + @Override public AwsProxyHttpServletRequest readRequest(AwsProxyRequest request, SecurityContext securityContext, Context lambdaContext, ContainerConfig config) throws InvalidRequestEventException { @@ -48,6 +53,7 @@ public AwsProxyHttpServletRequest readRequest(AwsProxyRequest request, SecurityC request.getMultiValueHeaders().putSingle(HttpHeaders.CONTENT_TYPE, getContentTypeWithCharset(contentType, config)); } AwsProxyHttpServletRequest servletRequest = new AwsProxyHttpServletRequest(request, lambdaContext, securityContext, config); + servletRequest.setServletContext(servletContext); servletRequest.setAttribute(API_GATEWAY_CONTEXT_PROPERTY, request.getRequestContext()); servletRequest.setAttribute(API_GATEWAY_STAGE_VARS_PROPERTY, request.getStageVariables()); servletRequest.setAttribute(API_GATEWAY_EVENT_PROPERTY, request); From a4b9ab072d332a64155097645cff61f1a7b81349 Mon Sep 17 00:00:00 2001 From: sapessi Date: Wed, 25 Sep 2019 21:53:58 -0700 Subject: [PATCH 046/888] Lots of new integration tests for springboot2 support --- .../proxy/spring/SpringBootAppTest.java | 52 ++++++++++++++++ .../spring/echoapp/EchoSpringAppConfig.java | 17 +++--- .../spring/springbootapp/TestController.java | 16 +++-- .../pom.xml | 20 +++++- .../proxy/spring/SecurityAppTest.java | 46 ++++++++++++++ .../proxy/spring/ServletAppTest.java | 9 +-- .../serverless/proxy/spring/SlowAppTest.java | 33 ++++++++++ .../proxy/spring/WebFluxAppTest.java | 9 +-- ...rlessServletEmbeddedServerFactoryTest.java | 9 ++- .../spring/securityapp/LambdaHandler.java | 26 ++++++++ .../spring/securityapp/MessageController.java | 16 +++++ .../spring/securityapp/SecurityConfig.java | 61 +++++++++++++++++++ .../securityapp/ServletApplication.java | 13 ++++ .../spring/servletapp/LambdaHandler.java | 3 +- .../spring/servletapp/MessageController.java | 2 +- .../spring/servletapp/ServletApplication.java | 2 +- .../proxy/spring/slowapp/LambdaHandler.java | 41 +++++++++++++ .../spring/slowapp/MessageController.java | 15 +++++ .../spring/slowapp/SlowTestApplication.java | 24 ++++++++ .../spring/webfluxapp/LambdaHandler.java | 3 +- .../spring/webfluxapp/MessageController.java | 2 +- .../webfluxapp/WebFluxTestApplication.java | 2 +- 22 files changed, 386 insertions(+), 35 deletions(-) create mode 100644 aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/SecurityAppTest.java create mode 100644 aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/SlowAppTest.java create mode 100644 aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/securityapp/LambdaHandler.java create mode 100644 aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/securityapp/MessageController.java create mode 100644 aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/securityapp/SecurityConfig.java create mode 100644 aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/securityapp/ServletApplication.java create mode 100644 aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/slowapp/LambdaHandler.java create mode 100644 aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/slowapp/MessageController.java create mode 100644 aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/slowapp/SlowTestApplication.java diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringBootAppTest.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringBootAppTest.java index 286d69ccd..91a559caa 100644 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringBootAppTest.java +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringBootAppTest.java @@ -6,6 +6,8 @@ import com.amazonaws.serverless.proxy.internal.testutils.MockLambdaContext; import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.serverless.proxy.model.AwsProxyResponse; +import com.amazonaws.serverless.proxy.model.Headers; +import com.amazonaws.serverless.proxy.model.MultiValuedTreeMap; import com.amazonaws.serverless.proxy.spring.echoapp.model.SingleValueModel; import com.amazonaws.serverless.proxy.spring.springbootapp.LambdaHandler; import com.amazonaws.serverless.proxy.spring.springbootapp.TestController; @@ -17,6 +19,8 @@ import javax.ws.rs.core.HttpHeaders; import java.io.IOException; +import static com.amazonaws.serverless.proxy.spring.springbootapp.TestController.CUSTOM_HEADER_NAME; +import static com.amazonaws.serverless.proxy.spring.springbootapp.TestController.CUSTOM_QS_NAME; import static org.junit.Assert.*; @@ -34,6 +38,54 @@ public void testMethod_springSecurity_doesNotThrowException() { validateSingleValueModel(resp, TestController.TEST_VALUE); } + @Test + public void testMethod_testRequestFromString_doesNotThrowNpe() throws IOException { + AwsProxyRequest req = new AwsProxyRequestBuilder().fromJsonString("{\n" + + " \"resource\": \"/missing-params\",\n" + + " \"path\": \"/missing-params\",\n" + + " \"httpMethod\": \"GET\",\n" + + " \"headers\": null,\n" + + " \"multiValueHeaders\": null,\n" + + " \"queryStringParameters\": null,\n" + + " \"multiValueQueryStringParameters\": null,\n" + + " \"pathParameters\": null,\n" + + " \"stageVariables\": null,\n" + + " \"requestContext\": {\n" + + " \"resourcePath\": \"/path/resource\",\n" + + " \"httpMethod\": \"POST\",\n" + + " \"path\": \"//path/resource\",\n" + + " \"accountId\": \"accountIdNumber\",\n" + + " \"protocol\": \"HTTP/1.1\",\n" + + " \"stage\": \"test-invoke-stage\",\n" + + " \"domainPrefix\": \"testPrefix\",\n" + + " \"identity\": {\n" + + " \"cognitoIdentityPoolId\": null,\n" + + " \"cognitoIdentityId\": null,\n" + + " \"apiKey\": \"test-invoke-api-key\",\n" + + " \"principalOrgId\": null,\n" + + " \"cognitoAuthenticationType\": null,\n" + + " \"userArn\": \"actual arn\",\n" + + " \"apiKeyId\": \"test-invoke-api-key-id\"\n" + + " }\n" + + " },\n" + + " \"body\": \"{ \\\"Key1\\\": \\\"Value1\\\", \\\"Key2\\\": \\\"Value2\\\", \\\"Key3\\\": \\\"Vaue3\\\" }\",\n" + + " \"isBase64Encoded\": \"false\"\n" + + "}").build(); + + AwsProxyResponse resp = handler.handleRequest(req, context); + assertNotNull(resp); + // Spring identifies the missing header + assertEquals(400, resp.getStatusCode()); + req.setMultiValueHeaders(new Headers()); + req.getMultiValueHeaders().add(CUSTOM_HEADER_NAME, "val"); + resp = handler.handleRequest(req, context); + assertEquals(400, resp.getStatusCode()); + req.setMultiValueQueryStringParameters(new MultiValuedTreeMap<>()); + req.getMultiValueQueryStringParameters().add(CUSTOM_QS_NAME, "val"); + resp = handler.handleRequest(req, context); + assertEquals(200, resp.getStatusCode()); + } + @Test public void defaultError_requestForward_springBootForwardsToDefaultErrorPage() { AwsProxyRequest req = new AwsProxyRequestBuilder("/test2", "GET").build(); diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/EchoSpringAppConfig.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/EchoSpringAppConfig.java index 17e09d923..c32935c70 100644 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/EchoSpringAppConfig.java +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/EchoSpringAppConfig.java @@ -3,6 +3,7 @@ import com.amazonaws.serverless.exceptions.ContainerInitializationException; import com.amazonaws.serverless.proxy.AwsProxyExceptionHandler; import com.amazonaws.serverless.proxy.AwsProxySecurityContextWriter; +import com.amazonaws.serverless.proxy.InitializationWrapper; import com.amazonaws.serverless.proxy.internal.servlet.AwsProxyHttpServletRequestReader; import com.amazonaws.serverless.proxy.internal.servlet.AwsProxyHttpServletResponseWriter; import com.amazonaws.serverless.proxy.internal.servlet.AwsServletRegistration; @@ -10,6 +11,7 @@ import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.serverless.proxy.model.AwsProxyResponse; import com.amazonaws.serverless.proxy.spring.SpringLambdaContainerHandler; +import com.amazonaws.serverless.proxy.spring.SpringProxyHandlerBuilder; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; @@ -37,16 +39,11 @@ public class EchoSpringAppConfig { @Bean public SpringLambdaContainerHandler springLambdaContainerHandler() throws ContainerInitializationException { - SpringLambdaContainerHandler handler = new SpringLambdaContainerHandler<>( - AwsProxyRequest.class, - AwsProxyResponse.class, - new AwsProxyHttpServletRequestReader(), - new AwsProxyHttpServletResponseWriter(), - new AwsProxySecurityContextWriter(), - new AwsProxyExceptionHandler(), - applicationContext); - handler.setRefreshContext(false); - handler.initialize(); + SpringLambdaContainerHandler handler = new SpringProxyHandlerBuilder() + .defaultProxy() + .initializationWrapper(new InitializationWrapper()) + .springApplicationContext(applicationContext) + .buildAndInitialize(); handler.onStartup(c -> { FilterRegistration.Dynamic registration = c.addFilter("UnauthenticatedFilter", UnauthenticatedFilter.class); // update the registration to map to a path diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springbootapp/TestController.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springbootapp/TestController.java index 0357328e1..900ce50ea 100644 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springbootapp/TestController.java +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springbootapp/TestController.java @@ -7,11 +7,7 @@ import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.config.annotation.ContentNegotiationConfigurer; import org.springframework.web.servlet.config.annotation.PathMatchConfigurer; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; @@ -27,6 +23,8 @@ public class TestController extends WebSecurityConfigurerAdapter { public static final String TEST_VALUE = "test"; public static final String UTF8_TEST_STRING = "health心跳测试完成。可正常使用"; + public static final String CUSTOM_HEADER_NAME = "X-Custom-Header"; + public static final String CUSTOM_QS_NAME = "qs"; // workaround to address the most annoying issue in the world: https://blog.georgovassilis.com/2015/10/29/spring-mvc-rest-controller-says-406-when-emails-are-part-url-path/ @Configuration @@ -49,6 +47,14 @@ public SingleValueModel testGet() { return value; } + @RequestMapping(path = "/missing-params", method = {RequestMethod.GET}) + public Map testInvalidParameters(@RequestHeader(CUSTOM_HEADER_NAME) String h1, @RequestParam(CUSTOM_QS_NAME) String qsValue) { + Map output = new HashMap<>(); + output.put("header", h1 == null); + output.put("queryString", qsValue == null); + return output; + } + @RequestMapping(path = "/test/{domain}", method = { RequestMethod.GET}) public SingleValueModel testDomainInPath(@PathVariable("domain") String domainName) { SingleValueModel value = new SingleValueModel(); diff --git a/aws-serverless-java-container-springboot2/pom.xml b/aws-serverless-java-container-springboot2/pom.xml index f0a8258a3..90134a048 100644 --- a/aws-serverless-java-container-springboot2/pom.xml +++ b/aws-serverless-java-container-springboot2/pom.xml @@ -18,6 +18,7 @@ 5.1.9.RELEASE + 5.1.6.RELEASE 2.1.8.RELEASE 1.8 @@ -50,7 +51,24 @@ ${springboot.version} true - + + org.springframework.security + spring-security-config + ${springsecurity.version} + test + + + org.springframework.security + spring-security-web + ${springsecurity.version} + test + + + org.jetbrains + annotations + 17.0.0 + compile + diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/SecurityAppTest.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/SecurityAppTest.java new file mode 100644 index 000000000..34a593fd2 --- /dev/null +++ b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/SecurityAppTest.java @@ -0,0 +1,46 @@ +package com.amazonaws.serverless.proxy.spring; + +import com.amazonaws.serverless.proxy.internal.LambdaContainerHandler; +import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; +import com.amazonaws.serverless.proxy.internal.testutils.MockLambdaContext; +import com.amazonaws.serverless.proxy.model.AwsProxyRequest; +import com.amazonaws.serverless.proxy.model.AwsProxyResponse; +import com.amazonaws.serverless.proxy.spring.securityapp.LambdaHandler; +import com.amazonaws.serverless.proxy.spring.securityapp.MessageController; +import com.amazonaws.serverless.proxy.spring.securityapp.SecurityConfig; +import com.fasterxml.jackson.core.JsonProcessingException; +import org.junit.Test; + +import javax.ws.rs.core.HttpHeaders; +import javax.ws.rs.core.MediaType; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +public class SecurityAppTest { + + LambdaHandler handler = new LambdaHandler(); + MockLambdaContext lambdaContext = new MockLambdaContext(); + + public SecurityAppTest() { + System.setProperty("logging.level.root", "DEBUG"); + } + + @Test + public void helloRequest_withAuth_respondsWithSingleMessage() { + AwsProxyRequest req = new AwsProxyRequestBuilder("/hello", "GET").build(); + AwsProxyResponse resp = handler.handleRequest(req, lambdaContext); + assertEquals(401, resp.getStatusCode()); + assertTrue(resp.getMultiValueHeaders().containsKey(HttpHeaders.WWW_AUTHENTICATE)); + req = new AwsProxyRequestBuilder("/hello", "GET") + .basicAuth(SecurityConfig.USERNAME, SecurityConfig.PASSWORD) + .header(HttpHeaders.ACCEPT, MediaType.TEXT_PLAIN) + .build(); + resp = handler.handleRequest(req, lambdaContext); + assertEquals(200, resp.getStatusCode()); + } + + public void helloRequest_withoutAuith_respondsWithError() { + + } +} diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/ServletAppTest.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/ServletAppTest.java index b7353cd82..4d5797e5f 100644 --- a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/ServletAppTest.java +++ b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/ServletAppTest.java @@ -1,11 +1,12 @@ -package com.amazonaws.servlerss.proxy.spring; +package com.amazonaws.serverless.proxy.spring; import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; import com.amazonaws.serverless.proxy.internal.testutils.MockLambdaContext; import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.serverless.proxy.model.AwsProxyResponse; -import com.amazonaws.servlerss.proxy.spring.servletapp.LambdaHandler; -import com.amazonaws.servlerss.proxy.spring.servletapp.MessageController; +import com.amazonaws.serverless.proxy.spring.servletapp.LambdaHandler; +import com.amazonaws.serverless.proxy.spring.servletapp.MessageController; +import org.junit.Assert; import org.junit.Test; import static org.junit.Assert.assertEquals; @@ -19,6 +20,6 @@ public class ServletAppTest { public void helloRequest_respondsWithSingleMessage() { AwsProxyRequest req = new AwsProxyRequestBuilder("/hello", "GET").build(); AwsProxyResponse resp = handler.handleRequest(req, lambdaContext); - assertEquals(MessageController.HELLO_MESSAGE, resp.getBody()); + Assert.assertEquals(MessageController.HELLO_MESSAGE, resp.getBody()); } } diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/SlowAppTest.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/SlowAppTest.java new file mode 100644 index 000000000..8dabc5f66 --- /dev/null +++ b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/SlowAppTest.java @@ -0,0 +1,33 @@ +package com.amazonaws.serverless.proxy.spring; + +import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; +import com.amazonaws.serverless.proxy.internal.testutils.MockLambdaContext; +import com.amazonaws.serverless.proxy.model.AwsProxyRequest; +import com.amazonaws.serverless.proxy.model.AwsProxyResponse; +import com.amazonaws.serverless.proxy.spring.slowapp.LambdaHandler; +import com.amazonaws.serverless.proxy.spring.slowapp.MessageController; +import com.amazonaws.serverless.proxy.spring.slowapp.SlowTestApplication; +import org.junit.Assert; +import org.junit.Test; + +import java.time.Instant; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +public class SlowAppTest { + + @Test + public void slowAppInit_continuesInBackgroundThread_returnsCorrect() { + LambdaHandler slowApp = new LambdaHandler(); + System.out.println("Start time: " + slowApp.getConstructorTime()); + assertTrue(slowApp.getConstructorTime() < 10_000); + AwsProxyRequest req = new AwsProxyRequestBuilder("/hello", "GET").build(); + long startRequestTime = Instant.now().toEpochMilli(); + AwsProxyResponse resp = slowApp.handleRequest(req, new MockLambdaContext()); + long endRequestTime = Instant.now().toEpochMilli(); + assertTrue(endRequestTime - startRequestTime > SlowTestApplication.SlowDownInit.INIT_SLEEP_TIME_MS - 10_000); + assertEquals(200, resp.getStatusCode()); + Assert.assertEquals(MessageController.HELLO_MESSAGE, resp.getBody()); + } +} diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/WebFluxAppTest.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/WebFluxAppTest.java index ffdb98e41..7148e3b67 100644 --- a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/WebFluxAppTest.java +++ b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/WebFluxAppTest.java @@ -1,11 +1,12 @@ -package com.amazonaws.servlerss.proxy.spring; +package com.amazonaws.serverless.proxy.spring; import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; import com.amazonaws.serverless.proxy.internal.testutils.MockLambdaContext; import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.serverless.proxy.model.AwsProxyResponse; -import com.amazonaws.servlerss.proxy.spring.webfluxapp.LambdaHandler; -import com.amazonaws.servlerss.proxy.spring.webfluxapp.MessageController; +import com.amazonaws.serverless.proxy.spring.webfluxapp.LambdaHandler; +import com.amazonaws.serverless.proxy.spring.webfluxapp.MessageController; +import org.junit.Assert; import org.junit.Test; import static org.junit.Assert.assertEquals; @@ -19,7 +20,7 @@ public class WebFluxAppTest { public void helloRequest_respondsWithSingleMessage() { AwsProxyRequest req = new AwsProxyRequestBuilder("/single", "GET").build(); AwsProxyResponse resp = handler.handleRequest(req, lambdaContext); - assertEquals(MessageController.MESSAGE, resp.getBody()); + Assert.assertEquals(MessageController.MESSAGE, resp.getBody()); } @Test diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactoryTest.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactoryTest.java index e9b9cfb11..010bcbdcf 100644 --- a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactoryTest.java +++ b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactoryTest.java @@ -1,15 +1,14 @@ -package com.amazonaws.servlerss.proxy.spring.embedded; +package com.amazonaws.serverless.proxy.spring.embedded; import com.amazonaws.serverless.exceptions.ContainerInitializationException; import com.amazonaws.serverless.proxy.AwsProxyExceptionHandler; import com.amazonaws.serverless.proxy.AwsProxySecurityContextWriter; -import com.amazonaws.serverless.proxy.SyncInitializationWrapper; +import com.amazonaws.serverless.proxy.InitializationWrapper; import com.amazonaws.serverless.proxy.internal.servlet.AwsProxyHttpServletRequestReader; import com.amazonaws.serverless.proxy.internal.servlet.AwsProxyHttpServletResponseWriter; import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.serverless.proxy.model.AwsProxyResponse; import com.amazonaws.serverless.proxy.spring.SpringBootLambdaContainerHandler; -import com.amazonaws.serverless.proxy.spring.embedded.ServerlessServletEmbeddedServerFactory; import org.junit.Test; import org.springframework.boot.web.servlet.ServletContextInitializer; @@ -19,7 +18,7 @@ import static org.junit.Assert.fail; public class ServerlessServletEmbeddedServerFactoryTest { - private SpringBootLambdaContainerHandler handler = new SpringBootLambdaContainerHandler( + private SpringBootLambdaContainerHandler handler = new SpringBootLambdaContainerHandler<>( AwsProxyRequest.class, AwsProxyResponse.class, new AwsProxyHttpServletRequestReader(), @@ -27,7 +26,7 @@ public class ServerlessServletEmbeddedServerFactoryTest { new AwsProxySecurityContextWriter(), new AwsProxyExceptionHandler(), null, - new SyncInitializationWrapper() + new InitializationWrapper() ); public ServerlessServletEmbeddedServerFactoryTest() throws ContainerInitializationException { diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/securityapp/LambdaHandler.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/securityapp/LambdaHandler.java new file mode 100644 index 000000000..75dc158ab --- /dev/null +++ b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/securityapp/LambdaHandler.java @@ -0,0 +1,26 @@ +package com.amazonaws.serverless.proxy.spring.securityapp; + +import com.amazonaws.serverless.exceptions.ContainerInitializationException; +import com.amazonaws.serverless.proxy.internal.servlet.AwsProxyHttpServletRequest; +import com.amazonaws.serverless.proxy.model.AwsProxyRequest; +import com.amazonaws.serverless.proxy.model.AwsProxyResponse; +import com.amazonaws.serverless.proxy.spring.SpringBootLambdaContainerHandler; +import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.RequestHandler; + +public class LambdaHandler implements RequestHandler { + private static SpringBootLambdaContainerHandler handler; + + static { + try { + handler = SpringBootLambdaContainerHandler.getAwsProxyHandler(ServletApplication.class); + } catch (ContainerInitializationException e) { + e.printStackTrace(); + } + } + + @Override + public AwsProxyResponse handleRequest(AwsProxyRequest awsProxyRequest, Context context) { + return handler.proxy(awsProxyRequest, context); + } +} diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/securityapp/MessageController.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/securityapp/MessageController.java new file mode 100644 index 000000000..c1d3f157b --- /dev/null +++ b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/securityapp/MessageController.java @@ -0,0 +1,16 @@ +package com.amazonaws.serverless.proxy.spring.securityapp; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class MessageController { + public static final String HELLO_MESSAGE = "Hello"; + + @RequestMapping(path="/hello", method=RequestMethod.GET, produces = {"text/plain"}) + public String hello() { + System.out.println("Invoke hello"); + return HELLO_MESSAGE; + } +} diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/securityapp/SecurityConfig.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/securityapp/SecurityConfig.java new file mode 100644 index 000000000..128ae3dd8 --- /dev/null +++ b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/securityapp/SecurityConfig.java @@ -0,0 +1,61 @@ +package com.amazonaws.serverless.proxy.spring.securityapp; + +import org.springframework.beans.factory.ObjectProvider; +import org.springframework.boot.autoconfigure.security.SecurityProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.web.reactive.EnableWebFluxSecurity; +import org.springframework.security.config.web.server.ServerHttpSecurity; +import org.springframework.security.core.userdetails.MapReactiveUserDetailsService; +import org.springframework.security.core.userdetails.User; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.security.web.server.SecurityWebFilterChain; + +@Configuration +@EnableWebFluxSecurity +public class SecurityConfig { + public static final String USERNAME = "user"; + public static String PASSWORD = "testPassword"; + public static BCryptPasswordEncoder pEncoder = new BCryptPasswordEncoder(); + + @Bean + public SecurityWebFilterChain securitygWebFilterChain( + ServerHttpSecurity http) { + return http.authorizeExchange() + .anyExchange().authenticated() + .and().httpBasic() + .and().build(); + } + + @Bean + public MapReactiveUserDetailsService reactiveUserDetailsService(SecurityProperties properties, ObjectProvider passwordEncoder) { + return new MapReactiveUserDetailsService(getUser()); + } + + private UserDetails getUser() { + return User.builder().username(USERNAME).password(passwordEncoder().encode(PASSWORD)).authorities("USER").build(); + } + + @Bean + public PasswordEncoder passwordEncoder() { + return pEncoder; + } + + /*@Autowired + public void configureGlobal(AuthenticationManagerBuilder authentication) + throws Exception + { + authentication.inMemoryAuthentication() + .withUser(USERNAME) + .password(passwordEncoder().encode(PASSWORD)) + .authorities("ROLE_USER"); + if (userService != null) { + if (userService.loadUserByUsername("user") != null) { + System.out.println("Setting password in configureGlobal"); + PASSWORD = userService.loadUserByUsername("user").getPassword().replace("{noop}", ""); + } + } + }*/ +} diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/securityapp/ServletApplication.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/securityapp/ServletApplication.java new file mode 100644 index 000000000..2f1def12a --- /dev/null +++ b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/securityapp/ServletApplication.java @@ -0,0 +1,13 @@ +package com.amazonaws.serverless.proxy.spring.securityapp; + +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.security.reactive.ReactiveUserDetailsServiceAutoConfiguration; +import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration; +import org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration; +import org.springframework.boot.autoconfigure.web.reactive.WebFluxAutoConfiguration; +import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; + +@SpringBootApplication() +public class ServletApplication { +} diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/LambdaHandler.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/LambdaHandler.java index c6b4e0b76..7faf9b1b8 100644 --- a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/LambdaHandler.java +++ b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/LambdaHandler.java @@ -1,6 +1,7 @@ -package com.amazonaws.servlerss.proxy.spring.servletapp; +package com.amazonaws.serverless.proxy.spring.servletapp; import com.amazonaws.serverless.exceptions.ContainerInitializationException; +import com.amazonaws.serverless.proxy.internal.servlet.AwsProxyHttpServletRequest; import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.serverless.proxy.model.AwsProxyResponse; import com.amazonaws.serverless.proxy.spring.SpringBootLambdaContainerHandler; diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/MessageController.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/MessageController.java index 48731347b..937b2432b 100644 --- a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/MessageController.java +++ b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/MessageController.java @@ -1,4 +1,4 @@ -package com.amazonaws.servlerss.proxy.spring.servletapp; +package com.amazonaws.serverless.proxy.spring.servletapp; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/ServletApplication.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/ServletApplication.java index a85851b88..927dd6ce5 100644 --- a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/ServletApplication.java +++ b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/ServletApplication.java @@ -1,4 +1,4 @@ -package com.amazonaws.servlerss.proxy.spring.servletapp; +package com.amazonaws.serverless.proxy.spring.servletapp; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/slowapp/LambdaHandler.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/slowapp/LambdaHandler.java new file mode 100644 index 000000000..bd696a990 --- /dev/null +++ b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/slowapp/LambdaHandler.java @@ -0,0 +1,41 @@ +package com.amazonaws.serverless.proxy.spring.slowapp; + +import com.amazonaws.serverless.exceptions.ContainerInitializationException; +import com.amazonaws.serverless.proxy.internal.servlet.AwsProxyHttpServletRequest; +import com.amazonaws.serverless.proxy.model.AwsProxyRequest; +import com.amazonaws.serverless.proxy.model.AwsProxyResponse; +import com.amazonaws.serverless.proxy.spring.SpringBootLambdaContainerHandler; +import com.amazonaws.serverless.proxy.spring.SpringBootProxyHandlerBuilder; +import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.RequestHandler; + +import java.time.Instant; + +public class LambdaHandler implements RequestHandler { + private SpringBootLambdaContainerHandler handler; + private long constructorTime; + + public LambdaHandler() { + try { + long startTime = Instant.now().toEpochMilli(); + System.out.println("startCall: " + startTime); + handler = new SpringBootProxyHandlerBuilder() + .defaultProxy() + .asyncInit(startTime) + .springBootApplication(SlowTestApplication.class) + .buildAndInitialize(); + constructorTime = Instant.now().toEpochMilli() - startTime; + } catch (ContainerInitializationException e) { + e.printStackTrace(); + } + } + + public long getConstructorTime() { + return constructorTime; + } + + @Override + public AwsProxyResponse handleRequest(AwsProxyRequest awsProxyRequest, Context context) { + return handler.proxy(awsProxyRequest, context); + } +} diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/slowapp/MessageController.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/slowapp/MessageController.java new file mode 100644 index 000000000..098e8e7df --- /dev/null +++ b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/slowapp/MessageController.java @@ -0,0 +1,15 @@ +package com.amazonaws.serverless.proxy.spring.slowapp; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class MessageController { + public static final String HELLO_MESSAGE = "Hello"; + + @RequestMapping(path="/hello", method= RequestMethod.GET) + public String hello() { + return HELLO_MESSAGE; + } +} diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/slowapp/SlowTestApplication.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/slowapp/SlowTestApplication.java new file mode 100644 index 000000000..b3fe177a1 --- /dev/null +++ b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/slowapp/SlowTestApplication.java @@ -0,0 +1,24 @@ +package com.amazonaws.serverless.proxy.spring.slowapp; + +import org.springframework.beans.factory.InitializingBean; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.stereotype.Component; + +import java.time.Instant; + +@SpringBootApplication(exclude = { + org.springframework.boot.autoconfigure.security.reactive.ReactiveUserDetailsServiceAutoConfiguration.class, + org.springframework.boot.autoconfigure.security.reactive.ReactiveSecurityAutoConfiguration.class +}) +public class SlowTestApplication { + + @Component + public static class SlowDownInit implements InitializingBean { + public static final int INIT_SLEEP_TIME_MS = 13_000; + + @Override + public void afterPropertiesSet() throws Exception { + Thread.sleep(INIT_SLEEP_TIME_MS); + } + } +} diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/webfluxapp/LambdaHandler.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/webfluxapp/LambdaHandler.java index 60dcbd4a3..913da5bbc 100644 --- a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/webfluxapp/LambdaHandler.java +++ b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/webfluxapp/LambdaHandler.java @@ -1,6 +1,7 @@ -package com.amazonaws.servlerss.proxy.spring.webfluxapp; +package com.amazonaws.serverless.proxy.spring.webfluxapp; import com.amazonaws.serverless.exceptions.ContainerInitializationException; +import com.amazonaws.serverless.proxy.internal.servlet.AwsProxyHttpServletRequest; import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.serverless.proxy.model.AwsProxyResponse; import com.amazonaws.serverless.proxy.spring.SpringBootLambdaContainerHandler; diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/webfluxapp/MessageController.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/webfluxapp/MessageController.java index a507ff978..65ce07862 100644 --- a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/webfluxapp/MessageController.java +++ b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/webfluxapp/MessageController.java @@ -1,4 +1,4 @@ -package com.amazonaws.servlerss.proxy.spring.webfluxapp; +package com.amazonaws.serverless.proxy.spring.webfluxapp; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/webfluxapp/WebFluxTestApplication.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/webfluxapp/WebFluxTestApplication.java index b3f14a0e4..04d48ff3d 100644 --- a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/webfluxapp/WebFluxTestApplication.java +++ b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/webfluxapp/WebFluxTestApplication.java @@ -1,4 +1,4 @@ -package com.amazonaws.servlerss.proxy.spring.webfluxapp; +package com.amazonaws.serverless.proxy.spring.webfluxapp; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.ComponentScan; From a007be98c308617918b9b0f0eff040c07b175425 Mon Sep 17 00:00:00 2001 From: sapessi Date: Thu, 26 Sep 2019 11:59:37 -0700 Subject: [PATCH 047/888] Renamed Reactive embedded server class to clarify that it still relies on the Servlet specs --- .../proxy/spring/SpringBootLambdaContainerHandler.java | 6 +++--- ... => ServerlessReactiveServletEmbeddedServerFactory.java} | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) rename aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/embedded/{ServerlessReactiveEmbeddedServerFactory.java => ServerlessReactiveServletEmbeddedServerFactory.java} (95%) diff --git a/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java b/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java index b6f6973ca..d1debceaa 100644 --- a/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java +++ b/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java @@ -18,7 +18,7 @@ import com.amazonaws.serverless.proxy.internal.testutils.Timer; import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.serverless.proxy.model.AwsProxyResponse; -import com.amazonaws.serverless.proxy.spring.embedded.ServerlessReactiveEmbeddedServerFactory; +import com.amazonaws.serverless.proxy.spring.embedded.ServerlessReactiveServletEmbeddedServerFactory; import com.amazonaws.serverless.proxy.spring.embedded.ServerlessServletEmbeddedServerFactory; import com.amazonaws.services.lambda.runtime.Context; import org.slf4j.Logger; @@ -54,7 +54,7 @@ public class SpringBootLambdaContainerHandler extends * We need to rely on the static instance of this for SpringBoot because we need it to access the ServletContext. * Normally, SpringBoot would initialize its own embedded container through the SpringApplication.run() * method. However, in our case we need to rely on the pre-initialized handler and need to fetch information from it - * for our mock {@link com.amazonaws.serverless.proxy.spring.embedded.ServerlessReactiveEmbeddedServerFactory}. + * for our mock {@link ServerlessReactiveServletEmbeddedServerFactory}. * * @return The initialized instance */ @@ -167,7 +167,7 @@ private Class[] getEmbeddedContainerClasses() { // if HandlerAdapter is available we assume they are using WebFlux. Otherwise plain servlet. this.getClass().getClassLoader().loadClass("org.springframework.web.reactive.HandlerAdapter"); log.debug("Found WebFlux HandlerAdapter on classpath, using reactive server factory"); - classes[0] = ServerlessReactiveEmbeddedServerFactory.class; + classes[0] = ServerlessReactiveServletEmbeddedServerFactory.class; } catch (ClassNotFoundException e) { classes[0] = ServerlessServletEmbeddedServerFactory.class; } diff --git a/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessReactiveEmbeddedServerFactory.java b/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessReactiveServletEmbeddedServerFactory.java similarity index 95% rename from aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessReactiveEmbeddedServerFactory.java rename to aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessReactiveServletEmbeddedServerFactory.java index 94a9d2074..7fa366dd9 100644 --- a/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessReactiveEmbeddedServerFactory.java +++ b/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessReactiveServletEmbeddedServerFactory.java @@ -15,7 +15,7 @@ import java.util.Enumeration; @AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE) -public class ServerlessReactiveEmbeddedServerFactory extends AbstractReactiveWebServerFactory implements WebServer, Servlet { +public class ServerlessReactiveServletEmbeddedServerFactory extends AbstractReactiveWebServerFactory implements WebServer, Servlet { private ServletHttpHandlerAdapter handler; private ServletConfig config; static final String SERVLET_NAME = "com.amazonaws.serverless.proxy.spring.embedded.ServerlessReactiveEmbeddedServerFactory"; From 1d3456763f32fda30c065637d3c3f2517f32a16b Mon Sep 17 00:00:00 2001 From: sapessi Date: Thu, 26 Sep 2019 12:44:07 -0700 Subject: [PATCH 048/888] Added comment explaining async initializer in springboot 2 archetyoe --- .../src/main/java/StreamLambdaHandler.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/src/main/java/StreamLambdaHandler.java b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/src/main/java/StreamLambdaHandler.java index e022540c1..ba15c6d69 100644 --- a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/src/main/java/StreamLambdaHandler.java +++ b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/src/main/java/StreamLambdaHandler.java @@ -18,6 +18,13 @@ public class StreamLambdaHandler implements RequestStreamHandler { static { try { handler = SpringBootLambdaContainerHandler.getAwsProxyHandler(Application.class); + // For applications that take longer than 10 seconds to start, use the async builder: + // long startTime = Instant.now().toEpochMilli(); + // handler = new SpringBootProxyHandlerBuilder() + // .defaultProxy() + // .asyncInit(startTime) + // .springBootApplication(Application.class) + // .buildAndInitialize(); } catch (ContainerInitializationException e) { // if we fail here. We re-throw the exception to force another cold start e.printStackTrace(); From 50b76dffb190a9fe3464a640b4caf7bca862d292 Mon Sep 17 00:00:00 2001 From: sapessi Date: Thu, 26 Sep 2019 14:37:52 -0700 Subject: [PATCH 049/888] Bump Jersey version to address #266 --- aws-serverless-java-container-jersey/pom.xml | 8 +++++++- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/jersey/pet-store/pom.xml | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index 80a21388e..6a0dc711f 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -16,7 +16,7 @@ - 2.27 + 2.29.1 @@ -46,6 +46,12 @@ ${jersey.version} true test + + + jakarta.annotation + jakarta.annotation-api + +
diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml index fd34a171e..dcb7a596a 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml @@ -14,7 +14,7 @@ 1.8 1.8 - 2.27 + 2.29.1 2.9.9.3 diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index ddf808ceb..2ac418cd8 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -26,7 +26,7 @@ 1.8 1.8 - 2.27 + 2.29.1 From 5434a8fa76d9881622a5a4b2b81eecc152adff70 Mon Sep 17 00:00:00 2001 From: sapessi Date: Thu, 26 Sep 2019 14:57:49 -0700 Subject: [PATCH 050/888] Bump Spring version --- aws-serverless-java-container-spring/pom.xml | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/spring/pet-store/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 8862e4787..11eb7ad31 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -16,7 +16,7 @@ - 5.1.8.RELEASE + 5.1.9.RELEASE 1.5.21.RELEASE 5.1.5.RELEASE 2.9.9.3 diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index f9c2ee985..a6a574c8b 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 1.8 - 5.1.1.RELEASE + 5.1.9.RELEASE 4.12 2.8.2 diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index 1f60ce0b0..d25d1dc02 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -26,7 +26,7 @@ 1.8 1.8 - 5.1.1.RELEASE + 5.1.9.RELEASE 4.12 2.8.2 From 39756cd11d7796e89436ebb3af7ed83e0a8c6ace Mon Sep 17 00:00:00 2001 From: sapessi Date: Thu, 26 Sep 2019 15:02:27 -0700 Subject: [PATCH 051/888] Bump spring boot version --- aws-serverless-java-container-spring/pom.xml | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/springboot/pet-store/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 11eb7ad31..eef766406 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -17,7 +17,7 @@ 5.1.9.RELEASE - 1.5.21.RELEASE + 1.5.22.RELEASE 5.1.5.RELEASE 2.9.9.3 diff --git a/aws-serverless-springboot-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot-archetype/src/main/resources/archetype-resources/pom.xml index e0ee7b747..f3a4a650b 100644 --- a/aws-serverless-springboot-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-springboot-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ org.springframework.boot spring-boot-starter-parent - 1.5.17.RELEASE + 1.5.22.RELEASE diff --git a/samples/springboot/pet-store/pom.xml b/samples/springboot/pet-store/pom.xml index 51f177e59..639b927a1 100644 --- a/samples/springboot/pet-store/pom.xml +++ b/samples/springboot/pet-store/pom.xml @@ -10,7 +10,7 @@ org.springframework.boot spring-boot-starter-parent - 1.5.17.RELEASE + 1.5.22.RELEASE From 8e70836b352114c719a75629498de2a7952fd601 Mon Sep 17 00:00:00 2001 From: sapessi Date: Thu, 26 Sep 2019 15:05:06 -0700 Subject: [PATCH 052/888] Updated SpringBoot 2 sample to latest code --- .../serverless/sample/springboot2/Application.java | 2 +- .../sample/springboot2/StreamLambdaHandler.java | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/samples/springboot2/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot2/Application.java b/samples/springboot2/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot2/Application.java index e49b1f6d2..d613fc073 100644 --- a/samples/springboot2/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot2/Application.java +++ b/samples/springboot2/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot2/Application.java @@ -21,7 +21,7 @@ @SpringBootApplication @Import({ PetsController.class }) -public class Application extends SpringBootServletInitializer { +public class Application { // silence console logging @Value("${logging.level.root:OFF}") diff --git a/samples/springboot2/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot2/StreamLambdaHandler.java b/samples/springboot2/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot2/StreamLambdaHandler.java index cecee6db4..0b7cf5541 100644 --- a/samples/springboot2/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot2/StreamLambdaHandler.java +++ b/samples/springboot2/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot2/StreamLambdaHandler.java @@ -25,6 +25,14 @@ public class StreamLambdaHandler implements RequestStreamHandler { try { handler = SpringBootLambdaContainerHandler.getAwsProxyHandler(Application.class); + // For applications that take longer than 10 seconds to start, use the async builder: + // long startTime = Instant.now().toEpochMilli(); + // handler = new SpringBootProxyHandlerBuilder() + // .defaultProxy() + // .asyncInit(startTime) + // .springBootApplication(Application.class) + // .buildAndInitialize(); + // we use the onStartup method of the handler to register our custom filter handler.onStartup(servletContext -> { FilterRegistration.Dynamic registration = servletContext.addFilter("CognitoIdentityFilter", CognitoIdentityFilter.class); From bf87475100a05101efba4e0f1b7623e13df82205 Mon Sep 17 00:00:00 2001 From: sapessi Date: Thu, 26 Sep 2019 15:27:39 -0700 Subject: [PATCH 053/888] Bump jackson version and moved dependency version management to property in main pom --- aws-serverless-java-container-core/pom.xml | 3 +-- aws-serverless-java-container-jersey/pom.xml | 2 +- aws-serverless-java-container-spring/pom.xml | 1 - aws-serverless-java-container-struts2/pom.xml | 1 - .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- pom.xml | 1 + samples/jersey/pet-store/pom.xml | 3 ++- samples/spark/pet-store/pom.xml | 2 +- samples/struts/pet-store/pom.xml | 5 ++--- 10 files changed, 10 insertions(+), 12 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index f5fafe2ec..c893a4f68 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -16,7 +16,6 @@ - 2.9.9.3 2.1 3.1.0 @@ -54,7 +53,7 @@ com.fasterxml.jackson.module jackson-module-afterburner - 2.9.9 + ${jackson.version} com.fasterxml.jackson.core diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index 6a0dc711f..164211245 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -66,7 +66,7 @@ com.fasterxml.jackson.core jackson-databind - 2.9.9.3 + ${jackson.version} true test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index eef766406..5d84ed558 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -19,7 +19,6 @@ 5.1.9.RELEASE 1.5.22.RELEASE 5.1.5.RELEASE - 2.9.9.3 diff --git a/aws-serverless-java-container-struts2/pom.xml b/aws-serverless-java-container-struts2/pom.xml index e414eab51..e7537b431 100644 --- a/aws-serverless-java-container-struts2/pom.xml +++ b/aws-serverless-java-container-struts2/pom.xml @@ -16,7 +16,6 @@ 2.5.20 - 2.9.9.3 diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml index dcb7a596a..3282eb25d 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml @@ -15,7 +15,7 @@ 1.8 1.8 2.29.1 - 2.9.9.3 + 2.9.10 diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml index 6d8db9922..86d63cf26 100644 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 1.8 - 2.9.9.3 + 2.9.10 2.8.0 diff --git a/pom.xml b/pom.xml index 203dd981b..c8ecf0828 100644 --- a/pom.xml +++ b/pom.xml @@ -46,6 +46,7 @@ 0.7 5.1.0 + 2.9.10 diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index 2ac418cd8..bd3195460 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -27,6 +27,7 @@ 1.8 1.8 2.29.1 + 2.9.10 @@ -77,7 +78,7 @@ com.fasterxml.jackson.core jackson-databind - 2.9.9.3 + ${jackson.version} diff --git a/samples/spark/pet-store/pom.xml b/samples/spark/pet-store/pom.xml index e71a773bc..9c0bd8d21 100644 --- a/samples/spark/pet-store/pom.xml +++ b/samples/spark/pet-store/pom.xml @@ -26,7 +26,7 @@ 1.8 1.8 - 2.9.9.3 + 2.9.10 2.8.0 diff --git a/samples/struts/pet-store/pom.xml b/samples/struts/pet-store/pom.xml index 2cff49e5a..80c668794 100644 --- a/samples/struts/pet-store/pom.xml +++ b/samples/struts/pet-store/pom.xml @@ -27,8 +27,7 @@ 1.8 1.8 2.5.20 - 2.9.9 - 2.9.9.3 + 2.9.10 4.12 2.11.1 @@ -98,7 +97,7 @@ com.fasterxml.jackson.core jackson-databind - ${jackson-databind.version} + ${jackson.version} From ea3fb4b4b2f9029d636e16db2109022326315532 Mon Sep 17 00:00:00 2001 From: sapessi Date: Thu, 26 Sep 2019 15:50:46 -0700 Subject: [PATCH 054/888] Bump various versions of dependencies in gradle build files (I always forget them) --- .../main/resources/archetype-resources/build.gradle | 6 +++--- .../main/resources/archetype-resources/build.gradle | 4 ++-- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../main/resources/archetype-resources/build.gradle | 6 +++--- .../main/resources/archetype-resources/build.gradle | 2 +- .../main/resources/archetype-resources/build.gradle | 2 +- .../main/resources/archetype-resources/build.gradle | 10 +++++----- samples/jersey/pet-store/build.gradle | 6 +++--- samples/spark/pet-store/build.gradle | 4 ++-- samples/spark/pet-store/pom.xml | 2 +- samples/spring/pet-store/build.gradle | 6 +++--- samples/springboot/pet-store/build.gradle | 2 +- samples/springboot2/pet-store/build.gradle | 4 ++-- samples/struts/pet-store/build.gradle | 2 +- 14 files changed, 29 insertions(+), 29 deletions(-) diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle index eda69dc96..e9324e090 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle @@ -9,17 +9,17 @@ dependencies { compile ( 'com.amazonaws:aws-lambda-java-core:1.2.0', 'com.amazonaws.serverless:aws-serverless-java-container-jersey:[1.0,)', - 'com.fasterxml.jackson.core:jackson-databind:2.9.8', + 'com.fasterxml.jackson.core:jackson-databind:2.9.10', 'io.symphonia:lambda-logging:1.0.1' ) - compile("org.glassfish.jersey.media:jersey-media-json-jackson:2.27") { + compile("org.glassfish.jersey.media:jersey-media-json-jackson:2.29.1") { exclude group: 'com.fasterxml.jackson.core', module: "jackson-annotations" exclude group: 'com.fasterxml.jackson.core', module: "jackson-databind" exclude group: 'com.fasterxml.jackson.core', module: "jackson-core" } - compile("org.glassfish.jersey.inject:jersey-hk2:2.27") { + compile("org.glassfish.jersey.inject:jersey-hk2:2.29.1") { exclude group: 'javax.inject', module: "javax.inject" } diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle index ace7a6b3e..f4e280ce7 100644 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle @@ -7,9 +7,9 @@ repositories { dependencies { compile ( - 'com.sparkjava:spark-core:2.8.0', + 'com.sparkjava:spark-core:2.9.1', 'com.amazonaws.serverless:aws-serverless-java-container-spark:[1.0,)', - 'com.fasterxml.jackson.core:jackson-databind:2.9.8', + 'com.fasterxml.jackson.core:jackson-databind:2.9.10', 'io.symphonia:lambda-logging:1.0.1' ) diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml index 86d63cf26..055fc4321 100644 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml @@ -17,7 +17,7 @@ 1.8 1.8 2.9.10 - 2.8.0 + 2.9.1 diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index ec235eba6..e67eb52e4 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -7,13 +7,13 @@ repositories { dependencies { compile ( - 'org.springframework:spring-webmvc:5.1.1.RELEASE', - 'org.springframework:spring-context:5.1.1.RELEASE', + 'org.springframework:spring-webmvc:5.1.9.RELEASE', + 'org.springframework:spring-context:5.1.9.RELEASE', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[1.0,)', 'org.apache.logging.log4j:log4j-core:2.8.2', 'org.apache.logging.log4j:log4j-api:2.8.2', 'org.apache.logging.log4j:log4j-slf4j-impl:2.8.2', - 'com.fasterxml.jackson.core:jackson-databind:2.9.8', + 'com.fasterxml.jackson.core:jackson-databind:2.9.10', 'com.amazonaws:aws-lambda-java-log4j2:1.1.0', ) diff --git a/aws-serverless-springboot-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-springboot-archetype/src/main/resources/archetype-resources/build.gradle index 88c7d62f7..53c675deb 100644 --- a/aws-serverless-springboot-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-springboot-archetype/src/main/resources/archetype-resources/build.gradle @@ -1,5 +1,5 @@ plugins { - id 'org.springframework.boot' version '1.5.17.RELEASE' + id 'org.springframework.boot' version '1.5.22.RELEASE' } apply plugin: 'java' diff --git a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle index e48a0dc99..e85ac40d8 100644 --- a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle @@ -11,7 +11,7 @@ repositories { dependencies { compile ( - 'org.springframework.boot:spring-boot-starter-web:2.1.1.RELEASE', + 'org.springframework.boot:spring-boot-starter-web:2.1.8.RELEASE', 'com.amazonaws.serverless:aws-serverless-java-container-springboot2:[1.0,)', 'io.symphonia:lambda-logging:1.0.1' ) diff --git a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle index 41046f45e..ee08f5d4c 100644 --- a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle @@ -8,13 +8,13 @@ repositories { dependencies { compile ( 'com.amazonaws.serverless:aws-serverless-java-container-struts2:[1.0,)', - 'org.apache.struts:struts2-convention-plugin:2.5.17', - 'org.apache.struts:struts2-rest-plugin:2.5.17', - 'org.apache.struts:struts2-bean-validation-plugin:2.5.17', - 'org.apache.struts:struts2-junit-plugin:2.5.17', + 'org.apache.struts:struts2-convention-plugin:2.5.20', + 'org.apache.struts:struts2-rest-plugin:2.5.20', + 'org.apache.struts:struts2-bean-validation-plugin:2.5.20', + 'org.apache.struts:struts2-junit-plugin:2.5.20', 'com.jgeppert.struts2:struts2-aws-lambda-support-plugin:1.0.0', 'org.hibernate:hibernate-validator:4.3.2.Final', - 'com.fasterxml.jackson.core:jackson-databind:2.9.8', + 'com.fasterxml.jackson.core:jackson-databind:2.9.10', 'org.apache.logging.log4j:log4j-core:2.8.2', 'org.apache.logging.log4j:log4j-api:2.8.2', 'org.apache.logging.log4j:log4j-slf4j-impl:2.8.2', diff --git a/samples/jersey/pet-store/build.gradle b/samples/jersey/pet-store/build.gradle index 3e9e97628..c719ba130 100644 --- a/samples/jersey/pet-store/build.gradle +++ b/samples/jersey/pet-store/build.gradle @@ -9,17 +9,17 @@ dependencies { compile ( 'com.amazonaws:aws-lambda-java-core:1.2.0', 'com.amazonaws.serverless:aws-serverless-java-container-jersey:[1.0,)', - 'com.fasterxml.jackson.core:jackson-databind:2.9.8', + 'com.fasterxml.jackson.core:jackson-databind:2.9.10', 'io.symphonia:lambda-logging:1.0.1' ) - compile("org.glassfish.jersey.media:jersey-media-json-jackson:2.27") { + compile("org.glassfish.jersey.media:jersey-media-json-jackson:2.29.1") { exclude group: 'com.fasterxml.jackson.core', module: "jackson-annotations" exclude group: 'com.fasterxml.jackson.core', module: "jackson-databind" exclude group: 'com.fasterxml.jackson.core', module: "jackson-core" } - compile("org.glassfish.jersey.inject:jersey-hk2:2.27") { + compile("org.glassfish.jersey.inject:jersey-hk2:2.29.1") { exclude group: 'javax.inject', module: "javax.inject" } } diff --git a/samples/spark/pet-store/build.gradle b/samples/spark/pet-store/build.gradle index 681dd4df2..6b6c70129 100644 --- a/samples/spark/pet-store/build.gradle +++ b/samples/spark/pet-store/build.gradle @@ -7,9 +7,9 @@ repositories { dependencies { compile ( - 'com.sparkjava:spark-core:2.8.0', + 'com.sparkjava:spark-core:2.9.1', 'com.amazonaws.serverless:aws-serverless-java-container-spark:[1.0,)', - 'com.fasterxml.jackson.core:jackson-databind:2.9.8', + 'com.fasterxml.jackson.core:jackson-databind:2.9.10', 'io.symphonia:lambda-logging:1.0.1' ) } diff --git a/samples/spark/pet-store/pom.xml b/samples/spark/pet-store/pom.xml index 9c0bd8d21..1b1a370d6 100644 --- a/samples/spark/pet-store/pom.xml +++ b/samples/spark/pet-store/pom.xml @@ -27,7 +27,7 @@ 1.8 1.8 2.9.10 - 2.8.0 + 2.9.1 diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index 73e18d968..7d7a74c44 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -7,13 +7,13 @@ repositories { dependencies { compile ( - 'org.springframework:spring-webmvc:5.1.1.RELEASE', - 'org.springframework:spring-context:5.1.1.RELEASE', + 'org.springframework:spring-webmvc:5.1.9.RELEASE', + 'org.springframework:spring-context:5.1.9.RELEASE', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[1.0,)', 'org.apache.logging.log4j:log4j-core:2.8.2', 'org.apache.logging.log4j:log4j-api:2.8.2', 'org.apache.logging.log4j:log4j-slf4j-impl:2.8.2', - 'com.fasterxml.jackson.core:jackson-databind:2.9.8', + 'com.fasterxml.jackson.core:jackson-databind:2.9.10', 'com.amazonaws:aws-lambda-java-log4j2:1.1.0', ) } diff --git a/samples/springboot/pet-store/build.gradle b/samples/springboot/pet-store/build.gradle index 1c5e5d489..53295266a 100644 --- a/samples/springboot/pet-store/build.gradle +++ b/samples/springboot/pet-store/build.gradle @@ -1,5 +1,5 @@ plugins { - id 'org.springframework.boot' version '1.5.17.RELEASE' + id 'org.springframework.boot' version '1.5.22.RELEASE' } apply plugin: 'java' diff --git a/samples/springboot2/pet-store/build.gradle b/samples/springboot2/pet-store/build.gradle index 7a9c8b9f2..65826e900 100644 --- a/samples/springboot2/pet-store/build.gradle +++ b/samples/springboot2/pet-store/build.gradle @@ -1,5 +1,5 @@ plugins { - id 'org.springframework.boot' version '2.1.1.RELEASE' + id 'org.springframework.boot' version '2.1.8.RELEASE' } apply plugin: 'java' @@ -11,7 +11,7 @@ repositories { dependencies { compile ( - implementation('org.springframework.boot:spring-boot-starter-web:2.1.1.RELEASE') { + implementation('org.springframework.boot:spring-boot-starter-web:2.1.8.RELEASE') { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat' }, 'com.amazonaws.serverless:aws-serverless-java-container-springboot2:[1.0,)', diff --git a/samples/struts/pet-store/build.gradle b/samples/struts/pet-store/build.gradle index 829ca79bb..9f2ccf09a 100644 --- a/samples/struts/pet-store/build.gradle +++ b/samples/struts/pet-store/build.gradle @@ -14,7 +14,7 @@ dependencies { 'org.apache.struts:struts2-junit-plugin:2.5.20', 'com.jgeppert.struts2:struts2-aws-lambda-support-plugin:1.1.0', 'org.hibernate:hibernate-validator:4.3.2.Final', - 'com.fasterxml.jackson.core:jackson-databind:2.9.8', + 'com.fasterxml.jackson.core:jackson-databind:2.9.10', 'org.apache.logging.log4j:log4j-core:2.8.2', 'org.apache.logging.log4j:log4j-api:2.8.2', 'org.apache.logging.log4j:log4j-slf4j-impl:2.8.2', From 96bc2f597ad017984799cc1bf100895a6b1282eb Mon Sep 17 00:00:00 2001 From: sapessi Date: Thu, 26 Sep 2019 20:52:12 -0700 Subject: [PATCH 055/888] Added latch countdown on exception to address a potential leak in the implementation of #273 --- .../serverless/proxy/internal/LambdaContainerHandler.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/LambdaContainerHandler.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/LambdaContainerHandler.java index 1e9bfaa80..3bb401d17 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/LambdaContainerHandler.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/LambdaContainerHandler.java @@ -195,9 +195,9 @@ public void setLogFormatter(LogFormatter Date: Thu, 26 Sep 2019 21:23:30 -0700 Subject: [PATCH 056/888] Basic implementation of createListener in async context --- .../proxy/internal/servlet/AwsAsyncContext.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContext.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContext.java index daab77e39..906bc6fcd 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContext.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContext.java @@ -91,7 +91,7 @@ public void complete() { @Override public void start(Runnable runnable) { - throw new UnsupportedOperationException("Cannot start background tasks"); + throw new UnsupportedOperationException("Operation not supported"); } @Override @@ -109,7 +109,11 @@ public void addListener(AsyncListener asyncListener, ServletRequest servletReque @Override public T createListener(Class aClass) throws ServletException { - return null; + try { + return aClass.newInstance(); + } catch (InstantiationException | IllegalAccessException e) { + throw new ServletException(e); + } } @Override From 4fec44933fcc61a46a58de48ccd8886089fcc9e7 Mon Sep 17 00:00:00 2001 From: sapessi Date: Thu, 26 Sep 2019 22:06:06 -0700 Subject: [PATCH 057/888] Attempting to replicate cookie issue reported in #274 --- .../serverless/proxy/spark/HelloWorldSparkTest.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/HelloWorldSparkTest.java b/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/HelloWorldSparkTest.java index 4e09a35dd..108eeabeb 100644 --- a/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/HelloWorldSparkTest.java +++ b/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/HelloWorldSparkTest.java @@ -35,6 +35,8 @@ public class HelloWorldSparkTest { private static final String COOKIE_DOMAIN = "mydomain.com"; private static final String COOKIE_PATH = "/"; + private static final String READ_COOKIE_NAME = "customCookie"; + private static SparkLambdaContainerHandler handler; private boolean isAlb; @@ -122,6 +124,13 @@ public void rootResource_basicRequest_expectSuccess() { assertEquals(BODY_TEXT_RESPONSE, response.getBody()); } + @Test + public void readCookie_customDomainName_expectValidCookie() { + AwsProxyRequest req = getRequestBuilder().method("GET").path("/cookie-read").cookie(READ_COOKIE_NAME, "test").build(); + AwsProxyResponse response = handler.proxy(req, new MockLambdaContext()); + assertEquals("test", response.getBody()); + } + private static void configureRoutes() { get("/", (req, res) -> { res.status(200); @@ -154,5 +163,7 @@ private static void configureRoutes() { res.raw().addCookie(testCookie2); return BODY_TEXT_RESPONSE; }); + + get("/cookie-read", (req, res) -> req.cookie(READ_COOKIE_NAME)); } } From ae6fd4fd1e3fed751b7d6713d2db2830e061c5ee Mon Sep 17 00:00:00 2001 From: sapessi Date: Fri, 27 Sep 2019 08:34:54 -0700 Subject: [PATCH 058/888] Added slow init tests for Spring and SpringBoot 1.x applications that use the asyn initialization wrapper (#210) --- .../serverless/proxy/spring/SlowAppTest.java | 60 +++++++++++++++++++ .../springbootslowapp/MessageController.java | 15 +++++ .../springbootslowapp/SBLambdaHandler.java | 40 +++++++++++++ .../springbootslowapp/TestApplication.java | 25 ++++++++ .../spring/springslowapp/LambdaHandler.java | 35 +++++++++++ .../springslowapp/MessageController.java | 15 +++++ .../spring/springslowapp/SlowAppConfig.java | 20 +++++++ 7 files changed, 210 insertions(+) create mode 100644 aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SlowAppTest.java create mode 100644 aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springbootslowapp/MessageController.java create mode 100644 aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springbootslowapp/SBLambdaHandler.java create mode 100644 aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springbootslowapp/TestApplication.java create mode 100644 aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springslowapp/LambdaHandler.java create mode 100644 aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springslowapp/MessageController.java create mode 100644 aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springslowapp/SlowAppConfig.java diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SlowAppTest.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SlowAppTest.java new file mode 100644 index 000000000..2d1495905 --- /dev/null +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SlowAppTest.java @@ -0,0 +1,60 @@ +package com.amazonaws.serverless.proxy.spring; + +import com.amazonaws.serverless.exceptions.ContainerInitializationException; +import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; +import com.amazonaws.serverless.proxy.internal.testutils.MockLambdaContext; +import com.amazonaws.serverless.proxy.model.AwsProxyRequest; +import com.amazonaws.serverless.proxy.model.AwsProxyResponse; +import com.amazonaws.serverless.proxy.spring.springbootslowapp.SBLambdaHandler; +import com.amazonaws.serverless.proxy.spring.springslowapp.LambdaHandler; +import com.amazonaws.serverless.proxy.spring.springslowapp.MessageController; +import com.amazonaws.serverless.proxy.spring.springslowapp.SlowAppConfig; +import org.junit.Assert; +import org.junit.Test; + +import java.time.Instant; + +import static org.junit.Assert.*; + +public class SlowAppTest { + + @Test + public void springSlowApp_continuesInBackgroundThread_returnsCorrect() { + LambdaHandler slowApp = null; + try { + slowApp = new LambdaHandler(); + } catch (ContainerInitializationException e) { + e.printStackTrace(); + fail("Exception during initialization"); + } + System.out.println("Start time: " + slowApp.getConstructorTime()); + assertTrue(slowApp.getConstructorTime() < 10_000); + AwsProxyRequest req = new AwsProxyRequestBuilder("/hello", "GET").build(); + long startRequestTime = Instant.now().toEpochMilli(); + AwsProxyResponse resp = slowApp.handleRequest(req, new MockLambdaContext()); + long endRequestTime = Instant.now().toEpochMilli(); + assertTrue(endRequestTime - startRequestTime > SlowAppConfig.SlowDownInit.INIT_SLEEP_TIME_MS - 10_000); + assertEquals(200, resp.getStatusCode()); + Assert.assertEquals(MessageController.HELLO_MESSAGE, resp.getBody()); + } + + @Test + public void springBootSlowApp_continuesInBackgroundThread_returnsCorrect() { + SBLambdaHandler slowApp = null; + try { + slowApp = new SBLambdaHandler(); + } catch (ContainerInitializationException e) { + e.printStackTrace(); + fail("Exception during initialization"); + } + System.out.println("Start time: " + slowApp.getConstructorTime()); + assertTrue(slowApp.getConstructorTime() < 10_000); + AwsProxyRequest req = new AwsProxyRequestBuilder("/hello", "GET").build(); + long startRequestTime = Instant.now().toEpochMilli(); + AwsProxyResponse resp = slowApp.handleRequest(req, new MockLambdaContext()); + long endRequestTime = Instant.now().toEpochMilli(); + assertTrue(endRequestTime - startRequestTime > SlowAppConfig.SlowDownInit.INIT_SLEEP_TIME_MS - 10_000); + assertEquals(200, resp.getStatusCode()); + Assert.assertEquals(MessageController.HELLO_MESSAGE, resp.getBody()); + } +} diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springbootslowapp/MessageController.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springbootslowapp/MessageController.java new file mode 100644 index 000000000..20dda4174 --- /dev/null +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springbootslowapp/MessageController.java @@ -0,0 +1,15 @@ +package com.amazonaws.serverless.proxy.spring.springbootslowapp; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class MessageController { + public static final String HELLO_MESSAGE = "Hello"; + + @RequestMapping(path="/hello", method= RequestMethod.GET) + public String hello() { + return HELLO_MESSAGE; + } +} diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springbootslowapp/SBLambdaHandler.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springbootslowapp/SBLambdaHandler.java new file mode 100644 index 000000000..64a399a22 --- /dev/null +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springbootslowapp/SBLambdaHandler.java @@ -0,0 +1,40 @@ +package com.amazonaws.serverless.proxy.spring.springbootslowapp; + + +import com.amazonaws.serverless.exceptions.ContainerInitializationException; +import com.amazonaws.serverless.proxy.model.AwsProxyRequest; +import com.amazonaws.serverless.proxy.model.AwsProxyResponse; +import com.amazonaws.serverless.proxy.spring.SpringBootLambdaContainerHandler; +import com.amazonaws.serverless.proxy.spring.SpringBootProxyHandlerBuilder; +import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.RequestHandler; + +import java.time.Instant; + + +public class SBLambdaHandler + implements RequestHandler +{ + SpringBootLambdaContainerHandler handler; + private long constructorTime; + + public SBLambdaHandler() throws ContainerInitializationException { + long startTime = Instant.now().toEpochMilli(); + handler = new SpringBootProxyHandlerBuilder() + .defaultProxy() + .asyncInit(startTime) + .springBootApplication(TestApplication.class) + .buildAndInitialize(); + constructorTime = Instant.now().toEpochMilli() - startTime; + } + + public long getConstructorTime() { + return constructorTime; + } + + public AwsProxyResponse handleRequest(AwsProxyRequest awsProxyRequest, Context context) + { + return handler.proxy(awsProxyRequest, context); + } +} + diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springbootslowapp/TestApplication.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springbootslowapp/TestApplication.java new file mode 100644 index 000000000..d55fc30c5 --- /dev/null +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springbootslowapp/TestApplication.java @@ -0,0 +1,25 @@ +package com.amazonaws.serverless.proxy.spring.springbootslowapp; + + +import org.springframework.beans.factory.InitializingBean; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.web.support.SpringBootServletInitializer; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.PropertySource; +import org.springframework.stereotype.Component; + + +@SpringBootApplication +@ComponentScan(basePackages = "com.amazonaws.serverless.proxy.spring.springbootslowapp") +@PropertySource("classpath:boot-application.properties") +public class TestApplication extends SpringBootServletInitializer { + @Component + public static class SlowDownInit implements InitializingBean { + public static final int INIT_SLEEP_TIME_MS = 13_000; + + @Override + public void afterPropertiesSet() throws Exception { + Thread.sleep(INIT_SLEEP_TIME_MS); + } + } +} diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springslowapp/LambdaHandler.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springslowapp/LambdaHandler.java new file mode 100644 index 000000000..b61a7191f --- /dev/null +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springslowapp/LambdaHandler.java @@ -0,0 +1,35 @@ +package com.amazonaws.serverless.proxy.spring.springslowapp; + +import com.amazonaws.serverless.exceptions.ContainerInitializationException; +import com.amazonaws.serverless.proxy.model.AwsProxyRequest; +import com.amazonaws.serverless.proxy.model.AwsProxyResponse; +import com.amazonaws.serverless.proxy.spring.SpringLambdaContainerHandler; +import com.amazonaws.serverless.proxy.spring.SpringProxyHandlerBuilder; +import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.RequestHandler; + +import java.time.Instant; + +public class LambdaHandler implements RequestHandler { + private SpringLambdaContainerHandler handler; + private long constructorTime; + + public LambdaHandler() throws ContainerInitializationException { + long startTime = Instant.now().toEpochMilli(); + handler = new SpringProxyHandlerBuilder() + .defaultProxy() + .asyncInit(startTime) + .configurationClasses(SlowAppConfig.class) + .buildAndInitialize(); + constructorTime = Instant.now().toEpochMilli() - startTime; + } + + public long getConstructorTime() { + return constructorTime; + } + + @Override + public AwsProxyResponse handleRequest(AwsProxyRequest awsProxyRequest, Context context) { + return handler.proxy(awsProxyRequest, context); + } +} diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springslowapp/MessageController.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springslowapp/MessageController.java new file mode 100644 index 000000000..85bce73ae --- /dev/null +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springslowapp/MessageController.java @@ -0,0 +1,15 @@ +package com.amazonaws.serverless.proxy.spring.springslowapp; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class MessageController { + public static final String HELLO_MESSAGE = "Hello"; + + @RequestMapping(path="/hello", method= RequestMethod.GET) + public String hello() { + return HELLO_MESSAGE; + } +} diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springslowapp/SlowAppConfig.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springslowapp/SlowAppConfig.java new file mode 100644 index 000000000..1b8eec186 --- /dev/null +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springslowapp/SlowAppConfig.java @@ -0,0 +1,20 @@ +package com.amazonaws.serverless.proxy.spring.springslowapp; + +import org.springframework.beans.factory.InitializingBean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import org.springframework.stereotype.Component; + +@Configuration +@Import({MessageController.class}) +public class SlowAppConfig { + @Component + public static class SlowDownInit implements InitializingBean { + public static final int INIT_SLEEP_TIME_MS = 13_000; + + @Override + public void afterPropertiesSet() throws Exception { + Thread.sleep(INIT_SLEEP_TIME_MS); + } + } +} From 3d0570028a0dc07aa4445b2fc4389180a2366ab9 Mon Sep 17 00:00:00 2001 From: sapessi Date: Sat, 28 Sep 2019 16:26:47 -0700 Subject: [PATCH 059/888] Implementation of isAsyncStarted in proxy request was missing --- .../proxy/internal/servlet/AwsProxyHttpServletRequest.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java index eb5d90252..2c54816d3 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java @@ -668,6 +668,11 @@ public boolean isAsyncSupported() { return true; } + @Override + public boolean isAsyncStarted() { + return asyncContext != null; + } + @Override public AsyncContext startAsync() From 02792504b45697d315232216247446ffff46ec83 Mon Sep 17 00:00:00 2001 From: sapessi Date: Sat, 28 Sep 2019 16:27:37 -0700 Subject: [PATCH 060/888] Fix on request dispatcher to maintain compatibility with spring 4.3.x and test fixes for older spring --- .../internal/servlet/AwsProxyRequestDispatcher.java | 4 ---- .../spring/springbootslowapp/TestApplication.java | 11 ++++++----- .../proxy/spring/springslowapp/MessageController.java | 2 ++ .../proxy/spring/springslowapp/SlowAppConfig.java | 2 ++ 4 files changed, 10 insertions(+), 9 deletions(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyRequestDispatcher.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyRequestDispatcher.java index da1c6d38a..2ffcc97de 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyRequestDispatcher.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyRequestDispatcher.java @@ -39,10 +39,6 @@ public class AwsProxyRequestDispatcher implements RequestDispatcher { public AwsProxyRequestDispatcher(final String target, final boolean namedDispatcher, final AwsLambdaServletContainerHandler handler) { - if (!namedDispatcher && !target.startsWith("/")) { - throw new UnsupportedOperationException("Only dispatchers with absolute paths are supported"); - } - isNamedDispatcher = namedDispatcher; dispatchTo = target; lambdaContainerHandler = handler; diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springbootslowapp/TestApplication.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springbootslowapp/TestApplication.java index d55fc30c5..7e9dce5a9 100644 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springbootslowapp/TestApplication.java +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springbootslowapp/TestApplication.java @@ -5,13 +5,14 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.web.support.SpringBootServletInitializer; import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.PropertySource; import org.springframework.stereotype.Component; - -@SpringBootApplication -@ComponentScan(basePackages = "com.amazonaws.serverless.proxy.spring.springbootslowapp") -@PropertySource("classpath:boot-application.properties") +// Need to explicitly exclude security because of some bizarre witchcraft inside SpringBoot that +// enables it even when I don't ask for it - this is only true when I test against spring-webmvc 4.3.x +@SpringBootApplication(exclude = { + org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration.class +}) +@ComponentScan(basePackages="com.amazonaws.serverless.proxy.spring.springbootslowapp") public class TestApplication extends SpringBootServletInitializer { @Component public static class SlowDownInit implements InitializingBean { diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springslowapp/MessageController.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springslowapp/MessageController.java index 85bce73ae..1c8abd20d 100644 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springslowapp/MessageController.java +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springslowapp/MessageController.java @@ -3,8 +3,10 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; @RestController +@EnableWebMvc public class MessageController { public static final String HELLO_MESSAGE = "Hello"; diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springslowapp/SlowAppConfig.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springslowapp/SlowAppConfig.java index 1b8eec186..d698e30e0 100644 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springslowapp/SlowAppConfig.java +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springslowapp/SlowAppConfig.java @@ -5,9 +5,11 @@ import org.springframework.context.annotation.Import; import org.springframework.stereotype.Component; + @Configuration @Import({MessageController.class}) public class SlowAppConfig { + @Component public static class SlowDownInit implements InitializingBean { public static final int INIT_SLEEP_TIME_MS = 13_000; From b96a9f8af9fc8907a9504232c9cbf90403197724 Mon Sep 17 00:00:00 2001 From: sapessi Date: Sat, 28 Sep 2019 22:34:09 -0700 Subject: [PATCH 061/888] Fix for async context and setting response in proxy servlet request before processing --- .../proxy/internal/servlet/AwsAsyncContext.java | 15 +++++++++++++++ .../servlet/AwsProxyHttpServletRequest.java | 10 ++++++++-- .../spring/SpringBootLambdaContainerHandler.java | 1 + .../spring/SpringLambdaContainerHandler.java | 1 + .../spring/SpringBootLambdaContainerHandler.java | 1 + 5 files changed, 26 insertions(+), 2 deletions(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContext.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContext.java index 906bc6fcd..0b35d7ba5 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContext.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContext.java @@ -11,6 +11,7 @@ import java.io.IOException; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.atomic.AtomicBoolean; /** * Async context for Serverless Java Container. This is used to support reactive embedded servers for our support for @@ -23,6 +24,8 @@ public class AwsAsyncContext implements AsyncContext { private AwsLambdaServletContainerHandler handler; private List listeners; private long timeout; + private AtomicBoolean dispatched; + private AtomicBoolean completed; private Logger log = LoggerFactory.getLogger(AwsAsyncContext.class); @@ -33,6 +36,8 @@ public AwsAsyncContext(HttpServletRequest request, HttpServletResponse response, handler = servletHandler; listeners = new ArrayList<>(); timeout = 3000; + dispatched = new AtomicBoolean(false); + completed = new AtomicBoolean(false); } @Override @@ -57,6 +62,7 @@ public void dispatch() { notifyListeners(NotificationType.START_ASYNC, null); Servlet servlet = ((AwsServletContext)handler.getServletContext()).getServletForPath(req.getPathInfo()); handler.doFilter(req, res, servlet); + dispatched.set(true); } catch (ServletException | IOException e) { notifyListeners(NotificationType.ERROR, e); } @@ -83,6 +89,7 @@ public void complete() { log.debug("Completing request"); notifyListeners(NotificationType.COMPLETE, null); res.flushBuffer(); + completed.set(true); } catch (IOException e) { log.error("Could not flush response buffer", e); throw new RuntimeException(e); @@ -126,6 +133,14 @@ public long getTimeout() { return timeout; } + public boolean isDispatched() { + return dispatched.get(); + } + + public boolean isCompleted() { + return completed.get(); + } + private void notifyListeners(NotificationType type, Throwable t) { listeners.forEach((h) -> { try { diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java index 2c54816d3..8d58850cf 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java @@ -76,7 +76,7 @@ public class AwsProxyHttpServletRequest extends AwsHttpServletRequest { private AwsProxyRequest request; private SecurityContext securityContext; - private AsyncContext asyncContext; + private AwsAsyncContext asyncContext; private Map> urlEncodedFormParameters; private Map multipartFormParameters; private static Logger log = LoggerFactory.getLogger(AwsProxyHttpServletRequest.class); @@ -670,7 +670,13 @@ public boolean isAsyncSupported() { @Override public boolean isAsyncStarted() { - return asyncContext != null; + if (asyncContext == null) { + return false; + } + if (asyncContext.isCompleted() || asyncContext.isDispatched()) { + return false; + } + return true; } diff --git a/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java b/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java index 38994ed3b..4cccb0bf5 100644 --- a/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java +++ b/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java @@ -142,6 +142,7 @@ protected void handleRequest(AwsProxyHttpServletRequest containerRequest, AwsHtt // process filters & invoke servlet Servlet reqServlet = ((AwsServletContext)getServletContext()).getServletForPath(containerRequest.getPathInfo()); + containerRequest.setResponse(containerResponse); doFilter(containerRequest, containerResponse, reqServlet); Timer.stop("SPRINGBOOT_HANDLE_REQUEST"); } diff --git a/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringLambdaContainerHandler.java b/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringLambdaContainerHandler.java index c63165a43..5168fa96b 100644 --- a/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringLambdaContainerHandler.java +++ b/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringLambdaContainerHandler.java @@ -143,6 +143,7 @@ protected void handleRequest(AwsProxyHttpServletRequest containerRequest, AwsHtt // process filters Servlet reqServlet = ((AwsServletContext)getServletContext()).getServletForPath(containerRequest.getPathInfo()); + containerRequest.setResponse(containerResponse); doFilter(containerRequest, containerResponse, reqServlet); Timer.stop("SPRING_HANDLE_REQUEST"); } diff --git a/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java b/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java index d1debceaa..0a854509a 100644 --- a/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java +++ b/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java @@ -138,6 +138,7 @@ protected void handleRequest(AwsProxyHttpServletRequest containerRequest, AwsHtt // process filters & invoke servlet Servlet reqServlet = ((AwsServletContext)getServletContext()).getServletForPath(containerRequest.getPathInfo()); + containerRequest.setResponse(containerResponse); doFilter(containerRequest, containerResponse, reqServlet); Timer.stop("SPRINGBOOT2_HANDLE_REQUEST"); } From aa72b6de6b74d6de7b53eb758b85c0d5f2858426 Mon Sep 17 00:00:00 2001 From: sapessi Date: Sun, 29 Sep 2019 08:12:02 -0700 Subject: [PATCH 062/888] Temporarily disable dependency check until the TLS issue that emerged on the night of 9/28 is fixed --- aws-serverless-java-container-core/pom.xml | 1 + aws-serverless-java-container-jersey/pom.xml | 2 +- aws-serverless-java-container-spark/pom.xml | 2 +- aws-serverless-java-container-spring/pom.xml | 1 + aws-serverless-java-container-springboot2/pom.xml | 1 + aws-serverless-java-container-struts2/pom.xml | 1 + pom.xml | 2 +- 7 files changed, 7 insertions(+), 3 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index c893a4f68..bb42cf04c 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -197,6 +197,7 @@ ${project.basedir}/../owasp-suppression.xml 7 + false diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index 164211245..d53142a83 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -206,7 +206,7 @@ ${project.basedir}/../owasp-suppression.xml 7 - + false diff --git a/aws-serverless-java-container-spark/pom.xml b/aws-serverless-java-container-spark/pom.xml index 8dce826b1..c185bec6a 100644 --- a/aws-serverless-java-container-spark/pom.xml +++ b/aws-serverless-java-container-spark/pom.xml @@ -146,7 +146,7 @@ ${project.basedir}/../owasp-suppression.xml 7 - + false diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 5d84ed558..8e6bff692 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -278,6 +278,7 @@ ${project.basedir}/../owasp-suppression.xml 7 + false diff --git a/aws-serverless-java-container-springboot2/pom.xml b/aws-serverless-java-container-springboot2/pom.xml index 90134a048..caa07ae35 100644 --- a/aws-serverless-java-container-springboot2/pom.xml +++ b/aws-serverless-java-container-springboot2/pom.xml @@ -175,6 +175,7 @@ ${project.basedir}/../owasp-suppression.xml 7 + false diff --git a/aws-serverless-java-container-struts2/pom.xml b/aws-serverless-java-container-struts2/pom.xml index e7537b431..66cfd17a2 100644 --- a/aws-serverless-java-container-struts2/pom.xml +++ b/aws-serverless-java-container-struts2/pom.xml @@ -204,6 +204,7 @@ ${project.basedir}/../owasp-suppression.xml 7 + false diff --git a/pom.xml b/pom.xml index c8ecf0828..e2e48c5ce 100644 --- a/pom.xml +++ b/pom.xml @@ -45,7 +45,7 @@ 0.7 - 5.1.0 + 5.2.2 2.9.10 From 41e37bbe7a9be06216d56f5b84c80429f2a8b439 Mon Sep 17 00:00:00 2001 From: sapessi Date: Sun, 29 Sep 2019 18:34:57 -0700 Subject: [PATCH 063/888] Fixed Javadoc comments in SpringBoot 2 implementation --- .../proxy/spring/SpringBootLambdaContainerHandler.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java b/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java index 0a854509a..5b56e58b1 100644 --- a/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java +++ b/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java @@ -83,12 +83,13 @@ public static SpringBootLambdaContainerHandler requestTypeClass, Class responseTypeClass, From 453f9a63d2ee4fdd985b5cca0fa1d700a875922d Mon Sep 17 00:00:00 2001 From: sapessi Date: Sun, 29 Sep 2019 18:46:43 -0700 Subject: [PATCH 064/888] [maven-release-plugin] prepare release aws-serverless-java-container-1.4 --- aws-serverless-java-container-core/pom.xml | 4 ++-- aws-serverless-java-container-jersey/pom.xml | 6 +++--- aws-serverless-java-container-spark/pom.xml | 6 +++--- aws-serverless-java-container-spring/pom.xml | 6 +++--- aws-serverless-java-container-springboot2/pom.xml | 10 ++++------ aws-serverless-java-container-struts2/pom.xml | 6 +++--- aws-serverless-jersey-archetype/pom.xml | 4 ++-- aws-serverless-spark-archetype/pom.xml | 4 ++-- aws-serverless-spring-archetype/pom.xml | 4 ++-- aws-serverless-springboot-archetype/pom.xml | 4 ++-- aws-serverless-springboot2-archetype/pom.xml | 4 ++-- aws-serverless-struts2-archetype/pom.xml | 4 ++-- pom.xml | 2 +- 13 files changed, 31 insertions(+), 33 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index bb42cf04c..9809df0a0 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Core Allows Java applications written for a servlet container to run in AWS Lambda https://aws.amazon.com/lambda - 1.4-SNAPSHOT + 1.4 com.amazonaws.serverless aws-serverless-java-container - 1.4-SNAPSHOT + 1.4 .. diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index d53142a83..116fab3e3 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Jersey implementation Allows Java applications written for Jersey to run in AWS Lambda https://aws.amazon.com/lambda - 1.4-SNAPSHOT + 1.4 com.amazonaws.serverless aws-serverless-java-container - 1.4-SNAPSHOT + 1.4 .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.4-SNAPSHOT + 1.4 com.fasterxml.jackson.core diff --git a/aws-serverless-java-container-spark/pom.xml b/aws-serverless-java-container-spark/pom.xml index c185bec6a..5247449d9 100644 --- a/aws-serverless-java-container-spark/pom.xml +++ b/aws-serverless-java-container-spark/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spark implementation Allows Java applications written for Spark to run in AWS Lambda https://aws.amazon.com/lambda - 1.4-SNAPSHOT + 1.4 com.amazonaws.serverless aws-serverless-java-container - 1.4-SNAPSHOT + 1.4 .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.4-SNAPSHOT + 1.4 diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 8e6bff692..0a8e0aa97 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spring implementation Allows Java applications written for the Spring framework to run in AWS Lambda https://aws.amazon.com/lambda - 1.4-SNAPSHOT + 1.4 com.amazonaws.serverless aws-serverless-java-container - 1.4-SNAPSHOT + 1.4 .. @@ -26,7 +26,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.4-SNAPSHOT + 1.4 diff --git a/aws-serverless-java-container-springboot2/pom.xml b/aws-serverless-java-container-springboot2/pom.xml index caa07ae35..208640d1b 100644 --- a/aws-serverless-java-container-springboot2/pom.xml +++ b/aws-serverless-java-container-springboot2/pom.xml @@ -1,11 +1,9 @@ - + aws-serverless-java-container com.amazonaws.serverless - 1.4-SNAPSHOT + 1.4 4.0.0 @@ -14,7 +12,7 @@ AWS Serverless Java container support - SpringBoot 2 implementation Allows Java applications written for SpringBoot 2 to run in AWS Lambda https://aws.amazon.com/lambda - 1.4-SNAPSHOT + 1.4 5.1.9.RELEASE @@ -30,7 +28,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.4-SNAPSHOT + 1.4 diff --git a/aws-serverless-java-container-struts2/pom.xml b/aws-serverless-java-container-struts2/pom.xml index 66cfd17a2..e64577c08 100644 --- a/aws-serverless-java-container-struts2/pom.xml +++ b/aws-serverless-java-container-struts2/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Struts2 implementation Allows Java applications written for the Struts2 framework to run in AWS Lambda https://aws.amazon.com/lambda - 1.4-SNAPSHOT + 1.4 com.amazonaws.serverless aws-serverless-java-container - 1.4-SNAPSHOT + 1.4 @@ -23,7 +23,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.4-SNAPSHOT + 1.4 diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index d89ca75b6..e3a311aa1 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -4,12 +4,12 @@ com.amazonaws.serverless aws-serverless-java-container - 1.4-SNAPSHOT + 1.4 com.amazonaws.serverless.archetypes aws-serverless-jersey-archetype - 1.4-SNAPSHOT + 1.4 maven-archetype diff --git a/aws-serverless-spark-archetype/pom.xml b/aws-serverless-spark-archetype/pom.xml index 65c870e59..12103c93a 100644 --- a/aws-serverless-spark-archetype/pom.xml +++ b/aws-serverless-spark-archetype/pom.xml @@ -4,12 +4,12 @@ com.amazonaws.serverless aws-serverless-java-container - 1.4-SNAPSHOT + 1.4 com.amazonaws.serverless.archetypes aws-serverless-spark-archetype - 1.4-SNAPSHOT + 1.4 maven-archetype diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index 35331470f..a96e3dcaa 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -4,12 +4,12 @@ com.amazonaws.serverless aws-serverless-java-container - 1.4-SNAPSHOT + 1.4 com.amazonaws.serverless.archetypes aws-serverless-spring-archetype - 1.4-SNAPSHOT + 1.4 maven-archetype diff --git a/aws-serverless-springboot-archetype/pom.xml b/aws-serverless-springboot-archetype/pom.xml index 011cc1a95..3852fad67 100644 --- a/aws-serverless-springboot-archetype/pom.xml +++ b/aws-serverless-springboot-archetype/pom.xml @@ -4,12 +4,12 @@ com.amazonaws.serverless aws-serverless-java-container - 1.4-SNAPSHOT + 1.4 com.amazonaws.serverless.archetypes aws-serverless-springboot-archetype - 1.4-SNAPSHOT + 1.4 maven-archetype diff --git a/aws-serverless-springboot2-archetype/pom.xml b/aws-serverless-springboot2-archetype/pom.xml index 2ade62df5..c48c9dcbc 100644 --- a/aws-serverless-springboot2-archetype/pom.xml +++ b/aws-serverless-springboot2-archetype/pom.xml @@ -4,12 +4,12 @@ com.amazonaws.serverless aws-serverless-java-container - 1.4-SNAPSHOT + 1.4 com.amazonaws.serverless.archetypes aws-serverless-springboot2-archetype - 1.4-SNAPSHOT + 1.4 maven-archetype diff --git a/aws-serverless-struts2-archetype/pom.xml b/aws-serverless-struts2-archetype/pom.xml index c35780681..aff9e2970 100644 --- a/aws-serverless-struts2-archetype/pom.xml +++ b/aws-serverless-struts2-archetype/pom.xml @@ -4,12 +4,12 @@ com.amazonaws.serverless aws-serverless-java-container - 1.4-SNAPSHOT + 1.4 com.amazonaws.serverless.archetypes aws-serverless-struts2-archetype - 1.4-SNAPSHOT + 1.4 maven-archetype diff --git a/pom.xml b/pom.xml index e2e48c5ce..0d78c27be 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazonaws.serverless aws-serverless-java-container pom - 1.4-SNAPSHOT + 1.4 AWS Serverless Java container From 11d1f85b2593c47b87052d1b566cce69fc74d4d8 Mon Sep 17 00:00:00 2001 From: sapessi Date: Sun, 29 Sep 2019 18:46:43 -0700 Subject: [PATCH 065/888] [maven-release-plugin] prepare for next development iteration --- aws-serverless-java-container-core/pom.xml | 4 ++-- aws-serverless-java-container-jersey/pom.xml | 6 +++--- aws-serverless-java-container-spark/pom.xml | 6 +++--- aws-serverless-java-container-spring/pom.xml | 6 +++--- aws-serverless-java-container-springboot2/pom.xml | 6 +++--- aws-serverless-java-container-struts2/pom.xml | 6 +++--- aws-serverless-jersey-archetype/pom.xml | 4 ++-- aws-serverless-spark-archetype/pom.xml | 4 ++-- aws-serverless-spring-archetype/pom.xml | 4 ++-- aws-serverless-springboot-archetype/pom.xml | 4 ++-- aws-serverless-springboot2-archetype/pom.xml | 4 ++-- aws-serverless-struts2-archetype/pom.xml | 4 ++-- pom.xml | 2 +- 13 files changed, 30 insertions(+), 30 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 9809df0a0..7145733ed 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Core Allows Java applications written for a servlet container to run in AWS Lambda https://aws.amazon.com/lambda - 1.4 + 1.5-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.4 + 1.5-SNAPSHOT .. diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index 116fab3e3..28edd3c9f 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Jersey implementation Allows Java applications written for Jersey to run in AWS Lambda https://aws.amazon.com/lambda - 1.4 + 1.5-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.4 + 1.5-SNAPSHOT .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.4 + 1.5-SNAPSHOT com.fasterxml.jackson.core diff --git a/aws-serverless-java-container-spark/pom.xml b/aws-serverless-java-container-spark/pom.xml index 5247449d9..e5200e3f2 100644 --- a/aws-serverless-java-container-spark/pom.xml +++ b/aws-serverless-java-container-spark/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spark implementation Allows Java applications written for Spark to run in AWS Lambda https://aws.amazon.com/lambda - 1.4 + 1.5-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.4 + 1.5-SNAPSHOT .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.4 + 1.5-SNAPSHOT diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 0a8e0aa97..01bab3056 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spring implementation Allows Java applications written for the Spring framework to run in AWS Lambda https://aws.amazon.com/lambda - 1.4 + 1.5-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.4 + 1.5-SNAPSHOT .. @@ -26,7 +26,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.4 + 1.5-SNAPSHOT diff --git a/aws-serverless-java-container-springboot2/pom.xml b/aws-serverless-java-container-springboot2/pom.xml index 208640d1b..90c98f009 100644 --- a/aws-serverless-java-container-springboot2/pom.xml +++ b/aws-serverless-java-container-springboot2/pom.xml @@ -3,7 +3,7 @@ aws-serverless-java-container com.amazonaws.serverless - 1.4 + 1.5-SNAPSHOT 4.0.0 @@ -12,7 +12,7 @@ AWS Serverless Java container support - SpringBoot 2 implementation Allows Java applications written for SpringBoot 2 to run in AWS Lambda https://aws.amazon.com/lambda - 1.4 + 1.5-SNAPSHOT 5.1.9.RELEASE @@ -28,7 +28,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.4 + 1.5-SNAPSHOT diff --git a/aws-serverless-java-container-struts2/pom.xml b/aws-serverless-java-container-struts2/pom.xml index e64577c08..7e456c850 100644 --- a/aws-serverless-java-container-struts2/pom.xml +++ b/aws-serverless-java-container-struts2/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Struts2 implementation Allows Java applications written for the Struts2 framework to run in AWS Lambda https://aws.amazon.com/lambda - 1.4 + 1.5-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.4 + 1.5-SNAPSHOT @@ -23,7 +23,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.4 + 1.5-SNAPSHOT diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index e3a311aa1..5b2aa8018 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -4,12 +4,12 @@ com.amazonaws.serverless aws-serverless-java-container - 1.4 + 1.5-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-jersey-archetype - 1.4 + 1.5-SNAPSHOT maven-archetype diff --git a/aws-serverless-spark-archetype/pom.xml b/aws-serverless-spark-archetype/pom.xml index 12103c93a..0118ea5c9 100644 --- a/aws-serverless-spark-archetype/pom.xml +++ b/aws-serverless-spark-archetype/pom.xml @@ -4,12 +4,12 @@ com.amazonaws.serverless aws-serverless-java-container - 1.4 + 1.5-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-spark-archetype - 1.4 + 1.5-SNAPSHOT maven-archetype diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index a96e3dcaa..128a51bf8 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -4,12 +4,12 @@ com.amazonaws.serverless aws-serverless-java-container - 1.4 + 1.5-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-spring-archetype - 1.4 + 1.5-SNAPSHOT maven-archetype diff --git a/aws-serverless-springboot-archetype/pom.xml b/aws-serverless-springboot-archetype/pom.xml index 3852fad67..a8f669095 100644 --- a/aws-serverless-springboot-archetype/pom.xml +++ b/aws-serverless-springboot-archetype/pom.xml @@ -4,12 +4,12 @@ com.amazonaws.serverless aws-serverless-java-container - 1.4 + 1.5-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-springboot-archetype - 1.4 + 1.5-SNAPSHOT maven-archetype diff --git a/aws-serverless-springboot2-archetype/pom.xml b/aws-serverless-springboot2-archetype/pom.xml index c48c9dcbc..41a98455d 100644 --- a/aws-serverless-springboot2-archetype/pom.xml +++ b/aws-serverless-springboot2-archetype/pom.xml @@ -4,12 +4,12 @@ com.amazonaws.serverless aws-serverless-java-container - 1.4 + 1.5-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-springboot2-archetype - 1.4 + 1.5-SNAPSHOT maven-archetype diff --git a/aws-serverless-struts2-archetype/pom.xml b/aws-serverless-struts2-archetype/pom.xml index aff9e2970..e309fdd8a 100644 --- a/aws-serverless-struts2-archetype/pom.xml +++ b/aws-serverless-struts2-archetype/pom.xml @@ -4,12 +4,12 @@ com.amazonaws.serverless aws-serverless-java-container - 1.4 + 1.5-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-struts2-archetype - 1.4 + 1.5-SNAPSHOT maven-archetype diff --git a/pom.xml b/pom.xml index 0d78c27be..67a3283a3 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazonaws.serverless aws-serverless-java-container pom - 1.4 + 1.5-SNAPSHOT AWS Serverless Java container From 63faf2db0205e5319f4faebb58b0d634bd809d3a Mon Sep 17 00:00:00 2001 From: sapessi Date: Sun, 29 Sep 2019 20:18:29 -0700 Subject: [PATCH 066/888] Added quickstart link for Spring Boot 2 to main README --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 66ffc502a..b8baf7bcd 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,7 @@ Serverless Java Container natively supports API Gateway's proxy integration mode Follow the quick start guides in [our wiki](https://github.com/awslabs/aws-serverless-java-container/wiki) to integrate Serverless Java Container with your project: * [Spring quick start](https://github.com/awslabs/aws-serverless-java-container/wiki/Quick-start---Spring) * [Spring Boot quick start](https://github.com/awslabs/aws-serverless-java-container/wiki/Quick-start---Spring-Boot) +* [Spring Boot 2 quick start](https://github.com/awslabs/aws-serverless-java-container/wiki/Quick-start---Spring-Boot2) * [Apache Struts quick start](https://github.com/awslabs/aws-serverless-java-container/wiki/Quick-start---Struts) * [Jersey quick start](https://github.com/awslabs/aws-serverless-java-container/wiki/Quick-start---Jersey) * [Spark quick start](https://github.com/awslabs/aws-serverless-java-container/wiki/Quick-start---Spark) From 3ee467a3a123e1b19c3784f6471e5d107fe7b543 Mon Sep 17 00:00:00 2001 From: Stefano Buliani <2996317+sapessi@users.noreply.github.com> Date: Mon, 30 Sep 2019 15:23:36 -0700 Subject: [PATCH 067/888] New GitHub Actions build process (#285) * First test of GitHub actions integration * Changed actions checkout to specific version * New build script to install dependencies on local environment in a single run * Fixed issues with CI workflow for spring, springboot2 and struts * More minor fixes to build workflow. getting there * Renamed struts sample folder to match the naming used in the framework implementation * Minor fix for Spring 4.3 build * Added GitHub actions badge to readme --- .../continuous-integration-workflow.yml | 70 ++++++++++ README.md | 2 +- gha_build.sh | 123 ++++++++++++++++++ .../{struts => struts2}/pet-store/README.md | 0 .../pet-store/build.gradle | 0 samples/{struts => struts2}/pet-store/pom.xml | 0 .../{struts => struts2}/pet-store/sam.yaml | 0 .../pet-store/src/main/assembly/dist.xml | 0 .../sample/struts/actions/PetsController.java | 0 .../serverless/sample/struts/model/Pet.java | 0 .../sample/struts/model/PetData.java | 0 .../pet-store/src/main/resources/log4j2.xml | 0 .../pet-store/src/main/resources/struts.xml | 0 13 files changed, 194 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/continuous-integration-workflow.yml create mode 100755 gha_build.sh rename samples/{struts => struts2}/pet-store/README.md (100%) rename samples/{struts => struts2}/pet-store/build.gradle (100%) rename samples/{struts => struts2}/pet-store/pom.xml (100%) rename samples/{struts => struts2}/pet-store/sam.yaml (100%) rename samples/{struts => struts2}/pet-store/src/main/assembly/dist.xml (100%) rename samples/{struts => struts2}/pet-store/src/main/java/com/amazonaws/serverless/sample/struts/actions/PetsController.java (100%) rename samples/{struts => struts2}/pet-store/src/main/java/com/amazonaws/serverless/sample/struts/model/Pet.java (100%) rename samples/{struts => struts2}/pet-store/src/main/java/com/amazonaws/serverless/sample/struts/model/PetData.java (100%) rename samples/{struts => struts2}/pet-store/src/main/resources/log4j2.xml (100%) rename samples/{struts => struts2}/pet-store/src/main/resources/struts.xml (100%) diff --git a/.github/workflows/continuous-integration-workflow.yml b/.github/workflows/continuous-integration-workflow.yml new file mode 100644 index 000000000..7fc2c3574 --- /dev/null +++ b/.github/workflows/continuous-integration-workflow.yml @@ -0,0 +1,70 @@ +name: Serverless Java Container Continuous Integration +on: + push: + pull_request: + branches: + - master + +jobs: + build_core: + name: Build and test core + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v1 + - name: Build latest + run: mvn -q clean install + working-directory: ./aws-serverless-java-container-core + + build_jersey: + name: Build and test Jersey + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v1 + - name: Build latest + run: ./gha_build.sh jersey true true + - name: Build Jersey 2.26 + run: ./gha_build.sh jersey false false -Djersey.version=2.26 + - name: Build Jersey 2.27 + run: ./gha_build.sh jersey false false -Djersey.version=2.27 + - name: Build Jersey 2.28 + run: ./gha_build.sh jersey false false -Djersey.version=2.28 + + build_spark: + name: Build and test Spark + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v1 + - name: Build latest + run: ./gha_build.sh spark true true + - name: Build Spark 2.8.0 + run: ./gha_build.sh spark false false -Dspark.version=2.8.0 + + build_spring: + name: Build and test Spring & SpringBoot + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v1 + - name: Build latest + run: ./gha_build.sh spring true true + - name: Build Spring 4.3 + run: ./gha_build.sh spring false false -Dspring.version=4.3.25.RELEASE -Dspring-security.version=4.2.13.RELEASE + - name: Build Spring 5.0 + run: ./gha_build.sh spring false false -Dspring.version=5.0.15.RELEASE -Dspring-security.version=5.0.13.RELEASE + + build_springboot2: + name: Build and test SpringBoot 2 + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v1 + - name: Build latest + run: ./gha_build.sh springboot2 true true + - name: Build Spring Boot 2.0 + run: ./gha_build.sh springboot2 false false -Dspringboot.version=2.0.9.RELEASE -Dspring.version=5.0.13.RELEASE -Dspringsecurity.version=5.0.12.RELEASE + + build_struts2: + name: Build and test Struts 2 + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v1 + - name: Build latest + run: ./gha_build.sh struts2 true true \ No newline at end of file diff --git a/README.md b/README.md index b8baf7bcd..6a5bacd6c 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Serverless Java container [![Build Status](https://travis-ci.org/awslabs/aws-serverless-java-container.svg?branch=master)](https://travis-ci.org/awslabs/aws-serverless-java-container) [![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.amazonaws.serverless/aws-serverless-java-container/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.amazonaws.serverless/aws-serverless-java-container) [![Help](http://img.shields.io/badge/help-gitter-E91E63.svg?style=flat-square)](https://gitter.im/awslabs/aws-serverless-java-container) +# Serverless Java container [![Build Status](https://github.com/awslabs/aws-serverless-java-container/workflows/.github/workflows/continuous-integration-workflow.yml/badge.svg)](https://github.com/awslabs/aws-serverless-java-container/actions) [![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.amazonaws.serverless/aws-serverless-java-container/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.amazonaws.serverless/aws-serverless-java-container) [![Help](http://img.shields.io/badge/help-gitter-E91E63.svg?style=flat-square)](https://gitter.im/awslabs/aws-serverless-java-container) The `aws-serverless-java-container` makes it easy to run Java applications written with frameworks such as [Spring](https://spring.io/), [Spring Boot](https://projects.spring.io/spring-boot/), [Apache Struts](http://struts.apache.org/), [Jersey](https://jersey.java.net/), or [Spark](http://sparkjava.com/) in [AWS Lambda](https://aws.amazon.com/lambda/). Serverless Java Container natively supports API Gateway's proxy integration models for requests and responses, you can create and inject custom models for methods that use custom mappings. diff --git a/gha_build.sh b/gha_build.sh new file mode 100755 index 000000000..d4d2d7237 --- /dev/null +++ b/gha_build.sh @@ -0,0 +1,123 @@ +#!/usr/bin/env bash + +WORKING_DIR=$(pwd) +FRAMEWORK=$1 +RUN_ARCHETYPE=$2 +RUN_SAMPLES=$3 +EXTRA_PARAMS=${*:4} + +echo "Starting build script for ${FRAMEWORK} with params ${EXTRA_PARAMS}" + +if [[ -z ${FRAMEWORK} ]] ; then + echo "Missing framework parameter" + exit 1 +fi + +function install { + # we skip tests for core because we assume they will be run in a separate branch of the workflow + cd ${WORKING_DIR}/aws-serverless-java-container-core && mvn -q clean install -DskipTests + if [[ "$?" -ne 0 ]]; then + exit 1 + fi + cd ${WORKING_DIR}/aws-serverless-java-container-$1 && mvn -q clean install ${@:2} + if [[ "$?" -ne 0 ]]; then + exit 1 + fi +} + +function archetype { + ARCHETYPE_NAME=aws-serverless-$1-archetype + PROJ_NAME=$1-archetype-test + cd ${WORKING_DIR}/${ARCHETYPE_NAME} && mvn -q clean install + ARCHETYPE_TEST_DIR=${WORKING_DIR}/$1_archetype_test + mkdir -p ${ARCHETYPE_TEST_DIR} + cd ${ARCHETYPE_TEST_DIR} && mvn archetype:generate -DgroupId=my.service -DartifactId=${PROJ_NAME} -Dversion=1.0-SNAPSHOT \ + -DarchetypeGroupId=com.amazonaws.serverless.archetypes \ + -DarchetypeArtifactId=${ARCHETYPE_NAME} \ + -DarchetypeCatalog=local \ + -DinteractiveMode=false + if [[ "$?" -ne 0 ]]; then + exit 1 + fi + cd ${ARCHETYPE_TEST_DIR}/${PROJ_NAME} && mvn -q clean package -Pshaded-jar + if [[ "$?" -ne 0 ]]; then + exit 1 + fi + cd ${ARCHETYPE_TEST_DIR}/${PROJ_NAME} && mvn -q clean package + if [[ "$?" -ne 0 ]]; then + exit 1 + fi + cd ${ARCHETYPE_TEST_DIR}/${PROJ_NAME} && gradle -q wrapper + if [[ "$?" -ne 0 ]]; then + exit 1 + fi + cd ${ARCHETYPE_TEST_DIR}/${PROJ_NAME} && ./gradlew wrapper --gradle-version 5.0 + if [[ "$?" -ne 0 ]]; then + exit 1 + fi + cd ${ARCHETYPE_TEST_DIR}/${PROJ_NAME} && ./gradlew -q clean build + if [[ "$?" -ne 0 ]]; then + exit 1 + fi +} + +function sample { + # force to pet store for now. In the future we may loop over all samples + SAMPLE_FOLDER=${WORKING_DIR}/samples/$1/pet-store + cd ${SAMPLE_FOLDER} && mvn -q clean package + if [[ "$?" -ne 0 ]]; then + exit 1 + fi + cd ${SAMPLE_FOLDER} && gradle -q wrapper + if [[ "$?" -ne 0 ]]; then + exit 1 + fi + cd ${SAMPLE_FOLDER} && ./gradlew wrapper --gradle-version 5.0 + if [[ "$?" -ne 0 ]]; then + exit 1 + fi + cd ${SAMPLE_FOLDER} && ./gradlew -q clean build + if [[ "$?" -ne 0 ]]; then + exit 1 + fi + + SAM_FILE=${SAMPLE_FOLDER}/sam.yaml + if [[ -f "$SAM_FILE" ]]; then + TARGET_ZIP=$(cat ${SAM_FILE} | grep CodeUri | sed -e 's/^.*:\ //g') + if [[ ! -f "${SAMPLE_FOLDER}/${TARGET_ZIP}" ]]; then + echo "COULD NOT FIND TARGET ZIP FILE $TARGET_ZIP FOR $1 SAMPLE" + exit 1 + fi + else + echo "COULD NOT FIND SAM FILE: '${SAM_FILE}'" + exit 1 + fi +} + +# set up the master pom otherwise we won't be able to find new dependencies +cd ${WORKING_DIR}/ && mvn -q --non-recursive clean install + +case $1 in + # special case for spring since we include both spring and springboot 1.x in one package + spring) + install ${FRAMEWORK} ${EXTRA_PARAMS} + if [[ "$RUN_ARCHETYPE" = true ]] ; then + archetype ${FRAMEWORK} + archetype springboot + fi + if [[ "$RUN_SAMPLES" = true ]] ; then + sample ${FRAMEWORK} + sample springboot + fi + break + ;; + *) + install ${FRAMEWORK} ${EXTRA_PARAMS} + if [[ "$RUN_ARCHETYPE" = true ]] ; then + archetype ${FRAMEWORK} + fi + if [[ "$RUN_SAMPLES" = true ]] ; then + sample ${FRAMEWORK} + fi + ;; +esac \ No newline at end of file diff --git a/samples/struts/pet-store/README.md b/samples/struts2/pet-store/README.md similarity index 100% rename from samples/struts/pet-store/README.md rename to samples/struts2/pet-store/README.md diff --git a/samples/struts/pet-store/build.gradle b/samples/struts2/pet-store/build.gradle similarity index 100% rename from samples/struts/pet-store/build.gradle rename to samples/struts2/pet-store/build.gradle diff --git a/samples/struts/pet-store/pom.xml b/samples/struts2/pet-store/pom.xml similarity index 100% rename from samples/struts/pet-store/pom.xml rename to samples/struts2/pet-store/pom.xml diff --git a/samples/struts/pet-store/sam.yaml b/samples/struts2/pet-store/sam.yaml similarity index 100% rename from samples/struts/pet-store/sam.yaml rename to samples/struts2/pet-store/sam.yaml diff --git a/samples/struts/pet-store/src/main/assembly/dist.xml b/samples/struts2/pet-store/src/main/assembly/dist.xml similarity index 100% rename from samples/struts/pet-store/src/main/assembly/dist.xml rename to samples/struts2/pet-store/src/main/assembly/dist.xml diff --git a/samples/struts/pet-store/src/main/java/com/amazonaws/serverless/sample/struts/actions/PetsController.java b/samples/struts2/pet-store/src/main/java/com/amazonaws/serverless/sample/struts/actions/PetsController.java similarity index 100% rename from samples/struts/pet-store/src/main/java/com/amazonaws/serverless/sample/struts/actions/PetsController.java rename to samples/struts2/pet-store/src/main/java/com/amazonaws/serverless/sample/struts/actions/PetsController.java diff --git a/samples/struts/pet-store/src/main/java/com/amazonaws/serverless/sample/struts/model/Pet.java b/samples/struts2/pet-store/src/main/java/com/amazonaws/serverless/sample/struts/model/Pet.java similarity index 100% rename from samples/struts/pet-store/src/main/java/com/amazonaws/serverless/sample/struts/model/Pet.java rename to samples/struts2/pet-store/src/main/java/com/amazonaws/serverless/sample/struts/model/Pet.java diff --git a/samples/struts/pet-store/src/main/java/com/amazonaws/serverless/sample/struts/model/PetData.java b/samples/struts2/pet-store/src/main/java/com/amazonaws/serverless/sample/struts/model/PetData.java similarity index 100% rename from samples/struts/pet-store/src/main/java/com/amazonaws/serverless/sample/struts/model/PetData.java rename to samples/struts2/pet-store/src/main/java/com/amazonaws/serverless/sample/struts/model/PetData.java diff --git a/samples/struts/pet-store/src/main/resources/log4j2.xml b/samples/struts2/pet-store/src/main/resources/log4j2.xml similarity index 100% rename from samples/struts/pet-store/src/main/resources/log4j2.xml rename to samples/struts2/pet-store/src/main/resources/log4j2.xml diff --git a/samples/struts/pet-store/src/main/resources/struts.xml b/samples/struts2/pet-store/src/main/resources/struts.xml similarity index 100% rename from samples/struts/pet-store/src/main/resources/struts.xml rename to samples/struts2/pet-store/src/main/resources/struts.xml From ca111d2e8976a07f03d22f35313b1df3e28a6aad Mon Sep 17 00:00:00 2001 From: sapessi Date: Mon, 30 Sep 2019 15:30:00 -0700 Subject: [PATCH 068/888] Updated readme link and removed travis files --- .travis.yml | 14 ------- README.md | 2 +- travis.sh | 112 ---------------------------------------------------- 3 files changed, 1 insertion(+), 127 deletions(-) delete mode 100644 .travis.yml delete mode 100755 travis.sh diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index f79cc86bd..000000000 --- a/.travis.yml +++ /dev/null @@ -1,14 +0,0 @@ -language: java -dist: trusty -jdk: - - openjdk8 -addons: - apt: - update: true -before_install: - - wget https://services.gradle.org/distributions/gradle-5.0-bin.zip - - mkdir /opt/gradle - - unzip -d /opt/gradle gradle-5.0-bin.zip - - export GRADLE=/opt/gradle/gradle-5.0/bin/gradle -install: true -script: ./travis.sh diff --git a/README.md b/README.md index 6a5bacd6c..ea8862232 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Serverless Java container [![Build Status](https://github.com/awslabs/aws-serverless-java-container/workflows/.github/workflows/continuous-integration-workflow.yml/badge.svg)](https://github.com/awslabs/aws-serverless-java-container/actions) [![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.amazonaws.serverless/aws-serverless-java-container/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.amazonaws.serverless/aws-serverless-java-container) [![Help](http://img.shields.io/badge/help-gitter-E91E63.svg?style=flat-square)](https://gitter.im/awslabs/aws-serverless-java-container) +# Serverless Java container [![Build Status](https://github.com/awslabs/aws-serverless-java-container/workflows/Serverless%20Java%20Container%20Continuous%20Integration/badge.svg)](https://github.com/awslabs/aws-serverless-java-container/actions) [![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.amazonaws.serverless/aws-serverless-java-container/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.amazonaws.serverless/aws-serverless-java-container) [![Help](http://img.shields.io/badge/help-gitter-E91E63.svg?style=flat-square)](https://gitter.im/awslabs/aws-serverless-java-container) The `aws-serverless-java-container` makes it easy to run Java applications written with frameworks such as [Spring](https://spring.io/), [Spring Boot](https://projects.spring.io/spring-boot/), [Apache Struts](http://struts.apache.org/), [Jersey](https://jersey.java.net/), or [Spark](http://sparkjava.com/) in [AWS Lambda](https://aws.amazon.com/lambda/). Serverless Java Container natively supports API Gateway's proxy integration models for requests and responses, you can create and inject custom models for methods that use custom mappings. diff --git a/travis.sh b/travis.sh deleted file mode 100755 index d61e696c7..000000000 --- a/travis.sh +++ /dev/null @@ -1,112 +0,0 @@ -#!/usr/bin/env bash - -IFS=$'\n' - -echo "STARTING TRAVIS BUILD in $(pwd)" -cd $TRAVIS_BUILD_DIR -mvn -q install -if [[ "$?" -ne 0 ]]; then - exit 1 -fi -echo "COMPLETED MAIN FRAMEWORK INSTALL" - -echo "STARTING SAMPLES BUILD" -for SAMPLE in $(find samples -type d -maxdepth 2 -mindepth 2); -do - echo "BUILDING SAMPLE '$SAMPLE'" - cd $SAMPLE - mvn -q clean package - if [[ "$?" -ne 0 ]]; then - exit 1 - fi - $GRADLE -q wrapper - if [[ "$?" -ne 0 ]]; then - exit 1 - fi - ./gradlew wrapper --gradle-version 5.0 - if [[ "$?" -ne 0 ]]; then - exit 1 - fi - ./gradlew -q clean build - if [[ "$?" -ne 0 ]]; then - exit 1 - fi - - SAM_FILE="$TRAVIS_BUILD_DIR/$SAMPLE/sam.yaml" - if [[ -f "$SAM_FILE" ]]; then - TARGET_ZIP=$(cat $SAM_FILE | grep CodeUri | sed -e 's/^.*:\ //g') - if [[ ! -f "./$TARGET_ZIP" ]]; then - echo "COULD NOT FIND TARGET ZIP FILE $TARGET_ZIP for $SAMPLE" - exit 1 - fi - else - echo "COULD NOT FIND SAM FILE: '$TRAVIS_BUILD_DIR/$SAMPLE/sam.yaml'" - exit 1 - fi - - cd $TRAVIS_BUILD_DIR - echo "'$SAMPLE' BUILT SUCCESSFULLY" -done -echo "COMPLETED SAMPLES BUILD" - -cd $TRAVIS_BUILD_DIR -rm -rf tmp -echo "STARTING ARCHETYPE BUILD" -for ARCH in $(find . -name "*archetype" -type d); -do - echo "TESTING ARCHETYPE '$ARCH'" - ARCH_NAME=$(basename $ARCH) - TEST_PROJ="TEST-$ARCH_NAME" - mkdir tmp && cd tmp - mvn archetype:generate -DgroupId=my.service -DartifactId=$TEST_PROJ -Dversion=1.0-SNAPSHOT \ - -DarchetypeGroupId=com.amazonaws.serverless.archetypes \ - -DarchetypeArtifactId=$ARCH_NAME \ - -DarchetypeCatalog=local \ - -DinteractiveMode=false - if [[ "$?" -ne 0 ]]; then - exit 1 - fi - cd ${TEST_PROJ} - mvn -q clean package -Pshaded-jar - if [[ "$?" -ne 0 ]]; then - exit 1 - fi - mvn -q clean package - if [[ "$?" -ne 0 ]]; then - exit 1 - fi - if [[ -f "$TRAVIS_BUILD_DIR/tmp/$TEST_PROJ/build.gradle" ]]; then - $GRADLE -q wrapper - if [[ "$?" -ne 0 ]]; then - exit 1 - fi - ./gradlew wrapper --gradle-version 5.0 - if [[ "$?" -ne 0 ]]; then - exit 1 - fi - ./gradlew -q clean build - if [[ "$?" -ne 0 ]]; then - exit 1 - fi - else - echo "GRADLE BUILD FILE NOT FOUND" - fi - - SAM_FILE="$TRAVIS_BUILD_DIR/tmp/$TEST_PROJ/sam.yaml" - if [[ -f "$SAM_FILE" ]]; then - TARGET_ZIP=$(cat $SAM_FILE | grep CodeUri | sed -e 's/^.*:\ //g') - if [[ ! -f "./$TARGET_ZIP" ]]; then - echo "COULD NOT FIND TARGET ZIP FILE $TARGET_ZIP for $ARCH" - exit 1 - fi - else - echo "COULD NOT FIND SAM FILE: '$TRAVIS_BUILD_DIR/$SAMPLE/sam.yaml'" - exit 1 - fi - - - echo "'$ARCH' BUILT SUCCESSFULLY" - cd $TRAVIS_BUILD_DIR - rm -rf tmp -done -echo "COMPLETED ARCHETYPE BUILD" \ No newline at end of file From de485d36ee2ca5e7d57cef57f7a343f415cc0673 Mon Sep 17 00:00:00 2001 From: sapessi Date: Mon, 30 Sep 2019 15:31:58 -0700 Subject: [PATCH 069/888] Shortened name of CI workflow --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ea8862232..6f4dced3a 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Serverless Java container [![Build Status](https://github.com/awslabs/aws-serverless-java-container/workflows/Serverless%20Java%20Container%20Continuous%20Integration/badge.svg)](https://github.com/awslabs/aws-serverless-java-container/actions) [![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.amazonaws.serverless/aws-serverless-java-container/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.amazonaws.serverless/aws-serverless-java-container) [![Help](http://img.shields.io/badge/help-gitter-E91E63.svg?style=flat-square)](https://gitter.im/awslabs/aws-serverless-java-container) +# Serverless Java container [![Build Status](https://github.com/awslabs/aws-serverless-java-container/workflows/Continuous%20Integration/badge.svg)](https://github.com/awslabs/aws-serverless-java-container/actions) [![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.amazonaws.serverless/aws-serverless-java-container/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.amazonaws.serverless/aws-serverless-java-container) [![Help](http://img.shields.io/badge/help-gitter-E91E63.svg?style=flat-square)](https://gitter.im/awslabs/aws-serverless-java-container) The `aws-serverless-java-container` makes it easy to run Java applications written with frameworks such as [Spring](https://spring.io/), [Spring Boot](https://projects.spring.io/spring-boot/), [Apache Struts](http://struts.apache.org/), [Jersey](https://jersey.java.net/), or [Spark](http://sparkjava.com/) in [AWS Lambda](https://aws.amazon.com/lambda/). Serverless Java Container natively supports API Gateway's proxy integration models for requests and responses, you can create and inject custom models for methods that use custom mappings. From 7dccd80c76a9f743dd75ee04499e92a638853fda Mon Sep 17 00:00:00 2001 From: sapessi Date: Mon, 30 Sep 2019 15:35:10 -0700 Subject: [PATCH 070/888] Workflow rename --- .github/workflows/continuous-integration-workflow.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/continuous-integration-workflow.yml b/.github/workflows/continuous-integration-workflow.yml index 7fc2c3574..8aa7bf9fa 100644 --- a/.github/workflows/continuous-integration-workflow.yml +++ b/.github/workflows/continuous-integration-workflow.yml @@ -1,4 +1,4 @@ -name: Serverless Java Container Continuous Integration +name: Continuous Integration on: push: pull_request: From 240dbacf37bce4e044dbe85cadec7b6621232803 Mon Sep 17 00:00:00 2001 From: Stefano Buliani <2996317+sapessi@users.noreply.github.com> Date: Thu, 14 Nov 2019 09:57:33 -0800 Subject: [PATCH 071/888] Micronaut sample (#303) * First import of micronaut native demo * Cleanup, upgrade dependencies and use latest GraalVM version * Change default shell for execution It seems, for those who don't have bash as their default shell, [[ is not valid syntax for `sh` (it did not run on my machine running Linux Mint 19 and zsh as my default, I got multiple `./docker-build.sh: 4: ./docker-build.sh: [[: not found` errors). I would propose changing this to `#!/bin/bash`, for which this is definitely valid syntax. * Further differentiates running via SAM vs AWS It wasn't initially super obvious to me how to run this locally, but I was able to figure it out. I'm hoping to make it clearer to anyone else looking at it in the future via this change. * Updated Micronaut readmes --- README.md | 4 +- samples/micronaut/pet-store/Dockerfile | 24 ++++ samples/micronaut/pet-store/README.md | 74 ++++++++++++ samples/micronaut/pet-store/build.gradle | 77 ++++++++++++ samples/micronaut/pet-store/docker-build.sh | 25 ++++ samples/micronaut/pet-store/gradle.properties | 1 + samples/micronaut/pet-store/micronaut-cli.yml | 5 + samples/micronaut/pet-store/sam-local.sh | 4 + samples/micronaut/pet-store/sam-native.yaml | 30 +++++ samples/micronaut/pet-store/scripts/bootstrap | 3 + .../pet-store/scripts/graalvm-build.sh | 9 ++ samples/micronaut/pet-store/settings.gradle | 1 + .../amazonaws/micronaut/demo/Application.java | 17 +++ .../micronaut/demo/PetsController.java | 79 ++++++++++++ .../amazonaws/micronaut/demo/model/Pet.java | 61 ++++++++++ .../micronaut/demo/model/PetData.java | 114 ++++++++++++++++++ .../native-image.properties | 4 + .../src/main/resources/application.yml | 6 + .../pet-store/src/main/resources/logback.xml | 15 +++ 19 files changed, 552 insertions(+), 1 deletion(-) create mode 100644 samples/micronaut/pet-store/Dockerfile create mode 100644 samples/micronaut/pet-store/README.md create mode 100644 samples/micronaut/pet-store/build.gradle create mode 100755 samples/micronaut/pet-store/docker-build.sh create mode 100644 samples/micronaut/pet-store/gradle.properties create mode 100644 samples/micronaut/pet-store/micronaut-cli.yml create mode 100755 samples/micronaut/pet-store/sam-local.sh create mode 100644 samples/micronaut/pet-store/sam-native.yaml create mode 100755 samples/micronaut/pet-store/scripts/bootstrap create mode 100755 samples/micronaut/pet-store/scripts/graalvm-build.sh create mode 100644 samples/micronaut/pet-store/settings.gradle create mode 100644 samples/micronaut/pet-store/src/main/java/com/amazonaws/micronaut/demo/Application.java create mode 100644 samples/micronaut/pet-store/src/main/java/com/amazonaws/micronaut/demo/PetsController.java create mode 100644 samples/micronaut/pet-store/src/main/java/com/amazonaws/micronaut/demo/model/Pet.java create mode 100644 samples/micronaut/pet-store/src/main/java/com/amazonaws/micronaut/demo/model/PetData.java create mode 100644 samples/micronaut/pet-store/src/main/resources/META-INF/native-image/graal.spring.demo/graal-spring-demo-application/native-image.properties create mode 100644 samples/micronaut/pet-store/src/main/resources/application.yml create mode 100644 samples/micronaut/pet-store/src/main/resources/logback.xml diff --git a/README.md b/README.md index 6f4dced3a..cad345f06 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,9 @@ Follow the quick start guides in [our wiki](https://github.com/awslabs/aws-serve * [Spring Boot 2 quick start](https://github.com/awslabs/aws-serverless-java-container/wiki/Quick-start---Spring-Boot2) * [Apache Struts quick start](https://github.com/awslabs/aws-serverless-java-container/wiki/Quick-start---Struts) * [Jersey quick start](https://github.com/awslabs/aws-serverless-java-container/wiki/Quick-start---Jersey) -* [Spark quick start](https://github.com/awslabs/aws-serverless-java-container/wiki/Quick-start---Spark) +* [Spark quick start](https://github.com/awslabs/aws-serverless-java-container/wiki/Quick-start---Spark) + +* Micronaut [documentation](https://guides.micronaut.io/micronaut-function-aws-lambda/guide/index.html) and [demo](https://github.com/awslabs/aws-serverless-java-container/tree/master/samples/micronaut/pet-store) Below is the most basic AWS Lambda handler example that launches a Spring application. You can also take a look at the [samples](https://github.com/awslabs/aws-serverless-java-container/tree/master/samples) in this repository, our main wiki page includes a [step-by-step guide](https://github.com/awslabs/aws-serverless-java-container/wiki#deploying-the-sample-applications) on how to deploy the various sample applications using Maven and [SAM](https://github.com/awslabs/serverless-application-model). diff --git a/samples/micronaut/pet-store/Dockerfile b/samples/micronaut/pet-store/Dockerfile new file mode 100644 index 000000000..6bb80136e --- /dev/null +++ b/samples/micronaut/pet-store/Dockerfile @@ -0,0 +1,24 @@ +FROM amazonlinux:2017.03.1.20170812 as graalvm +# install graal to amazon linux. +ENV LANG=en_US.UTF-8 + +RUN yum install -y gcc gcc-c++ libc6-dev zlib1g-dev curl bash zlib zlib-devel zip \ +# && yum install -y libcxx libcxx-devel llvm-toolset-7 \ + && rm -rf /var/cache/yum + + +ENV GRAAL_VERSION 19.2.0.1 +ENV GRAAL_FILENAME graalvm-ce-linux-amd64-${GRAAL_VERSION}.tar.gz + +RUN curl -4 -L https://github.com/oracle/graal/releases/download/vm-${GRAAL_VERSION}/graalvm-ce-linux-amd64-${GRAAL_VERSION}.tar.gz -o /tmp/${GRAAL_FILENAME} + +RUN tar -zxvf /tmp/${GRAAL_FILENAME} -C /tmp \ + && mv /tmp/graalvm-ce-${GRAAL_VERSION} /usr/lib/graalvm + +RUN rm -rf /tmp/* +RUN /usr/lib/graalvm/bin/gu install native-image +ADD scripts/graalvm-build.sh /usr/local/bin/ +RUN chmod +x /usr/local/bin/graalvm-build.sh +VOLUME ["/func"] +WORKDIR /func +ENTRYPOINT ["/usr/local/bin/graalvm-build.sh"] \ No newline at end of file diff --git a/samples/micronaut/pet-store/README.md b/samples/micronaut/pet-store/README.md new file mode 100644 index 000000000..fc5793a59 --- /dev/null +++ b/samples/micronaut/pet-store/README.md @@ -0,0 +1,74 @@ +# Micronaut Native Pet store example + +The [Micronaut framework](https://micronaut.io/) is compatible with Spring's annotations and makes it easy to use [GraalVM](https://www.graalvm.org/) to build application images into native binaries. Further, Micronaut includes builtin support for AWS Lambda. + +This demo application shows how to use Micronaut to compile our standard pet store example, using Spring annotations, into a native binary with GraalVM and execute it in AWS Lambda. To run this demo, you will need to have [Gradle](https://gradle.org/) installed as well as [Docker](https://www.docker.com/) to run the GraalVM build. + +With all the pre-requisites installed including: + +* JDK 8 or above +* Gradle 5.6.x + +You should be able to build a native image of the application by running the `docker-build.sh` from the repository's root. + +```bash +$ ./docker-build.sh +``` + +The build process will perform the following tasks: +1. Use gradle to compile the application +2. Create a `native-image` folder in the current directory +3. Check if a Docker image called `graalvm-lambda-build` exists on the local machine. If not, create it using the `Dockerfile` in the root of the repository +4. Run the docker image to execute the GraalVM build process + +The output of the build is an executable file called `server` and a deployable zip called `function.zip` in the `native-image` folder: + +```bash +$ ls -lh native-image/ +total 75M +-rwxr-xr-x 1 user user 36 Oct 1 16:01 bootstrap +-rw-r--r-- 1 user user 18M Oct 1 16:01 function.zip +-rwxr-xr-x 1 user user 57M Oct 1 16:01 server +``` + +To run the lambda locally, you can utilize the SAM cli by running `./sam-local.sh`. This should start up the listeners in the `PetsController`, and you can test locally with your preferred http client. + +For example, to test the GET /pets endpoint via curl: +```bash +curl localhost:3000/pets +``` + +You should see JSON output of pets. + +To deploy the application to AWS Lambda you can use the pre-configured `sam-native.yaml` file included in the repo. Using the AWS or SAM CLI, run the following commands: + +```bash +$ aws cloudformation package --template-file sam-native.yaml \ + --output-template-file packaged-sam.yaml \ + --s3-bucket +Uploading to d3e2617f3c8c2e8ca78e35a0dc856884 18553505 / 18553505.0 (100.00%) +Successfully packaged artifacts and wrote output template to file packaged-sam.yaml. +Execute the following command to deploy the packaged template +aws cloudformation deploy --template-file /workspace/graal-spring-demo/packaged-sam.yaml --stack-name + + +$ aws cloudformation deploy --template-file ./packaged-sam.yaml --stack-name MicronautGraalVmDemo --capabilities CAPABILITY_IAM + +Waiting for changeset to be created.. +Waiting for stack create/update to complete +Successfully created/updated stack - MicronautGraalVmDemo +``` + +You can use the AWS CLI to get the API endpoint generated by the deployment process: + +```bash +aws cloudformation describe-stacks --stack-name MicronautGraalVmDemo --query Stacks[0].Outputs[0].OutputValue +"https://xxxxxxxxxx.execute-api.xx-xxxx-1.amazonaws.com/Prod/pets" +``` + +Make a test request to the API endpoint using curl or your preferred http client. + +For example, to check the GET /pets endpoint via curl: +```bash +curl https://xxxxxxxxxx.execute-api.xx-xxxx-1.amazonaws.com/Prod/pets +``` diff --git a/samples/micronaut/pet-store/build.gradle b/samples/micronaut/pet-store/build.gradle new file mode 100644 index 000000000..94f3d1b5f --- /dev/null +++ b/samples/micronaut/pet-store/build.gradle @@ -0,0 +1,77 @@ +plugins { + id "java" + id "com.github.johnrengelman.shadow" version "5.0.0" + id "application" + id "net.ltgt.apt-eclipse" version "0.21" + id "org.springframework.boot" version "2.1.8.RELEASE" + id "io.spring.dependency-management" version "1.0.6.RELEASE" +} + +version "0.1" +group "graal.spring.demo" + +repositories { + mavenCentral() + maven { url "https://jcenter.bintray.com" } +} + +configurations { + // for dependencies that are needed for development only + developmentOnly +} + +dependencies { + annotationProcessor platform("io.micronaut:micronaut-bom:$micronautVersion") + annotationProcessor "io.micronaut:micronaut-graal" + annotationProcessor "io.micronaut:micronaut-inject-java" + annotationProcessor "io.micronaut:micronaut-validation" + annotationProcessor "io.micronaut.spring:micronaut-spring-boot" + annotationProcessor "io.micronaut.spring:micronaut-spring-boot-annotation" + annotationProcessor "io.micronaut.spring:micronaut-spring-web-annotation" + testAnnotationProcessor "io.micronaut.spring:micronaut-spring-web-annotation" + + compileOnly "com.oracle.substratevm:svm" + implementation platform("io.micronaut:micronaut-bom:$micronautVersion") + implementation "io.micronaut:micronaut-http-client" + implementation "io.micronaut:micronaut-inject" + implementation "io.micronaut:micronaut-validation" + implementation "io.micronaut:micronaut-runtime" + implementation("io.micronaut.aws:micronaut-function-aws-custom-runtime:1.3.2") { + exclude group: "com.fasterxml.jackson.module", module: "jackson-module-afterburner" + } + implementation("io.micronaut.aws:micronaut-function-aws-api-proxy:1.3.2") { + exclude group: "com.fasterxml.jackson.module", module: "jackson-module-afterburner" + } + developmentOnly "io.micronaut:micronaut-http-server-netty" + runtimeOnly "ch.qos.logback:logback-classic:1.2.3" + testAnnotationProcessor platform("io.micronaut:micronaut-bom:$micronautVersion") + testAnnotationProcessor "io.micronaut:micronaut-inject-java" + testImplementation platform("io.micronaut:micronaut-bom:$micronautVersion") + testImplementation "org.junit.jupiter:junit-jupiter-api" + testImplementation "io.micronaut.test:micronaut-test-junit5" + testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine" + + // spring support + compile("org.springframework.boot:spring-boot-starter-web") + runtime("io.micronaut.spring:micronaut-spring-boot:1.0.1") + runtime("io.micronaut.spring:micronaut-spring-web:1.0.1") +} + +test.classpath += configurations.developmentOnly + +mainClassName = "graal.spring.demo.Application" +// use JUnit 5 platform +test { + useJUnitPlatform() +} + +shadowJar { + mergeServiceFiles() +} + +run.classpath += configurations.developmentOnly +run.jvmArgs('-noverify', '-XX:TieredStopAtLevel=1', '-Dcom.sun.management.jmxremote') +tasks.withType(JavaCompile){ + options.encoding = "UTF-8" + options.compilerArgs.add('-parameters') +} diff --git a/samples/micronaut/pet-store/docker-build.sh b/samples/micronaut/pet-store/docker-build.sh new file mode 100755 index 000000000..41a644cc0 --- /dev/null +++ b/samples/micronaut/pet-store/docker-build.sh @@ -0,0 +1,25 @@ +#!/bin/bash +DOCKER_IMAGE_NAME=graalvm-lambda-build + +if [[ -d "${PWD}/native-image" ]]; then + rm -rf native-image/* +fi + +gradle clean build --info + +if [[ $? -ne 0 ]]; then + echo "Gradle build failed" + exit 1 +fi + +mkdir -p ${PWD}/native-image + +if [[ "$(docker images -q ${DOCKER_IMAGE_NAME} 2> /dev/null)" == "" ]]; then + docker build . -t ${DOCKER_IMAGE_NAME} +fi + +docker run --rm -v ${PWD}:/func ${DOCKER_IMAGE_NAME} + +if [[ -f "${PWD}/native-image/function.zip" ]]; then + echo "The function is ready to deploy in the ./native-image/function.zip file. Use the sam-native.yaml template to set up your Lambda function and API" +fi diff --git a/samples/micronaut/pet-store/gradle.properties b/samples/micronaut/pet-store/gradle.properties new file mode 100644 index 000000000..04c818602 --- /dev/null +++ b/samples/micronaut/pet-store/gradle.properties @@ -0,0 +1 @@ +micronautVersion=1.2.3 \ No newline at end of file diff --git a/samples/micronaut/pet-store/micronaut-cli.yml b/samples/micronaut/pet-store/micronaut-cli.yml new file mode 100644 index 000000000..262c35c06 --- /dev/null +++ b/samples/micronaut/pet-store/micronaut-cli.yml @@ -0,0 +1,5 @@ +profile: service +defaultPackage: com.amazonaws.micronaut.demo +--- +testFramework: junit +sourceLanguage: java \ No newline at end of file diff --git a/samples/micronaut/pet-store/sam-local.sh b/samples/micronaut/pet-store/sam-local.sh new file mode 100755 index 000000000..0c82b8511 --- /dev/null +++ b/samples/micronaut/pet-store/sam-local.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +./docker-build.sh +sam local start-api -t sam-native.yaml \ No newline at end of file diff --git a/samples/micronaut/pet-store/sam-native.yaml b/samples/micronaut/pet-store/sam-native.yaml new file mode 100644 index 000000000..76a08d1ec --- /dev/null +++ b/samples/micronaut/pet-store/sam-native.yaml @@ -0,0 +1,30 @@ +AWSTemplateFormatVersion: '2010-09-09' +Transform: AWS::Serverless-2016-10-31 +Description: AWS Serverless Micronaut API - graal.spring.demo::graal-spring-demo +Globals: + Api: + EndpointConfiguration: REGIONAL +Resources: + GraalVMApiService: + Type: AWS::Serverless::Function + Properties: + Handler: not.used.in.provided.runtime + Runtime: provided + CodeUri: native-image/function.zip + MemorySize: 512 + Policies: AWSLambdaBasicExecutionRole + Tracing: Active + Timeout: 15 + Events: + GetResource: + Type: Api + Properties: + Path: /{proxy+} + Method: any + +Outputs: + MicronautNativeServiceApi: + Description: URL for application + Value: !Sub 'https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/pets' + Export: + Name: MicronautNativeServiceApi diff --git a/samples/micronaut/pet-store/scripts/bootstrap b/samples/micronaut/pet-store/scripts/bootstrap new file mode 100755 index 000000000..f10361a21 --- /dev/null +++ b/samples/micronaut/pet-store/scripts/bootstrap @@ -0,0 +1,3 @@ +#!/bin/sh +set -euo pipefail +./server \ No newline at end of file diff --git a/samples/micronaut/pet-store/scripts/graalvm-build.sh b/samples/micronaut/pet-store/scripts/graalvm-build.sh new file mode 100755 index 000000000..44b8b2603 --- /dev/null +++ b/samples/micronaut/pet-store/scripts/graalvm-build.sh @@ -0,0 +1,9 @@ +#!/bin/sh +echo "Startin GraalVM build" +/usr/lib/graalvm/bin/native-image -H:+TraceClassInitialization --initialize-at-build-time=reactor.core.publisher.Mono --initialize-at-build-time=reactor.core.publisher.Flux --no-fallback --no-server -cp /func/build/libs/pet-store-*-all.jar +rm -rf /func/native-image/* + +chmod 755 /func/server +mv /func/server /func/native-image/server +cp /func/scripts/bootstrap /func/native-image/bootstrap +cd /func/native-image && zip -j function.zip bootstrap server diff --git a/samples/micronaut/pet-store/settings.gradle b/samples/micronaut/pet-store/settings.gradle new file mode 100644 index 000000000..a6e417eb2 --- /dev/null +++ b/samples/micronaut/pet-store/settings.gradle @@ -0,0 +1 @@ +rootProject.name="pet-store" \ No newline at end of file diff --git a/samples/micronaut/pet-store/src/main/java/com/amazonaws/micronaut/demo/Application.java b/samples/micronaut/pet-store/src/main/java/com/amazonaws/micronaut/demo/Application.java new file mode 100644 index 000000000..0340d5c42 --- /dev/null +++ b/samples/micronaut/pet-store/src/main/java/com/amazonaws/micronaut/demo/Application.java @@ -0,0 +1,17 @@ +package com.amazonaws.micronaut.demo; + +import org.springframework.boot.autoconfigure.SpringBootApplication; + +import ch.qos.logback.classic.Level; +import ch.qos.logback.classic.Logger; +import io.micronaut.runtime.Micronaut; + +@SpringBootApplication +public class Application { + + public static void main(String[] args) { + Logger rootLogger = (ch.qos.logback.classic.Logger)org.slf4j.LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME); + rootLogger.setLevel(Level.TRACE); + Micronaut.run(Application.class); + } +} \ No newline at end of file diff --git a/samples/micronaut/pet-store/src/main/java/com/amazonaws/micronaut/demo/PetsController.java b/samples/micronaut/pet-store/src/main/java/com/amazonaws/micronaut/demo/PetsController.java new file mode 100644 index 000000000..a0d43e617 --- /dev/null +++ b/samples/micronaut/pet-store/src/main/java/com/amazonaws/micronaut/demo/PetsController.java @@ -0,0 +1,79 @@ +/* + * Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance + * with the License. A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file 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 com.amazonaws.micronaut.demo; + +import com.amazonaws.micronaut.demo.model.Pet; +import com.amazonaws.micronaut.demo.model.PetData; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; + +import javax.annotation.Nullable; +import java.security.Principal; +import java.util.Optional; +import java.util.UUID; + +@RestController +@EnableWebMvc +public class PetsController { + + private PetData petData; + + @Autowired + public PetsController(PetData data) { + petData = data; + } + + @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, @Nullable 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; + } + + @RequestMapping(path = "/pets/{petId}", method = RequestMethod.GET) + public Pet getPet(@RequestParam("petId") String petId) { + 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/samples/micronaut/pet-store/src/main/java/com/amazonaws/micronaut/demo/model/Pet.java b/samples/micronaut/pet-store/src/main/java/com/amazonaws/micronaut/demo/model/Pet.java new file mode 100644 index 000000000..3f0328ee5 --- /dev/null +++ b/samples/micronaut/pet-store/src/main/java/com/amazonaws/micronaut/demo/model/Pet.java @@ -0,0 +1,61 @@ +/* + * Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance + * with the License. A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file 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 com.amazonaws.micronaut.demo.model; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonProperty; +import io.micronaut.core.annotation.Introspected; + +import java.util.Date; + +@Introspected +public class Pet { + private String id; + private String breed; + private String name; + private Date dateOfBirth; + + @JsonProperty("petId") + 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; + } + + @JsonFormat(pattern = "YYYY-mm-dd") + public Date getDateOfBirth() { + return dateOfBirth; + } + + public void setDateOfBirth(Date dateOfBirth) { + this.dateOfBirth = dateOfBirth; + } +} diff --git a/samples/micronaut/pet-store/src/main/java/com/amazonaws/micronaut/demo/model/PetData.java b/samples/micronaut/pet-store/src/main/java/com/amazonaws/micronaut/demo/model/PetData.java new file mode 100644 index 000000000..f7bc03c46 --- /dev/null +++ b/samples/micronaut/pet-store/src/main/java/com/amazonaws/micronaut/demo/model/PetData.java @@ -0,0 +1,114 @@ +/* + * Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance + * with the License. A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file 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 com.amazonaws.micronaut.demo.model; + +import org.springframework.stereotype.Component; + +import java.util.*; +import java.util.concurrent.ThreadLocalRandom; + +@Component +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 List getBreeds() { + return breeds; + } + + public List getNames() { + return names; + } + + public String getRandomBreed() { + return breeds.get(ThreadLocalRandom.current().nextInt(0, breeds.size() - 1)); + } + + public String getRandomName() { + return names.get(ThreadLocalRandom.current().nextInt(0, names.size() - 1)); + } + + public 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/samples/micronaut/pet-store/src/main/resources/META-INF/native-image/graal.spring.demo/graal-spring-demo-application/native-image.properties b/samples/micronaut/pet-store/src/main/resources/META-INF/native-image/graal.spring.demo/graal-spring-demo-application/native-image.properties new file mode 100644 index 000000000..fd9f904ee --- /dev/null +++ b/samples/micronaut/pet-store/src/main/resources/META-INF/native-image/graal.spring.demo/graal-spring-demo-application/native-image.properties @@ -0,0 +1,4 @@ +Args = -H:IncludeResources=application.yml|log4j2.xml \ + -H:Name=server \ + -H:-AllowVMInspection \ + -H:Class=io.micronaut.function.aws.runtime.MicronautLambdaRuntime \ No newline at end of file diff --git a/samples/micronaut/pet-store/src/main/resources/application.yml b/samples/micronaut/pet-store/src/main/resources/application.yml new file mode 100644 index 000000000..c16e60c1d --- /dev/null +++ b/samples/micronaut/pet-store/src/main/resources/application.yml @@ -0,0 +1,6 @@ +micronaut: + application: + name: pet-store +jackson: + serialization: + indentOutput: true \ No newline at end of file diff --git a/samples/micronaut/pet-store/src/main/resources/logback.xml b/samples/micronaut/pet-store/src/main/resources/logback.xml new file mode 100644 index 000000000..6010eb523 --- /dev/null +++ b/samples/micronaut/pet-store/src/main/resources/logback.xml @@ -0,0 +1,15 @@ + + + + true + + + %cyan(%d{HH:mm:ss.SSS}) %gray([%thread]) %highlight(%-5level) %magenta(%logger{36}) - %msg%n + + + + + + + From c9087955357c62eaedffdac5cd1cb5628733c93f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 14 Nov 2019 09:58:06 -0800 Subject: [PATCH 072/888] Bump jackson.version from 2.9.10 to 2.10.1 in /samples/struts2/pet-store (#301) Bumps `jackson.version` from 2.9.10 to 2.10.1. Updates `jackson-core` from 2.9.10 to 2.10.1 - [Release notes](https://github.com/FasterXML/jackson-core/releases) - [Commits](https://github.com/FasterXML/jackson-core/compare/jackson-core-2.9.10...jackson-core-2.10.1) Updates `jackson-annotations` from 2.9.10 to 2.10.1 - [Release notes](https://github.com/FasterXML/jackson/releases) - [Commits](https://github.com/FasterXML/jackson/commits) Updates `jackson-databind` from 2.9.10 to 2.10.1 - [Release notes](https://github.com/FasterXML/jackson/releases) - [Commits](https://github.com/FasterXML/jackson/commits) Signed-off-by: dependabot[bot] --- samples/struts2/pet-store/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/struts2/pet-store/pom.xml b/samples/struts2/pet-store/pom.xml index 80c668794..9689fc6a7 100644 --- a/samples/struts2/pet-store/pom.xml +++ b/samples/struts2/pet-store/pom.xml @@ -27,7 +27,7 @@ 1.8 1.8 2.5.20 - 2.9.10 + 2.10.1 4.12 2.11.1 From 97a36f19a9c6eec8364d81e3f7150ec294140188 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 14 Nov 2019 09:58:21 -0800 Subject: [PATCH 073/888] Bump jackson-databind in /samples/jersey/pet-store (#300) Bumps [jackson-databind](https://github.com/FasterXML/jackson) from 2.9.10 to 2.9.10.1. - [Release notes](https://github.com/FasterXML/jackson/releases) - [Commits](https://github.com/FasterXML/jackson/commits) Signed-off-by: dependabot[bot] --- samples/jersey/pet-store/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index bd3195460..ced682aee 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -27,7 +27,7 @@ 1.8 1.8 2.29.1 - 2.9.10 + 2.9.10.1 From 612d9471201635a103278c48ffd266d359a96b01 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 14 Nov 2019 09:58:38 -0800 Subject: [PATCH 074/888] Bump jackson-databind in /samples/spark/pet-store (#299) Bumps [jackson-databind](https://github.com/FasterXML/jackson) from 2.9.10 to 2.9.10.1. - [Release notes](https://github.com/FasterXML/jackson/releases) - [Commits](https://github.com/FasterXML/jackson/commits) Signed-off-by: dependabot[bot] --- samples/spark/pet-store/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/spark/pet-store/pom.xml b/samples/spark/pet-store/pom.xml index 1b1a370d6..bbb57685a 100644 --- a/samples/spark/pet-store/pom.xml +++ b/samples/spark/pet-store/pom.xml @@ -26,7 +26,7 @@ 1.8 1.8 - 2.9.10 + 2.9.10.1 2.9.1 From 8b5a8f5a6c26a667139b574d675da2b3670763a0 Mon Sep 17 00:00:00 2001 From: sapessi Date: Thu, 14 Nov 2019 11:31:46 -0800 Subject: [PATCH 075/888] Bump Jackson version in main framework and removed owasp suppression --- owasp-suppression.xml | 5 ----- pom.xml | 2 +- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/owasp-suppression.xml b/owasp-suppression.xml index be75cff23..fe70f749b 100644 --- a/owasp-suppression.xml +++ b/owasp-suppression.xml @@ -36,10 +36,5 @@ cpe:/a:slf4j:slf4j:1.8.0 - - - - cpe:/a:fasterxml:jackson-databind:2.9.9 - \ No newline at end of file diff --git a/pom.xml b/pom.xml index 67a3283a3..298bdc8b2 100644 --- a/pom.xml +++ b/pom.xml @@ -46,7 +46,7 @@ 0.7 5.2.2 - 2.9.10 + 2.10.1 From 792eaa34ef14eb8429e4b7829968ea3140bd1b7a Mon Sep 17 00:00:00 2001 From: sapessi Date: Thu, 14 Nov 2019 11:32:01 -0800 Subject: [PATCH 076/888] Added SpringBoot 2.2 to CI --- .github/workflows/continuous-integration-workflow.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/continuous-integration-workflow.yml b/.github/workflows/continuous-integration-workflow.yml index 8aa7bf9fa..1937e03d8 100644 --- a/.github/workflows/continuous-integration-workflow.yml +++ b/.github/workflows/continuous-integration-workflow.yml @@ -60,6 +60,10 @@ jobs: run: ./gha_build.sh springboot2 true true - name: Build Spring Boot 2.0 run: ./gha_build.sh springboot2 false false -Dspringboot.version=2.0.9.RELEASE -Dspring.version=5.0.13.RELEASE -Dspringsecurity.version=5.0.12.RELEASE + - name: Build Spring Boot 2.1 + run: ./gha_build.sh springboot2 false false -Dspringboot.version=2.1.10.RELEASE -Dspring.version=5.1.11.RELEASE -Dspringsecurity.version=5.1.7.RELEASE + - name: Build Spring Boot 2.2 + run: ./gha_build.sh springboot2 false false -Dspringboot.version=2.2.1.RELEASE -Dspring.version=5.2.1.RELEASE -Dspringsecurity.version=5.2.1.RELEASE build_struts2: name: Build and test Struts 2 From 67abc3e5733c26623b8689b6a5e8b18911fedca1 Mon Sep 17 00:00:00 2001 From: sapessi Date: Thu, 14 Nov 2019 11:53:35 -0800 Subject: [PATCH 077/888] Bump jackson version in samples --- samples/jersey/pet-store/build.gradle | 2 +- samples/jersey/pet-store/pom.xml | 2 +- samples/spark/pet-store/build.gradle | 2 +- samples/spark/pet-store/pom.xml | 2 +- samples/struts2/pet-store/build.gradle | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/samples/jersey/pet-store/build.gradle b/samples/jersey/pet-store/build.gradle index c719ba130..064fdf373 100644 --- a/samples/jersey/pet-store/build.gradle +++ b/samples/jersey/pet-store/build.gradle @@ -13,7 +13,7 @@ dependencies { 'io.symphonia:lambda-logging:1.0.1' ) - compile("org.glassfish.jersey.media:jersey-media-json-jackson:2.29.1") { + compile("org.glassfish.jersey.media:jersey-media-json-jackson:2.10.1") { exclude group: 'com.fasterxml.jackson.core', module: "jackson-annotations" exclude group: 'com.fasterxml.jackson.core', module: "jackson-databind" exclude group: 'com.fasterxml.jackson.core', module: "jackson-core" diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index ced682aee..6761c6210 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -27,7 +27,7 @@ 1.8 1.8 2.29.1 - 2.9.10.1 + 2.10.1 diff --git a/samples/spark/pet-store/build.gradle b/samples/spark/pet-store/build.gradle index 6b6c70129..00ac4797c 100644 --- a/samples/spark/pet-store/build.gradle +++ b/samples/spark/pet-store/build.gradle @@ -9,7 +9,7 @@ dependencies { compile ( 'com.sparkjava:spark-core:2.9.1', 'com.amazonaws.serverless:aws-serverless-java-container-spark:[1.0,)', - 'com.fasterxml.jackson.core:jackson-databind:2.9.10', + 'com.fasterxml.jackson.core:jackson-databind:2.10.1', 'io.symphonia:lambda-logging:1.0.1' ) } diff --git a/samples/spark/pet-store/pom.xml b/samples/spark/pet-store/pom.xml index bbb57685a..4bdd90956 100644 --- a/samples/spark/pet-store/pom.xml +++ b/samples/spark/pet-store/pom.xml @@ -26,7 +26,7 @@ 1.8 1.8 - 2.9.10.1 + 2.10.1 2.9.1 diff --git a/samples/struts2/pet-store/build.gradle b/samples/struts2/pet-store/build.gradle index 9f2ccf09a..2d7e42500 100644 --- a/samples/struts2/pet-store/build.gradle +++ b/samples/struts2/pet-store/build.gradle @@ -14,7 +14,7 @@ dependencies { 'org.apache.struts:struts2-junit-plugin:2.5.20', 'com.jgeppert.struts2:struts2-aws-lambda-support-plugin:1.1.0', 'org.hibernate:hibernate-validator:4.3.2.Final', - 'com.fasterxml.jackson.core:jackson-databind:2.9.10', + 'com.fasterxml.jackson.core:jackson-databind:2.10.1', 'org.apache.logging.log4j:log4j-core:2.8.2', 'org.apache.logging.log4j:log4j-api:2.8.2', 'org.apache.logging.log4j:log4j-slf4j-impl:2.8.2', From d816d4df0ab88e592e1dde5576d4e0aca01f6e9c Mon Sep 17 00:00:00 2001 From: Harold Sun Date: Fri, 6 Dec 2019 01:08:40 +0800 Subject: [PATCH 078/888] add Quarkus pet store sample. (#309) * add Quarkus pet store sample. * update source code package structure --- samples/quarkus/pet-store/README.md | 68 +++++++++ samples/quarkus/pet-store/pom.xml | 141 ++++++++++++++++++ samples/quarkus/pet-store/sam.native.yaml | 36 +++++ .../quarkus/pet-store/src/assembly/zip.xml | 17 +++ .../sample/quarkus/PetsController.java | 63 ++++++++ .../serverless/sample/quarkus/model/Pet.java | 50 +++++++ .../sample/quarkus/model/PetData.java | 102 +++++++++++++ .../src/main/resources/application.properties | 4 + 8 files changed, 481 insertions(+) create mode 100644 samples/quarkus/pet-store/README.md create mode 100644 samples/quarkus/pet-store/pom.xml create mode 100644 samples/quarkus/pet-store/sam.native.yaml create mode 100644 samples/quarkus/pet-store/src/assembly/zip.xml create mode 100644 samples/quarkus/pet-store/src/main/java/com/amazonaws/serverless/sample/quarkus/PetsController.java create mode 100644 samples/quarkus/pet-store/src/main/java/com/amazonaws/serverless/sample/quarkus/model/Pet.java create mode 100644 samples/quarkus/pet-store/src/main/java/com/amazonaws/serverless/sample/quarkus/model/PetData.java create mode 100644 samples/quarkus/pet-store/src/main/resources/application.properties diff --git a/samples/quarkus/pet-store/README.md b/samples/quarkus/pet-store/README.md new file mode 100644 index 000000000..3ff1371d7 --- /dev/null +++ b/samples/quarkus/pet-store/README.md @@ -0,0 +1,68 @@ +# Quarkus Native Pet store example + +The [Quarkus framework](https://quarkus.io/) is compatible with Spring's annotations and makes it easy to use [GraalVM](https://www.graalvm.org/) to build application images into native binaries. Further, Micronaut includes builtin support for AWS Lambda. + +This demo application shows how to use Quarkus to compile our standard pet store example, using Spring annotations, into a native binary with GraalVM and execute it in AWS Lambda. To run this demo, you will need to have [Maven](https://maven.apache.org/) installed as well as [Docker](https://www.docker.com/) to build GraalVM native image. + +With all the pre-requisites installed including: + +* JDK 8 or above +* Maven 3.5.x + +You should be able to build a native image of the application by running mvn from the repository's root. + +```bash +$ mvn clean install -Pnative +``` + +The output of the build is a deployable zip called `function.zip` in the `target` folder. + +To run the lambda locally, you can utilize the SAM cli. This should start up the listeners in the `PetsController`, and you can test locally with your preferred http client. + +```bash +sam local start-api -t sam.native.yaml +``` + +For example, to test the GET /pets endpoint via curl: +```bash +curl localhost:3000/pets +``` + +You should see JSON output of pets. + +To deploy the application to AWS Lambda you can use the pre-configured `sam-native.yaml` file included in the repo. Using the AWS or SAM CLI, run the following commands: + +```bash +sam deploy -g -t sam.native.yaml +``` + +You should see the stack deployed successfully: + +```bash +Stack quarkus-sample-pet-store outputs: +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +OutputKey-Description OutputValue +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +PetStoreNativeApi - URL for application https://xxxxxxxxxx.execute-api.xx-xxxx-1.amazonaws.com/Prod/ +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Successfully created/updated stack - quarkus-sample-pet-store in xx-xxxx-1 + +``` + +Make a test request to the API endpoint using curl or your preferred http client. + +For example, to check the GET /pets endpoint via curl: +```bash +curl https://xxxxxxxxxx.execute-api.xx-xxxx-1.amazonaws.com/Prod/pets +``` + +Finally, there’s an environment variable that must be set for native GraalVM deployments. If you look at sam.native.yaml you’ll see this: + +```bash + Environment: + Variables: + DISABLE_SIGNAL_HANDLERS: true +``` + +This environment variable resolves some incompatibilites between GraalVM and the Amazon Lambda Custom Runtime environment. \ No newline at end of file diff --git a/samples/quarkus/pet-store/pom.xml b/samples/quarkus/pet-store/pom.xml new file mode 100644 index 000000000..0147be882 --- /dev/null +++ b/samples/quarkus/pet-store/pom.xml @@ -0,0 +1,141 @@ + + + 4.0.0 + com.amazonaws.serverless.sample + serverless-quarkus-example + 1.0-SNAPSHOT + + 3.8.1 + true + 1.8 + 1.8 + UTF-8 + UTF-8 + 1.0.1.Final + quarkus-universe-bom + io.quarkus + 1.0.1.Final + 2.22.1 + + + + + ${quarkus.platform.group-id} + ${quarkus.platform.artifact-id} + ${quarkus.platform.version} + pom + import + + + + + + io.quarkus + quarkus-resteasy + + + io.quarkus + quarkus-amazon-lambda-http + + + io.quarkus + quarkus-spring-web + + + io.quarkus + quarkus-junit5 + test + + + io.rest-assured + rest-assured + test + + + + + + io.quarkus + quarkus-maven-plugin + ${quarkus-plugin.version} + + + + build + + + + + + maven-compiler-plugin + ${compiler-plugin.version} + + + maven-surefire-plugin + ${surefire-plugin.version} + + + org.jboss.logmanager.LogManager + + + + + + + + native + + + native + + + + + + maven-failsafe-plugin + ${surefire-plugin.version} + + + + integration-test + verify + + + + ${project.build.directory}/${project.build.finalName}-runner + + + + + + + org.apache.maven.plugins + maven-assembly-plugin + 3.1.0 + + + zip-assembly + package + + single + + + function + + src/assembly/zip.xml + + false + false + + + + + + + + native + + + + diff --git a/samples/quarkus/pet-store/sam.native.yaml b/samples/quarkus/pet-store/sam.native.yaml new file mode 100644 index 000000000..54ca55d07 --- /dev/null +++ b/samples/quarkus/pet-store/sam.native.yaml @@ -0,0 +1,36 @@ + AWSTemplateFormatVersion: '2010-09-09' + Transform: AWS::Serverless-2016-10-31 + Description: AWS Serverless Quarkus HTTP - com.amazon.quarkus.demo::pet-store + Globals: + Api: + EndpointConfiguration: REGIONAL + BinaryMediaTypes: + - "*/*" + + Resources: + PetStoreNativeFunction: + Type: AWS::Serverless::Function + Properties: + Handler: not.used.in.provided.runtime + Runtime: provided + CodeUri: target/function.zip + MemorySize: 128 + Policies: AWSLambdaBasicExecutionRole + Tracing: Active + Timeout: 15 + Environment: + Variables: + DISABLE_SIGNAL_HANDLERS: true + Events: + GetResource: + Type: Api + Properties: + Path: /{proxy+} + Method: any + + Outputs: + PetStoreNativeApi: + Description: URL for application + Value: !Sub 'https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/' + Export: + Name: PetStoreNativeApi diff --git a/samples/quarkus/pet-store/src/assembly/zip.xml b/samples/quarkus/pet-store/src/assembly/zip.xml new file mode 100644 index 000000000..ce2cb6421 --- /dev/null +++ b/samples/quarkus/pet-store/src/assembly/zip.xml @@ -0,0 +1,17 @@ + + lambda-package + + zip + + false + + + ${project.build.directory}${file.separator}${artifactId}-${version}-runner + / + bootstrap + 755 + + + diff --git a/samples/quarkus/pet-store/src/main/java/com/amazonaws/serverless/sample/quarkus/PetsController.java b/samples/quarkus/pet-store/src/main/java/com/amazonaws/serverless/sample/quarkus/PetsController.java new file mode 100644 index 000000000..571887850 --- /dev/null +++ b/samples/quarkus/pet-store/src/main/java/com/amazonaws/serverless/sample/quarkus/PetsController.java @@ -0,0 +1,63 @@ +package com.amazonaws.serverless.sample.quarkus; + +import com.amazonaws.serverless.sample.quarkus.model.Pet; +import com.amazonaws.serverless.sample.quarkus.model.PetData; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.Optional; +import java.util.UUID; + +@RestController +public class PetsController { + + private PetData petData; + + @Autowired + public PetsController(PetData data) { + petData = data; + } + + @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) { + 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; + } + + @RequestMapping(path = "/pets/{petId}", method = RequestMethod.GET) + public Pet getPet(@RequestParam("petId") String petId) { + 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/samples/quarkus/pet-store/src/main/java/com/amazonaws/serverless/sample/quarkus/model/Pet.java b/samples/quarkus/pet-store/src/main/java/com/amazonaws/serverless/sample/quarkus/model/Pet.java new file mode 100644 index 000000000..475213362 --- /dev/null +++ b/samples/quarkus/pet-store/src/main/java/com/amazonaws/serverless/sample/quarkus/model/Pet.java @@ -0,0 +1,50 @@ +package com.amazonaws.serverless.sample.quarkus.model; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonProperty; +import io.quarkus.runtime.annotations.RegisterForReflection; + +import java.util.Date; + +@RegisterForReflection +public class Pet { + private String id; + private String breed; + private String name; + private Date dateOfBirth; + + @JsonProperty("petId") + 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; + } + + @JsonFormat(pattern = "YYYY-mm-dd") + public Date getDateOfBirth() { + return dateOfBirth; + } + + public void setDateOfBirth(Date dateOfBirth) { + this.dateOfBirth = dateOfBirth; + } + +} diff --git a/samples/quarkus/pet-store/src/main/java/com/amazonaws/serverless/sample/quarkus/model/PetData.java b/samples/quarkus/pet-store/src/main/java/com/amazonaws/serverless/sample/quarkus/model/PetData.java new file mode 100644 index 000000000..90b837d0d --- /dev/null +++ b/samples/quarkus/pet-store/src/main/java/com/amazonaws/serverless/sample/quarkus/model/PetData.java @@ -0,0 +1,102 @@ +package com.amazonaws.serverless.sample.quarkus.model; + +import org.springframework.stereotype.Component; + +import java.util.*; +import java.util.concurrent.ThreadLocalRandom; + +@Component +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 List getBreeds() { + return breeds; + } + + public List getNames() { + return names; + } + + public String getRandomBreed() { + return breeds.get(ThreadLocalRandom.current().nextInt(0, breeds.size() - 1)); + } + + public String getRandomName() { + return names.get(ThreadLocalRandom.current().nextInt(0, names.size() - 1)); + } + + public 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/samples/quarkus/pet-store/src/main/resources/application.properties b/samples/quarkus/pet-store/src/main/resources/application.properties new file mode 100644 index 000000000..ee9b09c98 --- /dev/null +++ b/samples/quarkus/pet-store/src/main/resources/application.properties @@ -0,0 +1,4 @@ +quarkus.native.container-build=true +quarkus.native.container-runtime=docker +quarkus.native.builder-image=quay.io/quarkus/ubi-quarkus-native-image:19.2.1 +quarkus.log.level=INFO \ No newline at end of file From 21430d65062f5f072a376f1d6e89ed7158b59ae8 Mon Sep 17 00:00:00 2001 From: sullis Date: Wed, 8 Jan 2020 08:14:21 -0800 Subject: [PATCH 079/888] GitHub Actions checkout v2 (#312) --- .../workflows/continuous-integration-workflow.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/continuous-integration-workflow.yml b/.github/workflows/continuous-integration-workflow.yml index 1937e03d8..c1b10ca79 100644 --- a/.github/workflows/continuous-integration-workflow.yml +++ b/.github/workflows/continuous-integration-workflow.yml @@ -10,7 +10,7 @@ jobs: name: Build and test core runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Build latest run: mvn -q clean install working-directory: ./aws-serverless-java-container-core @@ -19,7 +19,7 @@ jobs: name: Build and test Jersey runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Build latest run: ./gha_build.sh jersey true true - name: Build Jersey 2.26 @@ -33,7 +33,7 @@ jobs: name: Build and test Spark runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Build latest run: ./gha_build.sh spark true true - name: Build Spark 2.8.0 @@ -43,7 +43,7 @@ jobs: name: Build and test Spring & SpringBoot runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Build latest run: ./gha_build.sh spring true true - name: Build Spring 4.3 @@ -55,7 +55,7 @@ jobs: name: Build and test SpringBoot 2 runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Build latest run: ./gha_build.sh springboot2 true true - name: Build Spring Boot 2.0 @@ -69,6 +69,6 @@ jobs: name: Build and test Struts 2 runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - name: Build latest - run: ./gha_build.sh struts2 true true \ No newline at end of file + run: ./gha_build.sh struts2 true true From 3b5177566e63ae79eb67ccf6d9ce8a5774de2281 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 27 Mar 2020 21:42:29 -0700 Subject: [PATCH 080/888] Bump spring.version in /samples/spring/pet-store (#320) Bumps `spring.version` from 5.1.9.RELEASE to 5.2.3.RELEASE. Updates `spring-webmvc` from 5.1.9.RELEASE to 5.2.3.RELEASE - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v5.1.9.RELEASE...v5.2.3.RELEASE) Updates `spring-context` from 5.1.9.RELEASE to 5.2.3.RELEASE - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v5.1.9.RELEASE...v5.2.3.RELEASE) Updates `spring-context-indexer` from 5.1.9.RELEASE to 5.2.3.RELEASE - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v5.1.9.RELEASE...v5.2.3.RELEASE) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- samples/spring/pet-store/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index d25d1dc02..86d26471d 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -26,7 +26,7 @@ 1.8 1.8 - 5.1.9.RELEASE + 5.2.3.RELEASE 4.12 2.8.2 From dce832e2efcf5f0ccd0779a35bc49b56b3bc7deb Mon Sep 17 00:00:00 2001 From: Stefano Buliani Date: Sat, 28 Mar 2020 22:40:46 -0700 Subject: [PATCH 081/888] chore(deps): Bump default Spring version to 5.2.x --- aws-serverless-java-container-spring/pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 01bab3056..5b6117cb9 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -16,9 +16,9 @@ - 5.1.9.RELEASE + 5.2.5.RELEASE 1.5.22.RELEASE - 5.1.5.RELEASE + 5.2.2.RELEASE From 41ac2cbb5fd7af2e76e5e47d5e6f6c72ad35d87b Mon Sep 17 00:00:00 2001 From: Stefano Buliani Date: Sat, 28 Mar 2020 22:42:31 -0700 Subject: [PATCH 082/888] patch: Added CI against spring 5.1 and 5.2. Updated unit tests to skip SpringBoot tests when running against Spring 5.2 since SpringBoot 1.5 is deprecated and newer breaking changes are not supported --- .../workflows/continuous-integration-workflow.yml | 6 ++++++ .../serverless/proxy/spring/SlowAppTest.java | 8 ++++++++ .../serverless/proxy/spring/SpringBootAppTest.java | 13 ++++++++++++- .../proxy/spring/SpringBootSecurityTest.java | 12 ++++++++++++ .../ServerlessServletEmbeddedServerFactoryTest.java | 12 ++++++++++++ 5 files changed, 50 insertions(+), 1 deletion(-) diff --git a/.github/workflows/continuous-integration-workflow.yml b/.github/workflows/continuous-integration-workflow.yml index c1b10ca79..1dfb971d9 100644 --- a/.github/workflows/continuous-integration-workflow.yml +++ b/.github/workflows/continuous-integration-workflow.yml @@ -50,6 +50,12 @@ jobs: run: ./gha_build.sh spring false false -Dspring.version=4.3.25.RELEASE -Dspring-security.version=4.2.13.RELEASE - name: Build Spring 5.0 run: ./gha_build.sh spring false false -Dspring.version=5.0.15.RELEASE -Dspring-security.version=5.0.13.RELEASE + - name: Build Spring 5.1 + run: ./gha_build.sh spring false false -Dspring.version=5.1.14.RELEASE -Dspring-security.version=5.1.8.RELEASE + - name: Build Spring 5.2 + # we reduce the minCoverage for this run because it will skip the SpringBoot 1.5 tests since they are no longer compatible with + # Spring core 5.2 and above. SpringBoot 1.5 is deprecated + run: ./gha_build.sh spring false false -Dspring.version=5.2.5.RELEASE -Dspring-security.version=5.2.2.RELEASE -Djacoco.minCoverage=0.4 build_springboot2: name: Build and test SpringBoot 2 diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SlowAppTest.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SlowAppTest.java index 2d1495905..29bc83ee8 100644 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SlowAppTest.java +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SlowAppTest.java @@ -11,10 +11,13 @@ import com.amazonaws.serverless.proxy.spring.springslowapp.SlowAppConfig; import org.junit.Assert; import org.junit.Test; +import org.springframework.core.SpringVersion; import java.time.Instant; +import java.util.Objects; import static org.junit.Assert.*; +import static org.junit.Assume.assumeFalse; public class SlowAppTest { @@ -40,6 +43,11 @@ public void springSlowApp_continuesInBackgroundThread_returnsCorrect() { @Test public void springBootSlowApp_continuesInBackgroundThread_returnsCorrect() { + // We skip the tests if we are running against Spring 5.2.x - SpringBoot 1.5 is deprecated and no longer + // breaking changes in the latest Spring releases have not been supported in it. + // TODO: Update the check to verify any Spring version above 5.2 + assumeFalse(Objects.requireNonNull(SpringVersion.getVersion()).startsWith("5.2")); + SBLambdaHandler slowApp = null; try { slowApp = new SBLambdaHandler(); diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringBootAppTest.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringBootAppTest.java index 91a559caa..d453dfe43 100644 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringBootAppTest.java +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringBootAppTest.java @@ -12,16 +12,19 @@ import com.amazonaws.serverless.proxy.spring.springbootapp.LambdaHandler; import com.amazonaws.serverless.proxy.spring.springbootapp.TestController; -import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; +import org.junit.BeforeClass; import org.junit.Test; +import org.springframework.core.SpringVersion; import javax.ws.rs.core.HttpHeaders; import java.io.IOException; +import java.util.Objects; import static com.amazonaws.serverless.proxy.spring.springbootapp.TestController.CUSTOM_HEADER_NAME; import static com.amazonaws.serverless.proxy.spring.springbootapp.TestController.CUSTOM_QS_NAME; import static org.junit.Assert.*; +import static org.junit.Assume.assumeFalse; public class SpringBootAppTest { @@ -29,6 +32,14 @@ public class SpringBootAppTest { private MockLambdaContext context = new MockLambdaContext(); private ObjectMapper mapper = new ObjectMapper(); + @BeforeClass + public static void before() { + // We skip the tests if we are running against Spring 5.2.x - SpringBoot 1.5 is deprecated and no longer + // breaking changes in the latest Spring releases have not been supported in it. + // TODO: Update the check to verify any Spring version above 5.2 + assumeFalse(Objects.requireNonNull(SpringVersion.getVersion()).startsWith("5.2")); + } + @Test public void testMethod_springSecurity_doesNotThrowException() { AwsProxyRequest req = new AwsProxyRequestBuilder("/test", "GET").build(); diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringBootSecurityTest.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringBootSecurityTest.java index b8d504462..49ba0e003 100644 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringBootSecurityTest.java +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringBootSecurityTest.java @@ -12,13 +12,17 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; +import org.junit.BeforeClass; import org.junit.Test; +import org.springframework.core.SpringVersion; import javax.ws.rs.core.HttpHeaders; import java.io.IOException; import java.util.Base64; +import java.util.Objects; import static org.junit.Assert.*; +import static org.junit.Assume.assumeFalse; public class SpringBootSecurityTest { @@ -26,6 +30,14 @@ public class SpringBootSecurityTest { private MockLambdaContext context = new MockLambdaContext(); private ObjectMapper mapper = new ObjectMapper(); + @BeforeClass + public static void before() { + // We skip the tests if we are running against Spring 5.2.x - SpringBoot 1.5 is deprecated and no longer + // breaking changes in the latest Spring releases have not been supported in it. + // TODO: Update the check to verify any Spring version above 5.2 + assumeFalse(Objects.requireNonNull(SpringVersion.getVersion()).startsWith("5.2")); + } + @Test public void correctUser_springSecurityBasicAuth_requestSucceeds() throws JsonProcessingException { String authValue = Base64.getMimeEncoder().encodeToString((TestSecurityConfig.USERNAME + ":" + TestSecurityConfig.PASSWORD).getBytes()); diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactoryTest.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactoryTest.java index b9e31a052..2ae76a6ca 100644 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactoryTest.java +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactoryTest.java @@ -3,18 +3,30 @@ import com.amazonaws.serverless.exceptions.ContainerInitializationException; import com.amazonaws.serverless.proxy.spring.SpringBootLambdaContainerHandler; import com.amazonaws.serverless.proxy.spring.springbootapp.TestApplication; +import org.junit.BeforeClass; import org.junit.Test; import org.springframework.boot.context.embedded.EmbeddedServletContainer; import org.springframework.boot.context.embedded.EmbeddedServletContainerException; import org.springframework.boot.web.servlet.ServletContextInitializer; +import org.springframework.core.SpringVersion; import javax.servlet.*; import java.io.IOException; +import java.util.Objects; import static org.junit.Assert.*; +import static org.junit.Assume.assumeFalse; public class ServerlessServletEmbeddedServerFactoryTest { + @BeforeClass + public static void before() { + // We skip the tests if we are running against Spring 5.2.x - SpringBoot 1.5 is deprecated and no longer + // breaking changes in the latest Spring releases have not been supported in it. + // TODO: Update the check to verify any Spring version above 5.2 + assumeFalse(Objects.requireNonNull(SpringVersion.getVersion()).startsWith("5.2")); + } + // initialize a container handler to that the embedded factory can grab its instnace private SpringBootLambdaContainerHandler h = SpringBootLambdaContainerHandler.getAwsProxyHandler(TestApplication.class); From 5c655bd904bc96e45449526e0a3e51ba1f65270f Mon Sep 17 00:00:00 2001 From: Stefano Buliani Date: Sat, 28 Mar 2020 22:52:29 -0700 Subject: [PATCH 083/888] docs: Deprecated support for SpringBoot 1.5 --- .../proxy/spring/SpringBootLambdaContainerHandler.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java b/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java index 4cccb0bf5..cb449568c 100644 --- a/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java +++ b/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java @@ -38,9 +38,15 @@ * * Important: Make sure to add LambdaFlushResponseListener in your SpringBootServletInitializer subclass configure(). * + * @deprecated Spring officially deprecated + * SpringBoot 1.5.x as of August 2019. We recommend upgrading to SpringBoot 2.1 or above. SpringBoot 2 is supported + * in the + * aws-serverless-java-container-springboot2 module. + * * @param The incoming event type * @param The expected return type */ +@Deprecated public class SpringBootLambdaContainerHandler extends AwsLambdaServletContainerHandler { private final Class springBootInitializer; private static final Logger log = LoggerFactory.getLogger(SpringBootLambdaContainerHandler.class); From 4380cc05fb96ccc61f8a76ff6f6381bb3ab75260 Mon Sep 17 00:00:00 2001 From: Stefano Buliani <2996317+sapessi@users.noreply.github.com> Date: Wed, 8 Apr 2020 10:57:52 -0700 Subject: [PATCH 084/888] Draft pull request for 1.5 release (#331) * Bump spring.version in /aws-serverless-java-container-spring (#319) Bumps `spring.version` from 5.1.9.RELEASE to 5.2.3.RELEASE. Updates `spring-webmvc` from 5.1.9.RELEASE to 5.2.3.RELEASE - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v5.1.9.RELEASE...v5.2.3.RELEASE) Updates `spring-test` from 5.1.9.RELEASE to 5.2.3.RELEASE - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v5.1.9.RELEASE...v5.2.3.RELEASE) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump spring-webflux in /aws-serverless-java-container-springboot2 (#318) Bumps [spring-webflux](https://github.com/spring-projects/spring-framework) from 5.1.9.RELEASE to 5.2.0.RELEASE. - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v5.1.9.RELEASE...v5.2.0.RELEASE) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * ci: Fixing Spring build to use 5.2 as latest * chore(deps): Bump Spring 5.1 path release to address a security vulnerability * chore(deps): Fixing usual spring dependency mess with exlusions out of the spring-security package used in the tests * Fix for issue #317 (#323) * fix issue 317 - use charset from request * update dependencies * update build dependencies, remove spring boot 2.0.x * restoring ci config Co-authored-by: Stefano Buliani <2996317+sapessi@users.noreply.github.com> * test: Fixed Spring security tests for SpringBoot 2, added validation tests and updated servlet tests to use the new servletApplication option * fix: Avoid flushing the response buffer if we are dispatching the request asynchronously. This was causing race conditions in the SpringBoot 2 WebFlux implementation - requests that had to run through security or validation filters took longer and the library flushed an empty request, which caused the status code to default to 200. This fix addresses issues #279, #304, and #306 * chore(deps): Bump spring dependency version and added webmvc optional dependency to truly support Servlet-only server * feat: New application type parameter to SpringBootLambdaContainerHandler that tells the framework whether to start a reactive or servlet-based embedded server. Also added a new servletApplication method to the builder object. * test: Fixed UTF-8 encoding test * ci: Fixed dependencies for CI run on SpringBoot 2 * ci: More Spring dependency convergence issues during CI * fix: Added null-check on getServerName in case the multi-value headers property is null. Unlikely outside of tests but better safe than sorry. This addresses #327 * fix: Changed servlet initialization mechanism so that servlet that requests load on startup are initialized right away, as part of the initialization() method call in LambdaServletContainerHandler. Also centralized the lazy Servlet initialization to the ServletExecutionFilter so that we don't have code scattered all around. This begins to address #287 * feat: Added new 0-parameter constructor for async initializer that uses the actual JVM start time to calculate the timeout milliseconds. Also added the new method to the builder object and deprecated the current method that receives a milliseconds epoch parameter. I'm not deprecating the constructor of the async initializer class that receives the parameter as it may still be useful for tests. This change was suggested in #287 * fix: Updated SpringBoot 1.x handler to use the new servlet initialization mechanism * ci: switch SpringBoot slow integration test to use a custom async time since the JVM is reused for both tests in the and we cannot reuse the actual JVM init time * feat: New models for HTTP API support for #329 * feat: First implementation of HTTP API servlet request, request reader, and security context writer - continuing to address #329 * test: Basic unit tests for the new HTTP API support in core library (#329) * feat: Updated log formatter to support both versions (1 and 2) of the proxy request model (#329) * feat: Further generified request readers to read to a generic HttpServletRequest rather than specific implementations of it. This makes it easier to create container handler implementations that support HTTP API, API Gateway, and ALB (#329) * test: Fixed tests for new logged and generified request readers * feat: Added HTTP API support to Jersey implementation with new getHttpApiV2ProxyHandler method (#329) * feat: Added HTTP API support to Spark implementation (#329) * feat: Added HTTP API support to Spring implementation (#329) * feat: HTTP API support in SpringBoot 2 implementation. bug: Fixed an issue with the implementation of AsyncContext where it wasn't dispatching if the handler wasn't set * feat: First pass of HTTP API support in struts 2 implementation (#329) * fix: Added support for HTTP APIs to the request dispatcher * chore(deps): Dependency bump all around. Rotated Jersey ci versions * fix: Updated stream handling logic to work with reactive applications as suggested in #316 * test: Added unit test to replicate #333 * feat: New configuration parameter to skip exception mapping and allow exception to bubble up from #307 * fix: Fixed spotbugs issue in RuntimeException cast * test: Added tests for more complex content types mentioned in issue #315 * docs: Updated samples to support SAM CLI operations out of the box to address #293 and switched to HTTP API by default * feat: Updated archetypes to work out of the box with the SAM CLI, continuing to address #293 * chore: License header pass on the entire project * fix: Set default value for setDisableException mapper in config to false * fix: Updated default initialization timeout to 20 seconds Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Eran Medan --- .../continuous-integration-workflow.yml | 20 +- .gitignore | 4 + .../proxy/AsyncInitializationWrapper.java | 30 +- .../AwsHttpApiV2SecurityContextWriter.java | 26 + .../proxy/InitializationWrapper.java | 12 + .../serverless/proxy/LogFormatter.java | 14 +- .../serverless/proxy/RequestReader.java | 13 + .../internal/LambdaContainerHandler.java | 10 +- .../proxy/internal/SecurityUtils.java | 14 +- .../jaxrs/AwsHttpApiV2SecurityContext.java | 102 ++++ .../ApacheCombinedServletLogFormatter.java | 58 +- .../internal/servlet/AwsAsyncContext.java | 21 +- .../AwsHttpApiV2HttpServletRequestReader.java | 50 ++ .../AwsHttpApiV2ProxyHttpServletRequest.java | 521 ++++++++++++++++++ .../servlet/AwsHttpServletRequest.java | 341 +++++++++++- .../servlet/AwsHttpServletRequestWrapper.java | 12 + .../servlet/AwsHttpServletResponse.java | 8 +- .../internal/servlet/AwsHttpSession.java | 13 +- .../AwsLambdaServletContainerHandler.java | 31 +- .../servlet/AwsProxyHttpServletRequest.java | 394 +------------ .../AwsProxyHttpServletRequestReader.java | 6 +- .../AwsProxyHttpServletResponseWriter.java | 2 +- .../servlet/AwsProxyRequestDispatcher.java | 34 +- .../internal/servlet/AwsServletContext.java | 37 +- .../servlet/AwsServletInputStream.java | 76 +++ .../servlet/AwsServletRegistration.java | 35 +- .../internal/servlet/FilterChainManager.java | 39 +- .../proxy/internal/servlet/FilterHolder.java | 3 + .../ServletLambdaContainerHandlerBuilder.java | 48 ++ .../testutils/AwsProxyRequestBuilder.java | 159 +++++- .../proxy/internal/testutils/Timer.java | 14 +- .../serverless/proxy/model/AlbContext.java | 13 +- .../proxy/model/ContainerConfig.java | 37 +- .../serverless/proxy/model/Headers.java | 12 + .../proxy/model/HttpApiV2AuthorizerMap.java | 84 +++ .../proxy/model/HttpApiV2HttpContext.java | 61 ++ .../proxy/model/HttpApiV2JwtAuthorizer.java | 37 ++ .../proxy/model/HttpApiV2ProxyRequest.java | 121 ++++ .../model/HttpApiV2ProxyRequestContext.java | 117 ++++ .../proxy/model/MultiValuedTreeMap.java | 14 +- .../proxy/AsyncInitializationWrapperTest.java | 28 + .../internal/LambdaContainerHandlerTest.java | 105 ++++ .../jaxrs/HttpApiV2SecurityContextTest.java | 49 ++ ...ApacheCombinedServletLogFormatterTest.java | 9 +- .../internal/servlet/AwsAsyncContextTest.java | 13 +- ...HttpApiV2HttpServletRequestReaderTest.java | 44 ++ .../AwsProxyHttpServletRequestReaderTest.java | 13 +- .../AwsProxyHttpServletRequestTest.java | 155 +++--- .../AwsProxyRequestDispatcherTest.java | 22 +- ...vletLambdaContainerHandlerBuilderTest.java | 9 +- .../model/HttpApiV2ProxyRequestTest.java | 146 +++++ aws-serverless-java-container-jersey/pom.xml | 2 +- .../proxy/jersey/JerseyHandlerFilter.java | 14 +- .../jersey/JerseyLambdaContainerHandler.java | 71 ++- .../proxy/jersey/JerseyAwsProxyTest.java | 236 ++++---- .../proxy/jersey/JerseyParamEncodingTest.java | 104 ++-- .../spark/SparkLambdaContainerHandler.java | 46 +- .../embeddedserver/LambdaEmbeddedServer.java | 12 + .../LambdaEmbeddedServerFactory.java | 12 + .../spark/HelloWorldSparkStreamTest.java | 70 ++- aws-serverless-java-container-spring/pom.xml | 9 + .../SpringBootLambdaContainerHandler.java | 47 +- .../spring/SpringBootProxyHandlerBuilder.java | 38 +- ...SpringBootServletConfigurationSupport.java | 12 + .../spring/SpringLambdaContainerHandler.java | 48 +- .../spring/SpringProxyHandlerBuilder.java | 40 +- ...erverlessServletEmbeddedServerFactory.java | 12 + .../proxy/spring/SpringAwsProxyTest.java | 258 +++++---- .../proxy/spring/SpringBootAppTest.java | 67 ++- .../spring/echoapp/EchoSpringAppConfig.java | 47 -- .../spring/springbootapp/LambdaHandler.java | 50 +- .../springbootslowapp/SBLambdaHandler.java | 4 +- .../spring/springslowapp/LambdaHandler.java | 4 +- .../pom.xml | 138 ++++- .../SpringBootLambdaContainerHandler.java | 89 ++- .../spring/SpringBootProxyHandlerBuilder.java | 48 +- ...sReactiveServletEmbeddedServerFactory.java | 12 + ...erverlessServletEmbeddedServerFactory.java | 13 +- .../proxy/spring/SecurityAppTest.java | 7 - .../proxy/spring/ServletAppTest.java | 92 +++- .../proxy/spring/WebFluxAppTest.java | 40 +- ...rlessServletEmbeddedServerFactoryTest.java | 4 +- .../spring/securityapp/LambdaHandler.java | 3 +- .../spring/securityapp/MessageController.java | 7 +- .../securityapp/SecurityApplication.java | 14 + .../spring/securityapp/SecurityConfig.java | 51 +- .../securityapp/ServletApplication.java | 13 - .../spring/servletapp/LambdaHandler.java | 44 +- .../spring/servletapp/MessageController.java | 32 +- .../proxy/spring/servletapp/MessageData.java | 20 + .../spring/servletapp/ServletApplication.java | 5 +- .../proxy/spring/servletapp/UserData.java | 50 ++ .../proxy/spring/slowapp/LambdaHandler.java | 4 +- .../spring/webfluxapp/LambdaHandler.java | 44 +- .../spring/webfluxapp/MessageController.java | 14 +- .../proxy/spring/webfluxapp/MessageData.java | 20 + .../webfluxapp/WebFluxTestApplication.java | 10 +- .../Struts2LambdaContainerHandler.java | 50 +- .../proxy/struts2/Struts2LambdaHandler.java | 12 + .../proxy/struts2/Struts2AwsProxyTest.java | 155 +++--- .../META-INF/maven/archetype-metadata.xml | 2 +- .../resources/archetype-resources/README.md | 95 ++-- .../resources/archetype-resources/pom.xml | 4 +- .../{sam.yaml => template.yml} | 4 +- .../META-INF/maven/archetype-metadata.xml | 2 +- .../resources/archetype-resources/README.md | 97 ++-- .../archetype-resources/build.gradle | 2 +- .../resources/archetype-resources/pom.xml | 2 +- .../{sam.yaml => template.yml} | 4 +- .../META-INF/maven/archetype-metadata.xml | 2 +- .../resources/archetype-resources/README.md | 97 ++-- .../archetype-resources/build.gradle | 6 +- .../resources/archetype-resources/pom.xml | 2 +- .../{sam.yaml => template.yml} | 4 +- .../META-INF/maven/archetype-metadata.xml | 2 +- .../resources/archetype-resources/README.md | 97 ++-- .../archetype-resources/build.gradle | 5 +- .../{sam.yaml => template.yml} | 4 +- .../META-INF/maven/archetype-metadata.xml | 2 +- .../resources/archetype-resources/README.md | 97 ++-- .../archetype-resources/build.gradle | 5 +- .../resources/archetype-resources/pom.xml | 2 +- .../{sam.yaml => template.yml} | 4 +- .../META-INF/maven/archetype-metadata.xml | 2 +- .../resources/archetype-resources/README.md | 97 ++-- .../archetype-resources/build.gradle | 10 +- .../resources/archetype-resources/pom.xml | 4 +- .../{sam.yaml => template.yml} | 4 +- gha_build.sh | 12 - owasp-suppression.xml | 10 - pom.xml | 9 +- samples/jersey/pet-store/README.md | 68 +-- samples/jersey/pet-store/build.gradle | 6 +- samples/jersey/pet-store/pom.xml | 4 +- .../pet-store/{sam.yaml => template.yml} | 12 +- samples/micronaut/pet-store/build.gradle | 2 +- samples/spark/pet-store/README.md | 68 +-- samples/spark/pet-store/build.gradle | 2 +- samples/spark/pet-store/pom.xml | 2 +- .../pet-store/{sam.yaml => template.yml} | 12 +- samples/spring/pet-store/README.md | 68 +-- samples/spring/pet-store/build.gradle | 6 +- samples/spring/pet-store/pom.xml | 2 +- .../pet-store/{sam.yaml => template.yml} | 12 +- samples/springboot/pet-store/README.md | 68 +-- samples/springboot/pet-store/build.gradle | 5 +- .../pet-store/{sam.yaml => template.yml} | 12 +- samples/springboot2/pet-store/README.md | 68 +-- samples/springboot2/pet-store/build.gradle | 7 +- samples/springboot2/pet-store/pom.xml | 4 +- .../filter/CognitoIdentityFilter.java | 1 + .../pet-store/{sam.yaml => template.yml} | 12 +- samples/struts2/pet-store/README.md | 66 +-- samples/struts2/pet-store/build.gradle | 10 +- samples/struts2/pet-store/pom.xml | 4 +- .../pet-store/{sam.yaml => template.yml} | 12 +- 156 files changed, 4579 insertions(+), 2073 deletions(-) create mode 100644 aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/AwsHttpApiV2SecurityContextWriter.java create mode 100644 aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/jaxrs/AwsHttpApiV2SecurityContext.java create mode 100644 aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2HttpServletRequestReader.java create mode 100644 aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2ProxyHttpServletRequest.java create mode 100644 aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletInputStream.java create mode 100644 aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/HttpApiV2AuthorizerMap.java create mode 100644 aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/HttpApiV2HttpContext.java create mode 100644 aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/HttpApiV2JwtAuthorizer.java create mode 100644 aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/HttpApiV2ProxyRequest.java create mode 100644 aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/HttpApiV2ProxyRequestContext.java create mode 100644 aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/AsyncInitializationWrapperTest.java create mode 100644 aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/LambdaContainerHandlerTest.java create mode 100644 aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/jaxrs/HttpApiV2SecurityContextTest.java create mode 100644 aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2HttpServletRequestReaderTest.java create mode 100644 aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/model/HttpApiV2ProxyRequestTest.java create mode 100644 aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/securityapp/SecurityApplication.java delete mode 100644 aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/securityapp/ServletApplication.java create mode 100644 aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/MessageData.java create mode 100644 aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/UserData.java create mode 100644 aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/webfluxapp/MessageData.java rename aws-serverless-jersey-archetype/src/main/resources/archetype-resources/{sam.yaml => template.yml} (94%) rename aws-serverless-spark-archetype/src/main/resources/archetype-resources/{sam.yaml => template.yml} (94%) rename aws-serverless-spring-archetype/src/main/resources/archetype-resources/{sam.yaml => template.yml} (94%) rename aws-serverless-springboot-archetype/src/main/resources/archetype-resources/{sam.yaml => template.yml} (94%) rename aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/{sam.yaml => template.yml} (94%) rename aws-serverless-struts2-archetype/src/main/resources/archetype-resources/{sam.yaml => template.yml} (95%) rename samples/jersey/pet-store/{sam.yaml => template.yml} (71%) rename samples/spark/pet-store/{sam.yaml => template.yml} (71%) rename samples/spring/pet-store/{sam.yaml => template.yml} (71%) rename samples/springboot/pet-store/{sam.yaml => template.yml} (72%) rename samples/springboot2/pet-store/{sam.yaml => template.yml} (72%) rename samples/struts2/pet-store/{sam.yaml => template.yml} (72%) diff --git a/.github/workflows/continuous-integration-workflow.yml b/.github/workflows/continuous-integration-workflow.yml index 1dfb971d9..025848302 100644 --- a/.github/workflows/continuous-integration-workflow.yml +++ b/.github/workflows/continuous-integration-workflow.yml @@ -22,12 +22,12 @@ jobs: - uses: actions/checkout@v2 - name: Build latest run: ./gha_build.sh jersey true true - - name: Build Jersey 2.26 - run: ./gha_build.sh jersey false false -Djersey.version=2.26 - name: Build Jersey 2.27 run: ./gha_build.sh jersey false false -Djersey.version=2.27 - name: Build Jersey 2.28 run: ./gha_build.sh jersey false false -Djersey.version=2.28 + - name: Build Jersey 2.29 + run: ./gha_build.sh jersey false false -Djersey.version=2.29.1 build_spark: name: Build and test Spark @@ -45,17 +45,15 @@ jobs: steps: - uses: actions/checkout@v2 - name: Build latest - run: ./gha_build.sh spring true true + # we reduce the minCoverage for this run because it will skip the SpringBoot 1.5 tests since they are no longer compatible with + # Spring core 5.2 and above. SpringBoot 1.5 is deprecated + run: ./gha_build.sh spring true true -Djacoco.minCoverage=0.4 - name: Build Spring 4.3 run: ./gha_build.sh spring false false -Dspring.version=4.3.25.RELEASE -Dspring-security.version=4.2.13.RELEASE - name: Build Spring 5.0 - run: ./gha_build.sh spring false false -Dspring.version=5.0.15.RELEASE -Dspring-security.version=5.0.13.RELEASE + run: ./gha_build.sh spring false false -Dspring.version=5.0.16.RELEASE -Dspring-security.version=5.0.14.RELEASE - name: Build Spring 5.1 run: ./gha_build.sh spring false false -Dspring.version=5.1.14.RELEASE -Dspring-security.version=5.1.8.RELEASE - - name: Build Spring 5.2 - # we reduce the minCoverage for this run because it will skip the SpringBoot 1.5 tests since they are no longer compatible with - # Spring core 5.2 and above. SpringBoot 1.5 is deprecated - run: ./gha_build.sh spring false false -Dspring.version=5.2.5.RELEASE -Dspring-security.version=5.2.2.RELEASE -Djacoco.minCoverage=0.4 build_springboot2: name: Build and test SpringBoot 2 @@ -65,11 +63,9 @@ jobs: - name: Build latest run: ./gha_build.sh springboot2 true true - name: Build Spring Boot 2.0 - run: ./gha_build.sh springboot2 false false -Dspringboot.version=2.0.9.RELEASE -Dspring.version=5.0.13.RELEASE -Dspringsecurity.version=5.0.12.RELEASE + run: ./gha_build.sh springboot2 false false -Dspringboot.version=2.0.9.RELEASE -Dspring.version=5.0.16.RELEASE -Dspringsecurity.version=5.0.14.RELEASE - name: Build Spring Boot 2.1 - run: ./gha_build.sh springboot2 false false -Dspringboot.version=2.1.10.RELEASE -Dspring.version=5.1.11.RELEASE -Dspringsecurity.version=5.1.7.RELEASE - - name: Build Spring Boot 2.2 - run: ./gha_build.sh springboot2 false false -Dspringboot.version=2.2.1.RELEASE -Dspring.version=5.2.1.RELEASE -Dspringsecurity.version=5.2.1.RELEASE + run: ./gha_build.sh springboot2 false false -Dspringboot.version=2.1.12.RELEASE -Dspring.version=5.1.13.RELEASE -Dspringsecurity.version=5.1.8.RELEASE build_struts2: name: Build and test Struts 2 diff --git a/.gitignore b/.gitignore index 870a2d42f..8f6b9d359 100644 --- a/.gitignore +++ b/.gitignore @@ -29,3 +29,7 @@ gradlew* # Exclude maven wrapper !/.mvn/wrapper/maven-wrapper.jar + +# SAM files +samconfig.toml +.aws-sam/ diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/AsyncInitializationWrapper.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/AsyncInitializationWrapper.java index 7ef74fc8b..813d8178e 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/AsyncInitializationWrapper.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/AsyncInitializationWrapper.java @@ -1,3 +1,15 @@ +/* + * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance + * with the License. A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.proxy; import com.amazonaws.serverless.exceptions.ContainerInitializationException; @@ -7,6 +19,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.lang.management.ManagementFactory; import java.time.Instant; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; @@ -25,7 +38,7 @@ * seconds has already been used up. */ public class AsyncInitializationWrapper extends InitializationWrapper { - private static final int INIT_GRACE_TIME_MS = 250; + private int INIT_GRACE_TIME_MS = 250; private static final int LAMBDA_MAX_INIT_TIME_MS = 10_000; private CountDownLatch initializationLatch; @@ -41,6 +54,15 @@ public AsyncInitializationWrapper(long startTime) { actualStartTime = startTime; } + /** + * Creates a new instance of the async initializer using the actual JVM start time as the starting point to measure + * the 10 seconds timeout. + */ + public AsyncInitializationWrapper() { + actualStartTime = ManagementFactory.getRuntimeMXBean().getStartTime(); + INIT_GRACE_TIME_MS = 150; + } + @Override public void start(LambdaContainerHandler handler) throws ContainerInitializationException { initializationLatch = new CountDownLatch(1); @@ -50,7 +72,7 @@ public void start(LambdaContainerHandler handler) throws ContainerInitialization try { long curTime = Instant.now().toEpochMilli(); // account for the time it took to call the various constructors with the actual start time + a grace of 500ms - long awaitTime = LAMBDA_MAX_INIT_TIME_MS - (curTime - actualStartTime) - INIT_GRACE_TIME_MS; + long awaitTime = (actualStartTime + LAMBDA_MAX_INIT_TIME_MS) - curTime - INIT_GRACE_TIME_MS; log.info("Async initialization will wait for " + awaitTime + "ms"); if (!initializationLatch.await(awaitTime, TimeUnit.MILLISECONDS)) { log.info("Initialization took longer than " + LAMBDA_MAX_INIT_TIME_MS + ", setting new CountDownLatch and " + @@ -65,6 +87,10 @@ public void start(LambdaContainerHandler handler) throws ContainerInitialization } } + public long getActualStartTimeMs() { + return actualStartTime; + } + @Override public CountDownLatch getInitializationLatch() { return initializationLatch; diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/AwsHttpApiV2SecurityContextWriter.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/AwsHttpApiV2SecurityContextWriter.java new file mode 100644 index 000000000..05d4ed1a2 --- /dev/null +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/AwsHttpApiV2SecurityContextWriter.java @@ -0,0 +1,26 @@ +/* + * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance + * with the License. A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.proxy; + +import com.amazonaws.serverless.proxy.internal.jaxrs.AwsHttpApiV2SecurityContext; +import com.amazonaws.serverless.proxy.model.HttpApiV2ProxyRequest; +import com.amazonaws.services.lambda.runtime.Context; + +import javax.ws.rs.core.SecurityContext; + +public class AwsHttpApiV2SecurityContextWriter implements SecurityContextWriter { + @Override + public SecurityContext writeSecurityContext(HttpApiV2ProxyRequest event, Context lambdaContext) { + return new AwsHttpApiV2SecurityContext(lambdaContext, event); + } +} diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/InitializationWrapper.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/InitializationWrapper.java index 188a83bd3..f7c96f8f4 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/InitializationWrapper.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/InitializationWrapper.java @@ -1,3 +1,15 @@ +/* + * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance + * with the License. A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.proxy; import com.amazonaws.serverless.exceptions.ContainerInitializationException; diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/LogFormatter.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/LogFormatter.java index cef0514d5..dcd524f91 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/LogFormatter.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/LogFormatter.java @@ -1,9 +1,19 @@ +/* + * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance + * with the License. A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.proxy; - import javax.ws.rs.core.SecurityContext; - /** * Implementations of the log formatter interface are used by {@link com.amazonaws.serverless.proxy.internal.LambdaContainerHandler} class to log each request * processed in the container. You can set the log formatter using the {@link com.amazonaws.serverless.proxy.internal.LambdaContainerHandler#setLogFormatter(LogFormatter)} diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/RequestReader.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/RequestReader.java index 096d49ca5..e0203d76b 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/RequestReader.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/RequestReader.java @@ -65,7 +65,20 @@ public abstract class RequestReader { */ public static final String JAX_SECURITY_CONTEXT_PROPERTY = "com.amazonaws.serverless.jaxrs.securityContext"; + /** + * The key for the HTTP API request context passed by the services + */ + public static final String HTTP_API_CONTEXT_PROPERTY = "com.amazonaws.httpapi.request.context"; + /** + * The key for the HTTP API stage variables + */ + public static final String HTTP_API_STAGE_VARS_PROPERTY = "com.amazonaws.httpapi.stage.variables"; + + /** + * The key for the HTTP API proxy request event + */ + public static final String HTTP_API_EVENT_PROPERTY = "com.amazonaws.httpapi.request"; //------------------------------------------------------------- // Methods - Abstract diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/LambdaContainerHandler.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/LambdaContainerHandler.java index 3bb401d17..d31ae257b 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/LambdaContainerHandler.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/LambdaContainerHandler.java @@ -223,7 +223,15 @@ public ResponseType proxy(RequestType request, Context context) { // the latch will do nothing latch.countDown(); - return exceptionHandler.handle(e); + if (getContainerConfig().isDisableExceptionMapper()) { + if (e instanceof RuntimeException) { + throw (RuntimeException) e; + } else { + throw new RuntimeException(e); + } + } else { + return exceptionHandler.handle(e); + } } } diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/SecurityUtils.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/SecurityUtils.java index 1d39d849b..3395b56c6 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/SecurityUtils.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/SecurityUtils.java @@ -1,6 +1,17 @@ +/* + * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance + * with the License. A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.proxy.internal; - import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -11,7 +22,6 @@ import java.util.Locale; import java.util.Set; - /** * This class contains utility methods to address FSB security issues found in the application, such as string sanitization * and file path validation. diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/jaxrs/AwsHttpApiV2SecurityContext.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/jaxrs/AwsHttpApiV2SecurityContext.java new file mode 100644 index 000000000..6060fb2e2 --- /dev/null +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/jaxrs/AwsHttpApiV2SecurityContext.java @@ -0,0 +1,102 @@ +/* + * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance + * with the License. A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.proxy.internal.jaxrs; + +import com.amazonaws.serverless.proxy.internal.LambdaContainerHandler; +import com.amazonaws.serverless.proxy.internal.SecurityUtils; +import com.amazonaws.serverless.proxy.model.HttpApiV2ProxyRequest; +import com.amazonaws.services.lambda.runtime.Context; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonNode; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.ws.rs.core.HttpHeaders; +import javax.ws.rs.core.SecurityContext; +import java.nio.charset.StandardCharsets; +import java.security.Principal; +import java.util.Base64; + +public class AwsHttpApiV2SecurityContext implements SecurityContext { + public static final String AUTH_SCHEME_JWT = "JWT"; + + private static Logger log = LoggerFactory.getLogger(AwsHttpApiV2SecurityContext.class); + + private Context lambdaContext; + private HttpApiV2ProxyRequest event; + + public AwsHttpApiV2SecurityContext(final Context lambdaCtx, final HttpApiV2ProxyRequest request) { + lambdaContext = lambdaCtx; + event = request; + } + + @Override + public Principal getUserPrincipal() { + if (getAuthenticationScheme() == null || !event.getHeaders().containsKey(HttpHeaders.AUTHORIZATION)) { + return null; + } + + String authValue = event.getHeaders().get(HttpHeaders.AUTHORIZATION); + if (authValue.startsWith("Bearer ")) { + authValue = authValue.replace("Bearer ", ""); + } + String[] parts = authValue.split("\\."); + if (parts.length != 3) { + log.warn("Could not parse JWT token for requestId: " + SecurityUtils.crlf(event.getRequestContext().getRequestId())); + return null; + } + String decodedBody = new String(Base64.getMimeDecoder().decode(parts[1]), StandardCharsets.UTF_8); + try { + JsonNode parsedBody = LambdaContainerHandler.getObjectMapper().readTree(decodedBody); + if (!parsedBody.isObject() && parsedBody.has("sub")) { + log.debug("Could not find \"sub\" field in JWT body for requestId: " + SecurityUtils.crlf(event.getRequestContext().getRequestId())); + return null; + } + String subject = parsedBody.get("sub").asText(); + return (() -> { + return subject; + }); + } catch (JsonProcessingException e) { + log.error("Error while attempting to parse JWT body for requestId: " + SecurityUtils.crlf(event.getRequestContext().getRequestId()), e); + return null; + } + + } + + @Override + public boolean isUserInRole(String s) { + if (getAuthenticationScheme() == null) { + return false; + } + + return event.getRequestContext().getAuthorizer().getJwtAuthorizer().getScopes().contains(s) || + event.getRequestContext().getAuthorizer().getJwtAuthorizer().getClaims().containsKey(s); + + } + + @Override + public boolean isSecure() { + return getAuthenticationScheme() != null; + } + + @Override + public String getAuthenticationScheme() { + if (event.getRequestContext().getAuthorizer() == null) { + return null; + } + if (event.getRequestContext().getAuthorizer().isJwt()) { + return AUTH_SCHEME_JWT; + } + return null; + } +} diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/ApacheCombinedServletLogFormatter.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/ApacheCombinedServletLogFormatter.java index 2105ffae3..715e6f8d9 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/ApacheCombinedServletLogFormatter.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/ApacheCombinedServletLogFormatter.java @@ -1,10 +1,22 @@ +/* + * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance + * with the License. A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.proxy.internal.servlet; - import com.amazonaws.serverless.proxy.LogFormatter; import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.serverless.proxy.model.AwsProxyRequestContext; +import com.amazonaws.serverless.proxy.model.HttpApiV2ProxyRequestContext; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import javax.servlet.http.HttpServletRequest; @@ -16,7 +28,7 @@ import java.time.format.DateTimeFormatterBuilder; import java.util.Locale; -import static com.amazonaws.serverless.proxy.RequestReader.API_GATEWAY_EVENT_PROPERTY; +import static com.amazonaws.serverless.proxy.RequestReader.*; import static java.time.temporal.ChronoField.DAY_OF_MONTH; import static java.time.temporal.ChronoField.HOUR_OF_DAY; import static java.time.temporal.ChronoField.MINUTE_OF_HOUR; @@ -24,7 +36,6 @@ import static java.time.temporal.ChronoField.SECOND_OF_MINUTE; import static java.time.temporal.ChronoField.YEAR; - /** * Default implementation of the log formatter. Based on an HttpServletRequest and HttpServletResponse implementations produced * a log line in the Apache combined log format: https://httpd.apache.org/docs/2.4/logs.html @@ -68,45 +79,45 @@ public ApacheCombinedServletLogFormatter() { public String format(ContainerRequestType servletRequest, ContainerResponseType servletResponse, SecurityContext ctx) { //LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined StringBuilder logLineBuilder = new StringBuilder(); - AwsProxyRequest req = (AwsProxyRequest)servletRequest.getAttribute(API_GATEWAY_EVENT_PROPERTY); - AwsProxyRequestContext gatewayContext = req.getRequestContext(); + AwsProxyRequestContext gatewayContext = (AwsProxyRequestContext)servletRequest.getAttribute(API_GATEWAY_CONTEXT_PROPERTY); + HttpApiV2ProxyRequestContext httpApiContext = (HttpApiV2ProxyRequestContext)servletRequest.getAttribute(HTTP_API_CONTEXT_PROPERTY); // %h logLineBuilder.append(servletRequest.getRemoteAddr()); logLineBuilder.append(" "); // %l - if (gatewayContext != null && req.getRequestSource() == AwsProxyRequest.RequestSource.API_GATEWAY) { - if (gatewayContext.getIdentity().getUserArn() != null) { + if (servletRequest.getUserPrincipal() != null) { + logLineBuilder.append(servletRequest.getUserPrincipal().getName()); + } else { + logLineBuilder.append("-"); + } + if (gatewayContext != null && gatewayContext.getIdentity() != null && gatewayContext.getIdentity().getUserArn() != null) { logLineBuilder.append(gatewayContext.getIdentity().getUserArn()); - } else { - logLineBuilder.append("-"); - } } else { logLineBuilder.append("-"); } logLineBuilder.append(" "); // %u - if (ctx != null && ctx.getUserPrincipal().getName() != null) { - logLineBuilder.append(ctx.getUserPrincipal().getName()); - logLineBuilder.append(" "); + if (servletRequest.getUserPrincipal() != null) { + logLineBuilder.append(servletRequest.getUserPrincipal().getName()); } + logLineBuilder.append(" "); // %t + long timeEpoch = ZonedDateTime.now(clock).toEpochSecond(); if (gatewayContext != null && gatewayContext.getRequestTimeEpoch() > 0) { - logLineBuilder.append( - dateFormat.format( - ZonedDateTime.of( - LocalDateTime.ofEpochSecond(gatewayContext.getRequestTimeEpoch() / 1000, 0, ZoneOffset.UTC), - clock.getZone() - ) - ) - ); - } else { - logLineBuilder.append(dateFormat.format(ZonedDateTime.now(clock))); + timeEpoch = gatewayContext.getRequestTimeEpoch() / 1000; + } else if (httpApiContext != null && httpApiContext.getTimeEpoch() > 0) { + timeEpoch = httpApiContext.getTimeEpoch() / 1000; } + logLineBuilder.append( + dateFormat.format(ZonedDateTime.of( + LocalDateTime.ofEpochSecond(timeEpoch, 0, ZoneOffset.UTC), + clock.getZone()) + )); logLineBuilder.append(" "); // %r @@ -155,7 +166,6 @@ public String format(ContainerRequestType servletRequest, ContainerResponseType logLineBuilder.append("combined"); - return logLineBuilder.toString(); } } diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContext.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContext.java index 0b35d7ba5..251624541 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContext.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContext.java @@ -1,6 +1,17 @@ +/* + * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance + * with the License. A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.proxy.internal.servlet; - import com.amazonaws.serverless.proxy.internal.SecurityUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -59,10 +70,12 @@ public boolean hasOriginalRequestAndResponse() { public void dispatch() { try { log.debug("Dispatching request"); - notifyListeners(NotificationType.START_ASYNC, null); - Servlet servlet = ((AwsServletContext)handler.getServletContext()).getServletForPath(req.getPathInfo()); - handler.doFilter(req, res, servlet); + if (dispatched.get()) { + throw new IllegalStateException("Dispatching already started"); + } dispatched.set(true); + notifyListeners(NotificationType.START_ASYNC, null); + handler.doFilter(req, res, ((AwsServletContext)req.getServletContext()).getServletForPath(req.getRequestURI())); } catch (ServletException | IOException e) { notifyListeners(NotificationType.ERROR, e); } diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2HttpServletRequestReader.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2HttpServletRequestReader.java new file mode 100644 index 000000000..bacedbaa4 --- /dev/null +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2HttpServletRequestReader.java @@ -0,0 +1,50 @@ +/* + * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance + * with the License. A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.proxy.internal.servlet; + +import com.amazonaws.serverless.exceptions.InvalidRequestEventException; +import com.amazonaws.serverless.proxy.RequestReader; +import com.amazonaws.serverless.proxy.model.ContainerConfig; +import com.amazonaws.serverless.proxy.model.HttpApiV2ProxyRequest; +import com.amazonaws.services.lambda.runtime.Context; + +import javax.servlet.http.HttpServletRequest; +import javax.ws.rs.core.SecurityContext; + +public class AwsHttpApiV2HttpServletRequestReader extends RequestReader { + static final String INVALID_REQUEST_ERROR = "The incoming event is not a valid HTTP API v2 proxy request"; + + @Override + public HttpServletRequest readRequest(HttpApiV2ProxyRequest request, SecurityContext securityContext, Context lambdaContext, ContainerConfig config) throws InvalidRequestEventException { + if (request.getRequestContext() == null || request.getRequestContext().getHttp().getMethod() == null || request.getRequestContext().getHttp().getMethod().equals("")) { + throw new InvalidRequestEventException(INVALID_REQUEST_ERROR); + } + + // clean out the request path based on the container config + request.setRawPath(stripBasePath(request.getRawPath(), config)); + + AwsHttpApiV2ProxyHttpServletRequest servletRequest = new AwsHttpApiV2ProxyHttpServletRequest(request, lambdaContext, securityContext, config); + servletRequest.setAttribute(HTTP_API_CONTEXT_PROPERTY, request.getRequestContext()); + servletRequest.setAttribute(HTTP_API_STAGE_VARS_PROPERTY, request.getStageVariables()); + servletRequest.setAttribute(HTTP_API_EVENT_PROPERTY, request); + servletRequest.setAttribute(LAMBDA_CONTEXT_PROPERTY, lambdaContext); + servletRequest.setAttribute(JAX_SECURITY_CONTEXT_PROPERTY, securityContext); + + return servletRequest; + } + + @Override + protected Class getRequestClass() { + return HttpApiV2ProxyRequest.class; + } +} diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2ProxyHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2ProxyHttpServletRequest.java new file mode 100644 index 000000000..e65b506e9 --- /dev/null +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2ProxyHttpServletRequest.java @@ -0,0 +1,521 @@ +/* + * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance + * with the License. A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.proxy.internal.servlet; + +import com.amazonaws.serverless.proxy.internal.LambdaContainerHandler; +import com.amazonaws.serverless.proxy.internal.SecurityUtils; +import com.amazonaws.serverless.proxy.model.ContainerConfig; +import com.amazonaws.serverless.proxy.model.Headers; +import com.amazonaws.serverless.proxy.model.HttpApiV2ProxyRequest; +import com.amazonaws.serverless.proxy.model.MultiValuedTreeMap; +import com.amazonaws.services.lambda.runtime.Context; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.servlet.*; +import javax.servlet.http.*; +import javax.ws.rs.core.HttpHeaders; +import javax.ws.rs.core.SecurityContext; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.StringReader; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import java.security.Principal; +import java.time.Instant; +import java.time.ZonedDateTime; +import java.time.format.DateTimeParseException; +import java.util.*; + +public class AwsHttpApiV2ProxyHttpServletRequest extends AwsHttpServletRequest { + private static Logger log = LoggerFactory.getLogger(AwsHttpApiV2ProxyHttpServletRequest.class); + + private HttpApiV2ProxyRequest request; + private MultiValuedTreeMap queryString; + private Headers headers; + private ContainerConfig config; + private SecurityContext securityContext; + private AwsAsyncContext asyncContext; + + /** + * Protected constructors for implementing classes. This should be called first with the context received from + * AWS Lambda + * + * @param lambdaContext The Lambda function context. This object is used for utility methods such as log + */ + public AwsHttpApiV2ProxyHttpServletRequest(HttpApiV2ProxyRequest req, Context lambdaContext, SecurityContext sc, ContainerConfig cfg) { + super(lambdaContext); + request = req; + config = cfg; + securityContext = sc; + queryString = parseRawQueryString(request.getRawQueryString()); + headers = headersMapToMultiValue(request.getHeaders()); + } + + public HttpApiV2ProxyRequest getRequest() { + return request; + } + + @Override + public String getAuthType() { + // TODO + return null; + } + + @Override + public Cookie[] getCookies() { + if (headers == null || !headers.containsKey(HttpHeaders.COOKIE)) { + return new Cookie[0]; + } + + return parseCookieHeaderValue(headers.getFirst(HttpHeaders.COOKIE)); + } + + @Override + public long getDateHeader(String s) { + if (headers == null) { + return -1L; + } + String dateString = headers.getFirst(s); + if (dateString == null) { + return -1L; + } + try { + return Instant.from(ZonedDateTime.parse(dateString, dateFormatter)).toEpochMilli(); + } catch (DateTimeParseException e) { + log.warn("Invalid date header in request: " + SecurityUtils.crlf(dateString)); + return -1L; + } + } + + @Override + public String getHeader(String s) { + if (headers == null) { + return null; + } + return headers.getFirst(s); + } + + @Override + public Enumeration getHeaders(String s) { + if (headers == null || !headers.containsKey(s)) { + return Collections.emptyEnumeration(); + } + return Collections.enumeration(headers.get(s)); + } + + @Override + public Enumeration getHeaderNames() { + if (headers == null) { + return Collections.emptyEnumeration(); + } + return Collections.enumeration(headers.keySet()); + } + + @Override + public int getIntHeader(String s) { + if (headers == null) { + return -1; + } + String headerValue = headers.getFirst(s); + if (headerValue == null || "".equals(headerValue)) { + return -1; + } + + return Integer.parseInt(headerValue); + } + + @Override + public String getMethod() { + return request.getRequestContext().getHttp().getMethod(); + } + + @Override + public String getPathInfo() { + String pathInfo = cleanUri(request.getRawPath()); + return decodeRequestPath(pathInfo, LambdaContainerHandler.getContainerConfig()); + } + + @Override + public String getPathTranslated() { + // Return null because it is an archive on a remote system + return null; + } + + @Override + public String getContextPath() { + return generateContextPath(config, request.getRequestContext().getStage()); + } + + @Override + public String getQueryString() { + return request.getRawQueryString(); + } + + @Override + public String getRemoteUser() { + if (securityContext == null || securityContext.getUserPrincipal() == null) { + return null; + } + return securityContext.getUserPrincipal().getName(); + } + + @Override + public boolean isUserInRole(String s) { + // TODO: Not supported + return false; + } + + @Override + public Principal getUserPrincipal() { + if (securityContext == null) { + return null; + } + return securityContext.getUserPrincipal(); + } + + @Override + public String getRequestURI() { + return cleanUri(getContextPath()) + cleanUri(request.getRawPath()); + } + + @Override + public StringBuffer getRequestURL() { + return generateRequestURL(request.getRawPath()); + } + + + @Override + public boolean authenticate(HttpServletResponse httpServletResponse) throws IOException, ServletException { + throw new UnsupportedOperationException(); + } + + @Override + public void login(String s, String s1) throws ServletException { + throw new UnsupportedOperationException(); + } + + @Override + public void logout() throws ServletException { + throw new UnsupportedOperationException(); + } + + @Override + public Collection getParts() throws IOException, ServletException { + return getMultipartFormParametersMap().values(); + } + + @Override + public Part getPart(String s) throws IOException, ServletException { + return getMultipartFormParametersMap().get(s); + } + + @Override + public T upgrade(Class aClass) throws IOException, ServletException { + throw new UnsupportedOperationException(); + } + + @Override + public String getCharacterEncoding() { + if (headers == null) { + return config.getDefaultContentCharset(); + } + return parseCharacterEncoding(headers.getFirst(HttpHeaders.CONTENT_TYPE)); + } + + @Override + public void setCharacterEncoding(String s) throws UnsupportedEncodingException { + if (headers == null || !headers.containsKey(HttpHeaders.CONTENT_TYPE)) { + log.debug("Called set character encoding to " + SecurityUtils.crlf(s) + " on a request without a content type. Character encoding will not be set"); + return; + } + String currentContentType = headers.getFirst(HttpHeaders.CONTENT_TYPE); + headers.putSingle(HttpHeaders.CONTENT_TYPE, appendCharacterEncoding(currentContentType, s)); + } + + @Override + public int getContentLength() { + String headerValue = headers.getFirst(HttpHeaders.CONTENT_LENGTH); + if (headerValue == null) { + return -1; + } + return Integer.parseInt(headerValue); + } + + @Override + public long getContentLengthLong() { + String headerValue = headers.getFirst(HttpHeaders.CONTENT_LENGTH); + if (headerValue == null) { + return -1; + } + return Long.parseLong(headerValue); + } + + @Override + public String getContentType() { + if (headers == null) { + return null; + } + return headers.getFirst(HttpHeaders.CONTENT_TYPE); + } + + @Override + public String getParameter(String s) { + String queryStringParameter = getFirstQueryParamValue(queryString, s, config.isQueryStringCaseSensitive()); + if (queryStringParameter != null) { + return queryStringParameter; + } + + String[] bodyParams = getFormBodyParameterCaseInsensitive(s); + if (bodyParams.length == 0) { + return null; + } else { + return bodyParams[0]; + } + } + + @Override + public Enumeration getParameterNames() { + if (queryString == null) { + return Collections.emptyEnumeration(); + } + + return Collections.enumeration(queryString.keySet()); + } + + @Override + @SuppressFBWarnings("PZLA_PREFER_ZERO_LENGTH_ARRAYS") // suppressing this as according to the specs we should be returning null here if we can't find params + public String[] getParameterValues(String s) { + List values = new ArrayList<>(Arrays.asList(getQueryParamValues(queryString, s, config.isQueryStringCaseSensitive()))); + + values.addAll(Arrays.asList(getFormBodyParameterCaseInsensitive(s))); + + if (values.size() == 0) { + return null; + } else { + return values.toArray(new String[0]); + } + } + + @Override + public Map getParameterMap() { + return generateParameterMap(queryString, config); + } + + @Override + public String getProtocol() { + return request.getRequestContext().getHttp().getProtocol(); + } + + @Override + public String getScheme() { + return getSchemeFromHeader(headers); + } + + @Override + public String getServerName() { + // we match the behavior of the v1 proxy request here. Should we? + String region = System.getenv("AWS_REGION"); + if (region == null) { + // this is not a critical failure, we just put a static region in the URI + region = "us-east-1"; + } + + if (headers != null && headers.containsKey(HOST_HEADER_NAME)) { + String hostHeader = headers.getFirst(HOST_HEADER_NAME); + if (SecurityUtils.isValidHost(hostHeader, request.getRequestContext().getApiId(), region)) { + return hostHeader; + } + } + + return request.getRequestContext().getDomainName(); + } + + @Override + public int getServerPort() { + if (headers == null || !headers.containsKey(PORT_HEADER_NAME)) { + return 443; // we default to 443 as HTTP APIs can only be HTTPS + } + String port = headers.getFirst(PORT_HEADER_NAME); + if (SecurityUtils.isValidPort(port)) { + return Integer.parseInt(port); + } + return 443; // default port + } + + @Override + public ServletInputStream getInputStream() throws IOException { + if (requestInputStream == null) { + requestInputStream = new AwsServletInputStream(bodyStringToInputStream(request.getBody(), request.isBase64Encoded())); + } + return requestInputStream; + } + + @Override + public BufferedReader getReader() throws IOException { + return new BufferedReader(new StringReader(request.getBody())); + } + + @Override + public String getRemoteAddr() { + if (request.getRequestContext() == null || request.getRequestContext().getHttp() == null || request.getRequestContext().getHttp().getSourceIp() == null) { + return "127.0.0.1"; + } + return request.getRequestContext().getHttp().getSourceIp(); + } + + @Override + public String getRemoteHost() { + if (headers == null) { + return null; + } + return headers.getFirst(HttpHeaders.HOST); + } + + @Override + public Locale getLocale() { + // Accept-Language: fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5 + List values = this.parseHeaderValue( + headers.getFirst(HttpHeaders.ACCEPT_LANGUAGE), ",", ";" + ); + if (values.size() == 0) { + return Locale.getDefault(); + } + return new Locale(values.get(0).getValue()); + } + + @Override + public Enumeration getLocales() { + List values = this.parseHeaderValue( + headers.getFirst(HttpHeaders.ACCEPT_LANGUAGE), ",", ";" + ); + + List locales = new ArrayList<>(); + if (values.size() == 0) { + locales.add(Locale.getDefault()); + } else { + for (HeaderValue locale : values) { + locales.add(new Locale(locale.getValue())); + } + } + + return Collections.enumeration(locales); + } + + @Override + public boolean isSecure() { + return securityContext.isSecure(); + } + + @Override + public RequestDispatcher getRequestDispatcher(String s) { + return getServletContext().getRequestDispatcher(s); + } + + @Override + public String getRealPath(String s) { + // we are in an archive on a remote server + return null; + } + + @Override + public int getRemotePort() { + return 0; + } + + @Override + public boolean isAsyncSupported() { + return true; + } + + @Override + public boolean isAsyncStarted() { + if (asyncContext == null) { + return false; + } + if (asyncContext.isCompleted() || asyncContext.isDispatched()) { + return false; + } + return true; + } + + @Override + public AsyncContext startAsync() throws IllegalStateException { + asyncContext = new AwsAsyncContext(this, response, containerHandler); + setAttribute(DISPATCHER_TYPE_ATTRIBUTE, DispatcherType.ASYNC); + log.debug("Starting async context for request: " + SecurityUtils.crlf(request.getRequestContext().getRequestId())); + return asyncContext; + } + + @Override + public AsyncContext startAsync(ServletRequest servletRequest, ServletResponse servletResponse) throws IllegalStateException { + asyncContext = new AwsAsyncContext((HttpServletRequest) servletRequest, (HttpServletResponse) servletResponse, containerHandler); + setAttribute(DISPATCHER_TYPE_ATTRIBUTE, DispatcherType.ASYNC); + log.debug("Starting async context for request: " + SecurityUtils.crlf(request.getRequestContext().getRequestId())); + return asyncContext; + } + + @Override + public AsyncContext getAsyncContext() { + if (asyncContext == null) { + throw new IllegalStateException("Request " + SecurityUtils.crlf(request.getRequestContext().getRequestId()) + + " is not in asynchronous mode. Call startAsync before attempting to get the async context."); + } + return asyncContext; + } + + private MultiValuedTreeMap parseRawQueryString(String qs) { + if (qs == null || "".equals(qs.trim())) { + return new MultiValuedTreeMap<>(); + } + + MultiValuedTreeMap qsMap = new MultiValuedTreeMap<>(); + for (String value : qs.split(QUERY_STRING_SEPARATOR)) { + if (!value.contains(QUERY_STRING_KEY_VALUE_SEPARATOR)) { + log.warn("Invalid query string parameter: " + SecurityUtils.crlf(value)); + continue; + } + + String[] kv = value.split(QUERY_STRING_KEY_VALUE_SEPARATOR); + try { + qsMap.add(URLDecoder.decode(kv[0], LambdaContainerHandler.getContainerConfig().getUriEncoding()), kv[1]); + } catch (UnsupportedEncodingException e) { + log.error("Unsupported encoding in query string key: " + SecurityUtils.crlf(kv[0]), e); + } + } + return qsMap; + } + + private Headers headersMapToMultiValue(Map headers) { + if (headers == null || headers.size() == 0) { + return new Headers(); + } + + Headers h = new Headers(); + for (Map.Entry hkv : headers.entrySet()) { + // Exceptions for known header values that contain commas + if (hkv.getKey().equalsIgnoreCase(HttpHeaders.DATE) || + hkv.getKey().equalsIgnoreCase(HttpHeaders.IF_MODIFIED_SINCE) || + hkv.getKey().toLowerCase(Locale.getDefault()).startsWith("accept-")) { + h.add(hkv.getKey(), hkv.getValue()); + continue; + } + + for (String value : hkv.getValue().split(",")) { + h.add(hkv.getKey(), value); + } + } + return h; + } +} diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java index 35773cee9..f02cefd1c 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java @@ -13,32 +13,36 @@ package com.amazonaws.serverless.proxy.internal.servlet; import com.amazonaws.serverless.proxy.RequestReader; +import com.amazonaws.serverless.proxy.internal.LambdaContainerHandler; import com.amazonaws.serverless.proxy.internal.SecurityUtils; -import com.amazonaws.serverless.proxy.model.AwsProxyRequestContext; -import com.amazonaws.serverless.proxy.model.ContainerConfig; -import com.amazonaws.serverless.proxy.model.MultiValuedTreeMap; +import com.amazonaws.serverless.proxy.internal.testutils.Timer; +import com.amazonaws.serverless.proxy.model.*; import com.amazonaws.services.lambda.runtime.Context; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; +import org.apache.commons.fileupload.FileItem; +import org.apache.commons.fileupload.FileUploadException; +import org.apache.commons.fileupload.disk.DiskFileItemFactory; +import org.apache.commons.fileupload.servlet.ServletFileUpload; +import org.apache.commons.io.FilenameUtils; +import org.apache.commons.io.IOUtils; +import org.apache.commons.io.input.NullInputStream; import org.apache.http.message.BasicHeaderValueParser; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.servlet.*; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; +import javax.servlet.http.*; +import javax.ws.rs.core.MediaType; +import java.io.ByteArrayInputStream; +import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Enumeration; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; /** @@ -59,6 +63,8 @@ public abstract class AwsHttpServletRequest implements HttpServletRequest { static final DateTimeFormatter dateFormatter = DateTimeFormatter.RFC_1123_DATE_TIME; static final String ENCODING_VALUE_KEY = "charset"; static final String DISPATCHER_TYPE_ATTRIBUTE = "com.amazonaws.serverless.javacontainer.dispatchertype"; + static final String QUERY_STRING_SEPARATOR = "&"; + static final String QUERY_STRING_KEY_VALUE_SEPARATOR = "="; // We need this to pickup the protocol from the CloudFront header since Lambda doesn't receive this // information from anywhere else @@ -78,6 +84,13 @@ public abstract class AwsHttpServletRequest implements HttpServletRequest { private AwsHttpSession session; private String queryString; private BasicHeaderValueParser headerParser; + private Map multipartFormParameters; + private Map> urlEncodedFormParameters; + + protected AwsHttpServletResponse response; + protected AwsLambdaServletContainerHandler containerHandler; + protected ServletInputStream requestInputStream; + private static Logger log = LoggerFactory.getLogger(AwsHttpServletRequest.class); @@ -98,6 +111,18 @@ public abstract class AwsHttpServletRequest implements HttpServletRequest { setAttribute(DISPATCHER_TYPE_ATTRIBUTE, DispatcherType.REQUEST); } + public AwsHttpServletResponse getResponse() { + return response; + } + + public void setResponse(AwsHttpServletResponse response) { + this.response = response; + } + + public void setContainerHandler(AwsLambdaServletContainerHandler containerHandler) { + this.containerHandler = containerHandler; + } + //------------------------------------------------------------- // Implementation - HttpServletRequest @@ -247,6 +272,12 @@ public DispatcherType getDispatcherType() { return DispatcherType.REQUEST; } + @Override + public String getServletPath() { + // we always work on the root path + return ""; + } + //------------------------------------------------------------- // Methods - Getter/Setter @@ -323,6 +354,257 @@ protected String generateQueryString(MultiValuedTreeMap paramete return queryString; } + protected String generateContextPath(ContainerConfig config, String apiStage) { + String contextPath = ""; + if (config.isUseStageAsServletContext() && apiStage != null) { + log.debug("Using stage as context path"); + contextPath = cleanUri(apiStage); + } + if (config.getServiceBasePath() != null) { + contextPath += cleanUri(config.getServiceBasePath()); + } + + return contextPath; + } + + protected StringBuffer generateRequestURL(String requestPath) { + String url = ""; + url += getServerName(); + url += cleanUri(getContextPath()); + url += cleanUri(requestPath); + + return new StringBuffer(getScheme() + "://" + url); + } + + protected String parseCharacterEncoding(String contentTypeHeader) { + // we only look at content-type because content-encoding should only be used for + // "binary" requests such as gzip/deflate. + if (contentTypeHeader == null) { + return null; + } + + String[] contentTypeValues = contentTypeHeader.split(HEADER_VALUE_SEPARATOR); + if (contentTypeValues.length <= 1) { + return null; + } + + for (String contentTypeValue : contentTypeValues) { + if (contentTypeValue.trim().startsWith(ENCODING_VALUE_KEY)) { + String[] encodingValues = contentTypeValue.split(HEADER_KEY_VALUE_SEPARATOR); + if (encodingValues.length <= 1) { + return null; + } + return encodingValues[1]; + } + } + return null; + } + + protected String appendCharacterEncoding(String currentContentType, String newEncoding) { + if (currentContentType == null || "".equals(currentContentType.trim())) { + return null; + } + + if (currentContentType.contains(HEADER_VALUE_SEPARATOR)) { + String[] contentTypeValues = currentContentType.split(HEADER_VALUE_SEPARATOR); + StringBuilder contentType = new StringBuilder(contentTypeValues[0]); + + for (int i = 1; i < contentTypeValues.length; i++) { + String contentTypeValue = contentTypeValues[i]; + String contentTypeString = HEADER_VALUE_SEPARATOR + " " + contentTypeValue; + if (contentTypeValue.trim().startsWith(ENCODING_VALUE_KEY)) { + contentTypeString = HEADER_VALUE_SEPARATOR + " " + ENCODING_VALUE_KEY + HEADER_KEY_VALUE_SEPARATOR + newEncoding; + } + contentType.append(contentTypeString); + } + + return contentType.toString(); + } else { + return currentContentType + HEADER_VALUE_SEPARATOR + " " + ENCODING_VALUE_KEY + HEADER_KEY_VALUE_SEPARATOR + newEncoding; + } + } + + protected ServletInputStream bodyStringToInputStream(String body, boolean isBase64Encoded) throws IOException { + if (body == null) { + return new AwsServletInputStream(new NullInputStream(0, false, false)); + } + byte[] bodyBytes; + if (isBase64Encoded) { + bodyBytes = Base64.getMimeDecoder().decode(body); + } else { + String encoding = getCharacterEncoding(); + if (encoding == null) { + encoding = StandardCharsets.ISO_8859_1.name(); + } + try { + bodyBytes = body.getBytes(encoding); + } catch (Exception e) { + log.error("Could not read request with character encoding: " + SecurityUtils.crlf(encoding), e); + bodyBytes = body.getBytes(StandardCharsets.ISO_8859_1.name()); + } + } + ByteArrayInputStream requestBodyStream = new ByteArrayInputStream(bodyBytes); + return new AwsServletInputStream(requestBodyStream); + } + + protected String getFirstQueryParamValue(MultiValuedTreeMap queryString, String key, boolean isCaseSensitive) { + if (queryString != null) { + if (isCaseSensitive) { + return queryString.getFirst(key); + } + + for (String k : queryString.keySet()) { + if (k.toLowerCase(Locale.getDefault()).equals(key.toLowerCase(Locale.getDefault()))) { + return queryString.getFirst(k); + } + } + } + + return null; + } + + protected String[] getFormBodyParameterCaseInsensitive(String key) { + List values = getFormUrlEncodedParametersMap().get(key); + if (values != null) { + String[] valuesArray = new String[values.size()]; + valuesArray = values.toArray(valuesArray); + return valuesArray; + } else { + return new String[0]; + } + } + + + protected Map> getFormUrlEncodedParametersMap() { + if (urlEncodedFormParameters != null) { + return urlEncodedFormParameters; + } + String contentType = getContentType(); + if (contentType == null) { + urlEncodedFormParameters = new HashMap<>(); + return urlEncodedFormParameters; + } + if (!contentType.startsWith(MediaType.APPLICATION_FORM_URLENCODED) || !getMethod().toLowerCase(Locale.ENGLISH).equals("post")) { + urlEncodedFormParameters = new HashMap<>(); + return urlEncodedFormParameters; + } + Timer.start("SERVLET_REQUEST_GET_FORM_PARAMS"); + String rawBodyContent = null; + try { + rawBodyContent = IOUtils.toString(getInputStream()); + } catch (IOException e) { + throw new RuntimeException(e); + } + + urlEncodedFormParameters = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); + for (String parameter : rawBodyContent.split(FORM_DATA_SEPARATOR)) { + String[] parameterKeyValue = parameter.split(HEADER_KEY_VALUE_SEPARATOR); + if (parameterKeyValue.length < 2) { + continue; + } + List values = new ArrayList<>(); + if (urlEncodedFormParameters.containsKey(parameterKeyValue[0])) { + values = urlEncodedFormParameters.get(parameterKeyValue[0]); + } + values.add(decodeValueIfEncoded(parameterKeyValue[1])); + urlEncodedFormParameters.put(decodeValueIfEncoded(parameterKeyValue[0]), values); + } + Timer.stop("SERVLET_REQUEST_GET_FORM_PARAMS"); + return urlEncodedFormParameters; + } + + @SuppressFBWarnings({"FILE_UPLOAD_FILENAME", "WEAK_FILENAMEUTILS"}) + protected Map getMultipartFormParametersMap() { + if (multipartFormParameters != null) { + return multipartFormParameters; + } + if (!ServletFileUpload.isMultipartContent(this)) { // isMultipartContent also checks the content type + multipartFormParameters = new HashMap<>(); + return multipartFormParameters; + } + Timer.start("SERVLET_REQUEST_GET_MULTIPART_PARAMS"); + multipartFormParameters = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); + + ServletFileUpload upload = new ServletFileUpload(new DiskFileItemFactory()); + + try { + List items = upload.parseRequest(this); + for (FileItem item : items) { + String fileName = FilenameUtils.getName(item.getName()); + AwsProxyRequestPart newPart = new AwsProxyRequestPart(item.get()); + newPart.setName(item.getFieldName()); + newPart.setSubmittedFileName(fileName); + newPart.setContentType(item.getContentType()); + newPart.setSize(item.getSize()); + item.getHeaders().getHeaderNames().forEachRemaining(h -> { + newPart.addHeader(h, item.getHeaders().getHeader(h)); + }); + + multipartFormParameters.put(item.getFieldName(), newPart); + } + } catch (FileUploadException e) { + Timer.stop("SERVLET_REQUEST_GET_MULTIPART_PARAMS"); + log.error("Could not read multipart upload file", e); + } + Timer.stop("SERVLET_REQUEST_GET_MULTIPART_PARAMS"); + return multipartFormParameters; + } + + protected String[] getQueryParamValues(MultiValuedTreeMap qs, String key, boolean isCaseSensitive) { + if (qs != null) { + if (isCaseSensitive) { + return qs.get(key).toArray(new String[0]); + } + + for (String k : qs.keySet()) { + if (k.toLowerCase(Locale.getDefault()).equals(key.toLowerCase(Locale.getDefault()))) { + return qs.get(k).toArray(new String[0]); + } + } + } + + return new String[0]; + } + + protected Map generateParameterMap(MultiValuedTreeMap qs, ContainerConfig config) { + Map output = new HashMap<>(); + + Map> params = getFormUrlEncodedParametersMap(); + params.entrySet().stream().parallel().forEach(e -> { + output.put(e.getKey(), e.getValue().toArray(new String[0])); + }); + + if (qs != null) { + qs.keySet().stream().parallel().forEach(e -> { + List newValues = new ArrayList<>(); + if (output.containsKey(e)) { + String[] values = output.get(e); + newValues.addAll(Arrays.asList(values)); + } + newValues.addAll(Arrays.asList(getQueryParamValues(qs, e, config.isQueryStringCaseSensitive()))); + output.put(e, newValues.toArray(new String[0])); + }); + } + + return output; + } + + protected String getSchemeFromHeader(Headers headers) { + // if we don't have any headers to deduce the value we assume HTTPS - API Gateway's default + if (headers == null) { + return "https"; + } + String cfScheme = headers.getFirst(CF_PROTOCOL_HEADER_NAME); + if (cfScheme != null && SecurityUtils.isValidScheme(cfScheme)) { + return cfScheme; + } + String gwScheme = headers.getFirst(PROTOCOL_HEADER_NAME); + if (gwScheme != null && SecurityUtils.isValidScheme(gwScheme)) { + return gwScheme; + } + // https is our default scheme + return "https"; + } /** * Prases a header value using the default value separator "," and qualifier separator ";". @@ -426,6 +708,39 @@ static String decodeRequestPath(String requestPath, ContainerConfig config) { } + static String cleanUri(String uri) { + String finalUri = (uri == null ? "/" : uri); + if (finalUri.equals("/")) { + return finalUri; + } + + if (!finalUri.startsWith("/")) { + finalUri = "/" + finalUri; + } + + if (finalUri.endsWith("/")) { + finalUri = finalUri.substring(0, finalUri.length() - 1); + } + + finalUri = finalUri.replaceAll("/+", "/"); + + return finalUri; + } + + static String decodeValueIfEncoded(String value) { + if (value == null) { + return null; + } + + try { + return URLDecoder.decode(value, LambdaContainerHandler.getContainerConfig().getUriEncoding()); + } catch (UnsupportedEncodingException e) { + log.warn("Could not decode body content - proceeding as if it was already decoded", e); + return value; + } + } + + /** * Class that represents a header value. */ diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestWrapper.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestWrapper.java index a8ee1840c..e151c03da 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestWrapper.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestWrapper.java @@ -1,3 +1,15 @@ +/* + * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance + * with the License. A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.proxy.internal.servlet; import com.amazonaws.serverless.proxy.internal.LambdaContainerHandler; diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponse.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponse.java index da695c509..153cdb91e 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponse.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponse.java @@ -419,7 +419,13 @@ public void flushBuffer() throws IOException { if (null != writer) { writer.flush(); } - responseBody = new String(bodyOutputStream.toByteArray(), LambdaContainerHandler.getContainerConfig().getDefaultContentCharset()); + String charset = characterEncoding; + + if(charset == null) { + charset = LambdaContainerHandler.getContainerConfig().getDefaultContentCharset(); + } + + responseBody = new String(bodyOutputStream.toByteArray(), charset); log.debug("Response buffer flushed with {} bytes, latch={}", responseBody.length(), writersCountDownLatch.getCount()); isCommitted = true; writersCountDownLatch.countDown(); diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpSession.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpSession.java index 1ac0908fd..8c3df7f86 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpSession.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpSession.java @@ -1,3 +1,15 @@ +/* + * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance + * with the License. A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.proxy.internal.servlet; import org.slf4j.Logger; @@ -13,7 +25,6 @@ import java.util.HashMap; import java.util.Map; - /** * This class emulates the behavior of an HTTP session. At the moment a new instance of this class * is created for each request/event. In the future, we may define a session id resolver interface diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsLambdaServletContainerHandler.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsLambdaServletContainerHandler.java index 95af74e67..52631da54 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsLambdaServletContainerHandler.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsLambdaServletContainerHandler.java @@ -12,6 +12,7 @@ */ package com.amazonaws.serverless.proxy.internal.servlet; +import com.amazonaws.serverless.exceptions.ContainerInitializationException; import com.amazonaws.serverless.proxy.ExceptionHandler; import com.amazonaws.serverless.proxy.internal.LambdaContainerHandler; import com.amazonaws.serverless.proxy.RequestReader; @@ -28,7 +29,8 @@ import javax.servlet.http.HttpServletResponseWrapper; import java.io.IOException; -import java.util.Map; +import java.util.*; +import java.util.stream.Collectors; /** @@ -146,15 +148,38 @@ protected FilterChain getFilterChain(HttpServletRequest req, Servlet servlet) { * @throws ServletException */ protected void doFilter(HttpServletRequest request, HttpServletResponse response, Servlet servlet) throws IOException, ServletException { + if (AwsHttpServletRequest.class.isAssignableFrom(request.getClass())) { + ((AwsHttpServletRequest)request).setContainerHandler(this); + } + FilterChain chain = getFilterChain(request, servlet); chain.doFilter(request, response); - // if for some reason the response wasn't flushed yet, we force it here. - if (!response.isCommitted()) { + // if for some reason the response wasn't flushed yet, we force it here unless it's being processed asynchronously (WebFlux) + if (!response.isCommitted() && request.getDispatcherType() != DispatcherType.ASYNC) { response.flushBuffer(); } } + @Override + public void initialize() throws ContainerInitializationException { + // we expect all servlets to be wrapped in an AwsServletRegistration + ArrayList registrations = new ArrayList<>((Collection)getServletContext().getServletRegistrations().values()); + registrations.sort(AwsServletRegistration::compareTo); + for (AwsServletRegistration r : registrations) { + if (r.getLoadOnStartup() == -1) { // skip Servlets that can be lazily loaded + continue; + } + try { + if (r.getServlet() != null) { + r.getServlet().init(r.getServletConfig()); + } + } catch (ServletException e) { + throw new ContainerInitializationException("Could not initialize servlet " + r.getName(), e); + } + } + } + //------------------------------------------------------------- // Inner Class - //------------------------------------------------------------- diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java index 8d58850cf..97ae055bd 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java @@ -15,52 +15,36 @@ import com.amazonaws.serverless.proxy.internal.LambdaContainerHandler; import com.amazonaws.serverless.proxy.internal.SecurityUtils; -import com.amazonaws.serverless.proxy.internal.testutils.Timer; import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.serverless.proxy.model.ContainerConfig; import com.amazonaws.serverless.proxy.model.Headers; import com.amazonaws.services.lambda.runtime.Context; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; -import org.apache.commons.fileupload.FileItem; -import org.apache.commons.fileupload.FileUploadException; -import org.apache.commons.fileupload.disk.DiskFileItemFactory; -import org.apache.commons.fileupload.servlet.ServletFileUpload; -import org.apache.commons.io.FilenameUtils; -import org.apache.commons.io.IOUtils; -import org.apache.commons.io.input.NullInputStream; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.servlet.*; import javax.servlet.http.*; import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.MediaType; import javax.ws.rs.core.SecurityContext; import java.io.BufferedReader; -import java.io.ByteArrayInputStream; import java.io.IOException; -import java.io.InputStream; import java.io.StringReader; import java.io.UnsupportedEncodingException; -import java.net.URLDecoder; -import java.nio.charset.StandardCharsets; import java.security.Principal; import java.time.Instant; import java.time.ZonedDateTime; import java.time.format.DateTimeParseException; import java.util.ArrayList; import java.util.Arrays; -import java.util.Base64; import java.util.Collection; import java.util.Collections; import java.util.Enumeration; -import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; -import java.util.TreeMap; /** @@ -77,12 +61,8 @@ public class AwsProxyHttpServletRequest extends AwsHttpServletRequest { private AwsProxyRequest request; private SecurityContext securityContext; private AwsAsyncContext asyncContext; - private Map> urlEncodedFormParameters; - private Map multipartFormParameters; private static Logger log = LoggerFactory.getLogger(AwsProxyHttpServletRequest.class); private ContainerConfig config; - private AwsHttpServletResponse response; - private AwsLambdaServletContainerHandler containerHandler; //------------------------------------------------------------- // Constructors @@ -101,23 +81,10 @@ public AwsProxyHttpServletRequest(AwsProxyRequest awsProxyRequest, Context lambd this.config = config; } - public AwsProxyRequest getAwsProxyRequest() { return this.request; } - public AwsHttpServletResponse getResponse() { - return response; - } - - public void setResponse(AwsHttpServletResponse response) { - this.response = response; - } - - public void setContainerHandler(AwsLambdaServletContainerHandler containerHandler) { - this.containerHandler = containerHandler; - } - //------------------------------------------------------------- // Implementation - HttpServletRequest //------------------------------------------------------------- @@ -224,16 +191,7 @@ public String getPathTranslated() { @Override public String getContextPath() { - String contextPath = ""; - if (config.isUseStageAsServletContext() && request.getRequestContext().getStage() != null) { - log.debug("Using stage as context path"); - contextPath = cleanUri(request.getRequestContext().getStage()); - } - if (config.getServiceBasePath() != null) { - contextPath += cleanUri(config.getServiceBasePath()); - } - - return contextPath; + return generateContextPath(config, request.getRequestContext().getStage()); } @@ -279,19 +237,7 @@ public String getRequestURI() { @Override public StringBuffer getRequestURL() { - String url = ""; - url += getServerName(); - url += cleanUri(getContextPath()); - url += cleanUri(request.getPath()); - - return new StringBuffer(getScheme() + "://" + url); - } - - - @Override - public String getServletPath() { - // we always work on the root path - return ""; + return generateRequestURL(request.getPath()); } @@ -333,7 +279,7 @@ public Part getPart(String s) @Override public T upgrade(Class aClass) throws IOException, ServletException { - return null; + throw new UnsupportedOperationException(); } //------------------------------------------------------------- @@ -343,28 +289,10 @@ public T upgrade(Class aClass) @Override public String getCharacterEncoding() { - // we only look at content-type because content-encoding should only be used for - // "binary" requests such as gzip/deflate. - String contentTypeHeader = request.getMultiValueHeaders().getFirst(HttpHeaders.CONTENT_TYPE); - if (contentTypeHeader == null) { - return null; - } - - String[] contentTypeValues = contentTypeHeader.split(HEADER_VALUE_SEPARATOR); - if (contentTypeValues.length <= 1) { - return null; - } - - for (String contentTypeValue : contentTypeValues) { - if (contentTypeValue.trim().startsWith(ENCODING_VALUE_KEY)) { - String[] encodingValues = contentTypeValue.split(HEADER_KEY_VALUE_SEPARATOR); - if (encodingValues.length <= 1) { - return null; - } - return encodingValues[1]; - } + if (request.getMultiValueHeaders() == null) { + return config.getDefaultContentCharset(); } - return null; + return parseCharacterEncoding(request.getMultiValueHeaders().getFirst(HttpHeaders.CONTENT_TYPE)); } @@ -380,25 +308,7 @@ public void setCharacterEncoding(String s) return; } - if (currentContentType.contains(HEADER_VALUE_SEPARATOR)) { - String[] contentTypeValues = currentContentType.split(HEADER_VALUE_SEPARATOR); - StringBuilder contentType = new StringBuilder(contentTypeValues[0]); - - for (int i = 1; i < contentTypeValues.length; i++) { - String contentTypeValue = contentTypeValues[i]; - String contentTypeString = HEADER_VALUE_SEPARATOR + " " + contentTypeValue; - if (contentTypeValue.trim().startsWith(ENCODING_VALUE_KEY)) { - contentTypeString = HEADER_VALUE_SEPARATOR + " " + ENCODING_VALUE_KEY + HEADER_KEY_VALUE_SEPARATOR + s; - } - contentType.append(contentTypeString); - } - - request.getMultiValueHeaders().putSingle(HttpHeaders.CONTENT_TYPE, contentType.toString()); - } else { - request.getMultiValueHeaders().putSingle( - HttpHeaders.CONTENT_TYPE, - currentContentType + HEADER_VALUE_SEPARATOR + " " + ENCODING_VALUE_KEY + HEADER_KEY_VALUE_SEPARATOR + s); - } + request.getMultiValueHeaders().putSingle(HttpHeaders.CONTENT_TYPE, appendCharacterEncoding(currentContentType, s)); } @@ -432,37 +342,9 @@ public String getContentType() { return contentTypeHeader; } - - @Override - public ServletInputStream getInputStream() - throws IOException { - if (request.getBody() == null) { - return new AwsServletInputStream(new NullInputStream(0, false, false)); - } - byte[] bodyBytes; - if (request.isBase64Encoded()) { - bodyBytes = Base64.getMimeDecoder().decode(request.getBody()); - } else { - String encoding = getCharacterEncoding(); - if (encoding == null) { - encoding = StandardCharsets.ISO_8859_1.name(); - } - try { - bodyBytes = request.getBody().getBytes(encoding); - } catch (Exception e) { - log.error("Could not read request with character encoding: " + SecurityUtils.crlf(encoding), e); - bodyBytes = request.getBody().getBytes(StandardCharsets.ISO_8859_1.name()); - } - - } - ByteArrayInputStream requestBodyStream = new ByteArrayInputStream(bodyBytes); - return new AwsServletInputStream(requestBodyStream); - } - - @Override public String getParameter(String s) { - String queryStringParameter = getFirstQueryParamValue(s, config.isQueryStringCaseSensitive()); + String queryStringParameter = getFirstQueryParamValue(request.getMultiValueQueryStringParameters(), s, config.isQueryStringCaseSensitive()); if (queryStringParameter != null) { return queryStringParameter; } @@ -489,7 +371,7 @@ public Enumeration getParameterNames() { @Override @SuppressFBWarnings("PZLA_PREFER_ZERO_LENGTH_ARRAYS") // suppressing this as according to the specs we should be returning null here if we can't find params public String[] getParameterValues(String s) { - List values = new ArrayList<>(Arrays.asList(getQueryParamValues(s, config.isQueryStringCaseSensitive()))); + List values = new ArrayList<>(Arrays.asList(getQueryParamValues(request.getMultiValueQueryStringParameters(), s, config.isQueryStringCaseSensitive()))); values.addAll(Arrays.asList(getFormBodyParameterCaseInsensitive(s))); @@ -503,26 +385,7 @@ public String[] getParameterValues(String s) { @Override public Map getParameterMap() { - Map output = new HashMap<>(); - - Map> params = getFormUrlEncodedParametersMap(); - params.entrySet().stream().parallel().forEach(e -> { - output.put(e.getKey(), e.getValue().toArray(new String[0])); - }); - - if (request.getMultiValueQueryStringParameters() != null) { - request.getMultiValueQueryStringParameters().keySet().stream().parallel().forEach(e -> { - List newValues = new ArrayList<>(); - if (output.containsKey(e)) { - String[] values = output.get(e); - newValues.addAll(Arrays.asList(values)); - } - newValues.addAll(Arrays.asList(getQueryParamValues(e, config.isQueryStringCaseSensitive()))); - output.put(e, newValues.toArray(new String[0])); - }); - } - - return output; + return generateParameterMap(request.getMultiValueQueryStringParameters(), config); } @@ -534,20 +397,7 @@ public String getProtocol() { @Override public String getScheme() { - // if we don't have any headers to deduce the value we assume HTTPS - API Gateway's default - if (request.getMultiValueHeaders() == null) { - return "https"; - } - String cfScheme = request.getMultiValueHeaders().getFirst(CF_PROTOCOL_HEADER_NAME); - if (cfScheme != null && SecurityUtils.isValidScheme(cfScheme)) { - return cfScheme; - } - String gwScheme = request.getMultiValueHeaders().getFirst(PROTOCOL_HEADER_NAME); - if (gwScheme != null && SecurityUtils.isValidScheme(gwScheme)) { - return gwScheme; - } - // https is our default scheme - return "https"; + return getSchemeFromHeader(request.getMultiValueHeaders()); } @Override @@ -558,9 +408,11 @@ public String getServerName() { region = "us-east-1"; } - String hostHeader = request.getMultiValueHeaders().getFirst(HOST_HEADER_NAME); - if (hostHeader != null && SecurityUtils.isValidHost(hostHeader, request.getRequestContext().getApiId(), region)) { - return hostHeader; + if (request.getMultiValueHeaders() != null && request.getMultiValueHeaders().containsKey(HOST_HEADER_NAME)) { + String hostHeader = request.getMultiValueHeaders().getFirst(HOST_HEADER_NAME); + if (SecurityUtils.isValidHost(hostHeader, request.getRequestContext().getApiId(), region)) { + return hostHeader; + } } return new StringBuilder().append(request.getRequestContext().getApiId()) @@ -582,6 +434,14 @@ public int getServerPort() { } } + @Override + public ServletInputStream getInputStream() throws IOException { + if (requestInputStream == null) { + requestInputStream = new AwsServletInputStream(bodyStringToInputStream(request.getBody(), request.isBase64Encoded())); + } + return requestInputStream; + } + @Override public BufferedReader getReader() @@ -693,8 +553,8 @@ public AsyncContext startAsync() @Override public AsyncContext startAsync(ServletRequest servletRequest, ServletResponse servletResponse) throws IllegalStateException { + servletRequest.setAttribute(DISPATCHER_TYPE_ATTRIBUTE, DispatcherType.ASYNC); asyncContext = new AwsAsyncContext((HttpServletRequest) servletRequest, (HttpServletResponse) servletResponse, containerHandler); - setAttribute(DISPATCHER_TYPE_ATTRIBUTE, DispatcherType.ASYNC); log.debug("Starting async context for request: " + SecurityUtils.crlf(request.getRequestContext().getRequestId())); return asyncContext; } @@ -703,7 +563,7 @@ public AsyncContext startAsync(ServletRequest servletRequest, ServletResponse se public AsyncContext getAsyncContext() { if (asyncContext == null) { throw new IllegalStateException("Request " + SecurityUtils.crlf(request.getRequestContext().getRequestId()) - + " is not in asynchronous mode. Call startAsync before atttempting to get the async context."); + + " is not in asynchronous mode. Call startAsync before attempting to get the async context."); } return asyncContext; } @@ -712,128 +572,6 @@ public AsyncContext getAsyncContext() { // Methods - Private //------------------------------------------------------------- - private String[] getFormBodyParameterCaseInsensitive(String key) { - List values = getFormUrlEncodedParametersMap().get(key); - if (values != null) { - String[] valuesArray = new String[values.size()]; - valuesArray = values.toArray(valuesArray); - return valuesArray; - } else { - return new String[0]; - } - } - - - @SuppressFBWarnings({"FILE_UPLOAD_FILENAME", "WEAK_FILENAMEUTILS"}) - private Map getMultipartFormParametersMap() { - if (multipartFormParameters != null) { - return multipartFormParameters; - } - if (!ServletFileUpload.isMultipartContent(this)) { // isMultipartContent also checks the content type - multipartFormParameters = new HashMap<>(); - return multipartFormParameters; - } - Timer.start("SERVLET_REQUEST_GET_MULTIPART_PARAMS"); - multipartFormParameters = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); - - ServletFileUpload upload = new ServletFileUpload(new DiskFileItemFactory()); - - try { - List items = upload.parseRequest(this); - for (FileItem item : items) { - String fileName = FilenameUtils.getName(item.getName()); - AwsProxyRequestPart newPart = new AwsProxyRequestPart(item.get()); - newPart.setName(item.getFieldName()); - newPart.setSubmittedFileName(fileName); - newPart.setContentType(item.getContentType()); - newPart.setSize(item.getSize()); - item.getHeaders().getHeaderNames().forEachRemaining(h -> { - newPart.addHeader(h, item.getHeaders().getHeader(h)); - }); - - multipartFormParameters.put(item.getFieldName(), newPart); - } - } catch (FileUploadException e) { - Timer.stop("SERVLET_REQUEST_GET_MULTIPART_PARAMS"); - log.error("Could not read multipart upload file", e); - } - Timer.stop("SERVLET_REQUEST_GET_MULTIPART_PARAMS"); - return multipartFormParameters; - } - - - static String cleanUri(String uri) { - String finalUri = (uri == null ? "/" : uri); - if (finalUri.equals("/")) { - return finalUri; - } - - if (!finalUri.startsWith("/")) { - finalUri = "/" + finalUri; - } - - if (finalUri.endsWith("/")) { - finalUri = finalUri.substring(0, finalUri.length() - 1); - } - - finalUri = finalUri.replaceAll("/+", "/"); - - return finalUri; - } - - - private Map> getFormUrlEncodedParametersMap() { - if (urlEncodedFormParameters != null) { - return urlEncodedFormParameters; - } - String contentType = getContentType(); - if (contentType == null) { - urlEncodedFormParameters = new HashMap<>(); - return urlEncodedFormParameters; - } - if (!contentType.startsWith(MediaType.APPLICATION_FORM_URLENCODED) || !getMethod().toLowerCase(Locale.ENGLISH).equals("post")) { - urlEncodedFormParameters = new HashMap<>(); - return urlEncodedFormParameters; - } - Timer.start("SERVLET_REQUEST_GET_FORM_PARAMS"); - String rawBodyContent = null; - try { - rawBodyContent = IOUtils.toString(getInputStream()); - } catch (IOException e) { - throw new RuntimeException(e); - } - - urlEncodedFormParameters = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); - for (String parameter : rawBodyContent.split(FORM_DATA_SEPARATOR)) { - String[] parameterKeyValue = parameter.split(HEADER_KEY_VALUE_SEPARATOR); - if (parameterKeyValue.length < 2) { - continue; - } - List values = new ArrayList<>(); - if (urlEncodedFormParameters.containsKey(parameterKeyValue[0])) { - values = urlEncodedFormParameters.get(parameterKeyValue[0]); - } - values.add(decodeValueIfEncoded(parameterKeyValue[1])); - urlEncodedFormParameters.put(decodeValueIfEncoded(parameterKeyValue[0]), values); - } - Timer.stop("SERVLET_REQUEST_GET_FORM_PARAMS"); - return urlEncodedFormParameters; - } - - - public static String decodeValueIfEncoded(String value) { - if (value == null) { - return null; - } - - try { - return URLDecoder.decode(value, LambdaContainerHandler.getContainerConfig().getUriEncoding()); - } catch (UnsupportedEncodingException e) { - log.warn("Could not decode body content - proceeding as if it was already decoded", e); - return value; - } - } - private List getHeaderValues(String key) { // special cases for referer and user agent headers List values = new ArrayList<>(); @@ -857,84 +595,4 @@ private List getHeaderValues(String key) { } - private String getFirstQueryParamValue(String key, boolean isCaseSensitive) { - if (request.getMultiValueQueryStringParameters() != null) { - if (isCaseSensitive) { - return request.getMultiValueQueryStringParameters().getFirst(key); - } - - for (String k : request.getMultiValueQueryStringParameters().keySet()) { - if (k.toLowerCase(Locale.getDefault()).equals(key.toLowerCase(Locale.getDefault()))) { - return request.getMultiValueQueryStringParameters().getFirst(k); - } - } - } - - return null; - } - - public String[] getQueryParamValues(String key, boolean isCaseSensitive) { - if (request.getMultiValueQueryStringParameters() != null) { - if (isCaseSensitive) { - return request.getMultiValueQueryStringParameters().get(key).toArray(new String[0]); - } - - for (String k : request.getMultiValueQueryStringParameters().keySet()) { - if (k.toLowerCase(Locale.getDefault()).equals(key.toLowerCase(Locale.getDefault()))) { - return request.getMultiValueQueryStringParameters().get(k).toArray(new String[0]); - } - } - } - - return new String[0]; - } - - - public static class AwsServletInputStream extends ServletInputStream { - - private InputStream bodyStream; - private ReadListener listener; - - public AwsServletInputStream(InputStream body) { - bodyStream = body; - } - - - @Override - public boolean isFinished() { - return true; - } - - - @Override - public boolean isReady() { - return true; - } - - - @Override - public void setReadListener(ReadListener readListener) { - listener = readListener; - try { - listener.onDataAvailable(); - } catch (IOException e) { - log.error("Data not available on input stream", e); - } - } - - - @Override - public int read() - throws IOException { - if (bodyStream == null || bodyStream instanceof NullInputStream) { - return -1; - } - int readByte = bodyStream.read(); - if (bodyStream.available() == 0 && listener != null) { - listener.onAllDataRead(); - } - return readByte; - } - - } } diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestReader.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestReader.java index 405ae9739..932041db9 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestReader.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestReader.java @@ -19,6 +19,7 @@ import com.amazonaws.services.lambda.runtime.Context; import javax.servlet.ServletContext; +import javax.servlet.http.HttpServletRequest; import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.SecurityContext; @@ -26,8 +27,9 @@ * Simple implementation of the RequestReader interface that receives an AwsProxyRequest * object and uses it to initialize a AwsProxyHttpServletRequest object. */ -public class AwsProxyHttpServletRequestReader extends RequestReader { +public class AwsProxyHttpServletRequestReader extends RequestReader { static final String INVALID_REQUEST_ERROR = "The incoming event is not a valid request from Amazon API Gateway or an Application Load Balancer"; + private ServletContext servletContext; //------------------------------------------------------------- // Methods - Implementation @@ -38,7 +40,7 @@ public void setServletContext(ServletContext ctx) { } @Override - public AwsProxyHttpServletRequest readRequest(AwsProxyRequest request, SecurityContext securityContext, Context lambdaContext, ContainerConfig config) + public HttpServletRequest readRequest(AwsProxyRequest request, SecurityContext securityContext, Context lambdaContext, ContainerConfig config) throws InvalidRequestEventException { // Expect the HTTP method and context to be populated. If they are not, we are handling an // unsupported event type. diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletResponseWriter.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletResponseWriter.java index 32a86f667..ba98eedb2 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletResponseWriter.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletResponseWriter.java @@ -57,7 +57,7 @@ public AwsProxyResponse writeResponse(AwsHttpServletResponse containerResponse, awsProxyResponse.setStatusCode(containerResponse.getStatus()); - if (containerResponse.getAwsProxyRequest().getRequestSource() == AwsProxyRequest.RequestSource.ALB) { + if (containerResponse.getAwsProxyRequest() != null && containerResponse.getAwsProxyRequest().getRequestSource() == AwsProxyRequest.RequestSource.ALB) { awsProxyResponse.setStatusDescription(containerResponse.getStatus() + " " + Response.Status.fromStatusCode(containerResponse.getStatus()).getReasonPhrase()); } diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyRequestDispatcher.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyRequestDispatcher.java index 2ffcc97de..27a352ebf 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyRequestDispatcher.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyRequestDispatcher.java @@ -1,8 +1,20 @@ +/* + * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance + * with the License. A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.proxy.internal.servlet; - import com.amazonaws.serverless.proxy.internal.SecurityUtils; import com.amazonaws.serverless.proxy.model.AwsProxyRequest; +import com.amazonaws.serverless.proxy.model.HttpApiV2ProxyRequest; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -14,9 +26,9 @@ import java.io.IOException; import static com.amazonaws.serverless.proxy.RequestReader.API_GATEWAY_EVENT_PROPERTY; +import static com.amazonaws.serverless.proxy.RequestReader.HTTP_API_EVENT_PROPERTY; import static com.amazonaws.serverless.proxy.internal.servlet.AwsHttpServletRequest.DISPATCHER_TYPE_ATTRIBUTE; - /** * Default RequestDispatcher implementation for the AwsProxyHttpServletRequest type. A new * instance of this object is created each time a framework gets the RequestDispatcher from a servlet request. Behind @@ -115,12 +127,22 @@ void setRequestPath(ServletRequest req, final String destinationPath) { ((AwsProxyHttpServletRequest) req).getAwsProxyRequest().setPath(dispatchTo); return; } + if (req instanceof AwsHttpApiV2ProxyHttpServletRequest) { + ((AwsHttpApiV2ProxyHttpServletRequest) req).getRequest().setRawPath(destinationPath); + return; + } - log.debug("Request is not an AwsProxyHttpServletRequest, attempting to extract the proxy event type"); - if (req.getAttribute(API_GATEWAY_EVENT_PROPERTY) == null || !(req.getAttribute(API_GATEWAY_EVENT_PROPERTY) instanceof AwsProxyRequest)) { - throw new IllegalStateException("ServletRequest object does not contain API Gateway event"); + log.debug("Request is not an proxy request generated by this library, attempting to extract the proxy event type from the request attributes"); + if (req.getAttribute(API_GATEWAY_EVENT_PROPERTY) != null && req.getAttribute(API_GATEWAY_EVENT_PROPERTY) instanceof AwsProxyRequest) { + ((AwsProxyRequest)req.getAttribute(API_GATEWAY_EVENT_PROPERTY)).setPath(dispatchTo); + return; + } + if (req.getAttribute(HTTP_API_EVENT_PROPERTY) != null && req.getAttribute(HTTP_API_EVENT_PROPERTY) instanceof HttpApiV2ProxyRequest) { + ((HttpApiV2ProxyRequest)req.getAttribute(HTTP_API_EVENT_PROPERTY)).setRawPath(destinationPath); + return; } - ((AwsProxyRequest)req.getAttribute(API_GATEWAY_EVENT_PROPERTY)).setPath(dispatchTo); + + throw new IllegalStateException("Could not set new target path for the given ServletRequest object"); } private Servlet getServlet(HttpServletRequest req) { diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java index 97e866e78..cf2e3920b 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java @@ -185,25 +185,21 @@ public Servlet getServletForPath(String path) { String[] pathParts = path.split("/"); for (AwsServletRegistration reg : servletRegistrations.values()) { for (String p : reg.getMappings()) { - try { - if ("".equals(p) || "/".equals(p) || "/*".equals(p)) { - return reg.getServlet(); - } - // if I have no path and I haven't matched something now I'll just move on to the next - if ("".equals(path) || "/".equals(path)) { - continue; + if ("".equals(p) || "/".equals(p) || "/*".equals(p)) { + return reg.getServlet(); + } + // if I have no path and I haven't matched something now I'll just move on to the next + if ("".equals(path) || "/".equals(path)) { + continue; + } + String[] regParts = p.split("/"); + for (int i = 0; i < regParts.length; i++) { + if (!regParts[i].equals(pathParts[i]) && !"*".equals(regParts[i])) { + break; } - String[] regParts = p.split("/"); - for (int i = 0; i < regParts.length; i++) { - if (!regParts[i].equals(pathParts[i]) && !"*".equals(regParts[i])) { - break; - } - if (i == regParts.length - 1 && (regParts[i].equals(pathParts[i]) || "*".equals(regParts[i]))) { - return reg.getServlet(); - } + if (i == regParts.length - 1 && (regParts[i].equals(pathParts[i]) || "*".equals(regParts[i]))) { + return reg.getServlet(); } - } catch (ServletException e) { - return null; } } } @@ -216,12 +212,7 @@ public Servlet getServletForPath(String path) { public Enumeration getServlets() { return Collections.enumeration(servletRegistrations.entrySet().stream() .map((e) -> { - try { - return e.getValue().getServlet(); - } catch (ServletException ex) { - ex.printStackTrace(); - return null; - } + return e.getValue().getServlet(); } ) .collect(Collectors.toList())); } diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletInputStream.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletInputStream.java new file mode 100644 index 000000000..552e75a89 --- /dev/null +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletInputStream.java @@ -0,0 +1,76 @@ +/* + * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance + * with the License. A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.proxy.internal.servlet; + +import org.apache.commons.io.input.NullInputStream; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.servlet.ReadListener; +import javax.servlet.ServletInputStream; +import java.io.IOException; +import java.io.InputStream; + +public class AwsServletInputStream extends ServletInputStream { + private static Logger log = LoggerFactory.getLogger(AwsServletInputStream.class); + private InputStream bodyStream; + private ReadListener listener; + private boolean finished; + + public AwsServletInputStream(InputStream body) { + bodyStream = body; + finished = false; + } + + @Override + public boolean isFinished() { + return finished; + } + + @Override + public boolean isReady() { + if (finished && listener != null) { + try { + listener.onAllDataRead(); + } catch (IOException e) { + log.error("Could not notify listeners that input stream data is ready", e); + throw new RuntimeException(e); + } + } + return !finished; + } + + @Override + public void setReadListener(ReadListener readListener) { + listener = readListener; + try { + listener.onDataAvailable(); + } catch (IOException e) { + log.error("Could not notify listeners that data is available", e); + throw new RuntimeException(e); + } + } + + @Override + public int read() + throws IOException { + if (bodyStream == null || bodyStream instanceof NullInputStream) { + return -1; + } + int readByte = bodyStream.read(); + if (readByte == -1) { + finished = true; + } + return readByte; + } +} diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletRegistration.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletRegistration.java index e3ce620bf..021503c13 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletRegistration.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletRegistration.java @@ -1,12 +1,26 @@ +/* + * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance + * with the License. A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.proxy.internal.servlet; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; + import javax.servlet.*; import java.util.*; /** * Stores information about a servlet registered with Serverless Java Container's ServletContext. */ -public class AwsServletRegistration implements ServletRegistration, ServletRegistration.Dynamic { +public class AwsServletRegistration implements ServletRegistration, ServletRegistration.Dynamic, Comparable { private String servletName; private Servlet servlet; private AwsServletContext ctx; @@ -91,10 +105,7 @@ public Map getInitParameters() { return initParameters; } - public Servlet getServlet() throws ServletException { - if (servlet.getServletConfig() == null) { - servlet.init(getServletConfig()); - } + public Servlet getServlet() { return servlet; } @@ -127,6 +138,20 @@ public void setAsyncSupported(boolean b) { asyncSupported = b; } + @Override + public int compareTo(AwsServletRegistration r) { + return Integer.compare(loadOnStartup, r.getLoadOnStartup()); + } + + @Override + @SuppressFBWarnings("HE_EQUALS_USE_HASHCODE") + public boolean equals(Object r) { + if (r == null || !AwsServletRegistration.class.isAssignableFrom(r.getClass())) { + return false; + } + return ((AwsServletRegistration)r).getName().equals(getName()) && ((AwsServletRegistration)r).getServlet() == getServlet(); + } + public boolean isAsyncSupported() { return asyncSupported; } diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/FilterChainManager.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/FilterChainManager.java index 8da92f1b3..92ff55daf 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/FilterChainManager.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/FilterChainManager.java @@ -14,15 +14,7 @@ import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; -import javax.servlet.DispatcherType; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.Servlet; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; +import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import java.io.IOException; @@ -31,6 +23,7 @@ import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.function.Predicate; /** * This object in in charge of matching a servlet request to a set of filter, creating the filter chain for a request, @@ -104,12 +97,17 @@ FilterChainHolder getFilterChain(final HttpServletRequest request, Servlet servl return getFilterChainCache(type, targetPath, servlet); } + AwsServletRegistration servletRegistration = (AwsServletRegistration)servletContext.getServletRegistrations() + .values().stream() + .filter((Predicate) servletRegistration1 -> ((AwsServletRegistration) servletRegistration1).getServlet().equals(servlet)) + .findFirst().orElse(null); + FilterChainHolder chainHolder = new FilterChainHolder(); Map registrations = getFilterHolders(); if (registrations == null || registrations.size() == 0) { - if (servlet != null) { - chainHolder.addFilter(new FilterHolder(new ServletExecutionFilter(servlet), servletContext)); + if (servletRegistration != null) { + chainHolder.addFilter(new FilterHolder(new ServletExecutionFilter(servletRegistration), servletContext)); } return chainHolder; } @@ -130,8 +128,8 @@ FilterChainHolder getFilterChain(final HttpServletRequest request, Servlet servl // we assume we only ever have one servlet. } - if (servlet != null) { - chainHolder.addFilter(new FilterHolder(new ServletExecutionFilter(servlet), servletContext)); + if (servletRegistration != null) { + chainHolder.addFilter(new FilterHolder(new ServletExecutionFilter(servletRegistration), servletContext)); } putFilterChainCache(type, targetPath, chainHolder); @@ -332,23 +330,30 @@ void setDispatcherType(DispatcherType dispatcherType) { private class ServletExecutionFilter implements Filter { private FilterConfig config; - private Servlet handlerServlet; + private AwsServletRegistration handlerServlet; + private boolean initialized; - public ServletExecutionFilter(Servlet handler) { - handlerServlet = handler; + public ServletExecutionFilter(AwsServletRegistration servletReg) { + handlerServlet = servletReg; + initialized = handlerServlet.getServlet().getServletInfo() != null; } @Override public void init(FilterConfig filterConfig) throws ServletException { + if (initialized) { + return; + } config = filterConfig; + handlerServlet.getServlet().init(handlerServlet.getServletConfig()); + initialized = true; } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { - handlerServlet.service(servletRequest, servletResponse); + handlerServlet.getServlet().service(servletRequest, servletResponse); filterChain.doFilter(servletRequest, servletResponse); } diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/FilterHolder.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/FilterHolder.java index 893075d2c..987dff14c 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/FilterHolder.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/FilterHolder.java @@ -83,6 +83,9 @@ public FilterHolder(String name, Filter newFilter, ServletContext context) { * @throws ServletException Propagates any servlet exception thrown by the filter initialization */ public void init() throws ServletException { + if (this.filterInitialized) { + return; + } this.getFilter().init(filterConfig); this.filterInitialized = true; } diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/ServletLambdaContainerHandlerBuilder.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/ServletLambdaContainerHandlerBuilder.java index 50743e73f..88e59fb61 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/ServletLambdaContainerHandlerBuilder.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/ServletLambdaContainerHandlerBuilder.java @@ -1,9 +1,22 @@ +/* + * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance + * with the License. A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.proxy.internal.servlet; import com.amazonaws.serverless.exceptions.ContainerInitializationException; import com.amazonaws.serverless.proxy.*; import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.serverless.proxy.model.AwsProxyResponse; +import com.amazonaws.serverless.proxy.model.HttpApiV2ProxyRequest; import javax.servlet.http.HttpServletRequest; import java.util.ArrayList; @@ -89,6 +102,23 @@ public Builder defaultProxy() { return self(); } + /** + * Sets all of the required fields in the builder to the default settings for a Servlet-compatible framework that wants + * to support HTTP API's v2 proxy event + * @return A populated builder + */ + public Builder defaultHttpApiV2Proxy() { + initializationWrapper(new InitializationWrapper()) + .requestReader((RequestReader) new AwsHttpApiV2HttpServletRequestReader()) + .responseWriter((ResponseWriter) new AwsProxyHttpServletResponseWriter()) + .securityContextWriter((SecurityContextWriter) new AwsHttpApiV2SecurityContextWriter()) + .exceptionHandler((ExceptionHandler) new AwsProxyExceptionHandler()) + .requestTypeClass((Class) HttpApiV2ProxyRequest.class) + .responseTypeClass((Class) AwsProxyResponse.class); + return self(); + + } + /** * Sets the initialization wrapper to be used by the {@link ServletLambdaContainerHandlerBuilder#buildAndInitialize()} * method to start the framework implementations @@ -132,11 +162,29 @@ public Builder responseTypeClass(Class responseType) { return self(); } + /** + * Uses an async initializer with the given start time to calculate the 10 seconds timeout. + * + * @deprecated As of release 1.5 this method is deprecated in favor of the parameters-less one {@link ServletLambdaContainerHandlerBuilder#asyncInit()}. + * @param actualStartTime An epoch in milliseconds that should be used to calculate the 10 seconds timeout since the start of the application + * @return A builder configured to use the async initializer + */ + @Deprecated public Builder asyncInit(long actualStartTime) { this.initializationWrapper = new AsyncInitializationWrapper(actualStartTime); return self(); } + /** + * Uses a new {@link AsyncInitializationWrapper} with the no-parameter constructor that takes the actual JVM + * start time + * @return A builder configured to use an async initializer + */ + public Builder asyncInit() { + this.initializationWrapper = new AsyncInitializationWrapper(); + return self(); + } + /** * Implementations should implement this method to return their type. All of the builder methods in this abstract * class use this method to return the correct builder type. diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/testutils/AwsProxyRequestBuilder.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/testutils/AwsProxyRequestBuilder.java index 3260d433c..8d4dc63f2 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/testutils/AwsProxyRequestBuilder.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/testutils/AwsProxyRequestBuilder.java @@ -13,15 +13,7 @@ package com.amazonaws.serverless.proxy.internal.testutils; import com.amazonaws.serverless.proxy.internal.LambdaContainerHandler; -import com.amazonaws.serverless.proxy.model.AlbContext; -import com.amazonaws.serverless.proxy.model.ApiGatewayAuthorizerContext; -import com.amazonaws.serverless.proxy.model.AwsProxyRequestContext; -import com.amazonaws.serverless.proxy.model.ApiGatewayRequestIdentity; -import com.amazonaws.serverless.proxy.model.AwsProxyRequest; -import com.amazonaws.serverless.proxy.model.CognitoAuthorizerClaims; -import com.amazonaws.serverless.proxy.model.ContainerConfig; -import com.amazonaws.serverless.proxy.model.Headers; -import com.amazonaws.serverless.proxy.model.MultiValuedTreeMap; +import com.amazonaws.serverless.proxy.model.*; import com.fasterxml.jackson.core.JsonProcessingException; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; @@ -42,8 +34,13 @@ import java.net.URLEncoder; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; -import java.util.Base64; -import java.util.UUID; +import java.util.*; +import java.util.function.BiConsumer; +import java.util.function.BinaryOperator; +import java.util.function.Function; +import java.util.function.Supplier; +import java.util.stream.Collector; +import java.util.stream.Collectors; /** @@ -71,6 +68,10 @@ public AwsProxyRequestBuilder(String path) { this(path, null); } + public AwsProxyRequestBuilder(AwsProxyRequest req) { + request = req; + } + public AwsProxyRequestBuilder(String path, String httpMethod) { this.request = new AwsProxyRequest(); @@ -100,6 +101,25 @@ public AwsProxyRequestBuilder alb() { this.request.getRequestContext().getElb().setTargetGroupArn( "arn:aws:elasticloadbalancing:us-east-1:123456789012:targetgroup/lambda-target/d6190d154bc908a5" ); + + // ALB does not decode query string parameters so we re-encode them all + if (request.getMultiValueQueryStringParameters() != null) { + MultiValuedTreeMap newQs = new MultiValuedTreeMap<>(); + for (Map.Entry> e : request.getMultiValueQueryStringParameters().entrySet()) { + for (String v : e.getValue()) { + try { + // this is a terrible hack. In our Spring tests we use the comma as a control character for lists + // this is allowed by the HTTP specs although not recommended. + String key = URLEncoder.encode(e.getKey(), "UTF-8").replaceAll("%2C", ","); + String value = URLEncoder.encode(v, "UTF-8").replaceAll("%2C", ","); + newQs.add(key, value); + } catch (UnsupportedEncodingException ex) { + throw new RuntimeException("Could not encode query string parameters: " + e.getKey() + "=" + v, ex); + } + } + } + request.setMultiValueQueryStringParameters(newQs); + } return this; } @@ -188,6 +208,16 @@ public AwsProxyRequestBuilder header(String key, String value) { return this; } + public AwsProxyRequestBuilder multiValueHeaders(Headers h) { + this.request.setMultiValueHeaders(h); + return this; + } + + public AwsProxyRequestBuilder multiValueQueryString(MultiValuedTreeMap params) { + this.request.setMultiValueQueryStringParameters(params); + return this; + } + public AwsProxyRequestBuilder queryString(String key, String value) { if (this.request.getMultiValueQueryStringParameters() == null) { @@ -228,7 +258,7 @@ public AwsProxyRequestBuilder nullBody() { } public AwsProxyRequestBuilder body(Object body) { - if (request.getMultiValueHeaders() != null && request.getMultiValueHeaders().getFirst(HttpHeaders.CONTENT_TYPE).equals(MediaType.APPLICATION_JSON)) { + if (request.getMultiValueHeaders() != null && request.getMultiValueHeaders().getFirst(HttpHeaders.CONTENT_TYPE).startsWith(MediaType.APPLICATION_JSON)) { try { return body(LambdaContainerHandler.getObjectMapper().writeValueAsString(body)); } catch (JsonProcessingException e) { @@ -239,6 +269,14 @@ public AwsProxyRequestBuilder body(Object body) { } } + public AwsProxyRequestBuilder apiId(String id) { + if (request.getRequestContext() == null) { + request.setRequestContext(new AwsProxyRequestContext()); + } + request.getRequestContext().setApiId(id); + return this; + } + public AwsProxyRequestBuilder binaryBody(InputStream is) throws IOException { this.request.setIsBase64Encoded(true); @@ -400,4 +438,101 @@ public InputStream buildStream() { return null; } } + + public InputStream toHttpApiV2RequestStream() { + HttpApiV2ProxyRequest req = toHttpApiV2Request(); + try { + String requestJson = LambdaContainerHandler.getObjectMapper().writeValueAsString(req); + return new ByteArrayInputStream(requestJson.getBytes(StandardCharsets.UTF_8)); + } catch (JsonProcessingException e) { + return null; + } + } + + public HttpApiV2ProxyRequest toHttpApiV2Request() { + HttpApiV2ProxyRequest req = new HttpApiV2ProxyRequest(); + req.setRawPath(request.getPath()); + req.setBase64Encoded(request.isBase64Encoded()); + req.setBody(request.getBody()); + if (request.getMultiValueHeaders() != null && request.getMultiValueHeaders().containsKey(HttpHeaders.COOKIE)) { + req.setCookies(Arrays.asList(request.getMultiValueHeaders().getFirst(HttpHeaders.COOKIE).split(";"))); + } + req.setHeaders(new HashMap<>()); + if (request.getMultiValueHeaders() != null) { + request.getMultiValueHeaders().forEach((key, value) -> req.getHeaders().put(key, value.get(0))); + } + if (request.getRequestContext() != null && request.getRequestContext().getIdentity() != null) { + if (request.getRequestContext().getIdentity().getCaller() != null) { + req.getHeaders().put("Referer", request.getRequestContext().getIdentity().getCaller()); + } + if (request.getRequestContext().getIdentity().getUserAgent() != null) { + req.getHeaders().put(HttpHeaders.USER_AGENT, request.getRequestContext().getIdentity().getUserAgent()); + } + + } + if (request.getMultiValueQueryStringParameters() != null) { + StringBuilder rawQueryString = new StringBuilder(); + request.getMultiValueQueryStringParameters().forEach((k, v) -> { + for (String s : v) { + rawQueryString.append("&"); + rawQueryString.append(k); + rawQueryString.append("="); + try { + // same terrible hack as the alb() method. Because our spring tests use commas as control characters + // we do not encode it + rawQueryString.append(URLEncoder.encode(s, "UTF-8").replaceAll("%2C", ",")); + } catch (UnsupportedEncodingException e) { + System.out.println("Ex!"); + throw new RuntimeException(e); + } + } + }); + String qs = rawQueryString.toString(); + if (qs.length() > 1) { + req.setRawQueryString(qs.substring(1)); + } + } + req.setRouteKey("$default"); + req.setVersion("2.0"); + req.setStageVariables(request.getStageVariables()); + + HttpApiV2ProxyRequestContext ctx = new HttpApiV2ProxyRequestContext(); + HttpApiV2HttpContext httpCtx = new HttpApiV2HttpContext(); + httpCtx.setMethod(request.getHttpMethod()); + httpCtx.setPath(request.getPath()); + httpCtx.setProtocol("HTTP/1.1"); + if (request.getRequestContext() != null && request.getRequestContext().getIdentity() != null && request.getRequestContext().getIdentity().getSourceIp() != null) { + httpCtx.setSourceIp(request.getRequestContext().getIdentity().getSourceIp()); + } else { + httpCtx.setSourceIp("127.0.0.1"); + } + if (request.getRequestContext() != null && request.getRequestContext().getIdentity() != null && request.getRequestContext().getIdentity().getUserAgent() != null) { + httpCtx.setUserAgent(request.getRequestContext().getIdentity().getUserAgent()); + } + ctx.setHttp(httpCtx); + if (request.getRequestContext() != null) { + ctx.setAccountId(request.getRequestContext().getAccountId()); + ctx.setApiId(request.getRequestContext().getApiId()); + ctx.setDomainName(request.getRequestContext().getApiId() + ".execute-api.us-east-1.apigateway.com"); + ctx.setDomainPrefix(request.getRequestContext().getApiId()); + ctx.setRequestId(request.getRequestContext().getRequestId()); + ctx.setRouteKey("$default"); + ctx.setStage(request.getRequestContext().getStage()); + ctx.setTimeEpoch(request.getRequestContext().getRequestTimeEpoch()); + ctx.setTime(request.getRequestContext().getRequestTime()); + + if (request.getRequestContext().getAuthorizer() != null) { + HttpApiV2AuthorizerMap auth = new HttpApiV2AuthorizerMap(); + HttpApiV2JwtAuthorizer jwt = new HttpApiV2JwtAuthorizer(); + // TODO: Anything we should map here? + jwt.setClaims(new HashMap<>()); + jwt.setScopes(new ArrayList<>()); + auth.putJwtAuthorizer(jwt); + ctx.setAuthorizer(auth); + } + } + req.setRequestContext(ctx); + + return req; + } } diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/testutils/Timer.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/testutils/Timer.java index b8c332aab..b89ca934f 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/testutils/Timer.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/testutils/Timer.java @@ -1,10 +1,20 @@ +/* + * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance + * with the License. A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.proxy.internal.testutils; - import java.util.LinkedHashMap; import java.util.Map; - public final class Timer { private volatile static Map timers = new LinkedHashMap<>(); private volatile static boolean enabled = false; diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/AlbContext.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/AlbContext.java index 1965231be..527fc222f 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/AlbContext.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/AlbContext.java @@ -1,6 +1,17 @@ +/* + * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance + * with the License. A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.proxy.model; - /*** * Context passed by ALB proxy events */ diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/ContainerConfig.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/ContainerConfig.java index e5c80d635..5edeeebbe 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/ContainerConfig.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/ContainerConfig.java @@ -1,6 +1,17 @@ +/* + * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance + * with the License. A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.proxy.model; - import com.amazonaws.serverless.proxy.internal.servlet.AwsProxyHttpServletRequest; import java.util.ArrayList; @@ -8,7 +19,6 @@ import java.util.HashSet; import java.util.List; - /** * Configuration parameters for the framework */ @@ -16,7 +26,7 @@ public class ContainerConfig { public static final String DEFAULT_URI_ENCODING = "UTF-8"; public static final String DEFAULT_CONTENT_CHARSET = "ISO-8859-1"; private static final List DEFAULT_FILE_PATHS = new ArrayList() {{ add("/tmp"); add("/var/task"); }}; - private static final int MAX_INIT_TIMEOUT_MS = 10_000; + private static final int MAX_INIT_TIMEOUT_MS = 20_000; public static ContainerConfig defaultConfig() { ContainerConfig configuration = new ContainerConfig(); @@ -29,6 +39,7 @@ public static ContainerConfig defaultConfig() { configuration.addBinaryContentTypes("application/octet-stream", "image/jpeg", "image/png", "image/gif"); configuration.setDefaultContentCharset(DEFAULT_CONTENT_CHARSET); configuration.setInitializationTimeout(MAX_INIT_TIMEOUT_MS); + configuration.setDisableExceptionMapper(false); return configuration; } @@ -48,6 +59,7 @@ public static ContainerConfig defaultConfig() { private boolean queryStringCaseSensitive; private final HashSet binaryContentTypes; private int initializationTimeout; + private boolean disableExceptionMapper; public ContainerConfig() { validFilePaths = new ArrayList<>(); @@ -297,4 +309,23 @@ public int getInitializationTimeout() { public void setInitializationTimeout(int initializationTimeout) { this.initializationTimeout = initializationTimeout; } + + /** + * Whether the framework will run exception thrown by the application through the implementation of + * {@link com.amazonaws.serverless.proxy.ExceptionHandler}. When this parameter is set to false the Lambda + * container handler object lets the Exception propagate upwards to the Lambda handler class. + * @return true if exception mapping is disabled, false otherwise. + */ + public boolean isDisableExceptionMapper() { + return disableExceptionMapper; + } + + /** + * This configuration parameter tells the container whether it should skip exception mapping and simply let any + * Exception thrown by the underlying application bubble up to the Lambda handler class. + * @param disable Set this value to true to disable exception mapping, false otherwise. + */ + public void setDisableExceptionMapper(boolean disable) { + this.disableExceptionMapper = disable; + } } diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/Headers.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/Headers.java index 0de0d204a..73f9d2841 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/Headers.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/Headers.java @@ -1,3 +1,15 @@ +/* + * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance + * with the License. A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.proxy.model; public class Headers extends MultiValuedTreeMap { diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/HttpApiV2AuthorizerMap.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/HttpApiV2AuthorizerMap.java new file mode 100644 index 000000000..e7017f60f --- /dev/null +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/HttpApiV2AuthorizerMap.java @@ -0,0 +1,84 @@ +/* + * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance + * with the License. A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.proxy.model; + +import com.amazonaws.serverless.proxy.internal.LambdaContainerHandler; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; + +import java.io.IOException; +import java.util.HashMap; + +@JsonSerialize(using = HttpApiV2AuthorizerMap.HttpApiV2AuthorizerSerializer.class) +@JsonDeserialize(using = HttpApiV2AuthorizerMap.HttpApiV2AuthorizerDeserializer.class) +public class HttpApiV2AuthorizerMap extends HashMap { + private static final String JWT_KEY = "jwt"; + private static final long serialVersionUID = 42L; + + public HttpApiV2JwtAuthorizer getJwtAuthorizer() { + return (HttpApiV2JwtAuthorizer)get(JWT_KEY); + } + + public boolean isJwt() { + return containsKey(JWT_KEY); + } + + public void putJwtAuthorizer(HttpApiV2JwtAuthorizer jwt) { + put(JWT_KEY, jwt); + } + + public static class HttpApiV2AuthorizerDeserializer extends StdDeserializer { + private static final long serialVersionUID = 42L; + + public HttpApiV2AuthorizerDeserializer() { + super(HttpApiV2AuthorizerMap.class); + } + + @Override + public HttpApiV2AuthorizerMap deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException { + HttpApiV2AuthorizerMap map = new HttpApiV2AuthorizerMap(); + JsonNode node = jsonParser.getCodec().readTree(jsonParser); + if (node.get(JWT_KEY) != null) { + HttpApiV2JwtAuthorizer authorizer = LambdaContainerHandler.getObjectMapper().treeToValue(node.get(JWT_KEY), HttpApiV2JwtAuthorizer.class); + map.putJwtAuthorizer(authorizer); + } + // we ignore other, unknown values + return map; + } + } + + public static class HttpApiV2AuthorizerSerializer extends StdSerializer { + private static final long serialVersionUID = 42L; + + public HttpApiV2AuthorizerSerializer() { + super(HttpApiV2AuthorizerMap.class); + } + + @Override + public void serialize(HttpApiV2AuthorizerMap httpApiV2AuthorizerMap, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { + jsonGenerator.writeStartObject(); + if (httpApiV2AuthorizerMap.isJwt()) { + jsonGenerator.writeObjectField(JWT_KEY, httpApiV2AuthorizerMap.getJwtAuthorizer()); + } + jsonGenerator.writeEndObject(); + } + } +} \ No newline at end of file diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/HttpApiV2HttpContext.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/HttpApiV2HttpContext.java new file mode 100644 index 000000000..e6eb12876 --- /dev/null +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/HttpApiV2HttpContext.java @@ -0,0 +1,61 @@ +/* + * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance + * with the License. A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.proxy.model; + +public class HttpApiV2HttpContext { + private String method; + private String path; + private String protocol; + private String sourceIp; + private String userAgent; + + public String getMethod() { + return method; + } + + public void setMethod(String method) { + this.method = method; + } + + public String getPath() { + return path; + } + + public void setPath(String path) { + this.path = path; + } + + public String getProtocol() { + return protocol; + } + + public void setProtocol(String protocol) { + this.protocol = protocol; + } + + public String getSourceIp() { + return sourceIp; + } + + public void setSourceIp(String sourceIp) { + this.sourceIp = sourceIp; + } + + public String getUserAgent() { + return userAgent; + } + + public void setUserAgent(String userAgent) { + this.userAgent = userAgent; + } +} diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/HttpApiV2JwtAuthorizer.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/HttpApiV2JwtAuthorizer.java new file mode 100644 index 000000000..d81a3c77f --- /dev/null +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/HttpApiV2JwtAuthorizer.java @@ -0,0 +1,37 @@ +/* + * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance + * with the License. A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.proxy.model; + +import java.util.List; +import java.util.Map; + +public class HttpApiV2JwtAuthorizer { + private Map claims; + private List scopes; + + public Map getClaims() { + return claims; + } + + public void setClaims(Map claims) { + this.claims = claims; + } + + public List getScopes() { + return scopes; + } + + public void setScopes(List scopes) { + this.scopes = scopes; + } +} diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/HttpApiV2ProxyRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/HttpApiV2ProxyRequest.java new file mode 100644 index 000000000..6eee7dc4d --- /dev/null +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/HttpApiV2ProxyRequest.java @@ -0,0 +1,121 @@ +/* + * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance + * with the License. A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.proxy.model; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import java.util.List; +import java.util.Map; + +public class HttpApiV2ProxyRequest { + private String version; + private String routeKey; + private String rawPath; + private String rawQueryString; + private List cookies; + private Map headers; + private Map queryStringParameters; + private String body; + private boolean isBase64Encoded; + private Map stageVariables; + private HttpApiV2ProxyRequestContext requestContext; + + public String getVersion() { + return version; + } + + public void setVersion(String version) { + this.version = version; + } + + public String getRouteKey() { + return routeKey; + } + + public void setRouteKey(String routeKey) { + this.routeKey = routeKey; + } + + public String getRawPath() { + return rawPath; + } + + public void setRawPath(String rawPath) { + this.rawPath = rawPath; + } + + public String getRawQueryString() { + return rawQueryString; + } + + public void setRawQueryString(String rawQueryString) { + this.rawQueryString = rawQueryString; + } + + public List getCookies() { + return cookies; + } + + public void setCookies(List cookies) { + this.cookies = cookies; + } + + public Map getHeaders() { + return headers; + } + + public void setHeaders(Map headers) { + this.headers = headers; + } + + public Map getQueryStringParameters() { + return queryStringParameters; + } + + public void setQueryStringParameters(Map queryStringParameters) { + this.queryStringParameters = queryStringParameters; + } + + public String getBody() { + return body; + } + + public void setBody(String body) { + this.body = body; + } + + @JsonProperty("isBase64Encoded") + public boolean isBase64Encoded() { + return isBase64Encoded; + } + + public void setBase64Encoded(boolean base64Encoded) { + isBase64Encoded = base64Encoded; + } + + public Map getStageVariables() { + return stageVariables; + } + + public void setStageVariables(Map stageVariables) { + this.stageVariables = stageVariables; + } + + public HttpApiV2ProxyRequestContext getRequestContext() { + return requestContext; + } + + public void setRequestContext(HttpApiV2ProxyRequestContext requestContext) { + this.requestContext = requestContext; + } +} diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/HttpApiV2ProxyRequestContext.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/HttpApiV2ProxyRequestContext.java new file mode 100644 index 000000000..55bbe1f8f --- /dev/null +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/HttpApiV2ProxyRequestContext.java @@ -0,0 +1,117 @@ +/* + * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance + * with the License. A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.proxy.model; + +public class HttpApiV2ProxyRequestContext { + private String accountId; + private String apiId; + private String domainName; + private String domainPrefix; + private String requestId; + private String routeKey; + private String stage; + private String time; + private long timeEpoch; + + private HttpApiV2HttpContext http; + private HttpApiV2AuthorizerMap authorizer; + + public String getAccountId() { + return accountId; + } + + public void setAccountId(String accountId) { + this.accountId = accountId; + } + + public String getApiId() { + return apiId; + } + + public void setApiId(String apiId) { + this.apiId = apiId; + } + + public String getDomainName() { + return domainName; + } + + public void setDomainName(String domainName) { + this.domainName = domainName; + } + + public String getDomainPrefix() { + return domainPrefix; + } + + public void setDomainPrefix(String domainPrefix) { + this.domainPrefix = domainPrefix; + } + + public String getRequestId() { + return requestId; + } + + public void setRequestId(String requestId) { + this.requestId = requestId; + } + + public String getRouteKey() { + return routeKey; + } + + public void setRouteKey(String routeKey) { + this.routeKey = routeKey; + } + + public String getStage() { + return stage; + } + + public void setStage(String stage) { + this.stage = stage; + } + + public String getTime() { + return time; + } + + public void setTime(String time) { + this.time = time; + } + + public long getTimeEpoch() { + return timeEpoch; + } + + public void setTimeEpoch(long timeEpoch) { + this.timeEpoch = timeEpoch; + } + + public HttpApiV2HttpContext getHttp() { + return http; + } + + public void setHttp(HttpApiV2HttpContext http) { + this.http = http; + } + + public HttpApiV2AuthorizerMap getAuthorizer() { + return authorizer; + } + + public void setAuthorizer(HttpApiV2AuthorizerMap authorizer) { + this.authorizer = authorizer; + } + +} diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/MultiValuedTreeMap.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/MultiValuedTreeMap.java index b45463b9e..feeab6f2b 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/MultiValuedTreeMap.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/MultiValuedTreeMap.java @@ -1,6 +1,17 @@ +/* + * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance + * with the License. A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.proxy.model; - import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import javax.ws.rs.core.MultivaluedMap; @@ -14,7 +25,6 @@ import java.util.Set; import java.util.TreeMap; - /** * Simple implementation of a multi valued tree map to use for case-insensitive headers * diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/AsyncInitializationWrapperTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/AsyncInitializationWrapperTest.java new file mode 100644 index 000000000..3b8a7306c --- /dev/null +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/AsyncInitializationWrapperTest.java @@ -0,0 +1,28 @@ +package com.amazonaws.serverless.proxy; + +import org.junit.Test; + +import java.lang.management.ManagementFactory; +import java.time.Clock; +import java.time.Instant; + +import static org.junit.Assert.assertEquals; + +public class AsyncInitializationWrapperTest { + + @Test + public void initCreate_noStartTime_setsCurrentTime() { + AsyncInitializationWrapper init = new AsyncInitializationWrapper(); + long initTime = ManagementFactory.getRuntimeMXBean().getStartTime(); + assertEquals(initTime, init.getActualStartTimeMs()); + } + + @Test + public void initCreate_withStartTime_storesCustomStartTime() throws InterruptedException { + long initTime = Instant.now().toEpochMilli(); + Thread.sleep(500); + AsyncInitializationWrapper init = new AsyncInitializationWrapper(initTime); + + assertEquals(initTime, init.getActualStartTimeMs()); + } +} diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/LambdaContainerHandlerTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/LambdaContainerHandlerTest.java new file mode 100644 index 000000000..8b10520c3 --- /dev/null +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/LambdaContainerHandlerTest.java @@ -0,0 +1,105 @@ +package com.amazonaws.serverless.proxy.internal; + +import com.amazonaws.serverless.exceptions.ContainerInitializationException; +import com.amazonaws.serverless.proxy.*; +import com.amazonaws.serverless.proxy.internal.servlet.AwsHttpServletResponse; +import com.amazonaws.serverless.proxy.internal.servlet.AwsProxyHttpServletRequestReader; +import com.amazonaws.serverless.proxy.internal.servlet.AwsProxyHttpServletResponseWriter; +import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; +import com.amazonaws.serverless.proxy.internal.testutils.MockLambdaContext; +import com.amazonaws.serverless.proxy.model.AwsProxyRequest; +import com.amazonaws.serverless.proxy.model.AwsProxyResponse; +import com.amazonaws.services.lambda.runtime.Context; +import org.apache.http.impl.execchain.RequestAbortedException; +import org.junit.Test; + +import javax.servlet.http.HttpServletRequest; +import java.util.concurrent.CountDownLatch; + +import static org.junit.Assert.*; + +public class LambdaContainerHandlerTest { + private boolean isRuntimeException = false; + private boolean throwException = false; + + ExceptionContainerHandlerTest handler = new ExceptionContainerHandlerTest( + AwsProxyRequest.class, AwsProxyResponse.class, + new AwsProxyHttpServletRequestReader(), new AwsProxyHttpServletResponseWriter(), + new AwsProxySecurityContextWriter(), new AwsProxyExceptionHandler(), new InitializationWrapper() + ); + + @Test + public void throwRuntime_returnsUnwrappedException() { + try { + isRuntimeException = true; + throwException = true; + LambdaContainerHandler.getContainerConfig().setDisableExceptionMapper(true); + handler.proxy(new AwsProxyRequestBuilder("/test", "GET").build(), new MockLambdaContext()); + } catch (Exception e) { + assertNotNull(e); + assertEquals(ExceptionContainerHandlerTest.RUNTIME_MESSAGE, e.getMessage()); + return; + } + fail("Did not throw runtime exception"); + } + + @Test + public void throwNonRuntime_returnsWrappedException() { + try { + isRuntimeException = false; + throwException = true; + LambdaContainerHandler.getContainerConfig().setDisableExceptionMapper(true); + handler.proxy(new AwsProxyRequestBuilder("/test", "GET").build(), new MockLambdaContext()); + } catch (Exception e) { + assertNotNull(e); + assertNotNull(e.getCause()); + assertTrue(e.getCause() instanceof RequestAbortedException); + assertEquals(ExceptionContainerHandlerTest.NON_RUNTIME_MESSAGE, e.getCause().getMessage()); + return; + } + fail("Did not throw exception"); + } + + @Test + public void noException_returnsResponse() { + throwException = false; + LambdaContainerHandler.getContainerConfig().setDisableExceptionMapper(false); + AwsProxyResponse resp = handler.proxy(new AwsProxyRequestBuilder("/test", "GET").build(), new MockLambdaContext()); + assertEquals(200, resp.getStatusCode()); + assertEquals("OK", resp.getBody()); + } + + public class ExceptionContainerHandlerTest extends LambdaContainerHandler { + + public static final String RUNTIME_MESSAGE = "test RuntimeException"; + public static final String NON_RUNTIME_MESSAGE = "test NonRuntimeException"; + + protected ExceptionContainerHandlerTest(Class requestClass, Class responseClass, RequestReader requestReader, ResponseWriter responseWriter, SecurityContextWriter securityContextWriter, ExceptionHandler exceptionHandler, InitializationWrapper init) { + super(requestClass, responseClass, requestReader, responseWriter, securityContextWriter, exceptionHandler, init); + } + + @Override + protected AwsHttpServletResponse getContainerResponse(HttpServletRequest request, CountDownLatch latch) { + return new AwsHttpServletResponse(request, latch); + } + + @Override + protected void handleRequest(HttpServletRequest containerRequest, AwsHttpServletResponse containerResponse, Context lambdaContext) throws Exception { + if (throwException) { + if (isRuntimeException) { + throw new RuntimeException(RUNTIME_MESSAGE); + } else { + throw new RequestAbortedException(NON_RUNTIME_MESSAGE); + } + } + containerResponse.setStatus(200); + containerResponse.getWriter().print("OK"); + containerResponse.flushBuffer(); + } + + @Override + public void initialize() throws ContainerInitializationException { + + } + } +} diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/jaxrs/HttpApiV2SecurityContextTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/jaxrs/HttpApiV2SecurityContextTest.java new file mode 100644 index 000000000..ae2dcdb53 --- /dev/null +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/jaxrs/HttpApiV2SecurityContextTest.java @@ -0,0 +1,49 @@ +package com.amazonaws.serverless.proxy.internal.jaxrs; + +import com.amazonaws.serverless.proxy.AwsHttpApiV2SecurityContextWriter; +import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; +import com.amazonaws.serverless.proxy.model.HttpApiV2ProxyRequest; +import org.junit.Test; + +import javax.ws.rs.core.HttpHeaders; +import javax.ws.rs.core.SecurityContext; + +import static org.junit.Assert.*; + +public class HttpApiV2SecurityContextTest { + private static final String JWT_SUB_VALUE = "1234567890"; + + HttpApiV2ProxyRequest EMPTY_AUTH = new AwsProxyRequestBuilder("/", "GET").toHttpApiV2Request(); + HttpApiV2ProxyRequest BASIC_AUTH = new AwsProxyRequestBuilder("/", "GET") + .authorizerPrincipal("test").toHttpApiV2Request(); + HttpApiV2ProxyRequest JWT_AUTH = new AwsProxyRequestBuilder("/", "GET") + .authorizerPrincipal("test") + .header(HttpHeaders.AUTHORIZATION, "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c") + .toHttpApiV2Request(); + + AwsHttpApiV2SecurityContextWriter contextWriter = new AwsHttpApiV2SecurityContextWriter(); + + @Test + public void getAuthenticationScheme_nullAuth_nullSchema() { + SecurityContext ctx = contextWriter.writeSecurityContext(EMPTY_AUTH, null); + assertNull(ctx.getAuthenticationScheme()); + assertNull(ctx.getUserPrincipal()); + assertFalse(ctx.isSecure()); + } + + @Test + public void getAuthenticationScheme_jwtAuth_correctSchema() { + SecurityContext ctx = contextWriter.writeSecurityContext(BASIC_AUTH, null); + assertEquals(AwsHttpApiV2SecurityContext.AUTH_SCHEME_JWT, ctx.getAuthenticationScheme()); + assertTrue(ctx.isSecure()); + assertNull(ctx.getUserPrincipal()); + } + + @Test + public void getPrincipal_parseJwt_returnsSub() { + SecurityContext ctx = contextWriter.writeSecurityContext(JWT_AUTH, null); + assertEquals(AwsHttpApiV2SecurityContext.AUTH_SCHEME_JWT, ctx.getAuthenticationScheme()); + assertTrue(ctx.isSecure()); + assertEquals(JWT_SUB_VALUE, ctx.getUserPrincipal().getName()); + } +} diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/ApacheCombinedServletLogFormatterTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/ApacheCombinedServletLogFormatterTest.java index 1c9527a32..0d12a5116 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/ApacheCombinedServletLogFormatterTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/ApacheCombinedServletLogFormatterTest.java @@ -14,6 +14,7 @@ import java.time.Instant; import java.time.ZoneId; +import static com.amazonaws.serverless.proxy.RequestReader.API_GATEWAY_CONTEXT_PROPERTY; import static com.amazonaws.serverless.proxy.RequestReader.API_GATEWAY_EVENT_PROPERTY; import static org.hamcrest.CoreMatchers.containsString; import static org.junit.Assert.assertThat; @@ -35,13 +36,13 @@ public void setup() { proxyRequest = new AwsProxyRequest(); Clock fixedClock = Clock.fixed(Instant.ofEpochSecond(665888523L), ZoneId.of("UTC")); mockServletRequest = mock(HttpServletRequest.class); - when(mockServletRequest.getAttribute(eq(API_GATEWAY_EVENT_PROPERTY))) - .thenReturn(proxyRequest); + context = new AwsProxyRequestContext(); + context.setIdentity(new ApiGatewayRequestIdentity()); + when(mockServletRequest.getAttribute(eq(API_GATEWAY_CONTEXT_PROPERTY))) + .thenReturn(context); when(mockServletRequest.getMethod()) .thenReturn("GET"); mockServletResponse = mock(HttpServletResponse.class); - context = new AwsProxyRequestContext(); - context.setIdentity(new ApiGatewayRequestIdentity()); proxyRequest.setRequestContext(context); sut = new ApacheCombinedServletLogFormatter(fixedClock); diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContextTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContextTest.java index 349a95497..f379ff32a 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContextTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContextTest.java @@ -1,8 +1,10 @@ package com.amazonaws.serverless.proxy.internal.servlet; import com.amazonaws.serverless.exceptions.ContainerInitializationException; +import com.amazonaws.serverless.exceptions.InvalidRequestEventException; import com.amazonaws.serverless.proxy.AwsProxyExceptionHandler; import com.amazonaws.serverless.proxy.AwsProxySecurityContextWriter; +import com.amazonaws.serverless.proxy.internal.LambdaContainerHandler; import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; import com.amazonaws.serverless.proxy.internal.testutils.MockLambdaContext; import com.amazonaws.serverless.proxy.model.AwsProxyRequest; @@ -25,6 +27,7 @@ public class AwsAsyncContextTest { private MockLambdaContext lambdaCtx = new MockLambdaContext(); private MockContainerHandler handler = new MockContainerHandler(); + private AwsProxyHttpServletRequestReader reader = new AwsProxyHttpServletRequestReader(); private AwsServletContextTest.TestServlet srv1 = new AwsServletContextTest.TestServlet("srv1"); private AwsServletContextTest.TestServlet srv2 = new AwsServletContextTest.TestServlet("srv2"); private AwsServletContext ctx = getCtx(); @@ -56,8 +59,8 @@ public void dispatch_sendsToCorrectServlet() { } @Test - public void dispatchNewPath_sendsToCorrectServlet() { - AwsProxyHttpServletRequest req = new AwsProxyHttpServletRequest(new AwsProxyRequestBuilder("/srv1/hello", "GET").build(), lambdaCtx, null); + public void dispatchNewPath_sendsToCorrectServlet() throws InvalidRequestEventException { + AwsProxyHttpServletRequest req = (AwsProxyHttpServletRequest) reader.readRequest(new AwsProxyRequestBuilder("/srv1/hello", "GET").build(), null, lambdaCtx, LambdaContainerHandler.getContainerConfig()); req.setResponse(handler.getContainerResponse(req, new CountDownLatch(1))); req.setServletContext(ctx); req.setContainerHandler(handler); @@ -83,7 +86,7 @@ private AwsServletContext getCtx() { return ctx; } - public static class MockContainerHandler extends AwsLambdaServletContainerHandler { + public static class MockContainerHandler extends AwsLambdaServletContainerHandler { private int desiredStatus; private HttpServletResponse response; private Servlet selectedServlet; @@ -94,7 +97,7 @@ public MockContainerHandler() { } @Override - protected AwsHttpServletResponse getContainerResponse(AwsProxyHttpServletRequest request, CountDownLatch latch) { + protected AwsHttpServletResponse getContainerResponse(HttpServletRequest request, CountDownLatch latch) { return new AwsHttpServletResponse(request, latch); } @@ -115,7 +118,7 @@ protected void doFilter(HttpServletRequest request, HttpServletResponse response } @Override - protected void handleRequest(AwsProxyHttpServletRequest containerRequest, AwsHttpServletResponse containerResponse, Context lambdaContext) throws Exception { + protected void handleRequest(HttpServletRequest containerRequest, AwsHttpServletResponse containerResponse, Context lambdaContext) throws Exception { } diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2HttpServletRequestReaderTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2HttpServletRequestReaderTest.java new file mode 100644 index 000000000..004d4d489 --- /dev/null +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2HttpServletRequestReaderTest.java @@ -0,0 +1,44 @@ +package com.amazonaws.serverless.proxy.internal.servlet; + +import com.amazonaws.serverless.exceptions.InvalidRequestEventException; +import com.amazonaws.serverless.proxy.internal.LambdaContainerHandler; +import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; +import com.amazonaws.serverless.proxy.model.HttpApiV2ProxyRequest; +import com.amazonaws.serverless.proxy.model.HttpApiV2ProxyRequestContext; +import org.junit.Test; + +import javax.servlet.http.HttpServletRequest; + +import static org.junit.Assert.*; + +public class AwsHttpApiV2HttpServletRequestReaderTest { + private AwsHttpApiV2HttpServletRequestReader reader = new AwsHttpApiV2HttpServletRequestReader(); + + @Test + public void reflection_getRequestClass_returnsCorrectType() { + assertSame(HttpApiV2ProxyRequest.class, reader.getRequestClass()); + } + + @Test + public void baseRequest_read_populatesSuccessfully() { + HttpApiV2ProxyRequest req = new AwsProxyRequestBuilder("/hello", "GET") + .referer("localhost") + .queryString("param1", "value1") + .header("custom", "value") + .apiId("test").toHttpApiV2Request(); + AwsHttpApiV2HttpServletRequestReader reader = new AwsHttpApiV2HttpServletRequestReader(); + try { + HttpServletRequest servletRequest = reader.readRequest(req, null, null, LambdaContainerHandler.getContainerConfig()); + assertEquals("/hello", servletRequest.getPathInfo()); + assertEquals("value1", servletRequest.getParameter("param1")); + assertEquals("value", servletRequest.getHeader("CUSTOM")); + + assertNotNull(servletRequest.getAttribute(AwsHttpApiV2HttpServletRequestReader.HTTP_API_CONTEXT_PROPERTY)); + assertEquals("test", + ((HttpApiV2ProxyRequestContext)servletRequest.getAttribute(AwsHttpApiV2HttpServletRequestReader.HTTP_API_CONTEXT_PROPERTY)).getApiId()); + } catch (InvalidRequestEventException e) { + e.printStackTrace(); + fail("Could not read request"); + } + } +} diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestReaderTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestReaderTest.java index de246bc04..166bfb472 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestReaderTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestReaderTest.java @@ -25,13 +25,6 @@ public class AwsProxyHttpServletRequestReaderTest { private static final String ENCODED_REQUEST_PATH = "/foo/bar/Some%20Thing"; private static final String DECODED_REQUEST_PATH = "/foo/bar/Some Thing"; - @Test - public void readRequest_reflection_returnType() throws NoSuchMethodException { - Method readRequestMethod = AwsProxyHttpServletRequestReader.class.getMethod("readRequest", AwsProxyRequest.class, SecurityContext.class, Context.class, ContainerConfig.class); - - assertTrue(readRequestMethod.getReturnType() == AwsProxyHttpServletRequest.class); - } - @Test public void readRequest_validAwsProxy_populatedRequest() { AwsProxyRequest request = new AwsProxyRequestBuilder("/path", "GET").header(TEST_HEADER_KEY, TEST_HEADER_VALUE).build(); @@ -114,7 +107,7 @@ public void readRequest_contentCharset_appendsCharsetToComplextContentType() { public void readRequest_validEventEmptyPath_expectException() { try { AwsProxyRequest req = new AwsProxyRequestBuilder(null, "GET").build(); - AwsProxyHttpServletRequest servletReq = reader.readRequest(req, null, null, ContainerConfig.defaultConfig()); + HttpServletRequest servletReq = reader.readRequest(req, null, null, ContainerConfig.defaultConfig()); assertNotNull(servletReq); } catch (InvalidRequestEventException e) { e.printStackTrace(); @@ -150,7 +143,7 @@ public void readRequest_nullHeaders_expectSuccess() { AwsProxyRequest req = new AwsProxyRequestBuilder("/path", "GET").build(); req.setMultiValueHeaders(null); try { - AwsProxyHttpServletRequest servletReq = reader.readRequest(req, null, null, ContainerConfig.defaultConfig()); + HttpServletRequest servletReq = reader.readRequest(req, null, null, ContainerConfig.defaultConfig()); String headerValue = servletReq.getHeader(HttpHeaders.CONTENT_TYPE); assertNull(headerValue); } catch (InvalidRequestEventException e) { @@ -163,7 +156,7 @@ public void readRequest_nullHeaders_expectSuccess() { public void readRequest_emptyHeaders_expectSuccess() { AwsProxyRequest req = new AwsProxyRequestBuilder("/path", "GET").build(); try { - AwsProxyHttpServletRequest servletReq = reader.readRequest(req, null, null, ContainerConfig.defaultConfig()); + HttpServletRequest servletReq = reader.readRequest(req, null, null, ContainerConfig.defaultConfig()); String headerValue = servletReq.getHeader(HttpHeaders.CONTENT_TYPE); assertNull(headerValue); } catch (InvalidRequestEventException e) { diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestTest.java index c73e64ab9..732c3f69b 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestTest.java @@ -23,10 +23,11 @@ import java.util.*; import static org.junit.Assert.*; +import static org.junit.Assume.assumeFalse; @RunWith(Parameterized.class) public class AwsProxyHttpServletRequestTest { - private boolean isWrapped; + private String requestType; private static final String CUSTOM_HEADER_KEY = "X-Custom-Header"; private static final String CUSTOM_HEADER_VALUE = "Custom-Header-Value"; @@ -39,58 +40,65 @@ public class AwsProxyHttpServletRequestTest { private static final String REFERER = "https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent/Firefox"; private static ZonedDateTime REQUEST_DATE = ZonedDateTime.now(); - private static final AwsProxyRequest REQUEST_FORM_URLENCODED = new AwsProxyRequestBuilder("/hello", "POST") - .form(FORM_PARAM_NAME, FORM_PARAM_NAME_VALUE).build(); - private static final AwsProxyRequest REQUEST_INVALID_FORM_URLENCODED = new AwsProxyRequestBuilder("/hello", "GET") - .form(FORM_PARAM_NAME, FORM_PARAM_NAME_VALUE).build(); - private static final AwsProxyRequest REQUEST_FORM_URLENCODED_AND_QUERY = new AwsProxyRequestBuilder("/hello", "POST") + private static final AwsProxyRequestBuilder REQUEST_FORM_URLENCODED = new AwsProxyRequestBuilder("/hello", "POST") + .form(FORM_PARAM_NAME, FORM_PARAM_NAME_VALUE); + private static final AwsProxyRequestBuilder REQUEST_INVALID_FORM_URLENCODED = new AwsProxyRequestBuilder("/hello", "GET") + .form(FORM_PARAM_NAME, FORM_PARAM_NAME_VALUE); + private static final AwsProxyRequestBuilder REQUEST_FORM_URLENCODED_AND_QUERY = new AwsProxyRequestBuilder("/hello", "POST") .form(FORM_PARAM_NAME, FORM_PARAM_NAME_VALUE) - .queryString(FORM_PARAM_NAME, QUERY_STRING_NAME_VALUE).build(); - private static final AwsProxyRequest REQUEST_SINGLE_COOKIE = new AwsProxyRequestBuilder("/hello", "GET") - .cookie(FORM_PARAM_NAME, FORM_PARAM_NAME_VALUE).build(); - private static final AwsProxyRequest REQUEST_MULTIPLE_COOKIES = new AwsProxyRequestBuilder("/hello", "GET") + .queryString(FORM_PARAM_NAME, QUERY_STRING_NAME_VALUE); + private static final AwsProxyRequestBuilder REQUEST_SINGLE_COOKIE = new AwsProxyRequestBuilder("/hello", "GET") + .cookie(FORM_PARAM_NAME, FORM_PARAM_NAME_VALUE); + private static final AwsProxyRequestBuilder REQUEST_MULTIPLE_COOKIES = new AwsProxyRequestBuilder("/hello", "GET") .cookie(FORM_PARAM_NAME, FORM_PARAM_NAME_VALUE) - .cookie(FORM_PARAM_TEST, FORM_PARAM_NAME_VALUE).build(); - private static final AwsProxyRequest REQUEST_MALFORMED_COOKIE = new AwsProxyRequestBuilder("/hello", "GET") - .header(HttpHeaders.COOKIE, QUERY_STRING_NAME_VALUE).build(); - private static final AwsProxyRequest REQUEST_MULTIPLE_FORM_AND_QUERY = new AwsProxyRequestBuilder("/hello", "POST") + .cookie(FORM_PARAM_TEST, FORM_PARAM_NAME_VALUE); + private static final AwsProxyRequestBuilder REQUEST_MALFORMED_COOKIE = new AwsProxyRequestBuilder("/hello", "GET") + .header(HttpHeaders.COOKIE, QUERY_STRING_NAME_VALUE); + private static final AwsProxyRequestBuilder REQUEST_MULTIPLE_FORM_AND_QUERY = new AwsProxyRequestBuilder("/hello", "POST") .form(FORM_PARAM_NAME, FORM_PARAM_NAME_VALUE) - .queryString(FORM_PARAM_TEST, QUERY_STRING_NAME_VALUE).build(); - private static final AwsProxyRequest REQUEST_USER_AGENT_REFERER = new AwsProxyRequestBuilder("/hello", "POST") + .queryString(FORM_PARAM_TEST, QUERY_STRING_NAME_VALUE); + private static final AwsProxyRequestBuilder REQUEST_USER_AGENT_REFERER = new AwsProxyRequestBuilder("/hello", "POST") .userAgent(USER_AGENT) - .referer(REFERER).build(); - private static final AwsProxyRequest REQUEST_WITH_DATE = new AwsProxyRequestBuilder("/hello", "GET") - .header(HttpHeaders.DATE, AwsHttpServletRequest.dateFormatter.format(REQUEST_DATE)) - .build(); - private static final AwsProxyRequest REQUEST_WITH_LOWERCASE_HEADER = new AwsProxyRequestBuilder("/hello", "POST") - .header(HttpHeaders.CONTENT_TYPE.toLowerCase(Locale.getDefault()), MediaType.APPLICATION_JSON).build(); - - private static final AwsProxyRequest REQUEST_NULL_QUERY_STRING; + .referer(REFERER); + private static final AwsProxyRequestBuilder REQUEST_WITH_DATE = new AwsProxyRequestBuilder("/hello", "GET") + .header(HttpHeaders.DATE, AwsHttpServletRequest.dateFormatter.format(REQUEST_DATE)); + private static final AwsProxyRequestBuilder REQUEST_WITH_LOWERCASE_HEADER = new AwsProxyRequestBuilder("/hello", "POST") + .header(HttpHeaders.CONTENT_TYPE.toLowerCase(Locale.getDefault()), MediaType.APPLICATION_JSON); + + private static final AwsProxyRequestBuilder REQUEST_NULL_QUERY_STRING; static { AwsProxyRequest awsProxyRequest = new AwsProxyRequestBuilder("/hello", "GET").build(); awsProxyRequest.setMultiValueQueryStringParameters(null); - REQUEST_NULL_QUERY_STRING = awsProxyRequest; + REQUEST_NULL_QUERY_STRING = new AwsProxyRequestBuilder(awsProxyRequest); } - private static final AwsProxyRequest REQUEST_QUERY = new AwsProxyRequestBuilder("/hello", "POST") - .queryString(FORM_PARAM_NAME, QUERY_STRING_NAME_VALUE).build(); + private static final AwsProxyRequestBuilder REQUEST_QUERY = new AwsProxyRequestBuilder("/hello", "POST") + .queryString(FORM_PARAM_NAME, QUERY_STRING_NAME_VALUE); - public AwsProxyHttpServletRequestTest(boolean wrap) { - isWrapped = wrap; + public AwsProxyHttpServletRequestTest(String type) { + requestType = type; } @Parameterized.Parameters public static Collection data() { - return Arrays.asList(new Object[] { false, true }); - } - - private HttpServletRequest getRequest(AwsProxyRequest req, Context lambdaCtx, SecurityContext securityCtx) { - HttpServletRequest servletRequest = new AwsProxyHttpServletRequest(req, lambdaCtx, securityCtx); - if (isWrapped) { - servletRequest = new AwsHttpServletRequestWrapper(servletRequest, req.getPath()); + return Arrays.asList(new Object[] { "API_GW", "ALB", "HTTP_API", "WRAP" }); + } + + private HttpServletRequest getRequest(AwsProxyRequestBuilder req, Context lambdaCtx, SecurityContext securityCtx) { + switch (requestType) { + case "API_GW": + return new AwsProxyHttpServletRequest(req.build(), lambdaCtx, securityCtx); + case "ALB": + return new AwsProxyHttpServletRequest(req.alb().build(), lambdaCtx, securityCtx); + case "HTTP_API": + return new AwsHttpApiV2ProxyHttpServletRequest(req.toHttpApiV2Request(), lambdaCtx, securityCtx, LambdaContainerHandler.getContainerConfig()); + case "WRAP": + HttpServletRequest servletRequest = new AwsProxyHttpServletRequest(req.build(), lambdaCtx, securityCtx); + return new AwsHttpServletRequestWrapper(servletRequest, req.build().getPath()); + default: + throw new RuntimeException("Unknown test variant: " + requestType); } - return servletRequest; } @@ -104,6 +112,7 @@ public void headers_getHeader_validRequest() { @Test public void headers_getRefererAndUserAgent_returnsContextValues() { + assumeFalse("ALB".equals(requestType)); HttpServletRequest request = getRequest(REQUEST_USER_AGENT_REFERER, null, null); assertNotNull(request.getHeader("Referer")); assertEquals(REFERER, request.getHeader("Referer")); @@ -344,7 +353,7 @@ public void contentType_lowerCaseHeaderKey_expectUpdatedMediaType() { @Test public void contentType_duplicateCase_expectSingleContentTypeHeader() { - AwsProxyRequest proxyRequest = getRequestWithHeaders(); + AwsProxyRequestBuilder proxyRequest = getRequestWithHeaders(); HttpServletRequest request = getRequest(proxyRequest, null, null); try { @@ -359,8 +368,9 @@ public void contentType_duplicateCase_expectSingleContentTypeHeader() { @Test public void requestURL_getUrl_expectHttpSchemaAndLocalhostForLocalTesting() { - AwsProxyRequest req = getRequestWithHeaders(); - req.getRequestContext().setApiId("test-id"); + assumeFalse("ALB".equals(requestType)); + AwsProxyRequestBuilder req = getRequestWithHeaders(); + req.apiId("test-id"); LambdaContainerHandler.getContainerConfig().enableLocalhost(); HttpServletRequest servletRequest = getRequest(req, null, null); String requestUrl = servletRequest.getRequestURL().toString(); @@ -369,7 +379,7 @@ public void requestURL_getUrl_expectHttpSchemaAndLocalhostForLocalTesting() { assertTrue(requestUrl.endsWith(".com/hello")); // set localhost - req.getMultiValueHeaders().putSingle("Host", "localhost"); + req.header("Host", "localhost"); servletRequest = getRequest(req, null, null); requestUrl = servletRequest.getRequestURL().toString(); assertTrue(requestUrl.contains("http://localhost")); @@ -379,7 +389,7 @@ public void requestURL_getUrl_expectHttpSchemaAndLocalhostForLocalTesting() { @Test public void requestURL_getUrlWithCustomBasePath_expectCustomBasePath() { - AwsProxyRequest req = getRequestWithHeaders(); + AwsProxyRequestBuilder req = getRequestWithHeaders(); LambdaContainerHandler.getContainerConfig().setServiceBasePath("test"); HttpServletRequest servletRequest = getRequest(req, null, null); String requestUrl = servletRequest.getRequestURL().toString(); @@ -389,18 +399,20 @@ public void requestURL_getUrlWithCustomBasePath_expectCustomBasePath() { @Test public void requestURL_getUrlWithContextPath_expectStageAsContextPath() { - AwsProxyRequest req = getRequestWithHeaders(); - req.getRequestContext().setStage("test-stage"); + assumeFalse("ALB".equals(requestType)); + AwsProxyRequestBuilder req = getRequestWithHeaders(); + req.stage("test-stage"); LambdaContainerHandler.getContainerConfig().setUseStageAsServletContext(true); HttpServletRequest servletRequest = getRequest(req, null, null); String requestUrl = servletRequest.getRequestURL().toString(); + System.out.println(requestUrl); assertTrue(requestUrl.contains("/test-stage/")); LambdaContainerHandler.getContainerConfig().setUseStageAsServletContext(false); } @Test public void getLocales_emptyAcceptHeader_expectDefaultLocale() { - AwsProxyRequest req = getRequestWithHeaders(); + AwsProxyRequestBuilder req = getRequestWithHeaders(); HttpServletRequest servletRequest = getRequest(req, null, null); Enumeration locales = servletRequest.getLocales(); int localesNo = 0; @@ -414,8 +426,8 @@ public void getLocales_emptyAcceptHeader_expectDefaultLocale() { @Test public void getLocales_validAcceptHeader_expectSingleLocale() { - AwsProxyRequest req = getRequestWithHeaders(); - req.getMultiValueHeaders().putSingle(HttpHeaders.ACCEPT_LANGUAGE, "fr-CH"); + AwsProxyRequestBuilder req = getRequestWithHeaders(); + req.header(HttpHeaders.ACCEPT_LANGUAGE, "fr-CH"); HttpServletRequest servletRequest = getRequest(req, null, null); Enumeration locales = servletRequest.getLocales(); int localesNo = 0; @@ -429,8 +441,8 @@ public void getLocales_validAcceptHeader_expectSingleLocale() { @Test public void getLocales_validAcceptHeaderMultipleLocales_expectFullLocaleList() { - AwsProxyRequest req = getRequestWithHeaders(); - req.getMultiValueHeaders().putSingle(HttpHeaders.ACCEPT_LANGUAGE, "fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5"); + AwsProxyRequestBuilder req = getRequestWithHeaders(); + req.header(HttpHeaders.ACCEPT_LANGUAGE, "fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5"); HttpServletRequest servletRequest = getRequest(req, null, null); Enumeration locales = servletRequest.getLocales(); List localesList = new ArrayList<>(); @@ -450,8 +462,8 @@ public void getLocales_validAcceptHeaderMultipleLocales_expectFullLocaleList() { @Test public void getLocales_validAcceptHeaderMultipleLocales_expectFullLocaleListOrdered() { - AwsProxyRequest req = getRequestWithHeaders(); - req.getMultiValueHeaders().putSingle(HttpHeaders.ACCEPT_LANGUAGE, "fr-CH, en;q=0.8, de;q=0.7, *;q=0.5, fr;q=0.9"); + AwsProxyRequestBuilder req = getRequestWithHeaders(); + req.header(HttpHeaders.ACCEPT_LANGUAGE, "fr-CH, en;q=0.8, de;q=0.7, *;q=0.5, fr;q=0.9"); HttpServletRequest servletRequest = getRequest(req, null, null); Enumeration locales = servletRequest.getLocales(); List localesList = new ArrayList<>(); @@ -468,7 +480,7 @@ public void getLocales_validAcceptHeaderMultipleLocales_expectFullLocaleListOrde @Test public void nullQueryString_expectNoExceptions() { - AwsProxyRequest req = new AwsProxyRequestBuilder("/hello", "GET").build(); + AwsProxyRequestBuilder req = new AwsProxyRequestBuilder("/hello", "GET"); HttpServletRequest servletReq = getRequest(req, null, null); assertNull(servletReq.getQueryString()); assertEquals(0, servletReq.getParameterMap().size()); @@ -479,13 +491,13 @@ public void nullQueryString_expectNoExceptions() { @Test public void inputStream_emptyBody_expectNullInputStream() { - AwsProxyRequest proxyReq = getRequestWithHeaders(); - assertNull(proxyReq.getBody()); + AwsProxyRequestBuilder proxyReq = getRequestWithHeaders(); + assertNull(proxyReq.build().getBody()); HttpServletRequest req = getRequest(proxyReq, null, null); try { InputStream is = req.getInputStream(); - assertTrue(is.getClass() == AwsProxyHttpServletRequest.AwsServletInputStream.class); + assertTrue(is.getClass() == AwsServletInputStream.class); assertEquals(0, is.available()); } catch (IOException e) { fail("Could not get input stream"); @@ -494,7 +506,7 @@ public void inputStream_emptyBody_expectNullInputStream() { @Test public void getHeaders_emptyHeaders_expectEmptyEnumeration() { - AwsProxyRequest proxyReq = new AwsProxyRequestBuilder("/hello", "GET").build(); + AwsProxyRequestBuilder proxyReq = new AwsProxyRequestBuilder("/hello", "GET"); HttpServletRequest req = getRequest(proxyReq, null, null); assertFalse(req.getHeaders("param").hasMoreElements()); } @@ -507,26 +519,43 @@ public void getServerPort_defaultPort_expect443() { @Test public void getServerPort_customPortFromHeader_expectCustomPort() { - AwsProxyRequest proxyReq = getRequestWithHeaders(); - proxyReq.getMultiValueHeaders().putSingle(AwsProxyHttpServletRequest.PORT_HEADER_NAME, "80"); + AwsProxyRequestBuilder proxyReq = getRequestWithHeaders(); + proxyReq.header(AwsProxyHttpServletRequest.PORT_HEADER_NAME, "80"); HttpServletRequest req = getRequest(proxyReq, null, null); assertEquals(80, req.getServerPort()); } @Test public void getServerPort_invalidCustomPortFromHeader_expectDefaultPort() { - AwsProxyRequest proxyReq = getRequestWithHeaders(); - proxyReq.getMultiValueHeaders().putSingle(AwsProxyHttpServletRequest.PORT_HEADER_NAME, "7200"); + AwsProxyRequestBuilder proxyReq = getRequestWithHeaders(); + proxyReq.header(AwsProxyHttpServletRequest.PORT_HEADER_NAME, "7200"); HttpServletRequest req = getRequest(proxyReq, null, null); assertEquals(443, req.getServerPort()); } + @Test + public void serverName_emptyHeaders_doesNotThrowNullPointer() { + AwsProxyRequestBuilder proxyReq = new AwsProxyRequestBuilder("/test", "GET"); + proxyReq.multiValueHeaders(null); + HttpServletRequest servletReq = getRequest(proxyReq, null, null); + String serverName = servletReq.getServerName(); + assertTrue(serverName.startsWith("null.execute-api")); + } + + @Test + public void serverName_hostHeader_returnsHostHeaderOnly() { + AwsProxyRequestBuilder proxyReq = new AwsProxyRequestBuilder("/test", "GET") + .header(HttpHeaders.HOST, "testapi.com"); + LambdaContainerHandler.getContainerConfig().addCustomDomain("testapi.com"); + HttpServletRequest servletReq = getRequest(proxyReq, null, null); + String serverName = servletReq.getServerName(); + assertEquals("testapi.com", serverName); + } - private AwsProxyRequest getRequestWithHeaders() { + private AwsProxyRequestBuilder getRequestWithHeaders() { return new AwsProxyRequestBuilder("/hello", "GET") .header(CUSTOM_HEADER_KEY, CUSTOM_HEADER_VALUE) .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON) - .header(AwsProxyHttpServletRequest.CF_PROTOCOL_HEADER_NAME, REQUEST_SCHEME_HTTP) - .build(); + .header(AwsProxyHttpServletRequest.CF_PROTOCOL_HEADER_NAME, REQUEST_SCHEME_HTTP); } } diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyRequestDispatcherTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyRequestDispatcherTest.java index 898f251bf..d061a1115 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyRequestDispatcherTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyRequestDispatcherTest.java @@ -33,7 +33,7 @@ public class AwsProxyRequestDispatcherTest { @Test public void setPath_forwardByPath_proxyRequestObjectInPropertyReferencesSameProxyRequest() throws InvalidRequestEventException { AwsProxyRequest proxyRequest = new AwsProxyRequestBuilder("/hello", "GET").build(); - AwsProxyHttpServletRequest servletRequest = requestReader.readRequest(proxyRequest,null, new MockLambdaContext(), ContainerConfig.defaultConfig()); + HttpServletRequest servletRequest = requestReader.readRequest(proxyRequest,null, new MockLambdaContext(), ContainerConfig.defaultConfig()); AwsProxyRequestDispatcher dispatcher = new AwsProxyRequestDispatcher(FORWARD_PATH, false, null); dispatcher.setRequestPath(servletRequest, FORWARD_PATH); @@ -43,7 +43,7 @@ public void setPath_forwardByPath_proxyRequestObjectInPropertyReferencesSameProx @Test public void setPathForWrappedRequest_forwardByPath_proxyRequestObjectInPropertyReferencesSameProxyRequest() throws InvalidRequestEventException { AwsProxyRequest proxyRequest = new AwsProxyRequestBuilder("/hello", "GET").build(); - AwsProxyHttpServletRequest servletRequest = requestReader.readRequest(proxyRequest,null, new MockLambdaContext(), ContainerConfig.defaultConfig()); + HttpServletRequest servletRequest = requestReader.readRequest(proxyRequest,null, new MockLambdaContext(), ContainerConfig.defaultConfig()); SecurityContextHolderAwareRequestWrapper springSecurityRequest = new SecurityContextHolderAwareRequestWrapper(servletRequest, "ADMIN"); AwsProxyRequestDispatcher dispatcher = new AwsProxyRequestDispatcher(FORWARD_PATH, false, null); @@ -70,7 +70,7 @@ public void setPathForWrappedRequestWithoutGatewayEvent_forwardByPath_throwsExce @Test public void forwardRequest_nullHandler_throwsIllegalStateException() throws InvalidRequestEventException { AwsProxyRequest proxyRequest = new AwsProxyRequestBuilder("/hello", "GET").build(); - AwsProxyHttpServletRequest servletRequest = requestReader.readRequest(proxyRequest,null, new MockLambdaContext(), ContainerConfig.defaultConfig()); + HttpServletRequest servletRequest = requestReader.readRequest(proxyRequest,null, new MockLambdaContext(), ContainerConfig.defaultConfig()); AwsProxyRequestDispatcher dispatcher = new AwsProxyRequestDispatcher(FORWARD_PATH, false, null); try { dispatcher.forward(servletRequest, new AwsHttpServletResponse(servletRequest, new CountDownLatch(1))); @@ -88,7 +88,7 @@ public void forwardRequest_nullHandler_throwsIllegalStateException() throws Inva @Test public void forwardRequest_committedResponse_throwsIllegalStateException() throws InvalidRequestEventException { AwsProxyRequest proxyRequest = new AwsProxyRequestBuilder("/hello", "GET").build(); - AwsProxyHttpServletRequest servletRequest = requestReader.readRequest(proxyRequest,null, new MockLambdaContext(), ContainerConfig.defaultConfig()); + HttpServletRequest servletRequest = requestReader.readRequest(proxyRequest,null, new MockLambdaContext(), ContainerConfig.defaultConfig()); AwsProxyRequestDispatcher dispatcher = new AwsProxyRequestDispatcher(FORWARD_PATH, false, mockLambdaHandler(null)); AwsHttpServletResponse resp = new AwsHttpServletResponse(servletRequest, new CountDownLatch(1)); @@ -109,7 +109,7 @@ public void forwardRequest_committedResponse_throwsIllegalStateException() throw @Test public void forwardRequest_partiallyWrittenResponse_resetsBuffer() throws InvalidRequestEventException { AwsProxyRequest proxyRequest = new AwsProxyRequestBuilder("/hello", "GET").build(); - AwsProxyHttpServletRequest servletRequest = requestReader.readRequest(proxyRequest,null, new MockLambdaContext(), ContainerConfig.defaultConfig()); + HttpServletRequest servletRequest = requestReader.readRequest(proxyRequest,null, new MockLambdaContext(), ContainerConfig.defaultConfig()); AwsProxyRequestDispatcher dispatcher = new AwsProxyRequestDispatcher(FORWARD_PATH, false, mockLambdaHandler(null)); AwsHttpServletResponse resp = new AwsHttpServletResponse(servletRequest, new CountDownLatch(1)); @@ -174,8 +174,8 @@ private interface RequestHandler { } - private AwsLambdaServletContainerHandler mockLambdaHandler(RequestHandler h) { - return new AwsLambdaServletContainerHandler( + private AwsLambdaServletContainerHandler mockLambdaHandler(RequestHandler h) { + return new AwsLambdaServletContainerHandler( AwsProxyRequest.class, AwsProxyResponse.class, new AwsProxyHttpServletRequestReader(), @@ -192,18 +192,18 @@ protected void doFilter(HttpServletRequest request, HttpServletResponse response } @Override - protected AwsHttpServletResponse getContainerResponse(AwsProxyHttpServletRequest request, CountDownLatch latch) { + protected AwsHttpServletResponse getContainerResponse(HttpServletRequest request, CountDownLatch latch) { return new AwsHttpServletResponse(request, latch); } @Override - protected void handleRequest(AwsProxyHttpServletRequest containerRequest, AwsHttpServletResponse containerResponse, Context lambdaContext) throws Exception { + protected void handleRequest(HttpServletRequest containerRequest, AwsHttpServletResponse containerResponse, Context lambdaContext) throws Exception { if (h != null) { setServletContext(new AwsServletContext(this)); - containerRequest.setServletContext(getServletContext()); + ((AwsHttpServletRequest)containerRequest).setServletContext(getServletContext()); - h.handleRequest(containerRequest, containerResponse); + h.handleRequest((AwsProxyHttpServletRequest)containerRequest, containerResponse); } containerResponse.flushBuffer(); } diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/ServletLambdaContainerHandlerBuilderTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/ServletLambdaContainerHandlerBuilderTest.java index a9fef9b19..1481afc7e 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/ServletLambdaContainerHandlerBuilderTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/ServletLambdaContainerHandlerBuilderTest.java @@ -8,6 +8,7 @@ import com.amazonaws.services.lambda.runtime.Context; import org.junit.Test; +import javax.servlet.http.HttpServletRequest; import java.util.concurrent.CountDownLatch; import static org.junit.Assert.*; @@ -44,18 +45,18 @@ public void defaultProxy_setsValuesCorrectly() { assertEquals("test", test.name); } - public static final class TestHandler extends AwsLambdaServletContainerHandler { + public static final class TestHandler extends AwsLambdaServletContainerHandler { public TestHandler() { super(AwsProxyRequest.class, AwsProxyResponse.class, new AwsProxyHttpServletRequestReader(), new AwsProxyHttpServletResponseWriter(), new AwsProxySecurityContextWriter(), new AwsProxyExceptionHandler()); } @Override - protected AwsHttpServletResponse getContainerResponse(AwsProxyHttpServletRequest request, CountDownLatch latch) { + protected AwsHttpServletResponse getContainerResponse(HttpServletRequest request, CountDownLatch latch) { return null; } @Override - protected void handleRequest(AwsProxyHttpServletRequest containerRequest, AwsHttpServletResponse containerResponse, Context lambdaContext) throws Exception { + protected void handleRequest(HttpServletRequest containerRequest, AwsHttpServletResponse containerResponse, Context lambdaContext) throws Exception { } @@ -69,7 +70,7 @@ public static final class TestBuilder extends ServletLambdaContainerHandlerBuilder< AwsProxyRequest, AwsProxyResponse, - AwsProxyHttpServletRequest, + HttpServletRequest, TestHandler, TestBuilder> { diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/model/HttpApiV2ProxyRequestTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/model/HttpApiV2ProxyRequestTest.java new file mode 100644 index 000000000..420843300 --- /dev/null +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/model/HttpApiV2ProxyRequestTest.java @@ -0,0 +1,146 @@ +package com.amazonaws.serverless.proxy.model; + +import com.amazonaws.serverless.proxy.internal.LambdaContainerHandler; +import com.fasterxml.jackson.core.JsonProcessingException; +import org.junit.Test; + +import java.util.ArrayList; + +import static org.junit.Assert.*; + +public class HttpApiV2ProxyRequestTest { + + private static final String BASE_PROXY_REQUEST = "{\n" + + " \"version\": \"2.0\",\n" + + " \"routeKey\": \"$default\",\n" + + " \"rawPath\": \"/my/path\",\n" + + " \"rawQueryString\": \"parameter1=value1¶meter1=value2¶meter2=value\",\n" + + " \"cookies\": [ \"cookie1\", \"cookie2\" ],\n" + + " \"headers\": {\n" + + " \"Header1\": \"value1\",\n" + + " \"Header2\": \"value2\"\n" + + " },\n" + + " \"queryStringParameters\": { \"parameter1\": \"value1,value2\", \"parameter2\": \"value\" },\n" + + " \"requestContext\": {\n" + + " \"accountId\": \"123456789012\",\n" + + " \"apiId\": \"api-id\",\n" + + " \"authorizer\": { \"jwt\": {\n" + + " \"claims\": {\"claim1\": \"value1\", \"claim2\": \"value2\"},\n" + + " \"scopes\": [\"scope1\", \"scope2\"]\n" + + " }\n" + + " },\n" + + " \"domainName\": \"id.execute-api.us-east-1.amazonaws.com\",\n" + + " \"domainPrefix\": \"id\",\n" + + " \"http\": {\n" + + " \"method\": \"POST\",\n" + + " \"path\": \"/my/path\",\n" + + " \"protocol\": \"HTTP/1.1\",\n" + + " \"sourceIp\": \"IP\",\n" + + " \"userAgent\": \"agent\"\n" + + " },\n" + + " \"requestId\": \"id\",\n" + + " \"routeKey\": \"$default\",\n" + + " \"stage\": \"$default\",\n" + + " \"time\": \"12/Mar/2020:19:03:58 +0000\",\n" + + " \"timeEpoch\": 1583348638390\n" + + " },\n" + + " \"body\": \"Hello from Lambda\",\n" + + " \"isBase64Encoded\": false,\n" + + " \"stageVariables\": {\"stageVariable1\": \"value1\", \"stageVariable2\": \"value2\"}\n" + + " }\n"; + private static final String NO_AUTH_PROXY = "{\n" + + " \"version\": \"2.0\",\n" + + " \"routeKey\": \"$default\",\n" + + " \"rawPath\": \"/my/path\",\n" + + " \"rawQueryString\": \"parameter1=value1¶meter1=value2¶meter2=value\",\n" + + " \"cookies\": [ \"cookie1\", \"cookie2\" ],\n" + + " \"headers\": {\n" + + " \"Header1\": \"value1\",\n" + + " \"Header2\": \"value2\"\n" + + " },\n" + + " \"queryStringParameters\": { \"parameter1\": \"value1,value2\", \"parameter2\": \"value\" },\n" + + " \"requestContext\": {\n" + + " \"accountId\": \"123456789012\",\n" + + " \"apiId\": \"api-id\",\n" + + " \"authorizer\": {\n " + + " },\n" + + " \"domainName\": \"id.execute-api.us-east-1.amazonaws.com\",\n" + + " \"domainPrefix\": \"id\",\n" + + " \"http\": {\n" + + " \"method\": \"POST\",\n" + + " \"path\": \"/my/path\",\n" + + " \"protocol\": \"HTTP/1.1\",\n" + + " \"sourceIp\": \"IP\",\n" + + " \"userAgent\": \"agent\"\n" + + " },\n" + + " \"requestId\": \"id\",\n" + + " \"routeKey\": \"$default\",\n" + + " \"stage\": \"$default\",\n" + + " \"time\": \"12/Mar/2020:19:03:58 +0000\",\n" + + " \"timeEpoch\": 1583348638390\n" + + " },\n" + + " \"body\": \"Hello from Lambda\",\n" + + " \"isBase64Encoded\": true,\n" + + " \"stageVariables\": {\"stageVariable1\": \"value1\", \"stageVariable2\": \"value2\"}\n" + + " }\n"; + + @Test + public void deserialize_fromJsonString_authorizerPopulatedCorrectly() { + try { + HttpApiV2ProxyRequest req = LambdaContainerHandler.getObjectMapper().readValue(BASE_PROXY_REQUEST, HttpApiV2ProxyRequest.class); + assertTrue(req.getRequestContext().getAuthorizer().getJwtAuthorizer().getClaims().containsKey("claim1")); + assertEquals(2, req.getRequestContext().getAuthorizer().getJwtAuthorizer().getScopes().size()); + } catch (JsonProcessingException e) { + e.printStackTrace(); + fail("Exception while parsing request" + e.getMessage()); + } + } + + @Test + public void deserialize_fromJsonString_authorizerEmptyMap() { + try { + HttpApiV2ProxyRequest req = LambdaContainerHandler.getObjectMapper().readValue(NO_AUTH_PROXY, HttpApiV2ProxyRequest.class); + assertNotNull(req.getRequestContext().getAuthorizer()); + assertFalse(req.getRequestContext().getAuthorizer().isJwt()); + } catch (JsonProcessingException e) { + e.printStackTrace(); + fail("Exception while parsing request" + e.getMessage()); + } + } + + @Test + public void deserialize_fromJsonString_isBase64EncodedPopulates() { + try { + HttpApiV2ProxyRequest req = LambdaContainerHandler.getObjectMapper().readValue(BASE_PROXY_REQUEST, HttpApiV2ProxyRequest.class); + assertFalse(req.isBase64Encoded()); + req = LambdaContainerHandler.getObjectMapper().readValue(NO_AUTH_PROXY, HttpApiV2ProxyRequest.class); + assertTrue(req.isBase64Encoded()); + } catch (JsonProcessingException e) { + e.printStackTrace(); + fail("Exception while parsing request" + e.getMessage()); + } + } + + @Test + public void serialize_toJsonString_authorizerPopulatesCorrectly() { + HttpApiV2ProxyRequest req = new HttpApiV2ProxyRequest(); + req.setBase64Encoded(false); + req.setRequestContext(new HttpApiV2ProxyRequestContext()); + req.getRequestContext().setAuthorizer(new HttpApiV2AuthorizerMap()); + req.getRequestContext().getAuthorizer().putJwtAuthorizer(new HttpApiV2JwtAuthorizer()); + ArrayList scopes = new ArrayList<>(); + scopes.add("first"); + scopes.add("second"); + req.getRequestContext().getAuthorizer().getJwtAuthorizer().setScopes(scopes); + + try { + String reqString = LambdaContainerHandler.getObjectMapper().writeValueAsString(req); + assertTrue(reqString.contains("\"scopes\":[\"first\",\"second\"]")); + assertTrue(reqString.contains("\"authorizer\":{\"jwt\":{")); + assertTrue(reqString.contains("\"isBase64Encoded\":false")); + } catch (JsonProcessingException e) { + e.printStackTrace(); + fail("Exception while serializing request" + e.getMessage()); + } + } +} diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index 28edd3c9f..b1c9b0318 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -16,7 +16,7 @@ - 2.29.1 + 2.30.1 diff --git a/aws-serverless-java-container-jersey/src/main/java/com/amazonaws/serverless/proxy/jersey/JerseyHandlerFilter.java b/aws-serverless-java-container-jersey/src/main/java/com/amazonaws/serverless/proxy/jersey/JerseyHandlerFilter.java index cd6aa3e93..27e3157f0 100644 --- a/aws-serverless-java-container-jersey/src/main/java/com/amazonaws/serverless/proxy/jersey/JerseyHandlerFilter.java +++ b/aws-serverless-java-container-jersey/src/main/java/com/amazonaws/serverless/proxy/jersey/JerseyHandlerFilter.java @@ -1,6 +1,17 @@ +/* + * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance + * with the License. A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.proxy.jersey; - import com.amazonaws.serverless.proxy.internal.LambdaContainerHandler; import com.amazonaws.serverless.proxy.internal.testutils.Timer; import com.amazonaws.serverless.proxy.jersey.suppliers.AwsProxyServletRequestSupplier; @@ -40,7 +51,6 @@ import static com.amazonaws.serverless.proxy.RequestReader.JAX_SECURITY_CONTEXT_PROPERTY; import static com.amazonaws.serverless.proxy.RequestReader.LAMBDA_CONTEXT_PROPERTY; - /** * Servlet filter class that calls Jersey's ApplicationHandler. Given a Jax RS Application object, this class * initializes a Jersey {@link ApplicationHandler} and calls its handle method. Requests are transformed diff --git a/aws-serverless-java-container-jersey/src/main/java/com/amazonaws/serverless/proxy/jersey/JerseyLambdaContainerHandler.java b/aws-serverless-java-container-jersey/src/main/java/com/amazonaws/serverless/proxy/jersey/JerseyLambdaContainerHandler.java index 83c01a334..bb9d95091 100644 --- a/aws-serverless-java-container-jersey/src/main/java/com/amazonaws/serverless/proxy/jersey/JerseyLambdaContainerHandler.java +++ b/aws-serverless-java-container-jersey/src/main/java/com/amazonaws/serverless/proxy/jersey/JerseyLambdaContainerHandler.java @@ -13,17 +13,8 @@ package com.amazonaws.serverless.proxy.jersey; -import com.amazonaws.serverless.proxy.AwsProxyExceptionHandler; -import com.amazonaws.serverless.proxy.AwsProxySecurityContextWriter; -import com.amazonaws.serverless.proxy.ExceptionHandler; -import com.amazonaws.serverless.proxy.RequestReader; -import com.amazonaws.serverless.proxy.ResponseWriter; -import com.amazonaws.serverless.proxy.SecurityContextWriter; -import com.amazonaws.serverless.proxy.internal.servlet.AwsHttpServletResponse; -import com.amazonaws.serverless.proxy.internal.servlet.AwsLambdaServletContainerHandler; -import com.amazonaws.serverless.proxy.internal.servlet.AwsProxyHttpServletRequest; -import com.amazonaws.serverless.proxy.internal.servlet.AwsProxyHttpServletRequestReader; -import com.amazonaws.serverless.proxy.internal.servlet.AwsProxyHttpServletResponseWriter; +import com.amazonaws.serverless.proxy.*; +import com.amazonaws.serverless.proxy.internal.servlet.*; import com.amazonaws.serverless.proxy.internal.testutils.Timer; import com.amazonaws.serverless.proxy.jersey.suppliers.AwsProxyServletContextSupplier; import com.amazonaws.serverless.proxy.jersey.suppliers.AwsProxyServletRequestSupplier; @@ -31,6 +22,7 @@ import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.serverless.proxy.model.AwsProxyResponse; +import com.amazonaws.serverless.proxy.model.HttpApiV2ProxyRequest; import com.amazonaws.services.lambda.runtime.Context; import org.glassfish.jersey.internal.inject.AbstractBinder; @@ -42,6 +34,7 @@ import javax.servlet.FilterRegistration; import javax.servlet.Servlet; import javax.servlet.ServletContext; +import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.ws.rs.core.Application; @@ -74,7 +67,7 @@ * @param The type for the incoming Lambda event * @param The type for Lambda's return value */ -public class JerseyLambdaContainerHandler extends AwsLambdaServletContainerHandler { +public class JerseyLambdaContainerHandler extends AwsLambdaServletContainerHandler { //------------------------------------------------------------- // Variables - Private @@ -97,13 +90,36 @@ public class JerseyLambdaContainerHandler extends Aws * @return A JerseyLambdaContainerHandler object */ public static JerseyLambdaContainerHandler getAwsProxyHandler(Application jaxRsApplication) { - JerseyLambdaContainerHandler newHandler = new JerseyLambdaContainerHandler<>(AwsProxyRequest.class, - AwsProxyResponse.class, - new AwsProxyHttpServletRequestReader(), - new AwsProxyHttpServletResponseWriter(), - new AwsProxySecurityContextWriter(), - new AwsProxyExceptionHandler(), - jaxRsApplication); + JerseyLambdaContainerHandler newHandler = new JerseyLambdaContainerHandler<>( + AwsProxyRequest.class, + AwsProxyResponse.class, + new AwsProxyHttpServletRequestReader(), + new AwsProxyHttpServletResponseWriter(), + new AwsProxySecurityContextWriter(), + new AwsProxyExceptionHandler(), + jaxRsApplication); + newHandler.initialize(); + return newHandler; + } + + /** + * Returns an initialized JerseyLambdaContainerHandler that includes RequestReader and + * ResponseWriter objects for the HttpApiV2ProxyRequest and AwsProxyResponse + * objects. + * + * @param jaxRsApplication A configured Jax-Rs application object. For Jersey apps this can be the default + * ResourceConfig object + * @return A JerseyLambdaContainerHandler object + */ + public static JerseyLambdaContainerHandler getHttpApiV2ProxyHandler(Application jaxRsApplication) { + JerseyLambdaContainerHandler newHandler = new JerseyLambdaContainerHandler<>( + HttpApiV2ProxyRequest.class, + AwsProxyResponse.class, + new AwsHttpApiV2HttpServletRequestReader(), + new AwsProxyHttpServletResponseWriter(), + new AwsHttpApiV2SecurityContextWriter(), + new AwsProxyExceptionHandler(), + jaxRsApplication); newHandler.initialize(); return newHandler; } @@ -126,7 +142,7 @@ public static JerseyLambdaContainerHandler ge */ public JerseyLambdaContainerHandler(Class requestTypeClass, Class responseTypeClass, - RequestReader requestReader, + RequestReader requestReader, ResponseWriter responseWriter, SecurityContextWriter securityContextWriter, ExceptionHandler exceptionHandler, @@ -167,12 +183,7 @@ protected void configure() { //------------------------------------------------------------- @Override - protected AwsHttpServletResponse getContainerResponse(AwsProxyHttpServletRequest request, CountDownLatch latch) { - return new AwsHttpServletResponse(request, latch); - } - - @Override - protected void handleRequest(AwsProxyHttpServletRequest httpServletRequest, AwsHttpServletResponse httpServletResponse, Context lambdaContext) + protected void handleRequest(HttpServletRequest httpServletRequest, AwsHttpServletResponse httpServletResponse, Context lambdaContext) throws Exception { // we retain the initialized property for backward compatibility if (!initialized) { @@ -180,12 +191,18 @@ protected void handleRequest(AwsProxyHttpServletRequest httpServletRequest, AwsH } Timer.start("JERSEY_HANDLE_REQUEST"); - httpServletRequest.setServletContext(getServletContext()); + if (AwsHttpServletRequest.class.isAssignableFrom(httpServletRequest.getClass())) { + ((AwsHttpServletRequest)httpServletRequest).setServletContext(getServletContext()); + } doFilter(httpServletRequest, httpServletResponse, null); Timer.stop("JERSEY_HANDLE_REQUEST"); } + @Override + protected AwsHttpServletResponse getContainerResponse(HttpServletRequest request, CountDownLatch latch) { + return new AwsHttpServletResponse(request, latch); + } @Override public void initialize() { diff --git a/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyAwsProxyTest.java b/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyAwsProxyTest.java index be89c3a06..dbcaac407 100644 --- a/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyAwsProxyTest.java +++ b/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyAwsProxyTest.java @@ -22,6 +22,7 @@ import com.amazonaws.serverless.proxy.jersey.providers.ServletRequestFilter; import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.serverless.proxy.model.AwsProxyResponse; +import com.amazonaws.serverless.proxy.model.HttpApiV2ProxyRequest; import com.amazonaws.services.lambda.runtime.Context; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; @@ -45,6 +46,7 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; +import static org.junit.Assume.assumeTrue; /** * Unit test class for the Jersey AWS_PROXY default implementation @@ -66,6 +68,13 @@ public class JerseyAwsProxyTest { .register(new ResourceBinder()) .property(LoggingFeature.LOGGING_FEATURE_VERBOSITY_SERVER, LoggingFeature.Verbosity.PAYLOAD_ANY); + private static ResourceConfig httpApiApp = new ResourceConfig().packages("com.amazonaws.serverless.proxy.jersey") + .register(LoggingFeature.class) + .register(ServletRequestFilter.class) + .register(MultiPartFeature.class) + .register(new ResourceBinder()) + .property(LoggingFeature.LOGGING_FEATURE_VERBOSITY_SERVER, LoggingFeature.Verbosity.PAYLOAD_ANY); + private static ResourceConfig appWithoutRegisteredDependencies = new ResourceConfig() .packages("com.amazonaws.serverless.proxy.jersey") .register(LoggingFeature.class) @@ -73,55 +82,71 @@ public class JerseyAwsProxyTest { .register(MultiPartFeature.class) .property(LoggingFeature.LOGGING_FEATURE_VERBOSITY_SERVER, LoggingFeature.Verbosity.PAYLOAD_ANY); - private static JerseyLambdaContainerHandler handler = JerseyLambdaContainerHandler.getAwsProxyHandler(app); + private static JerseyLambdaContainerHandler handler; + private static JerseyLambdaContainerHandler httpApiHandler; private static JerseyLambdaContainerHandler handlerWithoutRegisteredDependencies = JerseyLambdaContainerHandler.getAwsProxyHandler(appWithoutRegisteredDependencies); private static Context lambdaContext = new MockLambdaContext(); - private boolean isAlb; + private String type; - public JerseyAwsProxyTest(boolean alb) { - isAlb = alb; + public JerseyAwsProxyTest(String reqType) { + type = reqType; } @Parameterized.Parameters public static Collection data() { - return Arrays.asList(new Object[] { false, true }); + return Arrays.asList(new Object[] { "API_GW", "ALB", "HTTP_API" }); } private AwsProxyRequestBuilder getRequestBuilder(String path, String method) { - AwsProxyRequestBuilder builder = new AwsProxyRequestBuilder(path, method); - if (isAlb) builder.alb(); - return builder; + return new AwsProxyRequestBuilder(path, method); } - @Test - public void alb_basicRequest_expectSuccess() { - AwsProxyRequest request = getRequestBuilder("/echo/headers", "GET") - .json() - .header(CUSTOM_HEADER_KEY, CUSTOM_HEADER_VALUE) - .alb() - .build(); - - AwsProxyResponse output = handler.proxy(request, lambdaContext); - assertEquals(200, output.getStatusCode()); - assertEquals("application/json", output.getMultiValueHeaders().getFirst("Content-Type")); - assertNotNull(output.getStatusDescription()); + private AwsProxyResponse executeRequest(AwsProxyRequestBuilder requestBuilder, Context lambdaContext) { + switch (type) { + case "API_GW": + if (handler == null) { + handler = JerseyLambdaContainerHandler.getAwsProxyHandler(app); + } + return handler.proxy(requestBuilder.build(), lambdaContext); + case "ALB": + if (handler == null) { + handler = JerseyLambdaContainerHandler.getAwsProxyHandler(app); + } + return handler.proxy(requestBuilder.alb().build(), lambdaContext); + case "HTTP_API": + if (httpApiHandler == null) { + httpApiHandler = JerseyLambdaContainerHandler.getHttpApiV2ProxyHandler(httpApiApp); + } + return httpApiHandler.proxy(requestBuilder.toHttpApiV2Request(), lambdaContext); + default: + throw new RuntimeException("Unknown request type: " + type); + } + } - validateMapResponseModel(output); + private JerseyLambdaContainerHandler getHandler() { + switch (type) { + case "API_GW": + case "ALB": + return handler; + case "HTTP_API": + return httpApiHandler; + default: + throw new RuntimeException("Unknown request type: " + type); + } } @Test public void headers_getHeaders_echo() { - AwsProxyRequest request = getRequestBuilder("/echo/headers", "GET") + AwsProxyRequestBuilder request = getRequestBuilder("/echo/headers", "GET") .json() - .header(CUSTOM_HEADER_KEY, CUSTOM_HEADER_VALUE) - .build(); + .header(CUSTOM_HEADER_KEY, CUSTOM_HEADER_VALUE); - AwsProxyResponse output = handler.proxy(request, lambdaContext); + AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(200, output.getStatusCode()); assertEquals("application/json", output.getMultiValueHeaders().getFirst("Content-Type")); @@ -130,12 +155,11 @@ public void headers_getHeaders_echo() { @Test public void headers_servletRequest_echo() { - AwsProxyRequest request = getRequestBuilder("/echo/servlet-headers", "GET") + AwsProxyRequestBuilder request = getRequestBuilder("/echo/servlet-headers", "GET") .json() - .header(CUSTOM_HEADER_KEY, CUSTOM_HEADER_VALUE) - .build(); + .header(CUSTOM_HEADER_KEY, CUSTOM_HEADER_VALUE); - AwsProxyResponse output = handler.proxy(request, lambdaContext); + AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(200, output.getStatusCode()); assertEquals("application/json", output.getMultiValueHeaders().getFirst("Content-Type")); @@ -144,6 +168,7 @@ public void headers_servletRequest_echo() { @Test public void headers_servletRequest_failedDependencyInjection_expectInternalServerError() { + assumeTrue("API_GW".equals(type)); AwsProxyRequest request = getRequestBuilder("/echo/servlet-headers", "GET") .json() .header(CUSTOM_HEADER_KEY, CUSTOM_HEADER_VALUE) @@ -156,19 +181,18 @@ public void headers_servletRequest_failedDependencyInjection_expectInternalServe @Test public void context_servletResponse_setCustomHeader() { - AwsProxyRequest request = getRequestBuilder("/echo/servlet-response", "GET") - .json() - .build(); + AwsProxyRequestBuilder request = getRequestBuilder("/echo/servlet-response", "GET") + .json(); - AwsProxyResponse output = handler.proxy(request, lambdaContext); + AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(200, output.getStatusCode()); assertTrue(output.getMultiValueHeaders().containsKey(EchoJerseyResource.SERVLET_RESP_HEADER_KEY)); } @Test public void context_serverInfo_correctContext() { - AwsProxyRequest request = getRequestBuilder("/echo/servlet-context", "GET").build(); - AwsProxyResponse output = handler.proxy(request, lambdaContext); + AwsProxyRequestBuilder request = getRequestBuilder("/echo/servlet-context", "GET"); + AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(200, output.getStatusCode()); assertEquals("application/json", output.getMultiValueHeaders().getFirst("Content-Type")); @@ -177,11 +201,10 @@ public void context_serverInfo_correctContext() { @Test public void requestScheme_valid_expectHttps() { - AwsProxyRequest request = getRequestBuilder("/echo/scheme", "GET") - .json() - .build(); + AwsProxyRequestBuilder request = getRequestBuilder("/echo/scheme", "GET") + .json(); - AwsProxyResponse output = handler.proxy(request, lambdaContext); + AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(200, output.getStatusCode()); assertEquals("application/json", output.getMultiValueHeaders().getFirst("Content-Type")); @@ -190,11 +213,10 @@ public void requestScheme_valid_expectHttps() { @Test public void requestFilter_injectsServletRequest_expectCustomAttribute() { - AwsProxyRequest request = getRequestBuilder("/echo/filter-attribute", "GET") - .json() - .build(); + AwsProxyRequestBuilder request = getRequestBuilder("/echo/filter-attribute", "GET") + .json(); - AwsProxyResponse output = handler.proxy(request, lambdaContext); + AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(200, output.getStatusCode()); assertEquals("application/json", output.getMultiValueHeaders().getFirst("Content-Type")); @@ -203,31 +225,27 @@ public void requestFilter_injectsServletRequest_expectCustomAttribute() { @Test public void authorizer_securityContext_customPrincipalSuccess() { - AwsProxyRequest request = getRequestBuilder("/echo/authorizer-principal", "GET") + assumeTrue("API_GW".equals(type)); // TODO: We should figure out a way to run this for HTTP_API too + AwsProxyRequestBuilder request = getRequestBuilder("/echo/authorizer-principal", "GET") .json() - .authorizerPrincipal(AUTHORIZER_PRINCIPAL_ID) - .build(); - - AwsProxyResponse output = handler.proxy(request, lambdaContext); - if (!isAlb) { - assertEquals(200, output.getStatusCode()); - assertEquals("application/json", output.getMultiValueHeaders().getFirst("Content-Type")); - validateSingleValueModel(output, AUTHORIZER_PRINCIPAL_ID); - } - + .authorizerPrincipal(AUTHORIZER_PRINCIPAL_ID); + AwsProxyResponse output = executeRequest(request, lambdaContext); + assertEquals(200, output.getStatusCode()); + assertEquals("application/json", output.getMultiValueHeaders().getFirst("Content-Type")); + validateSingleValueModel(output, AUTHORIZER_PRINCIPAL_ID); } @Test public void authorizer_securityContext_customAuthorizerContextSuccess() { - AwsProxyRequest request = getRequestBuilder("/echo/authorizer-context", "GET") + assumeTrue("API_GW".equals(type)); + AwsProxyRequestBuilder request = getRequestBuilder("/echo/authorizer-context", "GET") .json() .authorizerPrincipal(AUTHORIZER_PRINCIPAL_ID) .authorizerContextValue(CUSTOM_HEADER_KEY, CUSTOM_HEADER_VALUE) - .queryString("key", CUSTOM_HEADER_KEY) - .build(); + .queryString("key", CUSTOM_HEADER_KEY); - AwsProxyResponse output = handler.proxy(request, lambdaContext); + AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(200, output.getStatusCode()); assertEquals("application/json", output.getMultiValueHeaders().getFirst("Content-Type")); @@ -236,31 +254,29 @@ public void authorizer_securityContext_customAuthorizerContextSuccess() { @Test public void errors_unknownRoute_expect404() { - AwsProxyRequest request = getRequestBuilder("/echo/test33", "GET").build(); + AwsProxyRequestBuilder request = getRequestBuilder("/echo/test33", "GET"); - AwsProxyResponse output = handler.proxy(request, lambdaContext); + AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(404, output.getStatusCode()); } @Test public void error_contentType_invalidContentType() { - AwsProxyRequest request = getRequestBuilder("/echo/json-body", "POST") + AwsProxyRequestBuilder request = getRequestBuilder("/echo/json-body", "POST") .header("Content-Type", "application/octet-stream") - .body("asdasdasd") - .build(); + .body("asdasdasd"); - AwsProxyResponse output = handler.proxy(request, lambdaContext); + AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(415, output.getStatusCode()); } @Test public void error_statusCode_methodNotAllowed() { - AwsProxyRequest request = getRequestBuilder("/echo/status-code", "POST") + AwsProxyRequestBuilder request = getRequestBuilder("/echo/status-code", "POST") .json() - .queryString("status", "201") - .build(); + .queryString("status", "201"); - AwsProxyResponse output = handler.proxy(request, lambdaContext); + AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(405, output.getStatusCode()); } @@ -268,12 +284,11 @@ public void error_statusCode_methodNotAllowed() { public void responseBody_responseWriter_validBody() throws JsonProcessingException { SingleValueModel singleValueModel = new SingleValueModel(); singleValueModel.setValue(CUSTOM_HEADER_VALUE); - AwsProxyRequest request = getRequestBuilder("/echo/json-body", "POST") + AwsProxyRequestBuilder request = getRequestBuilder("/echo/json-body", "POST") .json() - .body(objectMapper.writeValueAsString(singleValueModel)) - .build(); + .body(objectMapper.writeValueAsString(singleValueModel)); - AwsProxyResponse output = handler.proxy(request, lambdaContext); + AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(200, output.getStatusCode()); assertNotNull(output.getBody()); @@ -282,29 +297,28 @@ public void responseBody_responseWriter_validBody() throws JsonProcessingExcepti @Test public void statusCode_responseStatusCode_customStatusCode() { - AwsProxyRequest request = getRequestBuilder("/echo/status-code", "GET") + AwsProxyRequestBuilder request = getRequestBuilder("/echo/status-code", "GET") .json() - .queryString("status", "201") - .build(); + .queryString("status", "201"); - AwsProxyResponse output = handler.proxy(request, lambdaContext); + AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(201, output.getStatusCode()); } @Test public void base64_binaryResponse_base64Encoding() { - AwsProxyRequest request = getRequestBuilder("/echo/binary", "GET").build(); + AwsProxyRequestBuilder request = getRequestBuilder("/echo/binary", "GET"); - AwsProxyResponse response = handler.proxy(request, lambdaContext); + AwsProxyResponse response = executeRequest(request, lambdaContext); assertNotNull(response.getBody()); assertTrue(Base64.isBase64(response.getBody())); } @Test public void exception_mapException_mapToNotImplemented() { - AwsProxyRequest request = getRequestBuilder("/echo/exception", "GET").build(); + AwsProxyRequestBuilder request = getRequestBuilder("/echo/exception", "GET"); - AwsProxyResponse response = handler.proxy(request, lambdaContext); + AwsProxyResponse response = executeRequest(request, lambdaContext); assertNotNull(response.getBody()); assertEquals(EchoJerseyResource.EXCEPTION_MESSAGE, response.getBody()); assertEquals(Response.Status.NOT_IMPLEMENTED.getStatusCode(), response.getStatusCode()); @@ -312,60 +326,58 @@ public void exception_mapException_mapToNotImplemented() { @Test public void stripBasePath_route_shouldRouteCorrectly() { - AwsProxyRequest request = getRequestBuilder("/custompath/echo/status-code", "GET") + AwsProxyRequestBuilder request = getRequestBuilder("/custompath/echo/status-code", "GET") .json() - .queryString("status", "201") - .build(); - handler.stripBasePath("/custompath"); - AwsProxyResponse output = handler.proxy(request, lambdaContext); + .queryString("status", "201"); + getHandler().stripBasePath("/custompath"); + AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(201, output.getStatusCode()); - handler.stripBasePath(""); + getHandler().stripBasePath(""); } @Test public void stripBasePath_route_shouldReturn404WithStageAsContext() { - AwsProxyRequest request = getRequestBuilder("/custompath/echo/status-code", "GET") + assumeTrue(!"ALB".equals(type)); + AwsProxyRequestBuilder request = getRequestBuilder("/custompath/echo/status-code", "GET") .stage("prod") .json() - .queryString("status", "201") - .build(); - handler.stripBasePath("/custompath"); + .queryString("status", "201"); + getHandler().stripBasePath("/custompath"); LambdaContainerHandler.getContainerConfig().setUseStageAsServletContext(true); - AwsProxyResponse output = handler.proxy(request, lambdaContext); + AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(404, output.getStatusCode()); - handler.stripBasePath(""); + getHandler().stripBasePath(""); LambdaContainerHandler.getContainerConfig().setUseStageAsServletContext(false); } @Test public void stripBasePath_route_shouldReturn404() { - AwsProxyRequest request = getRequestBuilder("/custompath/echo/status-code", "GET") + AwsProxyRequestBuilder request = getRequestBuilder("/custompath/echo/status-code", "GET") .json() - .queryString("status", "201") - .build(); - handler.stripBasePath("/custom"); - AwsProxyResponse output = handler.proxy(request, lambdaContext); + .queryString("status", "201"); + getHandler().stripBasePath("/custom"); + AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(404, output.getStatusCode()); - handler.stripBasePath(""); + getHandler().stripBasePath(""); } @Test public void securityContext_injectPrincipal_expectPrincipalName() { - AwsProxyRequest request = getRequestBuilder("/echo/security-context", "GET") - .authorizerPrincipal(USER_PRINCIPAL).build(); + assumeTrue("API_GW".equals(type)); + AwsProxyRequestBuilder request = getRequestBuilder("/echo/security-context", "GET") + .authorizerPrincipal(USER_PRINCIPAL); - AwsProxyResponse resp = handler.proxy(request, lambdaContext); + AwsProxyResponse resp = executeRequest(request, lambdaContext); assertEquals(200, resp.getStatusCode()); validateSingleValueModel(resp, USER_PRINCIPAL); } @Test public void emptyStream_putNullBody_expectPutToSucceed() { - AwsProxyRequest request = getRequestBuilder("/echo/empty-stream/" + CUSTOM_HEADER_KEY + "/test/2", "PUT") + AwsProxyRequestBuilder request = getRequestBuilder("/echo/empty-stream/" + CUSTOM_HEADER_KEY + "/test/2", "PUT") .nullBody() - .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON) - .build(); - AwsProxyResponse resp = handler.proxy(request, lambdaContext); + .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON); + AwsProxyResponse resp = executeRequest(request, lambdaContext); assertEquals(200, resp.getStatusCode()); validateSingleValueModel(resp, CUSTOM_HEADER_KEY); } @@ -373,26 +385,24 @@ public void emptyStream_putNullBody_expectPutToSucceed() { @Test public void refererHeader_headerParam_expectCorrectInjection() { String refererValue = "test-referer"; - AwsProxyRequest request = getRequestBuilder("/echo/referer-header", "GET") + AwsProxyRequestBuilder request = getRequestBuilder("/echo/referer-header", "GET") .nullBody() .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON) - .header("Referer", refererValue) - .build(); + .header("Referer", refererValue); - AwsProxyResponse resp = handler.proxy(request, lambdaContext); + AwsProxyResponse resp = executeRequest(request, lambdaContext); assertEquals(200, resp.getStatusCode()); validateSingleValueModel(resp, refererValue); } @Test public void textPlainContent_plain_responseHonorsContentType() { - AwsProxyRequest req = getRequestBuilder("/echo/plain", "GET") + AwsProxyRequestBuilder req = getRequestBuilder("/echo/plain", "GET") .nullBody() .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON) - .header(HttpHeaders.ACCEPT, MediaType.TEXT_PLAIN) - .build(); + .header(HttpHeaders.ACCEPT, MediaType.TEXT_PLAIN); - AwsProxyResponse resp = handler.proxy(req, lambdaContext); + AwsProxyResponse resp = executeRequest(req, lambdaContext); assertEquals(200, resp.getStatusCode()); assertTrue(resp.getMultiValueHeaders().containsKey(HttpHeaders.CONTENT_TYPE)); assertEquals(MediaType.TEXT_PLAIN, resp.getMultiValueHeaders().get(HttpHeaders.CONTENT_TYPE).get(0)); diff --git a/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyParamEncodingTest.java b/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyParamEncodingTest.java index d3b951aea..e736cbc1e 100644 --- a/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyParamEncodingTest.java +++ b/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyParamEncodingTest.java @@ -8,6 +8,7 @@ import com.amazonaws.serverless.proxy.jersey.model.SingleValueModel; import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.serverless.proxy.model.AwsProxyResponse; +import com.amazonaws.serverless.proxy.model.HttpApiV2ProxyRequest; import com.amazonaws.services.lambda.runtime.Context; import com.fasterxml.jackson.databind.ObjectMapper; @@ -67,37 +68,62 @@ public class JerseyParamEncodingTest { .register(new ResourceBinder()) .property("jersey.config.server.tracing.type", "ALL") .property("jersey.config.server.tracing.threshold", "VERBOSE"); - private static JerseyLambdaContainerHandler handler = JerseyLambdaContainerHandler.getAwsProxyHandler(app); + private static JerseyLambdaContainerHandler handler; + + private static ResourceConfig httpApiApp = new ResourceConfig().packages("com.amazonaws.serverless.proxy.jersey") + .register(MultiPartFeature.class) + .register(new ResourceBinder()) + .property("jersey.config.server.tracing.type", "ALL") + .property("jersey.config.server.tracing.threshold", "VERBOSE"); + private static JerseyLambdaContainerHandler httpApiHandler; private static Context lambdaContext = new MockLambdaContext(); - private boolean isAlb; + private String type; - public JerseyParamEncodingTest(boolean alb) { - isAlb = alb; + public JerseyParamEncodingTest(String reqType) { + type = reqType; LambdaContainerHandler.getContainerConfig().addBinaryContentTypes(MediaType.MULTIPART_FORM_DATA); } @Parameterized.Parameters public static Collection data() { - return Arrays.asList(new Object[] { false, true }); + return Arrays.asList(new Object[] { "API_GW", "ALB", "HTTP_API" }); } private AwsProxyRequestBuilder getRequestBuilder(String path, String method) { - AwsProxyRequestBuilder builder = new AwsProxyRequestBuilder(path, method); - if (isAlb) builder.alb(); + return new AwsProxyRequestBuilder(path, method); + } - return builder; + private AwsProxyResponse executeRequest(AwsProxyRequestBuilder requestBuilder, Context lambdaContext) { + switch (type) { + case "API_GW": + if (handler == null) { + handler = JerseyLambdaContainerHandler.getAwsProxyHandler(app); + } + return handler.proxy(requestBuilder.build(), lambdaContext); + case "ALB": + if (handler == null) { + handler = JerseyLambdaContainerHandler.getAwsProxyHandler(app); + } + return handler.proxy(requestBuilder.alb().build(), lambdaContext); + case "HTTP_API": + if (httpApiHandler == null) { + httpApiHandler = JerseyLambdaContainerHandler.getHttpApiV2ProxyHandler(httpApiApp); + } + return httpApiHandler.proxy(requestBuilder.toHttpApiV2Request(), lambdaContext); + default: + throw new RuntimeException("Unknown request type: " + type); + } } @Test public void queryString_uriInfo_echo() { - AwsProxyRequest request = getRequestBuilder("/echo/query-string", "GET") + AwsProxyRequestBuilder request = getRequestBuilder("/echo/query-string", "GET") .json() - .queryString(QUERY_STRING_KEY, QUERY_STRING_NON_ENCODED_VALUE) - .build(); + .queryString(QUERY_STRING_KEY, QUERY_STRING_NON_ENCODED_VALUE); - AwsProxyResponse output = handler.proxy(request, lambdaContext); + AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(200, output.getStatusCode()); assertEquals("application/json", output.getMultiValueHeaders().getFirst("Content-Type")); @@ -106,12 +132,11 @@ public void queryString_uriInfo_echo() { @Test public void queryString_notEncoded_echo() { - AwsProxyRequest request = getRequestBuilder("/echo/query-string", "GET") + AwsProxyRequestBuilder request = getRequestBuilder("/echo/query-string", "GET") .json() - .queryString(QUERY_STRING_KEY, QUERY_STRING_NON_ENCODED_VALUE) - .build(); + .queryString(QUERY_STRING_KEY, QUERY_STRING_NON_ENCODED_VALUE); - AwsProxyResponse output = handler.proxy(request, lambdaContext); + AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(200, output.getStatusCode()); assertEquals("application/json", output.getMultiValueHeaders().getFirst("Content-Type")); @@ -121,12 +146,11 @@ public void queryString_notEncoded_echo() { @Test @Ignore("We expect to only receive decoded values from API Gateway") public void queryString_encoded_echo() { - AwsProxyRequest request = getRequestBuilder("/echo/query-string", "GET") + AwsProxyRequestBuilder request = getRequestBuilder("/echo/query-string", "GET") .json() - .queryString(QUERY_STRING_KEY, QUERY_STRING_ENCODED_VALUE) - .build(); + .queryString(QUERY_STRING_KEY, QUERY_STRING_ENCODED_VALUE); - AwsProxyResponse output = handler.proxy(request, lambdaContext); + AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(200, output.getStatusCode()); assertEquals("application/json", output.getMultiValueHeaders().getFirst("Content-Type")); @@ -135,46 +159,46 @@ public void queryString_encoded_echo() { @Test public void simpleQueryParam_encoding_expectDecodedParam() { - AwsProxyRequest request = getRequestBuilder("/echo/decoded-param", "GET").queryString("param", SIMPLE_ENCODED_PARAM).build(); + AwsProxyRequestBuilder request = getRequestBuilder("/echo/decoded-param", "GET").queryString("param", SIMPLE_ENCODED_PARAM); - AwsProxyResponse resp = handler.proxy(request, lambdaContext); + AwsProxyResponse resp = executeRequest(request, lambdaContext); assertEquals(200, resp.getStatusCode()); validateSingleValueModel(resp, SIMPLE_ENCODED_PARAM); } @Test public void jsonQueryParam_encoding_expectDecodedParam() { - AwsProxyRequest request = getRequestBuilder("/echo/decoded-param", "GET").queryString("param", JSON_ENCODED_PARAM).build(); + AwsProxyRequestBuilder request = getRequestBuilder("/echo/decoded-param", "GET").queryString("param", JSON_ENCODED_PARAM); - AwsProxyResponse resp = handler.proxy(request, lambdaContext); + AwsProxyResponse resp = executeRequest(request, lambdaContext); assertEquals(200, resp.getStatusCode()); validateSingleValueModel(resp, JSON_ENCODED_PARAM); } @Test public void simpleQueryParam_encoding_expectEncodedParam() { - AwsProxyRequest request = getRequestBuilder("/echo/encoded-param", "GET").queryString("param", SIMPLE_ENCODED_PARAM).build(); + AwsProxyRequestBuilder request = getRequestBuilder("/echo/encoded-param", "GET").queryString("param", SIMPLE_ENCODED_PARAM); String encodedVal = ""; try { encodedVal = URLEncoder.encode(SIMPLE_ENCODED_PARAM, "UTF-8"); } catch (UnsupportedEncodingException e) { fail("Could not encode parameter value"); } - AwsProxyResponse resp = handler.proxy(request, lambdaContext); + AwsProxyResponse resp = executeRequest(request, lambdaContext); assertEquals(200, resp.getStatusCode()); validateSingleValueModel(resp, encodedVal); } @Test public void jsonQueryParam_encoding_expectEncodedParam() { - AwsProxyRequest request = getRequestBuilder("/echo/encoded-param", "GET").queryString("param", JSON_ENCODED_PARAM).build(); + AwsProxyRequestBuilder request = getRequestBuilder("/echo/encoded-param", "GET").queryString("param", JSON_ENCODED_PARAM); String encodedVal = ""; try { encodedVal = URLEncoder.encode(JSON_ENCODED_PARAM, "UTF-8"); } catch (UnsupportedEncodingException e) { fail("Could not encode parameter value"); } - AwsProxyResponse resp = handler.proxy(request, lambdaContext); + AwsProxyResponse resp = executeRequest(request, lambdaContext); assertEquals(200, resp.getStatusCode()); validateSingleValueModel(resp, encodedVal); } @@ -182,8 +206,8 @@ public void jsonQueryParam_encoding_expectEncodedParam() { @Test public void queryParam_encoding_expectFullyEncodedUrl() { String paramValue = "/+="; - AwsProxyRequest request = getRequestBuilder("/echo/encoded-param", "GET").queryString("param", paramValue).build(); - AwsProxyResponse resp = handler.proxy(request, lambdaContext); + AwsProxyRequestBuilder request = getRequestBuilder("/echo/encoded-param", "GET").queryString("param", paramValue); + AwsProxyResponse resp = executeRequest(request, lambdaContext); assertNotNull(resp); assertEquals(resp.getStatusCode(), 200); validateSingleValueModel(resp, "%2F%2B%3D"); @@ -193,8 +217,8 @@ public void queryParam_encoding_expectFullyEncodedUrl() { public void pathParam_encoded_routesToCorrectPath() { String encodedParam = "http%3A%2F%2Fhelloresource.com"; String path = "/echo/encoded-path/" + encodedParam; - AwsProxyRequest request = getRequestBuilder(path, "GET").build(); - AwsProxyResponse resp = handler.proxy(request, lambdaContext); + AwsProxyRequestBuilder request = getRequestBuilder(path, "GET"); + AwsProxyResponse resp = executeRequest(request, lambdaContext); assertNotNull(resp); assertEquals(resp.getStatusCode(), 200); validateSingleValueModel(resp, encodedParam); @@ -204,8 +228,8 @@ public void pathParam_encoded_routesToCorrectPath() { public void pathParam_encoded_returns404() { String encodedParam = "http://helloresource.com"; String path = "/echo/encoded-path/" + encodedParam; - AwsProxyRequest request = getRequestBuilder(path, "GET").build(); - AwsProxyResponse resp = handler.proxy(request, lambdaContext); + AwsProxyRequestBuilder request = getRequestBuilder(path, "GET"); + AwsProxyResponse resp = executeRequest(request, lambdaContext); assertNotNull(resp); assertEquals(resp.getStatusCode(), 404); } @@ -213,8 +237,8 @@ public void pathParam_encoded_returns404() { @Test @Ignore public void queryParam_listOfString_expectCorrectLength() { - AwsProxyRequest request = getRequestBuilder("/echo/list-query-string", "GET").queryString("list", "v1,v2,v3").build(); - AwsProxyResponse resp = handler.proxy(request, lambdaContext); + AwsProxyRequestBuilder request = getRequestBuilder("/echo/list-query-string", "GET").queryString("list", "v1,v2,v3"); + AwsProxyResponse resp = executeRequest(request, lambdaContext); assertNotNull(resp); assertEquals(resp.getStatusCode(), 200); validateSingleValueModel(resp, "3"); @@ -223,11 +247,9 @@ public void queryParam_listOfString_expectCorrectLength() { @Test public void multipart_getFileSize_expectCorrectLength() throws IOException { - AwsProxyRequest request = getRequestBuilder("/echo/file-size", "POST") - .formFilePart("file", "myfile.jpg", FILE_CONTENTS) - //.formFieldPart("name", QUERY_STRING_ENCODED_VALUE) - .build(); - AwsProxyResponse resp = handler.proxy(request, lambdaContext); + AwsProxyRequestBuilder request = getRequestBuilder("/echo/file-size", "POST") + .formFilePart("file", "myfile.jpg", FILE_CONTENTS); + AwsProxyResponse resp = executeRequest(request, lambdaContext); assertNotNull(resp); assertEquals(200, resp.getStatusCode()); validateSingleValueModel(resp, "" + FILE_CONTENTS.length); diff --git a/aws-serverless-java-container-spark/src/main/java/com/amazonaws/serverless/proxy/spark/SparkLambdaContainerHandler.java b/aws-serverless-java-container-spark/src/main/java/com/amazonaws/serverless/proxy/spark/SparkLambdaContainerHandler.java index 368a5e815..2c16eaa98 100644 --- a/aws-serverless-java-container-spark/src/main/java/com/amazonaws/serverless/proxy/spark/SparkLambdaContainerHandler.java +++ b/aws-serverless-java-container-spark/src/main/java/com/amazonaws/serverless/proxy/spark/SparkLambdaContainerHandler.java @@ -14,16 +14,12 @@ import com.amazonaws.serverless.exceptions.ContainerInitializationException; -import com.amazonaws.serverless.proxy.AwsProxyExceptionHandler; -import com.amazonaws.serverless.proxy.AwsProxySecurityContextWriter; -import com.amazonaws.serverless.proxy.ExceptionHandler; -import com.amazonaws.serverless.proxy.RequestReader; -import com.amazonaws.serverless.proxy.ResponseWriter; -import com.amazonaws.serverless.proxy.SecurityContextWriter; +import com.amazonaws.serverless.proxy.*; import com.amazonaws.serverless.proxy.internal.testutils.Timer; import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.serverless.proxy.model.AwsProxyResponse; import com.amazonaws.serverless.proxy.internal.servlet.*; +import com.amazonaws.serverless.proxy.model.HttpApiV2ProxyRequest; import com.amazonaws.serverless.proxy.spark.embeddedserver.LambdaEmbeddedServer; import com.amazonaws.serverless.proxy.spark.embeddedserver.LambdaEmbeddedServerFactory; @@ -38,6 +34,7 @@ import javax.servlet.DispatcherType; import javax.servlet.FilterRegistration; import javax.servlet.Servlet; +import javax.servlet.http.HttpServletRequest; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; @@ -75,7 +72,7 @@ * @param The response object produced by the ResponseWriter implementation in the constructor */ public class SparkLambdaContainerHandler - extends AwsLambdaServletContainerHandler { + extends AwsLambdaServletContainerHandler { //------------------------------------------------------------- // Constants @@ -121,6 +118,31 @@ public static SparkLambdaContainerHandler get return newHandler; } + /** + * Returns a new instance of an SparkLambdaContainerHandler initialized to work with HttpApiV2ProxyRequest + * and AwsProxyResponse objects. + * + * @return a new instance of SparkLambdaContainerHandler + * + * @throws ContainerInitializationException Throws this exception if we fail to initialize the Spark container. + * This could be caused by the introspection used to insert the library as the default embedded container + */ + public static SparkLambdaContainerHandler getHttpApiV2ProxyHandler() + throws ContainerInitializationException { + SparkLambdaContainerHandler newHandler = new SparkLambdaContainerHandler<>(HttpApiV2ProxyRequest.class, + AwsProxyResponse.class, + new AwsHttpApiV2HttpServletRequestReader(), + new AwsProxyHttpServletResponseWriter(), + new AwsHttpApiV2SecurityContextWriter(), + new AwsProxyExceptionHandler(), + new LambdaEmbeddedServerFactory()); + + // For Spark we cannot call initialize here. It needs to be called manually after the routes are set + //newHandler.initialize(); + + return newHandler; + } + //------------------------------------------------------------- // Constructors //------------------------------------------------------------- @@ -128,7 +150,7 @@ public static SparkLambdaContainerHandler get public SparkLambdaContainerHandler(Class requestTypeClass, Class responseTypeClass, - RequestReader requestReader, + RequestReader requestReader, ResponseWriter responseWriter, SecurityContextWriter securityContextWriter, ExceptionHandler exceptionHandler, @@ -177,13 +199,13 @@ public SparkLambdaContainerHandler(Class requestTypeClass, @Override - protected AwsHttpServletResponse getContainerResponse(AwsProxyHttpServletRequest request, CountDownLatch latch) { + protected AwsHttpServletResponse getContainerResponse(HttpServletRequest request, CountDownLatch latch) { return new AwsHttpServletResponse(request, latch); } @Override - protected void handleRequest(AwsProxyHttpServletRequest httpServletRequest, AwsHttpServletResponse httpServletResponse, Context lambdaContext) + protected void handleRequest(HttpServletRequest httpServletRequest, AwsHttpServletResponse httpServletResponse, Context lambdaContext) throws Exception { Timer.start("SPARK_HANDLE_REQUEST"); @@ -191,7 +213,9 @@ protected void handleRequest(AwsProxyHttpServletRequest httpServletRequest, AwsH initialize(); } - httpServletRequest.setServletContext(getServletContext()); + if (AwsHttpServletRequest.class.isAssignableFrom(httpServletRequest.getClass())) { + ((AwsHttpServletRequest)httpServletRequest).setServletContext(getServletContext()); + } doFilter(httpServletRequest, httpServletResponse, null); Timer.stop("SPARK_HANDLE_REQUEST"); diff --git a/aws-serverless-java-container-spark/src/main/java/com/amazonaws/serverless/proxy/spark/embeddedserver/LambdaEmbeddedServer.java b/aws-serverless-java-container-spark/src/main/java/com/amazonaws/serverless/proxy/spark/embeddedserver/LambdaEmbeddedServer.java index f4f227c4e..4be5d8565 100644 --- a/aws-serverless-java-container-spark/src/main/java/com/amazonaws/serverless/proxy/spark/embeddedserver/LambdaEmbeddedServer.java +++ b/aws-serverless-java-container-spark/src/main/java/com/amazonaws/serverless/proxy/spark/embeddedserver/LambdaEmbeddedServer.java @@ -1,3 +1,15 @@ +/* + * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance + * with the License. A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.proxy.spark.embeddedserver; import com.amazonaws.serverless.exceptions.ContainerInitializationException; diff --git a/aws-serverless-java-container-spark/src/main/java/com/amazonaws/serverless/proxy/spark/embeddedserver/LambdaEmbeddedServerFactory.java b/aws-serverless-java-container-spark/src/main/java/com/amazonaws/serverless/proxy/spark/embeddedserver/LambdaEmbeddedServerFactory.java index 3455170fa..9074e5ddf 100644 --- a/aws-serverless-java-container-spark/src/main/java/com/amazonaws/serverless/proxy/spark/embeddedserver/LambdaEmbeddedServerFactory.java +++ b/aws-serverless-java-container-spark/src/main/java/com/amazonaws/serverless/proxy/spark/embeddedserver/LambdaEmbeddedServerFactory.java @@ -1,3 +1,15 @@ +/* + * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance + * with the License. A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.proxy.spark.embeddedserver; import com.amazonaws.serverless.proxy.internal.testutils.Timer; diff --git a/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/HelloWorldSparkStreamTest.java b/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/HelloWorldSparkStreamTest.java index 74cd55040..0c41f91f7 100644 --- a/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/HelloWorldSparkStreamTest.java +++ b/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/HelloWorldSparkStreamTest.java @@ -8,8 +8,9 @@ import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.serverless.proxy.model.AwsProxyResponse; +import com.amazonaws.serverless.proxy.model.HttpApiV2ProxyRequest; +import com.amazonaws.services.lambda.runtime.Context; import org.junit.AfterClass; -import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; @@ -19,7 +20,6 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; -import java.io.InputStream; import java.util.Arrays; import java.util.Collection; @@ -43,36 +43,58 @@ public class HelloWorldSparkStreamTest { private static final String COOKIE_PATH = "/"; private static SparkLambdaContainerHandler handler; + private static SparkLambdaContainerHandler httpApiHandler; - private boolean isAlb; + private String type; - public HelloWorldSparkStreamTest(boolean alb) { - isAlb = alb; + public HelloWorldSparkStreamTest(String reqType) { + type = reqType; + try { + switch (type) { + case "API_GW": + case "ALB": + handler = SparkLambdaContainerHandler.getAwsProxyHandler(); + break; + case "HTTP_API": + httpApiHandler = SparkLambdaContainerHandler.getHttpApiV2ProxyHandler(); + break; + default: + throw new RuntimeException("Unknown request type: " + type); + } + + configureRoutes(); + Spark.awaitInitialization(); + } catch (RuntimeException | ContainerInitializationException e) { + e.printStackTrace(); + fail(); + } } @Parameterized.Parameters public static Collection data() { - return Arrays.asList(new Object[] { false, true }); + return Arrays.asList(new Object[] { "API_GW", "ALB", "HTTP_API" }); } private AwsProxyRequestBuilder getRequestBuilder() { - AwsProxyRequestBuilder builder = new AwsProxyRequestBuilder(); - if (isAlb) builder.alb(); - - return builder; + return new AwsProxyRequestBuilder(); } - @BeforeClass - public static void initializeServer() { - try { - handler = SparkLambdaContainerHandler.getAwsProxyHandler(); - - configureRoutes(); - Spark.awaitInitialization(); - } catch (RuntimeException | ContainerInitializationException e) { - e.printStackTrace(); - fail(); + private ByteArrayOutputStream executeRequest(AwsProxyRequestBuilder requestBuilder, Context lambdaContext) throws IOException { + ByteArrayOutputStream os = new ByteArrayOutputStream(); + switch (type) { + case "API_GW": + handler.proxyStream(requestBuilder.buildStream(), os, lambdaContext); + break; + case "ALB": + handler.proxyStream(requestBuilder.alb().buildStream(), os, lambdaContext); + break; + case "HTTP_API": + httpApiHandler.proxyStream(requestBuilder.toHttpApiV2RequestStream(), os, lambdaContext); + break; + default: + throw new RuntimeException("Unknown request type: " + type); } + return os; } @AfterClass @@ -82,10 +104,8 @@ public static void stopSpark() { @Test public void helloRequest_basicStream_populatesOutputSuccessfully() { - InputStream req = getRequestBuilder().method("GET").path("/hello").buildStream(); - ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); try { - handler.proxyStream(req, outputStream, new MockLambdaContext()); + ByteArrayOutputStream outputStream = executeRequest(getRequestBuilder().method("GET").path("/hello"), new MockLambdaContext()); AwsProxyResponse response = LambdaContainerHandler.getObjectMapper().readValue(outputStream.toByteArray(), AwsProxyResponse.class); assertEquals(200, response.getStatusCode()); @@ -100,10 +120,8 @@ public void helloRequest_basicStream_populatesOutputSuccessfully() { @Test public void nullPathRequest_doesntFail_expectA404() { - InputStream req = getRequestBuilder().method("GET").path(null).buildStream(); - ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); try { - handler.proxyStream(req, outputStream, new MockLambdaContext()); + ByteArrayOutputStream outputStream = executeRequest(getRequestBuilder().method("GET").path(null), new MockLambdaContext()); AwsProxyResponse response = LambdaContainerHandler.getObjectMapper().readValue(outputStream.toByteArray(), AwsProxyResponse.class); assertEquals(404, response.getStatusCode()); diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 5b6117cb9..6065d464f 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -60,6 +60,15 @@ test + + + javax.activation + activation + 1.1.1 + test + + + org.hibernate hibernate-validator diff --git a/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java b/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java index cb449568c..98841ed44 100644 --- a/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java +++ b/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java @@ -18,16 +18,20 @@ import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.serverless.proxy.model.AwsProxyResponse; import com.amazonaws.serverless.proxy.internal.servlet.*; +import com.amazonaws.serverless.proxy.model.HttpApiV2ProxyRequest; import com.amazonaws.serverless.proxy.spring.embedded.ServerlessServletEmbeddedServerFactory; import com.amazonaws.services.lambda.runtime.Context; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.SpringApplication; +import org.springframework.context.ConfigurableApplicationContext; import org.springframework.core.env.ConfigurableEnvironment; import org.springframework.core.env.StandardEnvironment; import org.springframework.web.WebApplicationInitializer; +import org.springframework.web.context.ConfigurableWebApplicationContext; import javax.servlet.*; +import javax.servlet.http.HttpServletRequest; import java.util.concurrent.CountDownLatch; @@ -47,7 +51,9 @@ * @param The expected return type */ @Deprecated -public class SpringBootLambdaContainerHandler extends AwsLambdaServletContainerHandler { +public class SpringBootLambdaContainerHandler extends AwsLambdaServletContainerHandler { + private static final String DISPATCHER_SERVLET_REGISTRATION_NAME = "dispatcherServlet"; + private final Class springBootInitializer; private static final Logger log = LoggerFactory.getLogger(SpringBootLambdaContainerHandler.class); private String[] springProfiles = null; @@ -78,7 +84,7 @@ public static SpringBootLambdaContainerHandler getInstance() { */ public static SpringBootLambdaContainerHandler getAwsProxyHandler(Class springBootInitializer, String... profiles) throws ContainerInitializationException { - return new SpringBootProxyHandlerBuilder() + return new SpringBootProxyHandlerBuilder() .defaultProxy() .initializationWrapper(new InitializationWrapper()) .springBootApplication(springBootInitializer) @@ -86,6 +92,23 @@ public static SpringBootLambdaContainerHandler getHttpApiV2ProxyHandler(Class springBootInitializer, String... profiles) + throws ContainerInitializationException { + return new SpringBootProxyHandlerBuilder() + .defaultHttpApiV2Proxy() + .initializationWrapper(new InitializationWrapper()) + .springBootApplication(springBootInitializer) + .profiles(profiles) + .buildAndInitialize(); + } + /** * Creates a new container handler with the given reader and writer objects * @@ -99,7 +122,7 @@ public static SpringBootLambdaContainerHandler requestTypeClass, Class responseTypeClass, - RequestReader requestReader, + RequestReader requestReader, ResponseWriter responseWriter, SecurityContextWriter securityContextWriter, ExceptionHandler exceptionHandler, @@ -130,12 +153,12 @@ public void activateSpringProfiles(String... profiles) { } @Override - protected AwsHttpServletResponse getContainerResponse(AwsProxyHttpServletRequest request, CountDownLatch latch) { + protected AwsHttpServletResponse getContainerResponse(HttpServletRequest request, CountDownLatch latch) { return new AwsHttpServletResponse(request, latch); } @Override - protected void handleRequest(AwsProxyHttpServletRequest containerRequest, AwsHttpServletResponse containerResponse, Context lambdaContext) throws Exception { + protected void handleRequest(HttpServletRequest containerRequest, AwsHttpServletResponse containerResponse, Context lambdaContext) throws Exception { // this method of the AwsLambdaServletContainerHandler sets the servlet context Timer.start("SPRINGBOOT_HANDLE_REQUEST"); @@ -144,11 +167,13 @@ protected void handleRequest(AwsProxyHttpServletRequest containerRequest, AwsHtt initialize(); } - containerRequest.setServletContext(getServletContext()); + if (AwsHttpServletRequest.class.isAssignableFrom(containerRequest.getClass())) { + ((AwsHttpServletRequest)containerRequest).setServletContext(getServletContext()); + ((AwsHttpServletRequest)containerRequest).setResponse(containerResponse); + } // process filters & invoke servlet Servlet reqServlet = ((AwsServletContext)getServletContext()).getServletForPath(containerRequest.getPathInfo()); - containerRequest.setResponse(containerResponse); doFilter(containerRequest, containerResponse, reqServlet); Timer.stop("SPRINGBOOT_HANDLE_REQUEST"); } @@ -169,8 +194,14 @@ public void initialize() springEnv.setActiveProfiles(springProfiles); app.setEnvironment(springEnv); } - app.run(); + ConfigurableApplicationContext applicationContext = app.run(); + ((ConfigurableWebApplicationContext)applicationContext).setServletContext(getServletContext()); + AwsServletRegistration reg = (AwsServletRegistration)getServletContext().getServletRegistration(DISPATCHER_SERVLET_REGISTRATION_NAME); + if (reg != null) { + reg.setLoadOnStartup(1); + } + super.initialize(); initialized = true; Timer.stop("SPRINGBOOT_COLD_START"); } diff --git a/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootProxyHandlerBuilder.java b/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootProxyHandlerBuilder.java index 4ead5bc4d..2f06e73e6 100644 --- a/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootProxyHandlerBuilder.java +++ b/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootProxyHandlerBuilder.java @@ -1,3 +1,15 @@ +/* + * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance + * with the License. A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.proxy.spring; import com.amazonaws.serverless.exceptions.ContainerInitializationException; @@ -7,38 +19,40 @@ import com.amazonaws.serverless.proxy.model.AwsProxyResponse; import org.springframework.web.WebApplicationInitializer; -public final class SpringBootProxyHandlerBuilder extends ServletLambdaContainerHandlerBuilder< - AwsProxyRequest, +import javax.servlet.http.HttpServletRequest; + +public final class SpringBootProxyHandlerBuilder extends ServletLambdaContainerHandlerBuilder< + RequestType, AwsProxyResponse, - AwsProxyHttpServletRequest, - SpringBootLambdaContainerHandler, - SpringBootProxyHandlerBuilder> { + HttpServletRequest, + SpringBootLambdaContainerHandler, + SpringBootProxyHandlerBuilder> { private Class springBootInitializer; private String[] profiles; @Override - protected SpringBootProxyHandlerBuilder self() { + protected SpringBootProxyHandlerBuilder self() { return this; } - public SpringBootProxyHandlerBuilder springBootApplication(Class app) { + public SpringBootProxyHandlerBuilder springBootApplication(Class app) { springBootInitializer = app; return self(); } - public SpringBootProxyHandlerBuilder profiles(String... profiles) { + public SpringBootProxyHandlerBuilder profiles(String... profiles) { this.profiles = profiles; return self(); } @Override - public SpringBootLambdaContainerHandler build() throws ContainerInitializationException { + public SpringBootLambdaContainerHandler build() throws ContainerInitializationException { validate(); if (springBootInitializer == null) { throw new ContainerInitializationException("Missing spring boot application class in builder", null); } - SpringBootLambdaContainerHandler handler = new SpringBootLambdaContainerHandler<>( + SpringBootLambdaContainerHandler handler = new SpringBootLambdaContainerHandler( requestTypeClass, responseTypeClass, requestReader, @@ -55,8 +69,8 @@ public SpringBootLambdaContainerHandler build } @Override - public SpringBootLambdaContainerHandler buildAndInitialize() throws ContainerInitializationException { - SpringBootLambdaContainerHandler handler = build(); + public SpringBootLambdaContainerHandler buildAndInitialize() throws ContainerInitializationException { + SpringBootLambdaContainerHandler handler = build(); initializationWrapper.start(handler); return handler; } diff --git a/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootServletConfigurationSupport.java b/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootServletConfigurationSupport.java index d975bd20e..9857c9620 100644 --- a/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootServletConfigurationSupport.java +++ b/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootServletConfigurationSupport.java @@ -1,3 +1,15 @@ +/* + * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance + * with the License. A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.proxy.spring; import org.springframework.boot.context.embedded.WebApplicationContextServletContextAwareProcessor; diff --git a/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringLambdaContainerHandler.java b/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringLambdaContainerHandler.java index 5168fa96b..862df3bdf 100644 --- a/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringLambdaContainerHandler.java +++ b/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringLambdaContainerHandler.java @@ -18,13 +18,14 @@ import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.serverless.proxy.model.AwsProxyResponse; import com.amazonaws.serverless.proxy.internal.servlet.*; +import com.amazonaws.serverless.proxy.model.HttpApiV2ProxyRequest; import com.amazonaws.services.lambda.runtime.Context; import org.springframework.web.context.ConfigurableWebApplicationContext; -import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; import org.springframework.web.servlet.DispatcherServlet; import javax.servlet.Servlet; import javax.servlet.ServletRegistration; +import javax.servlet.http.HttpServletRequest; import java.util.concurrent.CountDownLatch; @@ -35,7 +36,7 @@ * @param The incoming event type * @param The expected return type */ -public class SpringLambdaContainerHandler extends AwsLambdaServletContainerHandler { +public class SpringLambdaContainerHandler extends AwsLambdaServletContainerHandler { private ConfigurableWebApplicationContext appContext; private String[] profiles; @@ -46,10 +47,10 @@ public class SpringLambdaContainerHandler extends Aws * Creates a default SpringLambdaContainerHandler initialized with the `AwsProxyRequest` and `AwsProxyResponse` objects * @param config A set of classes annotated with the Spring @Configuration annotation * @return An initialized instance of the `SpringLambdaContainerHandler` - * @throws ContainerInitializationException + * @throws ContainerInitializationException When the Spring framework fails to start. */ - public static SpringLambdaContainerHandler getAwsProxyHandler(Class... config) throws ContainerInitializationException { - return new SpringProxyHandlerBuilder() + public static SpringLambdaContainerHandler getAwsProxyHandler(Class... config) throws ContainerInitializationException { + return new SpringProxyHandlerBuilder() .defaultProxy() .initializationWrapper(new InitializationWrapper()) .configurationClasses(config) @@ -61,11 +62,11 @@ public static SpringLambdaContainerHandler ge * @param applicationContext A custom ConfigurableWebApplicationContext to be used * @param profiles The spring profiles to activate * @return An initialized instance of the `SpringLambdaContainerHandler` - * @throws ContainerInitializationException + * @throws ContainerInitializationException When the Spring framework fails to start. */ public static SpringLambdaContainerHandler getAwsProxyHandler(ConfigurableWebApplicationContext applicationContext, String... profiles) throws ContainerInitializationException { - return new SpringProxyHandlerBuilder() + return new SpringProxyHandlerBuilder() .defaultProxy() .initializationWrapper(new InitializationWrapper()) .springApplicationContext(applicationContext) @@ -73,6 +74,20 @@ public static SpringLambdaContainerHandler ge .buildAndInitialize(); } + /** + * Creates a default SpringLambdaContainerHandler initialized with the `HttpApiV2ProxyRequest` and `AwsProxyResponse` objects + * @param config A set of classes annotated with the Spring @Configuration annotation + * @return An initialized instance of the `SpringLambdaContainerHandler` + * @throws ContainerInitializationException When the Spring framework fails to start. + */ + public static SpringLambdaContainerHandler getHttpApiV2ProxyHandler(Class... config) throws ContainerInitializationException { + return new SpringProxyHandlerBuilder() + .defaultHttpApiV2Proxy() + .initializationWrapper(new InitializationWrapper()) + .configurationClasses(config) + .buildAndInitialize(); + } + /** * Creates a new container handler with the given reader and writer objects * @@ -81,17 +96,15 @@ public static SpringLambdaContainerHandler ge * @param responseWriter An implementation of `ResponseWriter` * @param securityContextWriter An implementation of `SecurityContextWriter` * @param exceptionHandler An implementation of `ExceptionHandler` - * @throws ContainerInitializationException */ public SpringLambdaContainerHandler(Class requestTypeClass, Class responseTypeClass, - RequestReader requestReader, + RequestReader requestReader, ResponseWriter responseWriter, SecurityContextWriter securityContextWriter, ExceptionHandler exceptionHandler, ConfigurableWebApplicationContext applicationContext, - InitializationWrapper init) - throws ContainerInitializationException { + InitializationWrapper init) { super(requestTypeClass, responseTypeClass, requestReader, responseWriter, securityContextWriter, exceptionHandler); Timer.start("SPRING_CONTAINER_HANDLER_CONSTRUCTOR"); appContext = applicationContext; @@ -111,7 +124,7 @@ public void setRefreshContext(boolean refresh) { @Override - protected AwsHttpServletResponse getContainerResponse(AwsProxyHttpServletRequest request, CountDownLatch latch) { + protected AwsHttpServletResponse getContainerResponse(HttpServletRequest request, CountDownLatch latch) { return new AwsHttpServletResponse(request, latch); } @@ -131,7 +144,7 @@ public void activateSpringProfiles(String... p) throws ContainerInitializationEx } @Override - protected void handleRequest(AwsProxyHttpServletRequest containerRequest, AwsHttpServletResponse containerResponse, Context lambdaContext) throws Exception { + protected void handleRequest(HttpServletRequest containerRequest, AwsHttpServletResponse containerResponse, Context lambdaContext) throws Exception { Timer.start("SPRING_HANDLE_REQUEST"); if (refreshContext) { @@ -139,11 +152,13 @@ protected void handleRequest(AwsProxyHttpServletRequest containerRequest, AwsHtt refreshContext = false; } - containerRequest.setServletContext(getServletContext()); + if (AwsHttpServletRequest.class.isAssignableFrom(containerRequest.getClass())) { + ((AwsHttpServletRequest)containerRequest).setServletContext(getServletContext()); + ((AwsHttpServletRequest)containerRequest).setResponse(containerResponse); + } // process filters Servlet reqServlet = ((AwsServletContext)getServletContext()).getServletForPath(containerRequest.getPathInfo()); - containerRequest.setResponse(containerResponse); doFilter(containerRequest, containerResponse, reqServlet); Timer.stop("SPRING_HANDLE_REQUEST"); } @@ -160,6 +175,9 @@ public void initialize() DispatcherServlet dispatcher = new DispatcherServlet(appContext); ServletRegistration.Dynamic reg = getServletContext().addServlet("dispatcherServlet", dispatcher); reg.addMapping("/"); + reg.setLoadOnStartup(1); + // call initialize on AwsLambdaServletContainerHandler to initialize servlets that are set to load on startup + super.initialize(); Timer.stop("SPRING_COLD_START"); } } diff --git a/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringProxyHandlerBuilder.java b/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringProxyHandlerBuilder.java index 9bfbf3cbc..689b6de28 100644 --- a/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringProxyHandlerBuilder.java +++ b/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringProxyHandlerBuilder.java @@ -1,3 +1,15 @@ +/* + * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance + * with the License. A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.proxy.spring; import com.amazonaws.serverless.exceptions.ContainerInitializationException; @@ -9,39 +21,41 @@ import org.springframework.web.context.ConfigurableWebApplicationContext; import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; -public final class SpringProxyHandlerBuilder extends ServletLambdaContainerHandlerBuilder< - AwsProxyRequest, +import javax.servlet.http.HttpServletRequest; + +public final class SpringProxyHandlerBuilder extends ServletLambdaContainerHandlerBuilder< + RequestType, AwsProxyResponse, - AwsProxyHttpServletRequest, - SpringLambdaContainerHandler, - SpringProxyHandlerBuilder> { + HttpServletRequest, + SpringLambdaContainerHandler, + SpringProxyHandlerBuilder> { private ConfigurableWebApplicationContext springContext; private Class[] configurationClasses; private String[] profiles; @Override - protected SpringProxyHandlerBuilder self() { + protected SpringProxyHandlerBuilder self() { return this; } - public SpringProxyHandlerBuilder springApplicationContext(ConfigurableWebApplicationContext app) { + public SpringProxyHandlerBuilder springApplicationContext(ConfigurableWebApplicationContext app) { springContext = app; return self(); } - public SpringProxyHandlerBuilder configurationClasses(Class... config) { + public SpringProxyHandlerBuilder configurationClasses(Class... config) { configurationClasses = config; return self(); } - public SpringProxyHandlerBuilder profiles(String... profiles) { + public SpringProxyHandlerBuilder profiles(String... profiles) { this.profiles = profiles; return self(); } @Override - public SpringLambdaContainerHandler build() throws ContainerInitializationException { + public SpringLambdaContainerHandler build() throws ContainerInitializationException { validate(); if (springContext == null && (configurationClasses == null || configurationClasses.length == 0)) { throw new ContainerInitializationException("Missing both configuration classes and application context, at least" + @@ -55,7 +69,7 @@ public SpringLambdaContainerHandler build() t } } - SpringLambdaContainerHandler handler = new SpringLambdaContainerHandler<>( + SpringLambdaContainerHandler handler = new SpringLambdaContainerHandler( requestTypeClass, responseTypeClass, requestReader, @@ -72,8 +86,8 @@ public SpringLambdaContainerHandler build() t } @Override - public SpringLambdaContainerHandler buildAndInitialize() throws ContainerInitializationException { - SpringLambdaContainerHandler handler = build(); + public SpringLambdaContainerHandler buildAndInitialize() throws ContainerInitializationException { + SpringLambdaContainerHandler handler = build(); initializationWrapper.start(handler); return handler; } diff --git a/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactory.java b/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactory.java index 4e9a8836c..bd567ed7d 100644 --- a/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactory.java +++ b/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactory.java @@ -1,3 +1,15 @@ +/* + * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance + * with the License. A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.proxy.spring.embedded; import com.amazonaws.serverless.proxy.internal.servlet.AwsLambdaServletContainerHandler; diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringAwsProxyTest.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringAwsProxyTest.java index b9cb728d6..c1365a5b1 100644 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringAwsProxyTest.java +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringAwsProxyTest.java @@ -1,8 +1,10 @@ package com.amazonaws.serverless.proxy.spring; +import com.amazonaws.serverless.exceptions.ContainerInitializationException; import com.amazonaws.serverless.proxy.internal.LambdaContainerHandler; -import com.amazonaws.serverless.proxy.model.AwsProxyRequest; -import com.amazonaws.serverless.proxy.model.AwsProxyResponse; +import com.amazonaws.serverless.proxy.internal.servlet.AwsLambdaServletContainerHandler; +import com.amazonaws.serverless.proxy.internal.servlet.AwsServletRegistration; +import com.amazonaws.serverless.proxy.model.*; import com.amazonaws.serverless.proxy.internal.servlet.AwsServletContext; import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; import com.amazonaws.serverless.proxy.internal.testutils.MockLambdaContext; @@ -12,12 +14,14 @@ import com.amazonaws.serverless.proxy.spring.echoapp.UnauthenticatedFilter; import com.amazonaws.serverless.proxy.spring.echoapp.model.MapResponseModel; import com.amazonaws.serverless.proxy.spring.echoapp.model.SingleValueModel; +import com.amazonaws.services.lambda.runtime.Context; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.commons.codec.binary.Base64; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; @@ -25,35 +29,88 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.support.DependencyInjectionTestExecutionListener; import org.springframework.test.context.web.WebAppConfiguration; +import org.springframework.web.servlet.DispatcherServlet; +import javax.servlet.DispatcherType; +import javax.servlet.FilterRegistration; import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.MediaType; import java.io.IOException; import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; import java.time.temporal.ChronoUnit; +import java.util.Arrays; +import java.util.Collection; +import java.util.EnumSet; import java.util.UUID; import static org.junit.Assert.*; +import static org.junit.Assume.assumeFalse; +import static org.junit.Assume.assumeTrue; -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(classes = {EchoSpringAppConfig.class}) -@WebAppConfiguration -@TestExecutionListeners(inheritListeners = false, listeners = {DependencyInjectionTestExecutionListener.class}) -@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS) +@RunWith(Parameterized.class) public class SpringAwsProxyTest { private static final String CUSTOM_HEADER_KEY = "x-custom-header"; private static final String CUSTOM_HEADER_VALUE = "my-custom-value"; private static final String AUTHORIZER_PRINCIPAL_ID = "test-principal-" + UUID.randomUUID().toString(); + private static final String UNICODE_VALUE = "שלום לכולם"; - @Autowired - private ObjectMapper objectMapper; + private ObjectMapper objectMapper = new ObjectMapper(); + private MockLambdaContext lambdaContext = new MockLambdaContext(); + private static SpringLambdaContainerHandler handler; + private static SpringLambdaContainerHandler httpApiHandler; - @Autowired - private MockLambdaContext lambdaContext; + private AwsLambdaServletContainerHandler.StartupHandler h = (c -> { + FilterRegistration.Dynamic registration = c.addFilter("UnauthenticatedFilter", UnauthenticatedFilter.class); + // update the registration to map to a path + registration.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), true, "/echo/*"); + // servlet name mappings are disabled and will throw an exception - @Autowired - private SpringLambdaContainerHandler handler; + //handler.getApplicationInitializer().getDispatcherServlet().setThrowExceptionIfNoHandlerFound(true); + ((DispatcherServlet)((AwsServletRegistration)c.getServletRegistration("dispatcherServlet")).getServlet()).setThrowExceptionIfNoHandlerFound(true); + }); + + private String type; + + @Parameterized.Parameters + public static Collection data() { + return Arrays.asList(new Object[] { "API_GW", "ALB", "HTTP_API" }); + } + + public SpringAwsProxyTest(String reqType) { + type = reqType; + } + + private AwsProxyResponse executeRequest(AwsProxyRequestBuilder requestBuilder, Context lambdaContext) { + try { + switch (type) { + case "API_GW": + if (handler == null) { + handler = SpringLambdaContainerHandler.getAwsProxyHandler(EchoSpringAppConfig.class); + handler.onStartup(h); + } + return handler.proxy(requestBuilder.build(), lambdaContext); + case "ALB": + if (handler == null) { + handler = SpringLambdaContainerHandler.getAwsProxyHandler(EchoSpringAppConfig.class); + handler.onStartup(h); + } + return handler.proxy(requestBuilder.alb().build(), lambdaContext); + case "HTTP_API": + if (httpApiHandler == null) { + httpApiHandler = SpringLambdaContainerHandler.getHttpApiV2ProxyHandler(EchoSpringAppConfig.class); + httpApiHandler.onStartup(h); + } + return httpApiHandler.proxy(requestBuilder.toHttpApiV2Request(), lambdaContext); + default: + throw new RuntimeException("Unknown request type: " + type); + } + } catch (ContainerInitializationException e) { + e.printStackTrace(); + fail("Could not execute request"); + throw new RuntimeException(e); + } + } @Before public void clearServletContextCache() { @@ -62,12 +119,11 @@ public void clearServletContextCache() { @Test public void controllerAdvice_invalidPath_returnAdvice() { - AwsProxyRequest request = new AwsProxyRequestBuilder("/echo2", "GET") + AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo2", "GET") .json() - .header(CUSTOM_HEADER_KEY, CUSTOM_HEADER_VALUE) - .build(); + .header(CUSTOM_HEADER_KEY, CUSTOM_HEADER_VALUE); - AwsProxyResponse output = handler.proxy(request, lambdaContext); + AwsProxyResponse output = executeRequest(request, lambdaContext); assertNotNull(output); assertEquals(404, output.getStatusCode()); validateSingleValueModel(output, RestControllerAdvice.ERROR_MESSAGE); @@ -76,12 +132,11 @@ public void controllerAdvice_invalidPath_returnAdvice() { @Test public void headers_getHeaders_echo() { - AwsProxyRequest request = new AwsProxyRequestBuilder("/echo/headers", "GET") + AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo/headers", "GET") .json() - .header(CUSTOM_HEADER_KEY, CUSTOM_HEADER_VALUE) - .build(); + .header(CUSTOM_HEADER_KEY, CUSTOM_HEADER_VALUE); - AwsProxyResponse output = handler.proxy(request, lambdaContext); + AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(200, output.getStatusCode()); assertEquals("application/json", output.getMultiValueHeaders().getFirst("Content-Type").split(";")[0]); @@ -90,12 +145,11 @@ public void headers_getHeaders_echo() { @Test public void headers_servletRequest_echo() { - AwsProxyRequest request = new AwsProxyRequestBuilder("/echo/servlet-headers", "GET") + AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo/servlet-headers", "GET") .json() - .header(CUSTOM_HEADER_KEY, CUSTOM_HEADER_VALUE) - .build(); + .header(CUSTOM_HEADER_KEY, CUSTOM_HEADER_VALUE); - AwsProxyResponse output = handler.proxy(request, lambdaContext); + AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(200, output.getStatusCode()); assertEquals("application/json", output.getMultiValueHeaders().getFirst("Content-Type").split(";")[0]); @@ -104,12 +158,11 @@ public void headers_servletRequest_echo() { @Test public void queryString_uriInfo_echo() { - AwsProxyRequest request = new AwsProxyRequestBuilder("/echo/query-string", "GET") + AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo/query-string", "GET") .json() - .queryString(CUSTOM_HEADER_KEY, CUSTOM_HEADER_VALUE) - .build(); + .queryString(CUSTOM_HEADER_KEY, CUSTOM_HEADER_VALUE); - AwsProxyResponse output = handler.proxy(request, lambdaContext); + AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(200, output.getStatusCode()); assertEquals("application/json", output.getMultiValueHeaders().getFirst("Content-Type").split(";")[0]); @@ -118,12 +171,11 @@ public void queryString_uriInfo_echo() { @Test public void queryString_listParameter_expectCorrectLength() { - AwsProxyRequest request = new AwsProxyRequestBuilder("/echo/list-query-string", "GET") + AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo/list-query-string", "GET") .json() - .queryString("list", "v1,v2,v3") - .build(); + .queryString("list", "v1,v2,v3"); - AwsProxyResponse output = handler.proxy(request, lambdaContext); + AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(200, output.getStatusCode()); validateSingleValueModel(output, "3"); @@ -132,13 +184,12 @@ public void queryString_listParameter_expectCorrectLength() { @Test public void queryString_multiParam_expectCorrectValueCount() throws IOException { - AwsProxyRequest request = new AwsProxyRequestBuilder("/echo/multivalue-query-string", "GET") + AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo/multivalue-query-string", "GET") .json() .queryString("multiple", "first") - .queryString("multiple", "second") - .build(); + .queryString("multiple", "second"); - AwsProxyResponse output = handler.proxy(request, lambdaContext); + AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(200, output.getStatusCode()); MapResponseModel response = objectMapper.readValue(output.getBody(), MapResponseModel.class); @@ -149,42 +200,40 @@ public void queryString_multiParam_expectCorrectValueCount() @Test public void dateHeader_notModified_expect304() { - AwsProxyRequest request = new AwsProxyRequestBuilder("/echo/last-modified", "GET") + AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo/last-modified", "GET") .json() .header( HttpHeaders.IF_MODIFIED_SINCE, DateTimeFormatter.RFC_1123_DATE_TIME.format(ZonedDateTime.now().minus(1, ChronoUnit.SECONDS)) - ) - .build(); + ); - AwsProxyResponse output = handler.proxy(request, lambdaContext); + AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(304, output.getStatusCode()); assertEquals("", output.getBody()); } @Test public void dateHeader_notModified_expect200() { - AwsProxyRequest request = new AwsProxyRequestBuilder("/echo/last-modified", "GET") + AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo/last-modified", "GET") .json() .header( HttpHeaders.IF_MODIFIED_SINCE, DateTimeFormatter.RFC_1123_DATE_TIME.format(ZonedDateTime.now().minus(5, ChronoUnit.DAYS)) - ) - .build(); + ); - AwsProxyResponse output = handler.proxy(request, lambdaContext); + AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(200, output.getStatusCode()); assertEquals(EchoResource.STRING_BODY, output.getBody()); } @Test public void authorizer_securityContext_customPrincipalSuccess() { - AwsProxyRequest request = new AwsProxyRequestBuilder("/echo/authorizer-principal", "GET") + assumeTrue("API_GW".equals(type)); + AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo/authorizer-principal", "GET") .json() - .authorizerPrincipal(AUTHORIZER_PRINCIPAL_ID) - .build(); + .authorizerPrincipal(AUTHORIZER_PRINCIPAL_ID); - AwsProxyResponse output = handler.proxy(request, lambdaContext); + AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(200, output.getStatusCode()); assertEquals("application/json", output.getMultiValueHeaders().getFirst("Content-Type").split(";")[0]); @@ -193,43 +242,40 @@ public void authorizer_securityContext_customPrincipalSuccess() { @Test public void errors_unknownRoute_expect404() { - AwsProxyRequest request = new AwsProxyRequestBuilder("/echo/test33", "GET").build(); + AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo/test33", "GET"); - AwsProxyResponse output = handler.proxy(request, lambdaContext); + AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(404, output.getStatusCode()); } @Test public void error_contentType_invalidContentType() { - AwsProxyRequest request = new AwsProxyRequestBuilder("/echo/json-body", "POST") + AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo/json-body", "POST") .header("Content-Type", "application/octet-stream") - .body("asdasdasd") - .build(); + .body("asdasdasd"); - AwsProxyResponse output = handler.proxy(request, lambdaContext); + AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(415, output.getStatusCode()); } @Test public void error_statusCode_methodNotAllowed() { - AwsProxyRequest request = new AwsProxyRequestBuilder("/echo/status-code", "POST") + AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo/status-code", "POST") .json() - .queryString("status", "201") - .build(); + .queryString("status", "201"); - AwsProxyResponse output = handler.proxy(request, lambdaContext); + AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(405, output.getStatusCode()); } @Test public void error_unauthenticatedCall_filterStepsRequest() { - AwsProxyRequest request = new AwsProxyRequestBuilder("/echo/status-code", "GET") + AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo/status-code", "GET") .header(UnauthenticatedFilter.HEADER_NAME, "1") .json() - .queryString("status", "201") - .build(); + .queryString("status", "201"); - AwsProxyResponse output = handler.proxy(request, lambdaContext); + AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(401, output.getStatusCode()); } @@ -237,46 +283,58 @@ public void error_unauthenticatedCall_filterStepsRequest() { public void responseBody_responseWriter_validBody() throws JsonProcessingException { SingleValueModel singleValueModel = new SingleValueModel(); singleValueModel.setValue(CUSTOM_HEADER_VALUE); - AwsProxyRequest request = new AwsProxyRequestBuilder("/echo/json-body", "POST") + AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo/json-body", "POST") .json() .header("Content-Type", "application/json") - .body(objectMapper.writeValueAsString(singleValueModel)) - .build(); + .body(objectMapper.writeValueAsString(singleValueModel)); - AwsProxyResponse output = handler.proxy(request, lambdaContext); + AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(200, output.getStatusCode()); assertNotNull(output.getBody()); validateSingleValueModel(output, CUSTOM_HEADER_VALUE); } + @Test + public void responseBody_responseWriter_validBody_UTF() throws JsonProcessingException { + SingleValueModel singleValueModel = new SingleValueModel(); + singleValueModel.setValue(UNICODE_VALUE); + AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo/json-body", "POST") + .header("Content-Type", "application/json; charset=UTF-8") + .body(objectMapper.writeValueAsString(singleValueModel)); + LambdaContainerHandler.getContainerConfig().setDefaultContentCharset("UTF-8"); + AwsProxyResponse output = executeRequest(request, lambdaContext); + assertEquals(200, output.getStatusCode()); + assertNotNull(output.getBody()); + validateSingleValueModel(output, UNICODE_VALUE); + LambdaContainerHandler.getContainerConfig().setDefaultContentCharset(ContainerConfig.DEFAULT_CONTENT_CHARSET); + } + @Test public void statusCode_responseStatusCode_customStatusCode() { - AwsProxyRequest request = new AwsProxyRequestBuilder("/echo/status-code", "GET") + AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo/status-code", "GET") .json() - .queryString("status", "201") - .build(); + .queryString("status", "201"); - AwsProxyResponse output = handler.proxy(request, lambdaContext); + AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(201, output.getStatusCode()); } @Test public void base64_binaryResponse_base64Encoding() { - AwsProxyRequest request = new AwsProxyRequestBuilder("/echo/binary", "GET").build(); + AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo/binary", "GET"); - AwsProxyResponse response = handler.proxy(request, lambdaContext); + AwsProxyResponse response = executeRequest(request, lambdaContext); assertNotNull(response.getBody()); assertTrue(Base64.isBase64(response.getBody())); } @Test public void injectBody_populatedResponse_noException() { - AwsProxyRequest request = new AwsProxyRequestBuilder("/echo/request-body", "POST") + AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo/request-body", "POST") .header(HttpHeaders.CONTENT_TYPE, "text/plain") - .body("This is a populated body") - .build(); + .body("This is a populated body"); - AwsProxyResponse response = handler.proxy(request, lambdaContext); + AwsProxyResponse response = executeRequest(request, lambdaContext); assertNotNull(response.getBody()); assertEquals(200, response.getStatusCode()); try { @@ -287,9 +345,8 @@ public void injectBody_populatedResponse_noException() { fail(); } - AwsProxyRequest emptyReq = new AwsProxyRequestBuilder("/echo/request-body", "POST") - .build(); - AwsProxyResponse emptyResp = handler.proxy(emptyReq, lambdaContext); + AwsProxyRequestBuilder emptyReq = new AwsProxyRequestBuilder("/echo/request-body", "POST"); + AwsProxyResponse emptyResp = executeRequest(emptyReq, lambdaContext); try { SingleValueModel output = objectMapper.readValue(emptyResp.getBody(), SingleValueModel.class); assertEquals(null, output.getValue()); @@ -303,28 +360,26 @@ public void injectBody_populatedResponse_noException() { public void servletRequestEncoding_acceptEncoding_okStatusCode() { SingleValueModel singleValueModel = new SingleValueModel(); singleValueModel.setValue(CUSTOM_HEADER_VALUE); - AwsProxyRequest request = null; + AwsProxyRequestBuilder request = null; try { request = new AwsProxyRequestBuilder("/echo/json-body", "POST") .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON) .header(HttpHeaders.ACCEPT_ENCODING, "gzip, deflate") .queryString("status", "200") - .body(objectMapper.writeValueAsString(singleValueModel)) - .build(); + .body(objectMapper.writeValueAsString(singleValueModel)); } catch (JsonProcessingException e) { fail("Could not serialize object to JSON"); } - AwsProxyResponse output = handler.proxy(request, lambdaContext); + AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(200, output.getStatusCode()); } @Test public void request_requestURI() { - AwsProxyRequest request = new AwsProxyRequestBuilder("/echo/request-URI", "GET") - .build(); + AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo/request-URI", "GET"); - AwsProxyResponse output = handler.proxy(request, lambdaContext); + AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(200, output.getStatusCode()); validateSingleValueModel(output, "/echo/request-URI"); @@ -332,13 +387,12 @@ public void request_requestURI() { @Test public void request_requestURL() { - AwsProxyRequest request = new AwsProxyRequestBuilder("/echo/request-url", "GET") + AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo/request-url", "GET") .scheme("https") .serverName("api.myserver.com") - .stage("prod") - .build(); + .stage("prod"); handler.stripBasePath(""); - AwsProxyResponse output = handler.proxy(request, lambdaContext); + AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(200, output.getStatusCode()); validateSingleValueModel(output, "https://api.myserver.com/echo/request-url"); @@ -346,13 +400,12 @@ public void request_requestURL() { @Test public void request_encodedPath_returnsDecodedPath() { - AwsProxyRequest request = new AwsProxyRequestBuilder("/echo/encoded-request-uri/Some%20Thing", "GET") + AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo/encoded-request-uri/Some%20Thing", "GET") .scheme("https") .serverName("api.myserver.com") - .stage("prod") - .build(); + .stage("prod"); - AwsProxyResponse output = handler.proxy(request, lambdaContext); + AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(200, output.getStatusCode()); validateSingleValueModel(output, "Some Thing"); @@ -361,15 +414,15 @@ public void request_encodedPath_returnsDecodedPath() { @Test public void contextPath_generateLink_returnsCorrectPath() { - AwsProxyRequest request = new AwsProxyRequestBuilder("/echo/generate-uri", "GET") + assumeFalse("ALB".equals(type)); + AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo/generate-uri", "GET") .scheme("https") .serverName("api.myserver.com") - .stage("prod") - .build(); + .stage("prod"); LambdaContainerHandler.getContainerConfig().addCustomDomain("api.myserver.com"); SpringLambdaContainerHandler.getContainerConfig().setUseStageAsServletContext(true); - AwsProxyResponse output = handler.proxy(request, lambdaContext); + AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(200, output.getStatusCode()); String expectedUri = "https://api.myserver.com/prod/echo/encoded-request-uri/" + EchoResource.TEST_GENERATE_URI; @@ -382,11 +435,10 @@ public void contextPath_generateLink_returnsCorrectPath() { @Test public void multipart_getFileName_returnsCorrectFileName() throws IOException { - AwsProxyRequest request = new AwsProxyRequestBuilder("/echo/attachment", "POST") - .formFilePart("testFile", "myFile.txt", "hello".getBytes()) - .build(); + AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo/attachment", "POST") + .formFilePart("testFile", "myFile.txt", "hello".getBytes()); - AwsProxyResponse output = handler.proxy(request, lambdaContext); + AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(200, output.getStatusCode()); assertEquals("testFile", output.getBody()); diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringBootAppTest.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringBootAppTest.java index d453dfe43..2a345b6ff 100644 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringBootAppTest.java +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringBootAppTest.java @@ -15,10 +15,14 @@ import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.BeforeClass; import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; import org.springframework.core.SpringVersion; import javax.ws.rs.core.HttpHeaders; import java.io.IOException; +import java.util.Arrays; +import java.util.Collection; import java.util.Objects; import static com.amazonaws.serverless.proxy.spring.springbootapp.TestController.CUSTOM_HEADER_NAME; @@ -27,11 +31,19 @@ import static org.junit.Assume.assumeFalse; +@RunWith(Parameterized.class) public class SpringBootAppTest { - private LambdaHandler handler = new LambdaHandler(); + private LambdaHandler handler; private MockLambdaContext context = new MockLambdaContext(); private ObjectMapper mapper = new ObjectMapper(); + private String type; + + @Parameterized.Parameters + public static Collection data() { + return Arrays.asList(new Object[] { "API_GW", "ALB", "HTTP_API" }); + } + @BeforeClass public static void before() { // We skip the tests if we are running against Spring 5.2.x - SpringBoot 1.5 is deprecated and no longer @@ -40,9 +52,14 @@ public static void before() { assumeFalse(Objects.requireNonNull(SpringVersion.getVersion()).startsWith("5.2")); } + public SpringBootAppTest(String reqType) { + type = reqType; + handler = new LambdaHandler(type); + } + @Test public void testMethod_springSecurity_doesNotThrowException() { - AwsProxyRequest req = new AwsProxyRequestBuilder("/test", "GET").build(); + AwsProxyRequestBuilder req = new AwsProxyRequestBuilder("/test", "GET"); AwsProxyResponse resp = handler.handleRequest(req, context); assertNotNull(resp); assertEquals(200, resp.getStatusCode()); @@ -51,7 +68,7 @@ public void testMethod_springSecurity_doesNotThrowException() { @Test public void testMethod_testRequestFromString_doesNotThrowNpe() throws IOException { - AwsProxyRequest req = new AwsProxyRequestBuilder().fromJsonString("{\n" + + AwsProxyRequestBuilder req = new AwsProxyRequestBuilder().fromJsonString("{\n" + " \"resource\": \"/missing-params\",\n" + " \"path\": \"/missing-params\",\n" + " \"httpMethod\": \"GET\",\n" + @@ -81,25 +98,25 @@ public void testMethod_testRequestFromString_doesNotThrowNpe() throws IOExceptio " },\n" + " \"body\": \"{ \\\"Key1\\\": \\\"Value1\\\", \\\"Key2\\\": \\\"Value2\\\", \\\"Key3\\\": \\\"Vaue3\\\" }\",\n" + " \"isBase64Encoded\": \"false\"\n" + - "}").build(); + "}"); AwsProxyResponse resp = handler.handleRequest(req, context); assertNotNull(resp); // Spring identifies the missing header assertEquals(400, resp.getStatusCode()); - req.setMultiValueHeaders(new Headers()); - req.getMultiValueHeaders().add(CUSTOM_HEADER_NAME, "val"); + req.multiValueHeaders(new Headers()); + req.header(CUSTOM_HEADER_NAME, "val"); resp = handler.handleRequest(req, context); assertEquals(400, resp.getStatusCode()); - req.setMultiValueQueryStringParameters(new MultiValuedTreeMap<>()); - req.getMultiValueQueryStringParameters().add(CUSTOM_QS_NAME, "val"); + req.multiValueQueryString(new MultiValuedTreeMap<>()); + req.queryString(CUSTOM_QS_NAME, "val"); resp = handler.handleRequest(req, context); assertEquals(200, resp.getStatusCode()); } @Test public void defaultError_requestForward_springBootForwardsToDefaultErrorPage() { - AwsProxyRequest req = new AwsProxyRequestBuilder("/test2", "GET").build(); + AwsProxyRequestBuilder req = new AwsProxyRequestBuilder("/test2", "GET"); AwsProxyResponse resp = handler.handleRequest(req, context); assertNotNull(resp); assertEquals(404, resp.getStatusCode()); @@ -108,7 +125,7 @@ public void defaultError_requestForward_springBootForwardsToDefaultErrorPage() { @Test public void requestUri_dotInPathParam_expectRoutingToMethod() { - AwsProxyRequest req = new AwsProxyRequestBuilder("/test/testdomain.com", "GET").build(); + AwsProxyRequestBuilder req = new AwsProxyRequestBuilder("/test/testdomain.com", "GET"); AwsProxyResponse resp = handler.handleRequest(req, context); assertNotNull(resp); @@ -118,8 +135,8 @@ public void requestUri_dotInPathParam_expectRoutingToMethod() { @Test public void queryString_commaSeparatedList_expectUnmarshalAsList() { - AwsProxyRequest req = new AwsProxyRequestBuilder("/test/query-string", "GET") - .queryString("list", "v1,v2,v3").build(); + AwsProxyRequestBuilder req = new AwsProxyRequestBuilder("/test/query-string", "GET") + .queryString("list", "v1,v2,v3"); AwsProxyResponse resp = handler.handleRequest(req, context); assertNotNull(resp); assertEquals(200, resp.getStatusCode()); @@ -128,8 +145,8 @@ public void queryString_commaSeparatedList_expectUnmarshalAsList() { @Test public void queryString_multipleParamsWithSameName_expectUnmarshalAsList() { - AwsProxyRequest req = new AwsProxyRequestBuilder("/test/query-string", "GET") - .queryString("list", "v1").queryString("list", "v2").build(); + AwsProxyRequestBuilder req = new AwsProxyRequestBuilder("/test/query-string", "GET") + .queryString("list", "v1").queryString("list", "v2"); AwsProxyResponse resp = handler.handleRequest(req, context); assertNotNull(resp); assertEquals(200, resp.getStatusCode()); @@ -138,11 +155,10 @@ public void queryString_multipleParamsWithSameName_expectUnmarshalAsList() { @Test public void staticContent_getHtmlFile_returnsHtmlContent() { - LambdaContainerHandler.getContainerConfig().addValidFilePath("/Users/bulianis/workspace/aws-serverless-java-container/aws-serverless-java-container-spring"); - AwsProxyRequest request = new AwsProxyRequestBuilder("/static.html", "GET") + LambdaContainerHandler.getContainerConfig().addValidFilePath(System.getProperty("user.dir")); + AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/static.html", "GET") .header(HttpHeaders.ACCEPT, "text/html") - .header(HttpHeaders.CONTENT_TYPE, "text/plain") - .build(); + .header(HttpHeaders.CONTENT_TYPE, "text/plain"); AwsProxyResponse output = handler.handleRequest(request, context); assertEquals(200, output.getStatusCode()); assertTrue(output.getBody().contains("

Static

")); @@ -151,8 +167,19 @@ public void staticContent_getHtmlFile_returnsHtmlContent() { @Test public void utf8_returnUtf8String_expectCorrectHeaderMediaAndCharset() { LambdaContainerHandler.getContainerConfig().setDefaultContentCharset("UTF-8"); - AwsProxyRequest request = new AwsProxyRequestBuilder("/test/utf8", "GET") - .build(); + AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/test/utf8", "GET"); + AwsProxyResponse output = handler.handleRequest(request, context); + validateSingleValueModel(output, TestController.UTF8_TEST_STRING); + assertTrue(output.getMultiValueHeaders().containsKey(HttpHeaders.CONTENT_TYPE)); + assertTrue(output.getMultiValueHeaders().getFirst(HttpHeaders.CONTENT_TYPE).contains(";")); + assertTrue(output.getMultiValueHeaders().getFirst(HttpHeaders.CONTENT_TYPE).contains("charset=UTF-8")); + } + + @Test + public void utf8_returnUtf8String_expectCorrectHeaderMediaAndCharsetNoDefault() { + + AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/test/utf8", "GET") + .header("Content-Type", "application/json; charset=UTF-8"); AwsProxyResponse output = handler.handleRequest(request, context); validateSingleValueModel(output, TestController.UTF8_TEST_STRING); assertTrue(output.getMultiValueHeaders().containsKey(HttpHeaders.CONTENT_TYPE)); diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/EchoSpringAppConfig.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/EchoSpringAppConfig.java index c32935c70..a4d5f069c 100644 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/EchoSpringAppConfig.java +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/EchoSpringAppConfig.java @@ -1,65 +1,18 @@ package com.amazonaws.serverless.proxy.spring.echoapp; -import com.amazonaws.serverless.exceptions.ContainerInitializationException; -import com.amazonaws.serverless.proxy.AwsProxyExceptionHandler; -import com.amazonaws.serverless.proxy.AwsProxySecurityContextWriter; -import com.amazonaws.serverless.proxy.InitializationWrapper; -import com.amazonaws.serverless.proxy.internal.servlet.AwsProxyHttpServletRequestReader; -import com.amazonaws.serverless.proxy.internal.servlet.AwsProxyHttpServletResponseWriter; -import com.amazonaws.serverless.proxy.internal.servlet.AwsServletRegistration; import com.amazonaws.serverless.proxy.internal.testutils.MockLambdaContext; -import com.amazonaws.serverless.proxy.model.AwsProxyRequest; -import com.amazonaws.serverless.proxy.model.AwsProxyResponse; -import com.amazonaws.serverless.proxy.spring.SpringLambdaContainerHandler; -import com.amazonaws.serverless.proxy.spring.SpringProxyHandlerBuilder; import com.fasterxml.jackson.databind.ObjectMapper; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean; import org.springframework.context.annotation.PropertySource; -import org.springframework.web.context.ConfigurableWebApplicationContext; -import org.springframework.web.servlet.DispatcherServlet; - -import javax.servlet.DispatcherType; -import javax.servlet.FilterRegistration; -import javax.servlet.ServletException; - -import java.util.EnumSet; @Configuration @ComponentScan("com.amazonaws.serverless.proxy.spring.echoapp") @PropertySource("classpath:application.properties") public class EchoSpringAppConfig { - - @Autowired - private ConfigurableWebApplicationContext applicationContext; - - @Bean - public SpringLambdaContainerHandler springLambdaContainerHandler() throws ContainerInitializationException { - SpringLambdaContainerHandler handler = new SpringProxyHandlerBuilder() - .defaultProxy() - .initializationWrapper(new InitializationWrapper()) - .springApplicationContext(applicationContext) - .buildAndInitialize(); - handler.onStartup(c -> { - FilterRegistration.Dynamic registration = c.addFilter("UnauthenticatedFilter", UnauthenticatedFilter.class); - // update the registration to map to a path - registration.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), true, "/echo/*"); - // servlet name mappings are disabled and will throw an exception - - //handler.getApplicationInitializer().getDispatcherServlet().setThrowExceptionIfNoHandlerFound(true); - try { - ((DispatcherServlet)((AwsServletRegistration)c.getServletRegistration("dispatcherServlet")).getServlet()).setThrowExceptionIfNoHandlerFound(true); - } catch (ServletException e) { - e.printStackTrace(); - } - }); - return handler; - } - @Bean public ObjectMapper objectMapper() { return new ObjectMapper(); diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springbootapp/LambdaHandler.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springbootapp/LambdaHandler.java index 4ca9c4b2c..aee0bd035 100644 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springbootapp/LambdaHandler.java +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springbootapp/LambdaHandler.java @@ -2,8 +2,10 @@ import com.amazonaws.serverless.exceptions.ContainerInitializationException; +import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.serverless.proxy.model.AwsProxyResponse; +import com.amazonaws.serverless.proxy.model.HttpApiV2ProxyRequest; import com.amazonaws.serverless.proxy.spring.SpringBootLambdaContainerHandler; import com.amazonaws.serverless.proxy.spring.springbootapp.TestApplication; import com.amazonaws.services.lambda.runtime.Context; @@ -11,24 +13,46 @@ public class LambdaHandler - implements RequestHandler + implements RequestHandler { SpringBootLambdaContainerHandler handler; - boolean isinitialized = false; + SpringBootLambdaContainerHandler httpApiHandler; + private String type; - public AwsProxyResponse handleRequest(AwsProxyRequest awsProxyRequest, Context context) + public LambdaHandler(String reqType) { + type = reqType; + switch (type) { + case "API_GW": + case "ALB": + try { + handler = SpringBootLambdaContainerHandler.getAwsProxyHandler(TestApplication.class); + } catch (ContainerInitializationException e) { + e.printStackTrace(); + throw new RuntimeException(e); + } + break; + case "HTTP_API": + try { + httpApiHandler = SpringBootLambdaContainerHandler.getHttpApiV2ProxyHandler(TestApplication.class); + } catch (ContainerInitializationException e) { + e.printStackTrace(); + throw new RuntimeException(e); + } + } + } + + public AwsProxyResponse handleRequest(AwsProxyRequestBuilder awsProxyRequest, Context context) { - if (!isinitialized) { - isinitialized = true; - try { - handler = SpringBootLambdaContainerHandler.getAwsProxyHandler(TestApplication.class); - } catch (ContainerInitializationException e) { - e.printStackTrace(); - return null; - } + switch (type) { + case "API_GW": + return handler.proxy(awsProxyRequest.build(), context); + case "ALB": + return handler.proxy(awsProxyRequest.alb().build(), context); + case "HTTP_API": + return httpApiHandler.proxy(awsProxyRequest.toHttpApiV2Request(), context); + default: + throw new RuntimeException("Unknown request type: " + type); } - AwsProxyResponse res = handler.proxy(awsProxyRequest, context); - return res; } } diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springbootslowapp/SBLambdaHandler.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springbootslowapp/SBLambdaHandler.java index 64a399a22..157b6c438 100644 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springbootslowapp/SBLambdaHandler.java +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springbootslowapp/SBLambdaHandler.java @@ -20,9 +20,9 @@ public class SBLambdaHandler public SBLambdaHandler() throws ContainerInitializationException { long startTime = Instant.now().toEpochMilli(); - handler = new SpringBootProxyHandlerBuilder() + handler = new SpringBootProxyHandlerBuilder() .defaultProxy() - .asyncInit(startTime) + .asyncInit(Instant.now().toEpochMilli()) .springBootApplication(TestApplication.class) .buildAndInitialize(); constructorTime = Instant.now().toEpochMilli() - startTime; diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springslowapp/LambdaHandler.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springslowapp/LambdaHandler.java index b61a7191f..935954d0f 100644 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springslowapp/LambdaHandler.java +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springslowapp/LambdaHandler.java @@ -16,9 +16,9 @@ public class LambdaHandler implements RequestHandler() .defaultProxy() - .asyncInit(startTime) + .asyncInit() .configurationClasses(SlowAppConfig.class) .buildAndInitialize(); constructorTime = Instant.now().toEpochMilli() - startTime; diff --git a/aws-serverless-java-container-springboot2/pom.xml b/aws-serverless-java-container-springboot2/pom.xml index 90c98f009..10d995fee 100644 --- a/aws-serverless-java-container-springboot2/pom.xml +++ b/aws-serverless-java-container-springboot2/pom.xml @@ -1,5 +1,6 @@ - + aws-serverless-java-container com.amazonaws.serverless @@ -15,10 +16,9 @@ 1.5-SNAPSHOT - 5.1.9.RELEASE - 5.1.6.RELEASE - 2.1.8.RELEASE - + 5.2.5.RELEASE + 2.2.6.RELEASE + 5.2.2.RELEASE 1.8 1.8 @@ -42,6 +42,16 @@ spring-boot ${springboot.version} true + + + org.springframework + spring-context + + + org.springframework + spring-core + + org.springframework.boot @@ -49,16 +59,105 @@ ${springboot.version} true + + org.springframework + spring-core + ${spring.version} + true + + + org.springframework + spring-context + ${spring.version} + true + + + org.springframework + spring-webmvc + ${spring.version} + true + + + org.springframework + spring-aop + + + org.springframework + spring-expression + + + + org.springframework.security spring-security-config ${springsecurity.version} + + + org.springframework + spring-context + + + org.springframework + spring-beans + + + org.springframework + spring-core + + + org.springframework + spring-expression + + + org.springframework + spring-aop + + test org.springframework.security spring-security-web ${springsecurity.version} + + + org.springframework + spring-core + + + org.springframework + spring-web + + + org.springframework + spring-beans + + + org.springframework + spring-context + + + org.springframework + spring-expression + + + org.springframework + spring-aop + + + test + + + javax.validation + validation-api + 2.0.1.Final + test + + + org.hibernate + hibernate-validator + 6.1.2.Final test @@ -67,6 +166,13 @@ 17.0.0 compile + + + javax.activation + activation + 1.1.1 + test + @@ -101,16 +207,18 @@ true - - BUNDLE - - - INSTRUCTION - COVEREDRATIO - ${jacoco.minCoverage} - - - + + + BUNDLE + + + INSTRUCTION + COVEREDRATIO + ${jacoco.minCoverage} + + + + diff --git a/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java b/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java index 5b56e58b1..0eaf58f97 100644 --- a/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java +++ b/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java @@ -14,20 +14,30 @@ import com.amazonaws.serverless.exceptions.ContainerInitializationException; import com.amazonaws.serverless.proxy.*; +import com.amazonaws.serverless.proxy.internal.LambdaContainerHandler; import com.amazonaws.serverless.proxy.internal.servlet.*; import com.amazonaws.serverless.proxy.internal.testutils.Timer; import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.serverless.proxy.model.AwsProxyResponse; +import com.amazonaws.serverless.proxy.model.HttpApiV2ProxyRequest; import com.amazonaws.serverless.proxy.spring.embedded.ServerlessReactiveServletEmbeddedServerFactory; import com.amazonaws.serverless.proxy.spring.embedded.ServerlessServletEmbeddedServerFactory; import com.amazonaws.services.lambda.runtime.Context; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.SpringApplication; +import org.springframework.boot.WebApplicationType; +import org.springframework.boot.builder.SpringApplicationBuilder; +import org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext; +import org.springframework.context.ConfigurableApplicationContext; import org.springframework.core.env.ConfigurableEnvironment; import org.springframework.core.env.StandardEnvironment; +import org.springframework.web.context.ConfigurableWebApplicationContext; +import org.springframework.web.servlet.DispatcherServlet; import javax.servlet.Servlet; +import javax.servlet.ServletRegistration; +import javax.servlet.http.HttpServletRequest; import java.util.concurrent.CountDownLatch; /** @@ -40,10 +50,14 @@ * @param The incoming event type * @param The expected return type */ -public class SpringBootLambdaContainerHandler extends AwsLambdaServletContainerHandler { +public class SpringBootLambdaContainerHandler extends AwsLambdaServletContainerHandler { + private static final String DISPATCHER_SERVLET_REGISTRATION_NAME = "dispatcherServlet"; + private final Class springBootInitializer; private static final Logger log = LoggerFactory.getLogger(SpringBootLambdaContainerHandler.class); private String[] springProfiles = null; + private WebApplicationType springWebApplicationType; + private ConfigurableApplicationContext applicationContext; private static SpringBootLambdaContainerHandler instance; @@ -71,7 +85,7 @@ public static SpringBootLambdaContainerHandler getInstance() { */ public static SpringBootLambdaContainerHandler getAwsProxyHandler(Class springBootInitializer, String... profiles) throws ContainerInitializationException { - return new SpringBootProxyHandlerBuilder() + return new SpringBootProxyHandlerBuilder() .defaultProxy() .initializationWrapper(new InitializationWrapper()) .springBootApplication(springBootInitializer) @@ -79,6 +93,23 @@ public static SpringBootLambdaContainerHandler getHttpApiV2ProxyHandler(Class springBootInitializer, String... profiles) + throws ContainerInitializationException { + return new SpringBootProxyHandlerBuilder() + .defaultHttpApiV2Proxy() + .initializationWrapper(new InitializationWrapper()) + .springBootApplication(springBootInitializer) + .profiles(profiles) + .buildAndInitialize(); + } + /** * Creates a new container handler with the given reader and writer objects * @@ -90,19 +121,22 @@ public static SpringBootLambdaContainerHandler requestTypeClass, Class responseTypeClass, - RequestReader requestReader, + RequestReader requestReader, ResponseWriter responseWriter, SecurityContextWriter securityContextWriter, ExceptionHandler exceptionHandler, Class springBootInitializer, - InitializationWrapper init) { + InitializationWrapper init, + WebApplicationType applicationType) { super(requestTypeClass, responseTypeClass, requestReader, responseWriter, securityContextWriter, exceptionHandler); Timer.start("SPRINGBOOT2_CONTAINER_HANDLER_CONSTRUCTOR"); initialized = false; this.springBootInitializer = springBootInitializer; + springWebApplicationType = applicationType; setInitializationWrapper(init); SpringBootLambdaContainerHandler.setInstance(this); @@ -123,12 +157,12 @@ public void activateSpringProfiles(String... profiles) { } @Override - protected AwsHttpServletResponse getContainerResponse(AwsProxyHttpServletRequest request, CountDownLatch latch) { + protected AwsHttpServletResponse getContainerResponse(HttpServletRequest request, CountDownLatch latch) { return new AwsHttpServletResponse(request, latch); } @Override - protected void handleRequest(AwsProxyHttpServletRequest containerRequest, AwsHttpServletResponse containerResponse, Context lambdaContext) throws Exception { + protected void handleRequest(HttpServletRequest containerRequest, AwsHttpServletResponse containerResponse, Context lambdaContext) throws Exception { // this method of the AwsLambdaServletContainerHandler sets the servlet context Timer.start("SPRINGBOOT2_HANDLE_REQUEST"); @@ -139,7 +173,10 @@ protected void handleRequest(AwsProxyHttpServletRequest containerRequest, AwsHtt // process filters & invoke servlet Servlet reqServlet = ((AwsServletContext)getServletContext()).getServletForPath(containerRequest.getPathInfo()); - containerRequest.setResponse(containerResponse); + if (AwsHttpServletRequest.class.isAssignableFrom(containerRequest.getClass())) { + ((AwsHttpServletRequest)containerRequest).setServletContext(getServletContext()); + ((AwsHttpServletRequest)containerRequest).setResponse(containerResponse); + } doFilter(containerRequest, containerResponse, reqServlet); Timer.stop("SPRINGBOOT2_HANDLE_REQUEST"); } @@ -150,27 +187,37 @@ public void initialize() throws ContainerInitializationException { Timer.start("SPRINGBOOT2_COLD_START"); - SpringApplication app = new SpringApplication(getEmbeddedContainerClasses()); - if (springProfiles != null && springProfiles.length > 0) { - ConfigurableEnvironment springEnv = new StandardEnvironment(); - springEnv.setActiveProfiles(springProfiles); - app.setEnvironment(springEnv); + SpringApplicationBuilder builder = new SpringApplicationBuilder(getEmbeddedContainerClasses()) + .web(springWebApplicationType); // .REACTIVE, .SERVLET + if (springProfiles != null) { + builder.profiles(springProfiles); } - - app.run(); - + applicationContext = builder.run(); + if (springWebApplicationType == WebApplicationType.SERVLET) { + ((AnnotationConfigServletWebServerApplicationContext)applicationContext).setServletContext(getServletContext()); + AwsServletRegistration reg = (AwsServletRegistration)getServletContext().getServletRegistration(DISPATCHER_SERVLET_REGISTRATION_NAME); + if (reg != null) { + reg.setLoadOnStartup(1); + } + } + super.initialize(); initialized = true; Timer.stop("SPRINGBOOT2_COLD_START"); } private Class[] getEmbeddedContainerClasses() { Class[] classes = new Class[2]; - try { - // if HandlerAdapter is available we assume they are using WebFlux. Otherwise plain servlet. - this.getClass().getClassLoader().loadClass("org.springframework.web.reactive.HandlerAdapter"); - log.debug("Found WebFlux HandlerAdapter on classpath, using reactive server factory"); - classes[0] = ServerlessReactiveServletEmbeddedServerFactory.class; - } catch (ClassNotFoundException e) { + if (springWebApplicationType == WebApplicationType.REACTIVE) { + try { + // if HandlerAdapter is available we assume they are using WebFlux. Otherwise plain servlet. + this.getClass().getClassLoader().loadClass("org.springframework.web.reactive.HandlerAdapter"); + log.debug("Found WebFlux HandlerAdapter on classpath, using reactive server factory"); + classes[0] = ServerlessReactiveServletEmbeddedServerFactory.class; + } catch (ClassNotFoundException e) { + springWebApplicationType = WebApplicationType.SERVLET; + classes[0] = ServerlessServletEmbeddedServerFactory.class; + } + } else { classes[0] = ServerlessServletEmbeddedServerFactory.class; } diff --git a/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootProxyHandlerBuilder.java b/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootProxyHandlerBuilder.java index 943cc69ff..b9894834c 100644 --- a/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootProxyHandlerBuilder.java +++ b/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootProxyHandlerBuilder.java @@ -1,3 +1,15 @@ +/* + * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance + * with the License. A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.proxy.spring; import com.amazonaws.serverless.exceptions.ContainerInitializationException; @@ -5,39 +17,48 @@ import com.amazonaws.serverless.proxy.internal.servlet.ServletLambdaContainerHandlerBuilder; import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.serverless.proxy.model.AwsProxyResponse; +import org.springframework.boot.WebApplicationType; -public final class SpringBootProxyHandlerBuilder extends ServletLambdaContainerHandlerBuilder< - AwsProxyRequest, +import javax.servlet.http.HttpServletRequest; + +public final class SpringBootProxyHandlerBuilder extends ServletLambdaContainerHandlerBuilder< + RequestType, AwsProxyResponse, - AwsProxyHttpServletRequest, - SpringBootLambdaContainerHandler, - SpringBootProxyHandlerBuilder> { + HttpServletRequest, + SpringBootLambdaContainerHandler, + SpringBootProxyHandlerBuilder> { private Class springBootInitializer; private String[] profiles; + private WebApplicationType applicationType = WebApplicationType.REACTIVE; @Override - protected SpringBootProxyHandlerBuilder self() { + protected SpringBootProxyHandlerBuilder self() { return this; } - public SpringBootProxyHandlerBuilder springBootApplication(Class app) { + public SpringBootProxyHandlerBuilder springBootApplication(Class app) { springBootInitializer = app; return self(); } - public SpringBootProxyHandlerBuilder profiles(String... profiles) { + public SpringBootProxyHandlerBuilder profiles(String... profiles) { this.profiles = profiles; return self(); } + public SpringBootProxyHandlerBuilder servletApplication() { + this.applicationType = WebApplicationType.SERVLET; + return self(); + } + @Override - public SpringBootLambdaContainerHandler build() throws ContainerInitializationException { + public SpringBootLambdaContainerHandler build() throws ContainerInitializationException { validate(); if (springBootInitializer == null) { throw new ContainerInitializationException("Missing spring boot application class in builder", null); } - SpringBootLambdaContainerHandler handler = new SpringBootLambdaContainerHandler<>( + SpringBootLambdaContainerHandler handler = new SpringBootLambdaContainerHandler( requestTypeClass, responseTypeClass, requestReader, @@ -45,7 +66,8 @@ public SpringBootLambdaContainerHandler build securityContextWriter, exceptionHandler, springBootInitializer, - initializationWrapper + initializationWrapper, + applicationType ); if (profiles != null) { handler.activateSpringProfiles(profiles); @@ -54,8 +76,8 @@ public SpringBootLambdaContainerHandler build } @Override - public SpringBootLambdaContainerHandler buildAndInitialize() throws ContainerInitializationException { - SpringBootLambdaContainerHandler handler = build(); + public SpringBootLambdaContainerHandler buildAndInitialize() throws ContainerInitializationException { + SpringBootLambdaContainerHandler handler = build(); initializationWrapper.start(handler); return handler; } diff --git a/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessReactiveServletEmbeddedServerFactory.java b/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessReactiveServletEmbeddedServerFactory.java index 7fa366dd9..9b2c04948 100644 --- a/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessReactiveServletEmbeddedServerFactory.java +++ b/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessReactiveServletEmbeddedServerFactory.java @@ -1,3 +1,15 @@ +/* + * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance + * with the License. A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.proxy.spring.embedded; import com.amazonaws.serverless.proxy.spring.SpringBootLambdaContainerHandler; diff --git a/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactory.java b/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactory.java index b47b081c7..ad228f7d4 100644 --- a/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactory.java +++ b/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactory.java @@ -1,6 +1,17 @@ +/* + * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance + * with the License. A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.proxy.spring.embedded; -import com.amazonaws.serverless.exceptions.ContainerInitializationException; import com.amazonaws.serverless.proxy.internal.servlet.AwsLambdaServletContainerHandler; import com.amazonaws.serverless.proxy.spring.SpringBootLambdaContainerHandler; import org.springframework.boot.autoconfigure.AutoConfigureOrder; diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/SecurityAppTest.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/SecurityAppTest.java index 34a593fd2..e9682d4c4 100644 --- a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/SecurityAppTest.java +++ b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/SecurityAppTest.java @@ -1,14 +1,11 @@ package com.amazonaws.serverless.proxy.spring; -import com.amazonaws.serverless.proxy.internal.LambdaContainerHandler; import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; import com.amazonaws.serverless.proxy.internal.testutils.MockLambdaContext; import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.serverless.proxy.model.AwsProxyResponse; import com.amazonaws.serverless.proxy.spring.securityapp.LambdaHandler; -import com.amazonaws.serverless.proxy.spring.securityapp.MessageController; import com.amazonaws.serverless.proxy.spring.securityapp.SecurityConfig; -import com.fasterxml.jackson.core.JsonProcessingException; import org.junit.Test; import javax.ws.rs.core.HttpHeaders; @@ -39,8 +36,4 @@ public void helloRequest_withAuth_respondsWithSingleMessage() { resp = handler.handleRequest(req, lambdaContext); assertEquals(200, resp.getStatusCode()); } - - public void helloRequest_withoutAuith_respondsWithError() { - - } } diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/ServletAppTest.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/ServletAppTest.java index 4d5797e5f..88cf735dc 100644 --- a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/ServletAppTest.java +++ b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/ServletAppTest.java @@ -1,25 +1,111 @@ package com.amazonaws.serverless.proxy.spring; +import com.amazonaws.serverless.proxy.internal.LambdaContainerHandler; import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; import com.amazonaws.serverless.proxy.internal.testutils.MockLambdaContext; -import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.serverless.proxy.model.AwsProxyResponse; import com.amazonaws.serverless.proxy.spring.servletapp.LambdaHandler; import com.amazonaws.serverless.proxy.spring.servletapp.MessageController; +import com.amazonaws.serverless.proxy.spring.servletapp.MessageData; +import com.amazonaws.serverless.proxy.spring.servletapp.UserData; +import com.fasterxml.jackson.core.JsonProcessingException; import org.junit.Assert; import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import javax.ws.rs.core.HttpHeaders; +import javax.ws.rs.core.MediaType; + +import java.util.Arrays; +import java.util.Collection; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +@RunWith(Parameterized.class) public class ServletAppTest { - LambdaHandler handler = new LambdaHandler(); + LambdaHandler handler; MockLambdaContext lambdaContext = new MockLambdaContext(); + private String type; + + @Parameterized.Parameters + public static Collection data() { + return Arrays.asList(new Object[] { "API_GW", "ALB", "HTTP_API" }); + } + + public ServletAppTest(String reqType) { + type = reqType; + handler = new LambdaHandler(type); + } + @Test public void helloRequest_respondsWithSingleMessage() { - AwsProxyRequest req = new AwsProxyRequestBuilder("/hello", "GET").build(); + AwsProxyRequestBuilder req = new AwsProxyRequestBuilder("/hello", "GET"); AwsProxyResponse resp = handler.handleRequest(req, lambdaContext); Assert.assertEquals(MessageController.HELLO_MESSAGE, resp.getBody()); } + + @Test + public void validateRequest_invalidData_respondsWith400() { + UserData ud = new UserData(); + AwsProxyRequestBuilder req = new AwsProxyRequestBuilder("/validate", "POST") + .header(HttpHeaders.ACCEPT, MediaType.TEXT_PLAIN) + .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON) + .body(ud); + AwsProxyResponse resp = handler.handleRequest(req, lambdaContext); + try { + System.out.println(LambdaContainerHandler.getObjectMapper().writeValueAsString(resp)); + } catch (JsonProcessingException e) { + e.printStackTrace(); + } + assertEquals("3", resp.getBody()); + assertEquals(400, resp.getStatusCode()); + + UserData ud2 = new UserData(); + ud2.setFirstName("Test"); + ud2.setLastName("Test"); + ud2.setEmail("Test"); + req = new AwsProxyRequestBuilder("/validate", "POST") + .header(HttpHeaders.ACCEPT, MediaType.TEXT_PLAIN) + .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON) + .body(ud2); + resp = handler.handleRequest(req, lambdaContext); + assertEquals("1", resp.getBody()); + assertEquals(400, resp.getStatusCode()); + } + + @Test + public void messageObject_parsesObject_returnsCorrectMessage() { + AwsProxyRequestBuilder req = new AwsProxyRequestBuilder("/message", "POST") + .json() + .body(new MessageData("test message")); + AwsProxyResponse resp = handler.handleRequest(req, lambdaContext); + assertNotNull(resp); + assertEquals(200, resp.getStatusCode()); + assertEquals("test message", resp.getBody()); + } + + @Test + public void messageObject_propertiesInContentType_returnsCorrectMessage() { + AwsProxyRequestBuilder req = new AwsProxyRequestBuilder("/message", "POST") + .header(HttpHeaders.CONTENT_TYPE, "application/json;v=1") + .header(HttpHeaders.ACCEPT, "application/json;v=1") + .body(new MessageData("test message")); + AwsProxyResponse resp = handler.handleRequest(req, lambdaContext); + assertNotNull(resp); + assertEquals(200, resp.getStatusCode()); + assertEquals("test message", resp.getBody()); + } + + @Test + public void echoMessage_fileNameLikeParameter_returnsMessage() { + AwsProxyRequestBuilder req = new AwsProxyRequestBuilder("/echo/test.test.test", "GET"); + AwsProxyResponse resp = handler.handleRequest(req, lambdaContext); + assertNotNull(resp); + assertEquals(200, resp.getStatusCode()); + assertEquals("test.test.test", resp.getBody()); + } } diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/WebFluxAppTest.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/WebFluxAppTest.java index 7148e3b67..811a1ab55 100644 --- a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/WebFluxAppTest.java +++ b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/WebFluxAppTest.java @@ -1,33 +1,67 @@ package com.amazonaws.serverless.proxy.spring; +import com.amazonaws.serverless.proxy.internal.LambdaContainerHandler; import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; import com.amazonaws.serverless.proxy.internal.testutils.MockLambdaContext; import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.serverless.proxy.model.AwsProxyResponse; import com.amazonaws.serverless.proxy.spring.webfluxapp.LambdaHandler; import com.amazonaws.serverless.proxy.spring.webfluxapp.MessageController; +import com.amazonaws.serverless.proxy.spring.webfluxapp.MessageData; +import com.fasterxml.jackson.core.JsonProcessingException; import org.junit.Assert; import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +import java.util.Arrays; +import java.util.Collection; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +@RunWith(Parameterized.class) public class WebFluxAppTest { - LambdaHandler handler = new LambdaHandler(); + LambdaHandler handler; MockLambdaContext lambdaContext = new MockLambdaContext(); + private String type; + + @Parameterized.Parameters + public static Collection data() { + return Arrays.asList(new Object[] { "API_GW", "ALB", "HTTP_API" }); + } + + public WebFluxAppTest(String reqType) { + type = reqType; + handler = new LambdaHandler(type); + } + @Test public void helloRequest_respondsWithSingleMessage() { - AwsProxyRequest req = new AwsProxyRequestBuilder("/single", "GET").build(); + AwsProxyRequestBuilder req = new AwsProxyRequestBuilder("/single", "GET"); AwsProxyResponse resp = handler.handleRequest(req, lambdaContext); + System.out.println(resp.getBody()); Assert.assertEquals(MessageController.MESSAGE, resp.getBody()); } @Test public void helloDoubleRequest_respondsWithDoubleMessage() { - AwsProxyRequest req = new AwsProxyRequestBuilder("/double", "GET").build(); + AwsProxyRequestBuilder req = new AwsProxyRequestBuilder("/double", "GET"); AwsProxyResponse resp = handler.handleRequest(req, lambdaContext); assertEquals(MessageController.MESSAGE + MessageController.MESSAGE, resp.getBody()); } + + @Test + public void messageObject_parsesObject_returnsCorrectMessage() throws JsonProcessingException { + AwsProxyRequestBuilder req = new AwsProxyRequestBuilder("/message", "POST") + .json() + .body(new MessageData("test message")); + AwsProxyResponse resp = handler.handleRequest(req, lambdaContext); + assertNotNull(resp); + assertEquals(200, resp.getStatusCode()); + assertEquals("test message", resp.getBody()); + } } diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactoryTest.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactoryTest.java index 010bcbdcf..11779420c 100644 --- a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactoryTest.java +++ b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactoryTest.java @@ -10,6 +10,7 @@ import com.amazonaws.serverless.proxy.model.AwsProxyResponse; import com.amazonaws.serverless.proxy.spring.SpringBootLambdaContainerHandler; import org.junit.Test; +import org.springframework.boot.WebApplicationType; import org.springframework.boot.web.servlet.ServletContextInitializer; import javax.servlet.ServletContext; @@ -26,7 +27,8 @@ public class ServerlessServletEmbeddedServerFactoryTest { new AwsProxySecurityContextWriter(), new AwsProxyExceptionHandler(), null, - new InitializationWrapper() + new InitializationWrapper(), + WebApplicationType.REACTIVE ); public ServerlessServletEmbeddedServerFactoryTest() throws ContainerInitializationException { diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/securityapp/LambdaHandler.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/securityapp/LambdaHandler.java index 75dc158ab..ae8ba21ac 100644 --- a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/securityapp/LambdaHandler.java +++ b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/securityapp/LambdaHandler.java @@ -1,7 +1,6 @@ package com.amazonaws.serverless.proxy.spring.securityapp; import com.amazonaws.serverless.exceptions.ContainerInitializationException; -import com.amazonaws.serverless.proxy.internal.servlet.AwsProxyHttpServletRequest; import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.serverless.proxy.model.AwsProxyResponse; import com.amazonaws.serverless.proxy.spring.SpringBootLambdaContainerHandler; @@ -13,7 +12,7 @@ public class LambdaHandler implements RequestHandler hello() { + return Mono.just(HELLO_MESSAGE); } } diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/securityapp/SecurityApplication.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/securityapp/SecurityApplication.java new file mode 100644 index 000000000..cafcd4000 --- /dev/null +++ b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/securityapp/SecurityApplication.java @@ -0,0 +1,14 @@ +package com.amazonaws.serverless.proxy.spring.securityapp; + +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Import; +import org.springframework.security.config.annotation.web.reactive.EnableWebFluxSecurity; +import org.springframework.web.reactive.config.EnableWebFlux; + +@SpringBootApplication +@EnableWebFluxSecurity +@EnableWebFlux +@Import(SecurityConfig.class) +public class SecurityApplication { +} diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/securityapp/SecurityConfig.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/securityapp/SecurityConfig.java index 128ae3dd8..d83b81db6 100644 --- a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/securityapp/SecurityConfig.java +++ b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/securityapp/SecurityConfig.java @@ -1,7 +1,5 @@ package com.amazonaws.serverless.proxy.spring.securityapp; -import org.springframework.beans.factory.ObjectProvider; -import org.springframework.boot.autoconfigure.security.SecurityProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.reactive.EnableWebFluxSecurity; @@ -10,52 +8,37 @@ import org.springframework.security.core.userdetails.User; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; -import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.web.server.SecurityWebFilterChain; @Configuration @EnableWebFluxSecurity -public class SecurityConfig { - public static final String USERNAME = "user"; - public static String PASSWORD = "testPassword"; - public static BCryptPasswordEncoder pEncoder = new BCryptPasswordEncoder(); +public class SecurityConfig +{ + public static final String USERNAME = "admin"; + public static final String PASSWORD = "{noop}password"; + private static BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); @Bean public SecurityWebFilterChain securitygWebFilterChain( ServerHttpSecurity http) { return http.authorizeExchange() - .anyExchange().authenticated() - .and().httpBasic() + .anyExchange().authenticated().and().csrf().disable() + .httpBasic() .and().build(); } @Bean - public MapReactiveUserDetailsService reactiveUserDetailsService(SecurityProperties properties, ObjectProvider passwordEncoder) { - return new MapReactiveUserDetailsService(getUser()); - } - - private UserDetails getUser() { - return User.builder().username(USERNAME).password(passwordEncoder().encode(PASSWORD)).authorities("USER").build(); + public static BCryptPasswordEncoder passwordEncoder() { + return passwordEncoder; } @Bean - public PasswordEncoder passwordEncoder() { - return pEncoder; + public MapReactiveUserDetailsService userDetailsService() { + UserDetails user = User + .withUsername(USERNAME) + .password(passwordEncoder.encode(PASSWORD)) + .roles("USER") + .build(); + return new MapReactiveUserDetailsService(user); } - - /*@Autowired - public void configureGlobal(AuthenticationManagerBuilder authentication) - throws Exception - { - authentication.inMemoryAuthentication() - .withUser(USERNAME) - .password(passwordEncoder().encode(PASSWORD)) - .authorities("ROLE_USER"); - if (userService != null) { - if (userService.loadUserByUsername("user") != null) { - System.out.println("Setting password in configureGlobal"); - PASSWORD = userService.loadUserByUsername("user").getPassword().replace("{noop}", ""); - } - } - }*/ -} +} \ No newline at end of file diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/securityapp/ServletApplication.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/securityapp/ServletApplication.java deleted file mode 100644 index 2f1def12a..000000000 --- a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/securityapp/ServletApplication.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.amazonaws.serverless.proxy.spring.securityapp; - -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.autoconfigure.security.reactive.ReactiveUserDetailsServiceAutoConfiguration; -import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration; -import org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration; -import org.springframework.boot.autoconfigure.web.reactive.WebFluxAutoConfiguration; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; -import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; - -@SpringBootApplication() -public class ServletApplication { -} diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/LambdaHandler.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/LambdaHandler.java index 7faf9b1b8..88441988e 100644 --- a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/LambdaHandler.java +++ b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/LambdaHandler.java @@ -1,26 +1,60 @@ package com.amazonaws.serverless.proxy.spring.servletapp; import com.amazonaws.serverless.exceptions.ContainerInitializationException; +import com.amazonaws.serverless.proxy.InitializationWrapper; import com.amazonaws.serverless.proxy.internal.servlet.AwsProxyHttpServletRequest; +import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.serverless.proxy.model.AwsProxyResponse; +import com.amazonaws.serverless.proxy.model.HttpApiV2ProxyRequest; import com.amazonaws.serverless.proxy.spring.SpringBootLambdaContainerHandler; +import com.amazonaws.serverless.proxy.spring.SpringBootProxyHandlerBuilder; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; -public class LambdaHandler implements RequestHandler { +public class LambdaHandler implements RequestHandler { private static SpringBootLambdaContainerHandler handler; + private static SpringBootLambdaContainerHandler httpApiHandler; + private String type; - static { + public LambdaHandler(String reqType) { + type = reqType; try { - handler = SpringBootLambdaContainerHandler.getAwsProxyHandler(ServletApplication.class); + switch (type) { + case "API_GW": + case "ALB": + handler = new SpringBootProxyHandlerBuilder() + .defaultProxy() + .initializationWrapper(new InitializationWrapper()) + .servletApplication() + .springBootApplication(ServletApplication.class) + .buildAndInitialize(); + break; + case "HTTP_API": + httpApiHandler = new SpringBootProxyHandlerBuilder() + .defaultHttpApiV2Proxy() + .initializationWrapper(new InitializationWrapper()) + .servletApplication() + .springBootApplication(ServletApplication.class) + .buildAndInitialize(); + break; + } } catch (ContainerInitializationException e) { e.printStackTrace(); } } @Override - public AwsProxyResponse handleRequest(AwsProxyRequest awsProxyRequest, Context context) { - return handler.proxy(awsProxyRequest, context); + public AwsProxyResponse handleRequest(AwsProxyRequestBuilder awsProxyRequest, Context context) { + switch (type) { + case "API_GW": + return handler.proxy(awsProxyRequest.build(), context); + case "ALB": + return handler.proxy(awsProxyRequest.alb().build(), context); + case "HTTP_API": + return httpApiHandler.proxy(awsProxyRequest.toHttpApiV2Request(), context); + default: + throw new RuntimeException("Unknown request type: " + type); + } } } diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/MessageController.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/MessageController.java index 937b2432b..d46806b61 100644 --- a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/MessageController.java +++ b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/MessageController.java @@ -1,15 +1,39 @@ package com.amazonaws.serverless.proxy.spring.servletapp; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.Errors; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; @RestController public class MessageController { public static final String HELLO_MESSAGE = "Hello"; + public static final String VALID_MESSAGE = "VALID"; - @RequestMapping(path="/hello", method= RequestMethod.GET) + @RequestMapping(path="/hello", method=RequestMethod.GET, produces = {"text/plain"}) public String hello() { return HELLO_MESSAGE; } + + @RequestMapping(path="/validate", method=RequestMethod.POST, produces = {"text/plain"}) + public ResponseEntity validateBody(@RequestBody @Valid UserData userData, Errors errors) { + if (errors != null && errors.hasErrors()) { + return ResponseEntity.badRequest().body(errors.getErrorCount() + ""); + } + return ResponseEntity.ok(VALID_MESSAGE); + } + + @RequestMapping(path="/message", method = RequestMethod.POST) + public String returnMessage(@RequestBody MessageData data) { + if (data == null) { + throw new RuntimeException("No message data"); + } + return data.getMessage(); + } + + @RequestMapping(path="/echo/{message}", method=RequestMethod.GET) + public String returnPathMessage(@PathVariable(value="message") String message) { + return message; + } } diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/MessageData.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/MessageData.java new file mode 100644 index 000000000..129101cbe --- /dev/null +++ b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/MessageData.java @@ -0,0 +1,20 @@ +package com.amazonaws.serverless.proxy.spring.servletapp; + +public class MessageData { + private String message; + + public MessageData() { + } + + public MessageData(String m) { + setMessage(m); + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/ServletApplication.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/ServletApplication.java index 927dd6ce5..07ddbab43 100644 --- a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/ServletApplication.java +++ b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/ServletApplication.java @@ -2,6 +2,8 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Import; @SpringBootApplication(exclude = { org.springframework.boot.autoconfigure.security.reactive.ReactiveUserDetailsServiceAutoConfiguration.class, @@ -9,5 +11,6 @@ org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration.class, org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class }) -public class ServletApplication extends SpringBootServletInitializer { +@Import(MessageController.class) +public class ServletApplication { } diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/UserData.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/UserData.java new file mode 100644 index 000000000..e180c1738 --- /dev/null +++ b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/UserData.java @@ -0,0 +1,50 @@ +package com.amazonaws.serverless.proxy.spring.servletapp; + + +import javax.validation.constraints.Email; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +public class UserData { + @NotBlank + private String firstName; + @NotBlank + private String lastName; + @NotNull @Email + private String email; + private String error; + + public UserData() { + + } + + public UserData(String err) { + error = err; + } + + public String getFirstName() { + return firstName; + } + + public void setFirstName(String firstName) { + this.firstName = firstName; + } + + public String getLastName() { + return lastName; + } + + public void setLastName(String lastName) { + this.lastName = lastName; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + public String getError() { return error; } +} diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/slowapp/LambdaHandler.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/slowapp/LambdaHandler.java index bd696a990..ec6993a7d 100644 --- a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/slowapp/LambdaHandler.java +++ b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/slowapp/LambdaHandler.java @@ -19,9 +19,9 @@ public LambdaHandler() { try { long startTime = Instant.now().toEpochMilli(); System.out.println("startCall: " + startTime); - handler = new SpringBootProxyHandlerBuilder() + handler = new SpringBootProxyHandlerBuilder() .defaultProxy() - .asyncInit(startTime) + .asyncInit() .springBootApplication(SlowTestApplication.class) .buildAndInitialize(); constructorTime = Instant.now().toEpochMilli() - startTime; diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/webfluxapp/LambdaHandler.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/webfluxapp/LambdaHandler.java index 913da5bbc..0eb52a7bc 100644 --- a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/webfluxapp/LambdaHandler.java +++ b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/webfluxapp/LambdaHandler.java @@ -1,26 +1,58 @@ package com.amazonaws.serverless.proxy.spring.webfluxapp; import com.amazonaws.serverless.exceptions.ContainerInitializationException; -import com.amazonaws.serverless.proxy.internal.servlet.AwsProxyHttpServletRequest; +import com.amazonaws.serverless.proxy.InitializationWrapper; +import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.serverless.proxy.model.AwsProxyResponse; +import com.amazonaws.serverless.proxy.model.HttpApiV2ProxyRequest; import com.amazonaws.serverless.proxy.spring.SpringBootLambdaContainerHandler; +import com.amazonaws.serverless.proxy.spring.SpringBootProxyHandlerBuilder; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestHandler; -public class LambdaHandler implements RequestHandler { +public class LambdaHandler implements RequestHandler { private static SpringBootLambdaContainerHandler handler; + private static SpringBootLambdaContainerHandler httpApiHandler; - static { + private String type; + + public LambdaHandler(String reqType) { + type = reqType; try { - handler = SpringBootLambdaContainerHandler.getAwsProxyHandler(WebFluxTestApplication.class); + switch (type) { + case "API_GW": + case "ALB": + handler = new SpringBootProxyHandlerBuilder() + .defaultProxy() + .initializationWrapper(new InitializationWrapper()) + .springBootApplication(WebFluxTestApplication.class) + .buildAndInitialize(); + break; + case "HTTP_API": + httpApiHandler = new SpringBootProxyHandlerBuilder() + .defaultHttpApiV2Proxy() + .initializationWrapper(new InitializationWrapper()) + .springBootApplication(WebFluxTestApplication.class) + .buildAndInitialize(); + break; + } } catch (ContainerInitializationException e) { e.printStackTrace(); } } @Override - public AwsProxyResponse handleRequest(AwsProxyRequest awsProxyRequest, Context context) { - return handler.proxy(awsProxyRequest, context); + public AwsProxyResponse handleRequest(AwsProxyRequestBuilder awsProxyRequest, Context context) { + switch (type) { + case "API_GW": + return handler.proxy(awsProxyRequest.build(), context); + case "ALB": + return handler.proxy(awsProxyRequest.alb().build(), context); + case "HTTP_API": + return httpApiHandler.proxy(awsProxyRequest.toHttpApiV2Request(), context); + default: + throw new RuntimeException("Unknown request type: " + type); + } } } diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/webfluxapp/MessageController.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/webfluxapp/MessageController.java index 65ce07862..a04604618 100644 --- a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/webfluxapp/MessageController.java +++ b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/webfluxapp/MessageController.java @@ -1,26 +1,36 @@ package com.amazonaws.serverless.proxy.spring.webfluxapp; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; import reactor.core.publisher.Flux; @RestController public class MessageController { public static final String MESSAGE = "Hello"; - @RequestMapping(path="/single", method= RequestMethod.GET) + @RequestMapping(path="/single", method= RequestMethod.GET, produces = {"text/plain"}) Flux singleMessage(){ return Flux.just( MESSAGE ); } - @RequestMapping(path="/double", method= RequestMethod.GET) + @RequestMapping(path="/double", method= RequestMethod.GET, produces={"text/plain"}) Flux doubleMessage(){ return Flux.just( MESSAGE, MESSAGE ); } + + @RequestMapping(path="/message", method = RequestMethod.POST, produces={"text/plain"}, consumes = {"application/json"}) + public Flux returnMessage(@RequestBody MessageData data) { + if (data == null) { + throw new RuntimeException("No message data"); + } + return Flux.just(data.getMessage()); + } } \ No newline at end of file diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/webfluxapp/MessageData.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/webfluxapp/MessageData.java new file mode 100644 index 000000000..2be6b4f2d --- /dev/null +++ b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/webfluxapp/MessageData.java @@ -0,0 +1,20 @@ +package com.amazonaws.serverless.proxy.spring.webfluxapp; + +public class MessageData { + private String message; + + public MessageData() { + } + + public MessageData(String m) { + setMessage(m); + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/webfluxapp/WebFluxTestApplication.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/webfluxapp/WebFluxTestApplication.java index 04d48ff3d..70e0c9934 100644 --- a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/webfluxapp/WebFluxTestApplication.java +++ b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/webfluxapp/WebFluxTestApplication.java @@ -1,12 +1,20 @@ package com.amazonaws.serverless.proxy.spring.webfluxapp; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Import; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.web.reactive.config.EnableWebFlux; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; @SpringBootApplication(exclude = { org.springframework.boot.autoconfigure.security.reactive.ReactiveUserDetailsServiceAutoConfiguration.class, - org.springframework.boot.autoconfigure.security.reactive.ReactiveSecurityAutoConfiguration.class + org.springframework.boot.autoconfigure.security.reactive.ReactiveSecurityAutoConfiguration.class, + org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration.class, + org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class }) public class WebFluxTestApplication { + } diff --git a/aws-serverless-java-container-struts2/src/main/java/com/amazonaws/serverless/proxy/struts2/Struts2LambdaContainerHandler.java b/aws-serverless-java-container-struts2/src/main/java/com/amazonaws/serverless/proxy/struts2/Struts2LambdaContainerHandler.java index 25a2f7f96..3a536c9b2 100644 --- a/aws-serverless-java-container-struts2/src/main/java/com/amazonaws/serverless/proxy/struts2/Struts2LambdaContainerHandler.java +++ b/aws-serverless-java-container-struts2/src/main/java/com/amazonaws/serverless/proxy/struts2/Struts2LambdaContainerHandler.java @@ -1,20 +1,24 @@ +/* + * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance + * with the License. A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.proxy.struts2; import com.amazonaws.serverless.exceptions.ContainerInitializationException; -import com.amazonaws.serverless.proxy.AwsProxyExceptionHandler; -import com.amazonaws.serverless.proxy.AwsProxySecurityContextWriter; -import com.amazonaws.serverless.proxy.ExceptionHandler; -import com.amazonaws.serverless.proxy.RequestReader; -import com.amazonaws.serverless.proxy.ResponseWriter; -import com.amazonaws.serverless.proxy.SecurityContextWriter; -import com.amazonaws.serverless.proxy.internal.servlet.AwsHttpServletResponse; -import com.amazonaws.serverless.proxy.internal.servlet.AwsLambdaServletContainerHandler; -import com.amazonaws.serverless.proxy.internal.servlet.AwsProxyHttpServletRequest; -import com.amazonaws.serverless.proxy.internal.servlet.AwsProxyHttpServletRequestReader; -import com.amazonaws.serverless.proxy.internal.servlet.AwsProxyHttpServletResponseWriter; +import com.amazonaws.serverless.proxy.*; +import com.amazonaws.serverless.proxy.internal.servlet.*; import com.amazonaws.serverless.proxy.internal.testutils.Timer; import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.serverless.proxy.model.AwsProxyResponse; +import com.amazonaws.serverless.proxy.model.HttpApiV2ProxyRequest; import com.amazonaws.services.lambda.runtime.Context; import org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter; import org.slf4j.Logger; @@ -23,6 +27,7 @@ import javax.servlet.DispatcherType; import javax.servlet.FilterRegistration; import javax.servlet.Servlet; +import javax.servlet.http.HttpServletRequest; import java.util.EnumSet; import java.util.concurrent.CountDownLatch; @@ -32,7 +37,7 @@ * @param request type * @param response type */ -public class Struts2LambdaContainerHandler extends AwsLambdaServletContainerHandler { +public class Struts2LambdaContainerHandler extends AwsLambdaServletContainerHandler { private static final Logger log = LoggerFactory.getLogger(Struts2LambdaContainerHandler.class); @@ -55,9 +60,19 @@ public static Struts2LambdaContainerHandler g new AwsProxyExceptionHandler()); } + public static Struts2LambdaContainerHandler getHttpApiV2ProxyHandler() { + return new Struts2LambdaContainerHandler( + HttpApiV2ProxyRequest.class, + AwsProxyResponse.class, + new AwsHttpApiV2HttpServletRequestReader(), + new AwsProxyHttpServletResponseWriter(), + new AwsHttpApiV2SecurityContextWriter(), + new AwsProxyExceptionHandler()); + } + public Struts2LambdaContainerHandler(Class requestTypeClass, Class responseTypeClass, - RequestReader requestReader, + RequestReader requestReader, ResponseWriter responseWriter, SecurityContextWriter securityContextWriter, ExceptionHandler exceptionHandler) { @@ -68,12 +83,13 @@ public Struts2LambdaContainerHandler(Class requestTypeClass, Timer.stop(TIMER_STRUTS_2_CONTAINER_CONSTRUCTOR); } - protected AwsHttpServletResponse getContainerResponse(AwsProxyHttpServletRequest request, CountDownLatch latch) { + @Override + protected AwsHttpServletResponse getContainerResponse(HttpServletRequest request, CountDownLatch latch) { return new AwsHttpServletResponse(request, latch); } @Override - protected void handleRequest(AwsProxyHttpServletRequest httpServletRequest, + protected void handleRequest(HttpServletRequest httpServletRequest, AwsHttpServletResponse httpServletResponse, Context lambdaContext) throws Exception { Timer.start(TIMER_STRUTS_2_HANDLE_REQUEST); @@ -81,7 +97,9 @@ protected void handleRequest(AwsProxyHttpServletRequest httpServletRequest, initialize(); } - httpServletRequest.setServletContext(this.getServletContext()); + if (AwsHttpServletRequest.class.isAssignableFrom(httpServletRequest.getClass())) { + ((AwsHttpServletRequest)httpServletRequest).setServletContext(this.getServletContext()); + } this.doFilter(httpServletRequest, httpServletResponse, null); String responseStatusCode = httpServletResponse.getHeader(HEADER_STRUTS_STATUS_CODE); if (responseStatusCode != null) { diff --git a/aws-serverless-java-container-struts2/src/main/java/com/amazonaws/serverless/proxy/struts2/Struts2LambdaHandler.java b/aws-serverless-java-container-struts2/src/main/java/com/amazonaws/serverless/proxy/struts2/Struts2LambdaHandler.java index 1e63daf99..26a01bd90 100644 --- a/aws-serverless-java-container-struts2/src/main/java/com/amazonaws/serverless/proxy/struts2/Struts2LambdaHandler.java +++ b/aws-serverless-java-container-struts2/src/main/java/com/amazonaws/serverless/proxy/struts2/Struts2LambdaHandler.java @@ -1,3 +1,15 @@ +/* + * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance + * with the License. A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.proxy.struts2; import com.amazonaws.serverless.proxy.model.AwsProxyRequest; diff --git a/aws-serverless-java-container-struts2/src/test/java/com/amazonaws/serverless/proxy/struts2/Struts2AwsProxyTest.java b/aws-serverless-java-container-struts2/src/test/java/com/amazonaws/serverless/proxy/struts2/Struts2AwsProxyTest.java index 45e14ccdb..447b907bc 100644 --- a/aws-serverless-java-container-struts2/src/test/java/com/amazonaws/serverless/proxy/struts2/Struts2AwsProxyTest.java +++ b/aws-serverless-java-container-struts2/src/test/java/com/amazonaws/serverless/proxy/struts2/Struts2AwsProxyTest.java @@ -17,6 +17,7 @@ import com.amazonaws.serverless.proxy.internal.testutils.MockLambdaContext; import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.serverless.proxy.model.AwsProxyResponse; +import com.amazonaws.serverless.proxy.model.HttpApiV2ProxyRequest; import com.amazonaws.serverless.proxy.struts2.echoapp.EchoAction; import com.amazonaws.services.lambda.runtime.Context; import com.fasterxml.jackson.core.JsonProcessingException; @@ -25,23 +26,25 @@ import org.apache.commons.codec.binary.Base64; import org.apache.struts2.StrutsJUnit4TestCase; import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; import javax.ws.rs.core.Response; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; -import java.util.HashMap; -import java.util.Map; -import java.util.UUID; +import java.util.*; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; +import static org.junit.Assume.assumeTrue; /** * Unit test class for the Struts2 AWS_PROXY default implementation */ +@RunWith(Parameterized.class) public class Struts2AwsProxyTest extends StrutsJUnit4TestCase { private static final String CUSTOM_HEADER_KEY = "x-custom-header"; private static final String CUSTOM_HEADER_VALUE = "my-custom-value"; @@ -55,17 +58,42 @@ public class Struts2AwsProxyTest extends StrutsJUnit4TestCase { private static ObjectMapper objectMapper = new ObjectMapper(); private final Struts2LambdaContainerHandler handler = Struts2LambdaContainerHandler .getAwsProxyHandler(); + private final Struts2LambdaContainerHandler httpApiHandler = Struts2LambdaContainerHandler + .getHttpApiV2ProxyHandler(); private static Context lambdaContext = new MockLambdaContext(); + private String type; + + public Struts2AwsProxyTest(String reqType) { + type = reqType; + } + + @Parameterized.Parameters + public static Collection data() { + return Arrays.asList(new Object[] { "API_GW", "ALB", "HTTP_API" }); + } + + private AwsProxyResponse executeRequest(AwsProxyRequestBuilder requestBuilder, Context lambdaContext) { + switch (type) { + case "API_GW": + return handler.proxy(requestBuilder.build(), lambdaContext); + case "ALB": + return handler.proxy(requestBuilder.alb().build(), lambdaContext); + case "HTTP_API": + return httpApiHandler.proxy(requestBuilder.toHttpApiV2Request(), lambdaContext); + default: + throw new RuntimeException("Unknown request type: " + type); + } + } + @Test public void headers_getHeaders_echo() { - AwsProxyRequest request = new AwsProxyRequestBuilder("/echo-request-info", "GET") + AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo-request-info", "GET") .queryString("mode", "headers") .header(CUSTOM_HEADER_KEY, CUSTOM_HEADER_VALUE) - .json() - .build(); + .json(); - AwsProxyResponse output = handler.proxy(request, lambdaContext); + AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(200, output.getStatusCode()); assertEquals(CONTENT_TYPE_APPLICATION_JSON, output.getMultiValueHeaders().getFirst("Content-Type")); @@ -74,24 +102,23 @@ public void headers_getHeaders_echo() { @Test public void context_servletResponse_setCustomHeader() { - AwsProxyRequest request = new AwsProxyRequestBuilder("/echo", "GET") + AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo", "GET") .queryString("customHeader", "true") - .json() - .build(); + .json(); - AwsProxyResponse output = handler.proxy(request, lambdaContext); + AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(200, output.getStatusCode()); assertTrue(output.getMultiValueHeaders().containsKey("XX")); } @Test public void context_serverInfo_correctContext() { - AwsProxyRequest request = new AwsProxyRequestBuilder("/echo", "GET") + assumeTrue("API_GW".equals(type)); + AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo", "GET") .queryString(QUERY_STRING_KEY, "Hello Struts2") .header("Content-Type", "application/json") - .queryString("contentType", "true") - .build(); - AwsProxyResponse output = handler.proxy(request, lambdaContext); + .queryString("contentType", "true"); + AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(200, output.getStatusCode()); assertEquals(CONTENT_TYPE_APPLICATION_JSON, output.getMultiValueHeaders().getFirst("Content-Type")); @@ -100,14 +127,13 @@ public void context_serverInfo_correctContext() { @Test public void queryString_uriInfo_echo() { - AwsProxyRequest request = new AwsProxyRequestBuilder("/echo-request-info", "GET") + AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo-request-info", "GET") .queryString("mode", "query-string") .queryString(CUSTOM_HEADER_KEY, CUSTOM_HEADER_VALUE) - .json() - .build(); + .json(); - AwsProxyResponse output = handler.proxy(request, lambdaContext); + AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(200, output.getStatusCode()); assertEquals(CONTENT_TYPE_APPLICATION_JSON, output.getMultiValueHeaders().getFirst("Content-Type")); @@ -116,13 +142,12 @@ public void queryString_uriInfo_echo() { @Test public void requestScheme_valid_expectHttps() { - AwsProxyRequest request = new AwsProxyRequestBuilder("/echo-request-info", "GET") + AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo-request-info", "GET") .queryString("mode", "scheme") .queryString(QUERY_STRING_KEY, QUERY_STRING_ENCODED_VALUE) - .json() - .build(); + .json(); - AwsProxyResponse output = handler.proxy(request, lambdaContext); + AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(200, output.getStatusCode()); assertEquals(CONTENT_TYPE_APPLICATION_JSON, output.getMultiValueHeaders().getFirst("Content-Type")); @@ -131,13 +156,13 @@ public void requestScheme_valid_expectHttps() { @Test public void authorizer_securityContext_customPrincipalSuccess() { - AwsProxyRequest request = new AwsProxyRequestBuilder("/echo-request-info", "GET") + assumeTrue("API_GW".equals(type)); + AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo-request-info", "GET") .queryString("mode", "principal") .json() - .authorizerPrincipal(AUTHORIZER_PRINCIPAL_ID) - .build(); + .authorizerPrincipal(AUTHORIZER_PRINCIPAL_ID); - AwsProxyResponse output = handler.proxy(request, lambdaContext); + AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(200, output.getStatusCode()); assertEquals(CONTENT_TYPE_APPLICATION_JSON, output.getMultiValueHeaders().getFirst("Content-Type")); @@ -146,32 +171,30 @@ public void authorizer_securityContext_customPrincipalSuccess() { @Test public void errors_unknownRoute_expect404() { - AwsProxyRequest request = new AwsProxyRequestBuilder("/unknown", "GET").build(); + AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/unknown", "GET"); - AwsProxyResponse output = handler.proxy(request, lambdaContext); + AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(404, output.getStatusCode()); } @Test public void error_contentType_invalidContentType() { - AwsProxyRequest request = new AwsProxyRequestBuilder("/echo-request-info", "POST") + AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo-request-info", "POST") .queryString("mode", "content-type") .header("Content-Type", "application/octet-stream") - .body("asdasdasd") - .build(); + .body("asdasdasd"); - AwsProxyResponse output = handler.proxy(request, lambdaContext); + AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(415, output.getStatusCode()); } @Test public void error_statusCode_methodNotAllowed() { - AwsProxyRequest request = new AwsProxyRequestBuilder("/echo-request-info", "POST") + AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo-request-info", "POST") .queryString("mode", "not-allowed") - .json() - .build(); + .json(); - AwsProxyResponse output = handler.proxy(request, lambdaContext); + AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(405, output.getStatusCode()); } @@ -180,12 +203,11 @@ public void error_statusCode_methodNotAllowed() { public void responseBody_responseWriter_validBody() throws JsonProcessingException { Map value = new HashMap<>(); value.put(QUERY_STRING_KEY, CUSTOM_HEADER_VALUE); - AwsProxyRequest request = new AwsProxyRequestBuilder("/echo", "POST") + AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo", "POST") .json() - .body(objectMapper.writeValueAsString(value)) - .build(); + .body(objectMapper.writeValueAsString(value)); - AwsProxyResponse output = handler.proxy(request, lambdaContext); + AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(200, output.getStatusCode()); assertNotNull(output.getBody()); @@ -194,32 +216,30 @@ public void responseBody_responseWriter_validBody() throws JsonProcessingExcepti @Test public void statusCode_responseStatusCode_customStatusCode() { - AwsProxyRequest request = new AwsProxyRequestBuilder("/echo-request-info", "GET") + AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo-request-info", "GET") .queryString("mode", "custom-status-code") .queryString("status", "201") - .json() - .build(); + .json(); - AwsProxyResponse output = handler.proxy(request, lambdaContext); + AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(201, output.getStatusCode()); } @Test public void base64_binaryResponse_base64Encoding() { - AwsProxyRequest request = new AwsProxyRequestBuilder("/echo", "GET").build(); + AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo", "GET"); - AwsProxyResponse response = handler.proxy(request, lambdaContext); + AwsProxyResponse response = executeRequest(request, lambdaContext); assertNotNull(response.getBody()); assertTrue(Base64.isBase64(response.getBody())); } @Test public void exception_mapException_mapToNotImplemented() { - AwsProxyRequest request = new AwsProxyRequestBuilder("/echo-request-info", "POST") - .queryString("mode", "not-implemented") - .build(); + AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo-request-info", "POST") + .queryString("mode", "not-implemented"); - AwsProxyResponse response = handler.proxy(request, lambdaContext); + AwsProxyResponse response = executeRequest(request, lambdaContext); assertNotNull(response.getBody()); assertEquals("null", response.getBody()); assertEquals(Response.Status.NOT_IMPLEMENTED.getStatusCode(), response.getStatusCode()); @@ -227,12 +247,11 @@ public void exception_mapException_mapToNotImplemented() { @Test public void stripBasePath_route_shouldRouteCorrectly() { - AwsProxyRequest request = new AwsProxyRequestBuilder("/custompath/echo", "GET") + AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/custompath/echo", "GET") .json() - .queryString(QUERY_STRING_KEY, "stripped") - .build(); + .queryString(QUERY_STRING_KEY, "stripped"); handler.stripBasePath("/custompath"); - AwsProxyResponse output = handler.proxy(request, lambdaContext); + AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(200, output.getStatusCode()); validateSingleValueModel(output, "stripped"); handler.stripBasePath(""); @@ -240,29 +259,30 @@ public void stripBasePath_route_shouldRouteCorrectly() { @Test public void stripBasePath_route_shouldReturn404() { - AwsProxyRequest request = new AwsProxyRequestBuilder("/custompath/echo/status-code", "GET") + AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/custompath/echo/status-code", "GET") .json() - .queryString("status", "201") - .build(); + .queryString("status", "201"); handler.stripBasePath("/custom"); - AwsProxyResponse output = handler.proxy(request, lambdaContext); + AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(404, output.getStatusCode()); handler.stripBasePath(""); } @Test public void securityContext_injectPrincipal_expectPrincipalName() { - AwsProxyRequest request = new AwsProxyRequestBuilder("/echo-request-info", "GET") + assumeTrue("API_GW".equals(type)); + AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo-request-info", "GET") .queryString("mode", "principal") - .authorizerPrincipal(USER_PRINCIPAL).build(); + .authorizerPrincipal(USER_PRINCIPAL); - AwsProxyResponse resp = handler.proxy(request, lambdaContext); + AwsProxyResponse resp = executeRequest(request, lambdaContext); assertEquals(200, resp.getStatusCode()); validateSingleValueModel(resp, USER_PRINCIPAL); } @Test public void queryParam_encoding_expectUnencodedParam() { + assumeTrue("API_GW".equals(type)); String paramValue = "p%2Fz%2B3"; String decodedParam = ""; try { @@ -271,21 +291,20 @@ public void queryParam_encoding_expectUnencodedParam() { e.printStackTrace(); fail("Could not decode parameter"); } - AwsProxyRequest request = new AwsProxyRequestBuilder("/echo", "GET").queryString(QUERY_STRING_KEY, decodedParam) - .build(); + AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo", "GET").queryString(QUERY_STRING_KEY, decodedParam); - AwsProxyResponse resp = handler.proxy(request, lambdaContext); + AwsProxyResponse resp = executeRequest(request, lambdaContext); assertEquals(200, resp.getStatusCode()); validateSingleValueModel(resp, decodedParam); } @Test public void queryParam_encoding_expectEncodedParam() { + assumeTrue("API_GW".equals(type)); String paramValue = "p%2Fz%2B3"; - AwsProxyRequest request = new AwsProxyRequestBuilder("/echo", "GET").queryString(QUERY_STRING_KEY, paramValue) - .build(); + AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo", "GET").queryString(QUERY_STRING_KEY, paramValue); - AwsProxyResponse resp = handler.proxy(request, lambdaContext); + AwsProxyResponse resp = executeRequest(request, lambdaContext); assertEquals(200, resp.getStatusCode()); validateSingleValueModel(resp, paramValue); } diff --git a/aws-serverless-jersey-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml b/aws-serverless-jersey-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml index b934c4a4a..dc8cb6204 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/aws-serverless-jersey-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -24,7 +24,7 @@ - sam.yaml + template.yml README.md build.gradle diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/README.md b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/README.md index de5f4671a..1dc39a0a2 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/README.md +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/README.md @@ -20,37 +20,40 @@ The \${artifactId} project, created with [`aws-serverless-java-container`](https The starter project defines a simple `/ping` resource that can accept `GET` requests with its tests. -The project folder also includes a `sam.yaml` file. You can use this [SAM](https://github.com/awslabs/serverless-application-model) file to deploy the project to AWS Lambda and Amazon API Gateway or test in local with [SAM Local](https://github.com/awslabs/aws-sam-local). +The project folder also includes a `template.yml` file. You can use this [SAM](https://github.com/awslabs/serverless-application-model) file to deploy the project to AWS Lambda and Amazon API Gateway or test in local with the [SAM CLI](https://github.com/awslabs/aws-sam-cli). -## Building the project -Using [Maven](https://maven.apache.org/), you can create an AWS Lambda-compatible zip file simply by running the maven package command from the project folder. +#[[##]]# 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/) + +#[[##]]# Building the project +You can use the SAM CLI to quickly build the project ```bash $ mvn archetype:generate -DartifactId=\${artifactId} -DarchetypeGroupId=com.amazonaws.serverless.archetypes -DarchetypeArtifactId=aws-serverless-jersey-archetype -DarchetypeVersion=${project.version} -DgroupId=\${groupId} -Dversion=\${version} -Dinteractive=false $ cd \${artifactId} -$ mvn clean package - -[INFO] ------------------------------------------------------------------------ -[INFO] BUILD SUCCESS -[INFO] ------------------------------------------------------------------------ -[INFO] Total time: 6.546 s -[INFO] Finished at: 2018-02-15T08:39:33-08:00 -[INFO] Final Memory: XXM/XXXM -[INFO] ------------------------------------------------------------------------ -``` +$ sam build +Building resource '\${resourceName}Function' +Running JavaGradleWorkflow:GradleBuild +Running JavaGradleWorkflow:CopyArtifacts -## Testing locally with SAM local -You can use [AWS SAM Local](https://github.com/awslabs/aws-sam-local) to start your project. +Build Succeeded -First, install SAM local: +Built Artifacts : .aws-sam/build +Built Template : .aws-sam/build/template.yaml -```bash -$ npm install -g aws-sam-local +Commands you can use next +========================= +[*] Invoke Function: sam local invoke +[*] Deploy: sam deploy --guided ``` -Next, from the project root folder - where the `sam.yaml` file is located - start the API with the SAM Local CLI. +#[[##]]# Testing locally with the SAM CLI + +From the project root folder - where the `template.yml` file is located - start the API with the SAM CLI. ```bash -$ sam local start-api --template sam.yaml +$ sam local start-api ... Mounting ${groupId}.StreamLambdaHandler::handleRequest (java8) at http://127.0.0.1:3000/{proxy+} [OPTIONS GET HEAD POST PUT DELETE PATCH] @@ -67,54 +70,22 @@ $ curl -s http://127.0.0.1:3000/ping | python -m json.tool } ``` -## Deploying to AWS -You can use the [AWS CLI](https://aws.amazon.com/cli/) to quickly deploy your application to AWS Lambda and Amazon API Gateway with your SAM template. - -You will need an S3 bucket to store the artifacts for deployment. Once you have created the S3 bucket, run the following command from the project's root folder - where the `sam.yaml` file is located: - -``` -$ aws cloudformation package --template-file sam.yaml --output-template-file output-sam.yaml --s3-bucket -Uploading to xxxxxxxxxxxxxxxxxxxxxxxxxx 6464692 / 6464692.0 (100.00%) -Successfully packaged artifacts and wrote output template to file output-sam.yaml. -Execute the following command to deploy the packaged template -aws cloudformation deploy --template-file /your/path/output-sam.yaml --stack-name -``` +#[[##]]# Deploying to AWS +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 -As the command output suggests, you can now use the cli to deploy the application. Choose a stack name and run the `aws cloudformation deploy` command from the output of the package command. - ``` -$ aws cloudformation deploy --template-file output-sam.yaml --stack-name ServerlessJerseyApi --capabilities CAPABILITY_IAM +$ sam deploy --guided ``` -Once the application is deployed, you can describe the stack to show the API endpoint that was created. The endpoint should be the `ServerlessJerseyApi` key of the `Outputs` property: +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 ``` -$ aws cloudformation describe-stacks --stack-name ServerlessJerseyApi -{ - "Stacks": [ - { - "StackId": "arn:aws:cloudformation:us-west-2:xxxxxxxx:stack/ServerlessJerseyApi/xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx", - "Description": "AWS Serverless Jersey API - ${groupId}::${artifactId}", - "Tags": [], - "Outputs": [ - { - "Description": "URL for application", - "ExportName": "\${resourceName}Api", - "OutputKey": "\${resourceName}Api", - "OutputValue": "https://xxxxxxx.execute-api.us-west-2.amazonaws.com/Prod/ping" - } - ], - "CreationTime": "2016-12-13T22:59:31.552Z", - "Capabilities": [ - "CAPABILITY_IAM" - ], - "StackName": "ServerlessJerseyApi", - "NotificationARNs": [], - "StackStatus": "UPDATE_COMPLETE" - } - ] -} - +... +------------------------------------------------------------------------------------------------------------- +OutputKey-Description OutputValue +------------------------------------------------------------------------------------------------------------- +\${resourceName}Api - URL for application https://xxxxxxxxxx.execute-api.us-west-2.amazonaws.com/Prod/pets +------------------------------------------------------------------------------------------------------------- ``` Copy the `OutputValue` into a browser or use curl to test your first request: diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml index 3282eb25d..9fe135430 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml @@ -14,8 +14,8 @@ 1.8 1.8 - 2.29.1 - 2.9.10 + 2.30.1 + 2.10.3 diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/sam.yaml b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/template.yml similarity index 94% rename from aws-serverless-jersey-archetype/src/main/resources/archetype-resources/sam.yaml rename to aws-serverless-jersey-archetype/src/main/resources/archetype-resources/template.yml index 9df80ae88..db6ecbaff 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/sam.yaml +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/template.yml @@ -33,12 +33,12 @@ Resources: Properties: Handler: ${groupId}.StreamLambdaHandler::handleRequest Runtime: java8 - CodeUri: target/${artifactId}-${version}-lambda-package.zip + CodeUri: . MemorySize: 512 Policies: AWSLambdaBasicExecutionRole Timeout: 15 Events: - GetResource: + ProxyResource: Type: Api Properties: Path: /{proxy+} diff --git a/aws-serverless-spark-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml b/aws-serverless-spark-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml index 45dc2c1a7..2ea9dca13 100644 --- a/aws-serverless-spark-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/aws-serverless-spark-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -24,7 +24,7 @@ - sam.yaml + template.yml README.md build.gradle diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/README.md b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/README.md index 82a59465b..1dc39a0a2 100644 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/README.md +++ b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/README.md @@ -20,37 +20,40 @@ The \${artifactId} project, created with [`aws-serverless-java-container`](https The starter project defines a simple `/ping` resource that can accept `GET` requests with its tests. -The project folder also includes a `sam.yaml` file. You can use this [SAM](https://github.com/awslabs/serverless-application-model) file to deploy the project to AWS Lambda and Amazon API Gateway or test in local with [SAM Local](https://github.com/awslabs/aws-sam-local). +The project folder also includes a `template.yml` file. You can use this [SAM](https://github.com/awslabs/serverless-application-model) file to deploy the project to AWS Lambda and Amazon API Gateway or test in local with the [SAM CLI](https://github.com/awslabs/aws-sam-cli). -## Building the project -Using [Maven](https://maven.apache.org/), you can create an AWS Lambda-compatible zip file simply by running the maven package command from the project folder. +#[[##]]# 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/) + +#[[##]]# Building the project +You can use the SAM CLI to quickly build the project ```bash -$ mvn archetype:generate -DartifactId=\${artifactId} -DarchetypeGroupId=com.amazonaws.serverless.archetypes -DarchetypeArtifactId=aws-serverless-spark-archetype -DarchetypeVersion=${project.version} -DgroupId=\${groupId} -Dversion=\${version} -Dinteractive=false +$ mvn archetype:generate -DartifactId=\${artifactId} -DarchetypeGroupId=com.amazonaws.serverless.archetypes -DarchetypeArtifactId=aws-serverless-jersey-archetype -DarchetypeVersion=${project.version} -DgroupId=\${groupId} -Dversion=\${version} -Dinteractive=false $ cd \${artifactId} -$ mvn clean package - -[INFO] ------------------------------------------------------------------------ -[INFO] BUILD SUCCESS -[INFO] ------------------------------------------------------------------------ -[INFO] Total time: 6.546 s -[INFO] Finished at: 2018-02-15T08:39:33-08:00 -[INFO] Final Memory: XXM/XXXM -[INFO] ------------------------------------------------------------------------ -``` +$ sam build +Building resource '\${resourceName}Function' +Running JavaGradleWorkflow:GradleBuild +Running JavaGradleWorkflow:CopyArtifacts -## Testing locally with SAM local -You can use [AWS SAM Local](https://github.com/awslabs/aws-sam-local) to start your project. +Build Succeeded -First, install SAM local: +Built Artifacts : .aws-sam/build +Built Template : .aws-sam/build/template.yaml -```bash -$ npm install -g aws-sam-local +Commands you can use next +========================= +[*] Invoke Function: sam local invoke +[*] Deploy: sam deploy --guided ``` -Next, from the project root folder - where the `sam.yaml` file is located - start the API with the SAM Local CLI. +#[[##]]# Testing locally with the SAM CLI + +From the project root folder - where the `template.yml` file is located - start the API with the SAM CLI. ```bash -$ sam local start-api --template sam.yaml +$ sam local start-api ... Mounting ${groupId}.StreamLambdaHandler::handleRequest (java8) at http://127.0.0.1:3000/{proxy+} [OPTIONS GET HEAD POST PUT DELETE PATCH] @@ -67,54 +70,22 @@ $ curl -s http://127.0.0.1:3000/ping | python -m json.tool } ``` -## Deploying to AWS -You can use the [AWS CLI](https://aws.amazon.com/cli/) to quickly deploy your application to AWS Lambda and Amazon API Gateway with your SAM template. - -You will need an S3 bucket to store the artifacts for deployment. Once you have created the S3 bucket, run the following command from the project's root folder - where the `sam.yaml` file is located: - -``` -$ aws cloudformation package --template-file sam.yaml --output-template-file output-sam.yaml --s3-bucket -Uploading to xxxxxxxxxxxxxxxxxxxxxxxxxx 6464692 / 6464692.0 (100.00%) -Successfully packaged artifacts and wrote output template to file output-sam.yaml. -Execute the following command to deploy the packaged template -aws cloudformation deploy --template-file /your/path/output-sam.yaml --stack-name -``` +#[[##]]# Deploying to AWS +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 -As the command output suggests, you can now use the cli to deploy the application. Choose a stack name and run the `aws cloudformation deploy` command from the output of the package command. - ``` -$ aws cloudformation deploy --template-file output-sam.yaml --stack-name ServerlessSparkApi --capabilities CAPABILITY_IAM +$ sam deploy --guided ``` -Once the application is deployed, you can describe the stack to show the API endpoint that was created. The endpoint should be the `ServerlessSparkApi` key of the `Outputs` property: +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 ``` -$ aws cloudformation describe-stacks --stack-name ServerlessSparkApi -{ - "Stacks": [ - { - "StackId": "arn:aws:cloudformation:us-west-2:xxxxxxxx:stack/ServerlessSparkApi/xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx", - "Description": "AWS Serverless Spark API - ${groupId}::${artifactId}", - "Tags": [], - "Outputs": [ - { - "Description": "URL for application", - "ExportName": "\${resourceName}Api", - "OutputKey": "\${resourceName}Api", - "OutputValue": "https://xxxxxxx.execute-api.us-west-2.amazonaws.com/Prod/ping" - } - ], - "CreationTime": "2016-12-13T22:59:31.552Z", - "Capabilities": [ - "CAPABILITY_IAM" - ], - "StackName": "ServerlessSparkApi", - "NotificationARNs": [], - "StackStatus": "UPDATE_COMPLETE" - } - ] -} - +... +------------------------------------------------------------------------------------------------------------- +OutputKey-Description OutputValue +------------------------------------------------------------------------------------------------------------- +\${resourceName}Api - URL for application https://xxxxxxxxxx.execute-api.us-west-2.amazonaws.com/Prod/pets +------------------------------------------------------------------------------------------------------------- ``` Copy the `OutputValue` into a browser or use curl to test your first request: diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle index f4e280ce7..e915d4511 100644 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle @@ -9,7 +9,7 @@ dependencies { compile ( 'com.sparkjava:spark-core:2.9.1', 'com.amazonaws.serverless:aws-serverless-java-container-spark:[1.0,)', - 'com.fasterxml.jackson.core:jackson-databind:2.9.10', + 'com.fasterxml.jackson.core:jackson-databind:2.10.3', 'io.symphonia:lambda-logging:1.0.1' ) diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml index 055fc4321..579d10607 100644 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 1.8 - 2.9.10 + 2.10.3 2.9.1 diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/sam.yaml b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/template.yml similarity index 94% rename from aws-serverless-spark-archetype/src/main/resources/archetype-resources/sam.yaml rename to aws-serverless-spark-archetype/src/main/resources/archetype-resources/template.yml index 674c769af..d9e83ceba 100644 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/sam.yaml +++ b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/template.yml @@ -33,12 +33,12 @@ Resources: Properties: Handler: ${groupId}.StreamLambdaHandler::handleRequest Runtime: java8 - CodeUri: target/${artifactId}-${version}-lambda-package.zip + CodeUri: . MemorySize: 512 Policies: AWSLambdaBasicExecutionRole Timeout: 15 Events: - GetResource: + ProxyResource: Type: Api Properties: Path: /{proxy+} diff --git a/aws-serverless-spring-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml b/aws-serverless-spring-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml index 9295c6457..e279efa50 100644 --- a/aws-serverless-spring-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/aws-serverless-spring-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -30,7 +30,7 @@ - sam.yaml + template.yml README.md build.gradle diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/README.md b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/README.md index 1bb929910..1dc39a0a2 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/README.md +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/README.md @@ -20,37 +20,40 @@ The \${artifactId} project, created with [`aws-serverless-java-container`](https The starter project defines a simple `/ping` resource that can accept `GET` requests with its tests. -The project folder also includes a `sam.yaml` file. You can use this [SAM](https://github.com/awslabs/serverless-application-model) file to deploy the project to AWS Lambda and Amazon API Gateway or test in local with [SAM Local](https://github.com/awslabs/aws-sam-local). +The project folder also includes a `template.yml` file. You can use this [SAM](https://github.com/awslabs/serverless-application-model) file to deploy the project to AWS Lambda and Amazon API Gateway or test in local with the [SAM CLI](https://github.com/awslabs/aws-sam-cli). -## Building the project -Using [Maven](https://maven.apache.org/), you can create an AWS Lambda-compatible zip file simply by running the maven package command from the project folder. +#[[##]]# 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/) + +#[[##]]# Building the project +You can use the SAM CLI to quickly build the project ```bash -$ mvn archetype:generate -DartifactId=\${artifactId} -DarchetypeGroupId=com.amazonaws.serverless.archetypes -DarchetypeArtifactId=aws-serverless-spring-archetype -DarchetypeVersion=${project.version} -DgroupId=\${groupId} -Dversion=\${version} -Dinteractive=false +$ mvn archetype:generate -DartifactId=\${artifactId} -DarchetypeGroupId=com.amazonaws.serverless.archetypes -DarchetypeArtifactId=aws-serverless-jersey-archetype -DarchetypeVersion=${project.version} -DgroupId=\${groupId} -Dversion=\${version} -Dinteractive=false $ cd \${artifactId} -$ mvn clean package - -[INFO] ------------------------------------------------------------------------ -[INFO] BUILD SUCCESS -[INFO] ------------------------------------------------------------------------ -[INFO] Total time: 6.546 s -[INFO] Finished at: 2018-02-15T08:39:33-08:00 -[INFO] Final Memory: XXM/XXXM -[INFO] ------------------------------------------------------------------------ -``` +$ sam build +Building resource '\${resourceName}Function' +Running JavaGradleWorkflow:GradleBuild +Running JavaGradleWorkflow:CopyArtifacts -## Testing locally with SAM local -You can use [AWS SAM Local](https://github.com/awslabs/aws-sam-local) to start your project. +Build Succeeded -First, install SAM local: +Built Artifacts : .aws-sam/build +Built Template : .aws-sam/build/template.yaml -```bash -$ npm install -g aws-sam-local +Commands you can use next +========================= +[*] Invoke Function: sam local invoke +[*] Deploy: sam deploy --guided ``` -Next, from the project root folder - where the `sam.yaml` file is located - start the API with the SAM Local CLI. +#[[##]]# Testing locally with the SAM CLI + +From the project root folder - where the `template.yml` file is located - start the API with the SAM CLI. ```bash -$ sam local start-api --template sam.yaml +$ sam local start-api ... Mounting ${groupId}.StreamLambdaHandler::handleRequest (java8) at http://127.0.0.1:3000/{proxy+} [OPTIONS GET HEAD POST PUT DELETE PATCH] @@ -67,54 +70,22 @@ $ curl -s http://127.0.0.1:3000/ping | python -m json.tool } ``` -## Deploying to AWS -You can use the [AWS CLI](https://aws.amazon.com/cli/) to quickly deploy your application to AWS Lambda and Amazon API Gateway with your SAM template. - -You will need an S3 bucket to store the artifacts for deployment. Once you have created the S3 bucket, run the following command from the project's root folder - where the `sam.yaml` file is located: - -``` -$ aws cloudformation package --template-file sam.yaml --output-template-file output-sam.yaml --s3-bucket -Uploading to xxxxxxxxxxxxxxxxxxxxxxxxxx 6464692 / 6464692.0 (100.00%) -Successfully packaged artifacts and wrote output template to file output-sam.yaml. -Execute the following command to deploy the packaged template -aws cloudformation deploy --template-file /your/path/output-sam.yaml --stack-name -``` +#[[##]]# Deploying to AWS +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 -As the command output suggests, you can now use the cli to deploy the application. Choose a stack name and run the `aws cloudformation deploy` command from the output of the package command. - ``` -$ aws cloudformation deploy --template-file output-sam.yaml --stack-name ServerlessSpringApi --capabilities CAPABILITY_IAM +$ sam deploy --guided ``` -Once the application is deployed, you can describe the stack to show the API endpoint that was created. The endpoint should be the `ServerlessSpringApi` key of the `Outputs` property: +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 ``` -$ aws cloudformation describe-stacks --stack-name ServerlessSpringApi -{ - "Stacks": [ - { - "StackId": "arn:aws:cloudformation:us-west-2:xxxxxxxx:stack/ServerlessSpringApi/xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx", - "Description": "AWS Serverless Spring API - ${groupId}::${artifactId}", - "Tags": [], - "Outputs": [ - { - "Description": "URL for application", - "ExportName": "\${resourceName}Api", - "OutputKey": "\${resourceName}Api", - "OutputValue": "https://xxxxxxx.execute-api.us-west-2.amazonaws.com/Prod/ping" - } - ], - "CreationTime": "2016-12-13T22:59:31.552Z", - "Capabilities": [ - "CAPABILITY_IAM" - ], - "StackName": "ServerlessSpringApi", - "NotificationARNs": [], - "StackStatus": "UPDATE_COMPLETE" - } - ] -} - +... +------------------------------------------------------------------------------------------------------------- +OutputKey-Description OutputValue +------------------------------------------------------------------------------------------------------------- +\${resourceName}Api - URL for application https://xxxxxxxxxx.execute-api.us-west-2.amazonaws.com/Prod/pets +------------------------------------------------------------------------------------------------------------- ``` Copy the `OutputValue` into a browser or use curl to test your first request: diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index e67eb52e4..e73185939 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -7,13 +7,13 @@ repositories { dependencies { compile ( - 'org.springframework:spring-webmvc:5.1.9.RELEASE', - 'org.springframework:spring-context:5.1.9.RELEASE', + 'org.springframework:spring-webmvc:5.2.5.RELEASE', + 'org.springframework:spring-context:5.2.5.RELEASE', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[1.0,)', 'org.apache.logging.log4j:log4j-core:2.8.2', 'org.apache.logging.log4j:log4j-api:2.8.2', 'org.apache.logging.log4j:log4j-slf4j-impl:2.8.2', - 'com.fasterxml.jackson.core:jackson-databind:2.9.10', + 'com.fasterxml.jackson.core:jackson-databind:2.10.3', 'com.amazonaws:aws-lambda-java-log4j2:1.1.0', ) diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index a6a574c8b..a41ddd6ec 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 1.8 - 5.1.9.RELEASE + 5.2.5.RELEASE 4.12 2.8.2 diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/sam.yaml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/template.yml similarity index 94% rename from aws-serverless-spring-archetype/src/main/resources/archetype-resources/sam.yaml rename to aws-serverless-spring-archetype/src/main/resources/archetype-resources/template.yml index 374dfe593..292d87a9c 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/sam.yaml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/template.yml @@ -33,12 +33,12 @@ Resources: Properties: Handler: ${groupId}.StreamLambdaHandler::handleRequest Runtime: java8 - CodeUri: target/${artifactId}-${version}-lambda-package.zip + CodeUri: . MemorySize: 512 Policies: AWSLambdaBasicExecutionRole Timeout: 15 Events: - GetResource: + ProxyResource: Type: Api Properties: Path: /{proxy+} diff --git a/aws-serverless-springboot-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml b/aws-serverless-springboot-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml index ec02bb6ab..5379692ba 100644 --- a/aws-serverless-springboot-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/aws-serverless-springboot-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -30,7 +30,7 @@ - sam.yaml + template.yml README.md build.gradle diff --git a/aws-serverless-springboot-archetype/src/main/resources/archetype-resources/README.md b/aws-serverless-springboot-archetype/src/main/resources/archetype-resources/README.md index 43a3683f5..1dc39a0a2 100644 --- a/aws-serverless-springboot-archetype/src/main/resources/archetype-resources/README.md +++ b/aws-serverless-springboot-archetype/src/main/resources/archetype-resources/README.md @@ -20,37 +20,40 @@ The \${artifactId} project, created with [`aws-serverless-java-container`](https The starter project defines a simple `/ping` resource that can accept `GET` requests with its tests. -The project folder also includes a `sam.yaml` file. You can use this [SAM](https://github.com/awslabs/serverless-application-model) file to deploy the project to AWS Lambda and Amazon API Gateway or test in local with [SAM Local](https://github.com/awslabs/aws-sam-local). +The project folder also includes a `template.yml` file. You can use this [SAM](https://github.com/awslabs/serverless-application-model) file to deploy the project to AWS Lambda and Amazon API Gateway or test in local with the [SAM CLI](https://github.com/awslabs/aws-sam-cli). -## Building the project -Using [Maven](https://maven.apache.org/), you can create an AWS Lambda-compatible zip file simply by running the maven package command from the project folder. +#[[##]]# 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/) + +#[[##]]# Building the project +You can use the SAM CLI to quickly build the project ```bash -$ mvn archetype:generate -DartifactId=\${artifactId} -DarchetypeGroupId=com.amazonaws.serverless.archetypes -DarchetypeArtifactId=aws-serverless-springboot-archetype -DarchetypeVersion=${project.version} -DgroupId=\${groupId} -Dversion=\${version} -Dinteractive=false +$ mvn archetype:generate -DartifactId=\${artifactId} -DarchetypeGroupId=com.amazonaws.serverless.archetypes -DarchetypeArtifactId=aws-serverless-jersey-archetype -DarchetypeVersion=${project.version} -DgroupId=\${groupId} -Dversion=\${version} -Dinteractive=false $ cd \${artifactId} -$ mvn clean package - -[INFO] ------------------------------------------------------------------------ -[INFO] BUILD SUCCESS -[INFO] ------------------------------------------------------------------------ -[INFO] Total time: 6.546 s -[INFO] Finished at: 2018-02-15T08:39:33-08:00 -[INFO] Final Memory: XXM/XXXM -[INFO] ------------------------------------------------------------------------ -``` +$ sam build +Building resource '\${resourceName}Function' +Running JavaGradleWorkflow:GradleBuild +Running JavaGradleWorkflow:CopyArtifacts -## Testing locally with SAM local -You can use [AWS SAM Local](https://github.com/awslabs/aws-sam-local) to start your project. +Build Succeeded -First, install SAM local: +Built Artifacts : .aws-sam/build +Built Template : .aws-sam/build/template.yaml -```bash -$ npm install -g aws-sam-local +Commands you can use next +========================= +[*] Invoke Function: sam local invoke +[*] Deploy: sam deploy --guided ``` -Next, from the project root folder - where the `sam.yaml` file is located - start the API with the SAM Local CLI. +#[[##]]# Testing locally with the SAM CLI + +From the project root folder - where the `template.yml` file is located - start the API with the SAM CLI. ```bash -$ sam local start-api --template sam.yaml +$ sam local start-api ... Mounting ${groupId}.StreamLambdaHandler::handleRequest (java8) at http://127.0.0.1:3000/{proxy+} [OPTIONS GET HEAD POST PUT DELETE PATCH] @@ -67,54 +70,22 @@ $ curl -s http://127.0.0.1:3000/ping | python -m json.tool } ``` -## Deploying to AWS -You can use the [AWS CLI](https://aws.amazon.com/cli/) to quickly deploy your application to AWS Lambda and Amazon API Gateway with your SAM template. - -You will need an S3 bucket to store the artifacts for deployment. Once you have created the S3 bucket, run the following command from the project's root folder - where the `sam.yaml` file is located: - -``` -$ aws cloudformation package --template-file sam.yaml --output-template-file output-sam.yaml --s3-bucket -Uploading to xxxxxxxxxxxxxxxxxxxxxxxxxx 6464692 / 6464692.0 (100.00%) -Successfully packaged artifacts and wrote output template to file output-sam.yaml. -Execute the following command to deploy the packaged template -aws cloudformation deploy --template-file /your/path/output-sam.yaml --stack-name -``` +#[[##]]# Deploying to AWS +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 -As the command output suggests, you can now use the cli to deploy the application. Choose a stack name and run the `aws cloudformation deploy` command from the output of the package command. - ``` -$ aws cloudformation deploy --template-file output-sam.yaml --stack-name ServerlessSpringApi --capabilities CAPABILITY_IAM +$ sam deploy --guided ``` -Once the application is deployed, you can describe the stack to show the API endpoint that was created. The endpoint should be the `ServerlessSpringApi` key of the `Outputs` property: +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 ``` -$ aws cloudformation describe-stacks --stack-name ServerlessSpringApi -{ - "Stacks": [ - { - "StackId": "arn:aws:cloudformation:us-west-2:xxxxxxxx:stack/ServerlessSpringApi/xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx", - "Description": "AWS Serverless Spring API - ${groupId}::${artifactId}", - "Tags": [], - "Outputs": [ - { - "Description": "URL for application", - "ExportName": "\${resourceName}Api", - "OutputKey": "\${resourceName}Api", - "OutputValue": "https://xxxxxxx.execute-api.us-west-2.amazonaws.com/Prod/ping" - } - ], - "CreationTime": "2016-12-13T22:59:31.552Z", - "Capabilities": [ - "CAPABILITY_IAM" - ], - "StackName": "ServerlessSpringApi", - "NotificationARNs": [], - "StackStatus": "UPDATE_COMPLETE" - } - ] -} - +... +------------------------------------------------------------------------------------------------------------- +OutputKey-Description OutputValue +------------------------------------------------------------------------------------------------------------- +\${resourceName}Api - URL for application https://xxxxxxxxxx.execute-api.us-west-2.amazonaws.com/Prod/pets +------------------------------------------------------------------------------------------------------------- ``` Copy the `OutputValue` into a browser or use curl to test your first request: diff --git a/aws-serverless-springboot-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-springboot-archetype/src/main/resources/archetype-resources/build.gradle index 53c675deb..2a95fdaf4 100644 --- a/aws-serverless-springboot-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-springboot-archetype/src/main/resources/archetype-resources/build.gradle @@ -1,6 +1,3 @@ -plugins { - id 'org.springframework.boot' version '1.5.22.RELEASE' -} apply plugin: 'java' repositories { @@ -11,7 +8,7 @@ repositories { dependencies { compile ( - 'org.springframework.boot:spring-boot-starter-web', + 'org.springframework.boot:spring-boot-starter-web:1.5.22.RELEASE', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[1.0,)', 'io.symphonia:lambda-logging:1.0.1' ) diff --git a/aws-serverless-springboot-archetype/src/main/resources/archetype-resources/sam.yaml b/aws-serverless-springboot-archetype/src/main/resources/archetype-resources/template.yml similarity index 94% rename from aws-serverless-springboot-archetype/src/main/resources/archetype-resources/sam.yaml rename to aws-serverless-springboot-archetype/src/main/resources/archetype-resources/template.yml index 3fbd348b2..832028a20 100644 --- a/aws-serverless-springboot-archetype/src/main/resources/archetype-resources/sam.yaml +++ b/aws-serverless-springboot-archetype/src/main/resources/archetype-resources/template.yml @@ -33,12 +33,12 @@ Resources: Properties: Handler: ${groupId}.StreamLambdaHandler::handleRequest Runtime: java8 - CodeUri: target/${artifactId}-${version}-lambda-package.zip + CodeUri: . MemorySize: 512 Policies: AWSLambdaBasicExecutionRole Timeout: 30 Events: - GetResource: + ProxyResource: Type: Api Properties: Path: /{proxy+} diff --git a/aws-serverless-springboot2-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml b/aws-serverless-springboot2-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml index ec02bb6ab..5379692ba 100644 --- a/aws-serverless-springboot2-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/aws-serverless-springboot2-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -30,7 +30,7 @@ - sam.yaml + template.yml README.md build.gradle diff --git a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/README.md b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/README.md index 3f99b3445..1dc39a0a2 100644 --- a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/README.md +++ b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/README.md @@ -20,37 +20,40 @@ The \${artifactId} project, created with [`aws-serverless-java-container`](https The starter project defines a simple `/ping` resource that can accept `GET` requests with its tests. -The project folder also includes a `sam.yaml` file. You can use this [SAM](https://github.com/awslabs/serverless-application-model) file to deploy the project to AWS Lambda and Amazon API Gateway or test in local with [SAM Local](https://github.com/awslabs/aws-sam-local). +The project folder also includes a `template.yml` file. You can use this [SAM](https://github.com/awslabs/serverless-application-model) file to deploy the project to AWS Lambda and Amazon API Gateway or test in local with the [SAM CLI](https://github.com/awslabs/aws-sam-cli). -## Building the project -Using [Maven](https://maven.apache.org/), you can create an AWS Lambda-compatible zip file simply by running the maven package command from the project folder. +#[[##]]# 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/) + +#[[##]]# Building the project +You can use the SAM CLI to quickly build the project ```bash -$ mvn archetype:generate -DartifactId=\${artifactId} -DarchetypeGroupId=com.amazonaws.serverless.archetypes -DarchetypeArtifactId=aws-serverless-springboot2-archetype -DarchetypeVersion=${project.version} -DgroupId=\${groupId} -Dversion=\${version} -Dinteractive=false +$ mvn archetype:generate -DartifactId=\${artifactId} -DarchetypeGroupId=com.amazonaws.serverless.archetypes -DarchetypeArtifactId=aws-serverless-jersey-archetype -DarchetypeVersion=${project.version} -DgroupId=\${groupId} -Dversion=\${version} -Dinteractive=false $ cd \${artifactId} -$ mvn clean package - -[INFO] ------------------------------------------------------------------------ -[INFO] BUILD SUCCESS -[INFO] ------------------------------------------------------------------------ -[INFO] Total time: 6.546 s -[INFO] Finished at: 2018-02-15T08:39:33-08:00 -[INFO] Final Memory: XXM/XXXM -[INFO] ------------------------------------------------------------------------ -``` +$ sam build +Building resource '\${resourceName}Function' +Running JavaGradleWorkflow:GradleBuild +Running JavaGradleWorkflow:CopyArtifacts -## Testing locally with SAM local -You can use [AWS SAM Local](https://github.com/awslabs/aws-sam-local) to start your project. +Build Succeeded -First, install SAM local: +Built Artifacts : .aws-sam/build +Built Template : .aws-sam/build/template.yaml -```bash -$ npm install -g aws-sam-local +Commands you can use next +========================= +[*] Invoke Function: sam local invoke +[*] Deploy: sam deploy --guided ``` -Next, from the project root folder - where the `sam.yaml` file is located - start the API with the SAM Local CLI. +#[[##]]# Testing locally with the SAM CLI + +From the project root folder - where the `template.yml` file is located - start the API with the SAM CLI. ```bash -$ sam local start-api --template sam.yaml +$ sam local start-api ... Mounting ${groupId}.StreamLambdaHandler::handleRequest (java8) at http://127.0.0.1:3000/{proxy+} [OPTIONS GET HEAD POST PUT DELETE PATCH] @@ -67,54 +70,22 @@ $ curl -s http://127.0.0.1:3000/ping | python -m json.tool } ``` -## Deploying to AWS -You can use the [AWS CLI](https://aws.amazon.com/cli/) to quickly deploy your application to AWS Lambda and Amazon API Gateway with your SAM template. - -You will need an S3 bucket to store the artifacts for deployment. Once you have created the S3 bucket, run the following command from the project's root folder - where the `sam.yaml` file is located: - -``` -$ aws cloudformation package --template-file sam.yaml --output-template-file output-sam.yaml --s3-bucket -Uploading to xxxxxxxxxxxxxxxxxxxxxxxxxx 6464692 / 6464692.0 (100.00%) -Successfully packaged artifacts and wrote output template to file output-sam.yaml. -Execute the following command to deploy the packaged template -aws cloudformation deploy --template-file /your/path/output-sam.yaml --stack-name -``` +#[[##]]# Deploying to AWS +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 -As the command output suggests, you can now use the cli to deploy the application. Choose a stack name and run the `aws cloudformation deploy` command from the output of the package command. - ``` -$ aws cloudformation deploy --template-file output-sam.yaml --stack-name ServerlessSpringApi --capabilities CAPABILITY_IAM +$ sam deploy --guided ``` -Once the application is deployed, you can describe the stack to show the API endpoint that was created. The endpoint should be the `ServerlessSpringApi` key of the `Outputs` property: +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 ``` -$ aws cloudformation describe-stacks --stack-name ServerlessSpringApi -{ - "Stacks": [ - { - "StackId": "arn:aws:cloudformation:us-west-2:xxxxxxxx:stack/ServerlessSpringApi/xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx", - "Description": "AWS Serverless Spring API - ${groupId}::${artifactId}", - "Tags": [], - "Outputs": [ - { - "Description": "URL for application", - "ExportName": "\${resourceName}Api", - "OutputKey": "\${resourceName}Api", - "OutputValue": "https://xxxxxxx.execute-api.us-west-2.amazonaws.com/Prod/ping" - } - ], - "CreationTime": "2016-12-13T22:59:31.552Z", - "Capabilities": [ - "CAPABILITY_IAM" - ], - "StackName": "ServerlessSpringApi", - "NotificationARNs": [], - "StackStatus": "UPDATE_COMPLETE" - } - ] -} - +... +------------------------------------------------------------------------------------------------------------- +OutputKey-Description OutputValue +------------------------------------------------------------------------------------------------------------- +\${resourceName}Api - URL for application https://xxxxxxxxxx.execute-api.us-west-2.amazonaws.com/Prod/pets +------------------------------------------------------------------------------------------------------------- ``` Copy the `OutputValue` into a browser or use curl to test your first request: diff --git a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle index e85ac40d8..66ba6d9a2 100644 --- a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle @@ -1,6 +1,3 @@ -plugins { - id 'org.springframework.boot' version '2.1.1.RELEASE' -} apply plugin: 'java' repositories { @@ -11,7 +8,7 @@ repositories { dependencies { compile ( - 'org.springframework.boot:spring-boot-starter-web:2.1.8.RELEASE', + 'org.springframework.boot:spring-boot-starter-web:2.2.6.RELEASE', 'com.amazonaws.serverless:aws-serverless-java-container-springboot2:[1.0,)', 'io.symphonia:lambda-logging:1.0.1' ) diff --git a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml index 3dfaa1235..e25916482 100644 --- a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ org.springframework.boot spring-boot-starter-parent - 2.1.8.RELEASE + 2.2.6.RELEASE diff --git a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/sam.yaml b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/template.yml similarity index 94% rename from aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/sam.yaml rename to aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/template.yml index 970025c41..ae2adf28c 100644 --- a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/sam.yaml +++ b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/template.yml @@ -33,12 +33,12 @@ Resources: Properties: Handler: ${groupId}.StreamLambdaHandler::handleRequest Runtime: java8 - CodeUri: target/${artifactId}-${version}-lambda-package.zip + CodeUri: . MemorySize: 512 Policies: AWSLambdaBasicExecutionRole Timeout: 30 Events: - GetResource: + ProxyResource: Type: Api Properties: Path: /{proxy+} diff --git a/aws-serverless-struts2-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml b/aws-serverless-struts2-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml index 91a53e562..ad8b86248 100644 --- a/aws-serverless-struts2-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml +++ b/aws-serverless-struts2-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -31,7 +31,7 @@ - sam.yaml + template.yml README.md build.gradle diff --git a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/README.md b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/README.md index 7be306683..1dc39a0a2 100644 --- a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/README.md +++ b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/README.md @@ -20,37 +20,40 @@ The \${artifactId} project, created with [`aws-serverless-java-container`](https The starter project defines a simple `/ping` resource that can accept `GET` requests with its tests. -The project folder also includes a `sam.yaml` file. You can use this [SAM](https://github.com/awslabs/serverless-application-model) file to deploy the project to AWS Lambda and Amazon API Gateway or test in local with [SAM Local](https://github.com/awslabs/aws-sam-local). +The project folder also includes a `template.yml` file. You can use this [SAM](https://github.com/awslabs/serverless-application-model) file to deploy the project to AWS Lambda and Amazon API Gateway or test in local with the [SAM CLI](https://github.com/awslabs/aws-sam-cli). -## Building the project -Using [Maven](https://maven.apache.org/), you can create an AWS Lambda-compatible zip file simply by running the maven package command from the project folder. +#[[##]]# 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/) + +#[[##]]# Building the project +You can use the SAM CLI to quickly build the project ```bash -$ mvn archetype:generate -DartifactId=\${artifactId} -DarchetypeGroupId=com.amazonaws.serverless.archetypes -DarchetypeArtifactId=aws-serverless-struts2-archetype -DarchetypeVersion=${project.version} -DgroupId=\${groupId} -Dversion=\${version} -Dinteractive=false +$ mvn archetype:generate -DartifactId=\${artifactId} -DarchetypeGroupId=com.amazonaws.serverless.archetypes -DarchetypeArtifactId=aws-serverless-jersey-archetype -DarchetypeVersion=${project.version} -DgroupId=\${groupId} -Dversion=\${version} -Dinteractive=false $ cd \${artifactId} -$ mvn clean package - -[INFO] ------------------------------------------------------------------------ -[INFO] BUILD SUCCESS -[INFO] ------------------------------------------------------------------------ -[INFO] Total time: 6.546 s -[INFO] Finished at: 2018-02-15T08:39:33-08:00 -[INFO] Final Memory: XXM/XXXM -[INFO] ------------------------------------------------------------------------ -``` +$ sam build +Building resource '\${resourceName}Function' +Running JavaGradleWorkflow:GradleBuild +Running JavaGradleWorkflow:CopyArtifacts -## Testing locally with SAM local -You can use [AWS SAM Local](https://github.com/awslabs/aws-sam-local) to start your project. +Build Succeeded -First, install SAM local: +Built Artifacts : .aws-sam/build +Built Template : .aws-sam/build/template.yaml -```bash -$ npm install -g aws-sam-local +Commands you can use next +========================= +[*] Invoke Function: sam local invoke +[*] Deploy: sam deploy --guided ``` -Next, from the project root folder - where the `sam.yaml` file is located - start the API with the SAM Local CLI. +#[[##]]# Testing locally with the SAM CLI + +From the project root folder - where the `template.yml` file is located - start the API with the SAM CLI. ```bash -$ sam local start-api --template sam.yaml +$ sam local start-api ... Mounting ${groupId}.StreamLambdaHandler::handleRequest (java8) at http://127.0.0.1:3000/{proxy+} [OPTIONS GET HEAD POST PUT DELETE PATCH] @@ -67,54 +70,22 @@ $ curl -s http://127.0.0.1:3000/ping | python -m json.tool } ``` -## Deploying to AWS -You can use the [AWS CLI](https://aws.amazon.com/cli/) to quickly deploy your application to AWS Lambda and Amazon API Gateway with your SAM template. - -You will need an S3 bucket to store the artifacts for deployment. Once you have created the S3 bucket, run the following command from the project's root folder - where the `sam.yaml` file is located: - -``` -$ aws cloudformation package --template-file sam.yaml --output-template-file output-sam.yaml --s3-bucket -Uploading to xxxxxxxxxxxxxxxxxxxxxxxxxx 6464692 / 6464692.0 (100.00%) -Successfully packaged artifacts and wrote output template to file output-sam.yaml. -Execute the following command to deploy the packaged template -aws cloudformation deploy --template-file /your/path/output-sam.yaml --stack-name -``` +#[[##]]# Deploying to AWS +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 -As the command output suggests, you can now use the cli to deploy the application. Choose a stack name and run the `aws cloudformation deploy` command from the output of the package command. - ``` -$ aws cloudformation deploy --template-file output-sam.yaml --stack-name ServerlessSpringApi --capabilities CAPABILITY_IAM +$ sam deploy --guided ``` -Once the application is deployed, you can describe the stack to show the API endpoint that was created. The endpoint should be the `ServerlessSpringApi` key of the `Outputs` property: +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 ``` -$ aws cloudformation describe-stacks --stack-name ServerlessSpringApi -{ - "Stacks": [ - { - "StackId": "arn:aws:cloudformation:us-west-2:xxxxxxxx:stack/ServerlessSpringApi/xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx", - "Description": "AWS Serverless Spring API - ${groupId}::${artifactId}", - "Tags": [], - "Outputs": [ - { - "Description": "URL for application", - "ExportName": "\${resourceName}Api", - "OutputKey": "\${resourceName}Api", - "OutputValue": "https://xxxxxxx.execute-api.us-west-2.amazonaws.com/Prod/ping" - } - ], - "CreationTime": "2016-12-13T22:59:31.552Z", - "Capabilities": [ - "CAPABILITY_IAM" - ], - "StackName": "ServerlessSpringApi", - "NotificationARNs": [], - "StackStatus": "UPDATE_COMPLETE" - } - ] -} - +... +------------------------------------------------------------------------------------------------------------- +OutputKey-Description OutputValue +------------------------------------------------------------------------------------------------------------- +\${resourceName}Api - URL for application https://xxxxxxxxxx.execute-api.us-west-2.amazonaws.com/Prod/pets +------------------------------------------------------------------------------------------------------------- ``` Copy the `OutputValue` into a browser or use curl to test your first request: diff --git a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle index ee08f5d4c..9e4b4ab18 100644 --- a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle @@ -8,13 +8,13 @@ repositories { dependencies { compile ( 'com.amazonaws.serverless:aws-serverless-java-container-struts2:[1.0,)', - 'org.apache.struts:struts2-convention-plugin:2.5.20', - 'org.apache.struts:struts2-rest-plugin:2.5.20', - 'org.apache.struts:struts2-bean-validation-plugin:2.5.20', - 'org.apache.struts:struts2-junit-plugin:2.5.20', + 'org.apache.struts:struts2-convention-plugin:2.5.22', + 'org.apache.struts:struts2-rest-plugin:2.5.22', + 'org.apache.struts:struts2-bean-validation-plugin:2.5.22', + 'org.apache.struts:struts2-junit-plugin:2.5.22', 'com.jgeppert.struts2:struts2-aws-lambda-support-plugin:1.0.0', 'org.hibernate:hibernate-validator:4.3.2.Final', - 'com.fasterxml.jackson.core:jackson-databind:2.9.10', + 'com.fasterxml.jackson.core:jackson-databind:2.10.3', 'org.apache.logging.log4j:log4j-core:2.8.2', 'org.apache.logging.log4j:log4j-api:2.8.2', 'org.apache.logging.log4j:log4j-slf4j-impl:2.8.2', diff --git a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml index 3e224f4a5..935c0e9f2 100644 --- a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml @@ -15,8 +15,8 @@ 1.8 1.8 - 2.5.20 - 2.9.9 + 2.5.22 + 2.10.3 4.12 2.11.1 diff --git a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/sam.yaml b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/template.yml similarity index 95% rename from aws-serverless-struts2-archetype/src/main/resources/archetype-resources/sam.yaml rename to aws-serverless-struts2-archetype/src/main/resources/archetype-resources/template.yml index 023266fc7..11e06d07c 100644 --- a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/sam.yaml +++ b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/template.yml @@ -33,12 +33,12 @@ Resources: Properties: Handler: com.amazonaws.serverless.proxy.struts2.Struts2LambdaHandler::handleRequest Runtime: java8 - CodeUri: target/${artifactId}-${version}-lambda.zip + CodeUri: . MemorySize: 512 Policies: AWSLambdaBasicExecutionRole Timeout: 30 Events: - GetResource: + ProxyResource: Type: Api Properties: Path: /{proxy+} diff --git a/gha_build.sh b/gha_build.sh index d4d2d7237..9867bf509 100755 --- a/gha_build.sh +++ b/gha_build.sh @@ -80,18 +80,6 @@ function sample { if [[ "$?" -ne 0 ]]; then exit 1 fi - - SAM_FILE=${SAMPLE_FOLDER}/sam.yaml - if [[ -f "$SAM_FILE" ]]; then - TARGET_ZIP=$(cat ${SAM_FILE} | grep CodeUri | sed -e 's/^.*:\ //g') - if [[ ! -f "${SAMPLE_FOLDER}/${TARGET_ZIP}" ]]; then - echo "COULD NOT FIND TARGET ZIP FILE $TARGET_ZIP FOR $1 SAMPLE" - exit 1 - fi - else - echo "COULD NOT FIND SAM FILE: '${SAM_FILE}'" - exit 1 - fi } # set up the master pom otherwise we won't be able to find new dependencies diff --git a/owasp-suppression.xml b/owasp-suppression.xml index fe70f749b..0997df5c3 100644 --- a/owasp-suppression.xml +++ b/owasp-suppression.xml @@ -27,14 +27,4 @@ cpe:/a:restful_web_services_project:restful_web_services:7.x-2.1::~~~drupal~~ - - - - - - cpe:/a:slf4j:slf4j:1.8.0 - - \ No newline at end of file diff --git a/pom.xml b/pom.xml index 298bdc8b2..e61b9b739 100644 --- a/pom.xml +++ b/pom.xml @@ -45,8 +45,9 @@ 0.7 - 5.2.2 - 2.10.1 + 5.3.2 + 2.10.3 + 1.8.0-beta4 @@ -62,14 +63,14 @@ org.slf4j slf4j-api - 1.8.0-beta2 + ${slf4j.version} org.slf4j slf4j-simple - 1.8.0-beta2 + ${slf4j.version} test diff --git a/samples/jersey/pet-store/README.md b/samples/jersey/pet-store/README.md index bfb441648..d85d56284 100644 --- a/samples/jersey/pet-store/README.md +++ b/samples/jersey/pet-store/README.md @@ -1,62 +1,36 @@ # Serverless Jersey example -A basic pet store written with the [Jersey framework](https://jersey.java.net/). The `LambdaHandler` object is the main entry point for Lambda. +A basic pet store written with the [Jersey framework](https://jersey.java.net/). 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 `sam.yaml` file in the root folder contains the application definition +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. -## Installation -To build and install the sample application you will need [Maven](https://maven.apache.org/) and the [AWS CLI](https://aws.amazon.com/cli/) installed on your computer. +## 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/) -In a shell, navigate to the sample's folder and use maven to build a deployable jar. +## Deployment +In a shell, navigate to the sample's folder and use the SAM CLI to build a deployable package ``` -$ mvn package +$ sam build ``` -This command should generate a `serverless-jersey-example-1.0-SNAPSHOT.jar` in the `target` folder. Now that we have generated the jar file, we can use the AWS CLI to package the template for deployment. +This command compiles the application and prepares a deployment package in the `.aws-sam` sub-directory. -You will need an S3 bucket to store the artifacts for deployment. Once you have created the S3 bucket, run the following command from the sample's folder: +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 ``` -$ aws cloudformation package --template-file sam.yaml --output-template-file output-sam.yaml --s3-bucket -Uploading to xxxxxxxxxxxxxxxxxxxxxxxxxx 6464692 / 6464692.0 (100.00%) -Successfully packaged artifacts and wrote output template to file output-sam.yaml. -Execute the following command to deploy the packaged template -aws cloudformation deploy --template-file /your/path/output-sam.yaml --stack-name +$ sam deploy --guided ``` -As the command output suggests, you can now use the cli to deploy the application. Choose a stack name and run the `aws cloudformation deploy` command from the output of the package command. - -``` -$ aws cloudformation deploy --template-file output-sam.yaml --stack-name ServerlessJerseySample --capabilities CAPABILITY_IAM -``` - -Once the application is deployed, you can describe the stack to show the API endpoint that was created. The endpoint should be the `JerseyPetStoreApi` key of the `Outputs` property: - -``` -$ aws cloudformation describe-stacks --stack-name ServerlessJerseySample -{ - "Stacks": [ - { - "StackId": "arn:aws:cloudformation:us-west-2:xxxxxxxx:stack/JerseySample/xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx", - "Description": "Example Pet Store API written in jersey with the aws-serverless-java-container library", - "Tags": [], - "Outputs": [ - { - "Description": "URL for application", - "OutputKey": "JerseyPetStoreApi", - "OutputValue": "https://xxxxxxx.execute-api.us-west-2.amazonaws.com/Prod/pets" - } - ], - "CreationTime": "2016-12-13T22:59:31.552Z", - "Capabilities": [ - "CAPABILITY_IAM" - ], - "StackName": "JerseySample", - "NotificationARNs": [], - "StackStatus": "UPDATE_COMPLETE" - } - ] -} +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 +--------------------------------------------------------------------------------------------------------- -Copy the `OutputValue` into a browser to test a first request. \ No newline at end of file +$ curl https://xxxxxxxxxx.execute-api.us-west-2.amazonaws.com/pets +``` \ No newline at end of file diff --git a/samples/jersey/pet-store/build.gradle b/samples/jersey/pet-store/build.gradle index 064fdf373..88e34767e 100644 --- a/samples/jersey/pet-store/build.gradle +++ b/samples/jersey/pet-store/build.gradle @@ -9,17 +9,17 @@ dependencies { compile ( 'com.amazonaws:aws-lambda-java-core:1.2.0', 'com.amazonaws.serverless:aws-serverless-java-container-jersey:[1.0,)', - 'com.fasterxml.jackson.core:jackson-databind:2.9.10', + 'com.fasterxml.jackson.core:jackson-databind:2.10.3', 'io.symphonia:lambda-logging:1.0.1' ) - compile("org.glassfish.jersey.media:jersey-media-json-jackson:2.10.1") { + compile("org.glassfish.jersey.media:jersey-media-json-jackson:2.30.1") { exclude group: 'com.fasterxml.jackson.core', module: "jackson-annotations" exclude group: 'com.fasterxml.jackson.core', module: "jackson-databind" exclude group: 'com.fasterxml.jackson.core', module: "jackson-core" } - compile("org.glassfish.jersey.inject:jersey-hk2:2.29.1") { + compile("org.glassfish.jersey.inject:jersey-hk2:2.30.1") { exclude group: 'javax.inject', module: "javax.inject" } } diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index 6761c6210..bacdbe042 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -26,8 +26,8 @@ 1.8 1.8 - 2.29.1 - 2.10.1 + 2.30.1 + 2.10.3 diff --git a/samples/jersey/pet-store/sam.yaml b/samples/jersey/pet-store/template.yml similarity index 71% rename from samples/jersey/pet-store/sam.yaml rename to samples/jersey/pet-store/template.yml index 7ca060dae..ababb78a8 100644 --- a/samples/jersey/pet-store/sam.yaml +++ b/samples/jersey/pet-store/template.yml @@ -13,20 +13,20 @@ Resources: Properties: Handler: com.amazonaws.serverless.sample.jersey.StreamLambdaHandler::handleRequest Runtime: java8 - CodeUri: target/serverless-jersey-example-1.0-SNAPSHOT-lambda-package.zip + CodeUri: . MemorySize: 512 Policies: AWSLambdaBasicExecutionRole Timeout: 20 Events: - GetResource: - Type: Api + HttpApiEvent: + Type: HttpApi Properties: - Path: /{proxy+} - Method: any + TimeoutInMillis: 20000 + PayloadFormatVersion: '1.0' Outputs: JerseyPetStoreApi: Description: URL for application - Value: !Sub 'https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/pets' + Value: !Sub 'https://${ServerlessHttpApi}.execute-api.${AWS::Region}.amazonaws.com/pets' Export: Name: JerseyPetStoreApi diff --git a/samples/micronaut/pet-store/build.gradle b/samples/micronaut/pet-store/build.gradle index 94f3d1b5f..8ed45b3d7 100644 --- a/samples/micronaut/pet-store/build.gradle +++ b/samples/micronaut/pet-store/build.gradle @@ -3,7 +3,7 @@ plugins { id "com.github.johnrengelman.shadow" version "5.0.0" id "application" id "net.ltgt.apt-eclipse" version "0.21" - id "org.springframework.boot" version "2.1.8.RELEASE" + id "org.springframework.boot" version "2.1.12.RELEASE" id "io.spring.dependency-management" version "1.0.6.RELEASE" } diff --git a/samples/spark/pet-store/README.md b/samples/spark/pet-store/README.md index 5d3e34d5a..2bfec99de 100644 --- a/samples/spark/pet-store/README.md +++ b/samples/spark/pet-store/README.md @@ -1,62 +1,36 @@ # Serverless Spark example -A basic pet store written with the [Spark framework](http://sparkjava.com/). The `LambdaHandler` object is the main entry point for Lambda. +A basic pet store written with the [Spark framework](http://sparkjava.com/). 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 `sam.yaml` file in the root folder contains the application definition +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. -## Installation -To build and install the sample application you will need [Maven](https://maven.apache.org/) and the [AWS CLI](https://aws.amazon.com/cli/) installed on your computer. +## 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/) -In a shell, navigate to the sample's folder and use maven to build a deployable jar. +## Deployment +In a shell, navigate to the sample's folder and use the SAM CLI to build a deployable package ``` -$ mvn package +$ sam build ``` -This command should generate a `serverless-spark-example-1.0-SNAPSHOT.jar` in the `target` folder. Now that we have generated the jar file, we can use the AWS CLI to package the template for deployment. +This command compiles the application and prepares a deployment package in the `.aws-sam` sub-directory. -You will need an S3 bucket to store the artifacts for deployment. Once you have created the S3 bucket, run the following command from the sample's folder: +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 ``` -$ aws cloudformation package --template-file sam.yaml --output-template-file output-sam.yaml --s3-bucket -Uploading to xxxxxxxxxxxxxxxxxxxxxxxxxx 6464692 / 6464692.0 (100.00%) -Successfully packaged artifacts and wrote output template to file output-sam.yaml. -Execute the following command to deploy the packaged template -aws cloudformation deploy --template-file /your/path/output-sam.yaml --stack-name +$ sam deploy --guided ``` -As the command output suggests, you can now use the cli to deploy the application. Choose a stack name and run the `aws cloudformation deploy` command from the output of the package command. - -``` -$ aws cloudformation deploy --template-file output-sam.yaml --stack-name ServerlessSparkSample --capabilities CAPABILITY_IAM -``` - -Once the application is deployed, you can describe the stack to show the API endpoint that was created. The endpoint should be the `SparkPetStoreApi` key of the `Outputs` property: - -``` -$ aws cloudformation describe-stacks --stack-name ServerlessSparkSample -{ - "Stacks": [ - { - "StackId": "arn:aws:cloudformation:us-west-2:xxxxxxxx:stack/SparkSample/xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx", - "Description": "Example Pet Store API written with spark with the aws-serverless-java-container library", - "Tags": [], - "Outputs": [ - { - "Description": "URL for application", - "OutputKey": "PetStoreApi", - "OutputValue": "https://xxxxxxx.execute-api.us-west-2.amazonaws.com/Prod/pets" - } - ], - "CreationTime": "2016-12-13T22:59:31.552Z", - "Capabilities": [ - "CAPABILITY_IAM" - ], - "StackName": "SparkSample", - "NotificationARNs": [], - "StackStatus": "UPDATE_COMPLETE" - } - ] -} +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 +--------------------------------------------------------------------------------------------------------- -Copy the `OutputValue` into a browser to test a first request. +$ curl https://xxxxxxxxxx.execute-api.us-west-2.amazonaws.com/pets +``` \ No newline at end of file diff --git a/samples/spark/pet-store/build.gradle b/samples/spark/pet-store/build.gradle index 00ac4797c..01605a978 100644 --- a/samples/spark/pet-store/build.gradle +++ b/samples/spark/pet-store/build.gradle @@ -9,7 +9,7 @@ dependencies { compile ( 'com.sparkjava:spark-core:2.9.1', 'com.amazonaws.serverless:aws-serverless-java-container-spark:[1.0,)', - 'com.fasterxml.jackson.core:jackson-databind:2.10.1', + 'com.fasterxml.jackson.core:jackson-databind:2.10.3', 'io.symphonia:lambda-logging:1.0.1' ) } diff --git a/samples/spark/pet-store/pom.xml b/samples/spark/pet-store/pom.xml index 4bdd90956..26a2f256b 100644 --- a/samples/spark/pet-store/pom.xml +++ b/samples/spark/pet-store/pom.xml @@ -26,7 +26,7 @@ 1.8 1.8 - 2.10.1 + 2.10.3 2.9.1 diff --git a/samples/spark/pet-store/sam.yaml b/samples/spark/pet-store/template.yml similarity index 71% rename from samples/spark/pet-store/sam.yaml rename to samples/spark/pet-store/template.yml index b16086533..26e0a6535 100644 --- a/samples/spark/pet-store/sam.yaml +++ b/samples/spark/pet-store/template.yml @@ -13,20 +13,20 @@ Resources: Properties: Handler: com.amazonaws.serverless.sample.spark.StreamLambdaHandler::handleRequest Runtime: java8 - CodeUri: target/serverless-spark-example-1.0-SNAPSHOT-lambda-package.zip + CodeUri: . MemorySize: 512 Policies: AWSLambdaBasicExecutionRole Timeout: 20 Events: - GetResource: - Type: Api + HttpApiEvent: + Type: HttpApi Properties: - Path: /{proxy+} - Method: any + TimeoutInMillis: 20000 + PayloadFormatVersion: '1.0' Outputs: SparkPetStoreApi: Description: URL for application - Value: !Sub 'https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/pets' + Value: !Sub 'https://${ServerlessHttpApi}.execute-api.${AWS::Region}.amazonaws.com/pets' Export: Name: SparkPetStoreApi diff --git a/samples/spring/pet-store/README.md b/samples/spring/pet-store/README.md index 17592941b..5637b6b69 100644 --- a/samples/spring/pet-store/README.md +++ b/samples/spring/pet-store/README.md @@ -1,62 +1,36 @@ # Serverless Spring example -A basic pet store written with the [Spring framework](https://projects.spring.io/spring-framework/). The `LambdaHandler` object is the main entry point for Lambda. +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 `sam.yaml` file in the root folder contains the application definition +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. -## Installation -To build and install the sample application you will need [Maven](https://maven.apache.org/) and the [AWS CLI](https://aws.amazon.com/cli/) installed on your computer. +## 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/) -In a shell, navigate to the sample's folder and use maven to build a deployable jar. +## Deployment +In a shell, navigate to the sample's folder and use the SAM CLI to build a deployable package ``` -$ mvn package +$ sam build ``` -This command should generate a `serverless-spring-example-1.0-SNAPSHOT.jar` in the `target` folder. Now that we have generated the jar file, we can use the AWS CLI to package the template for deployment. +This command compiles the application and prepares a deployment package in the `.aws-sam` sub-directory. -You will need an S3 bucket to store the artifacts for deployment. Once you have created the S3 bucket, run the following command from the sample's folder: +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 ``` -$ aws cloudformation package --template-file sam.yaml --output-template-file output-sam.yaml --s3-bucket -Uploading to xxxxxxxxxxxxxxxxxxxxxxxxxx 6464692 / 6464692.0 (100.00%) -Successfully packaged artifacts and wrote output template to file output-sam.yaml. -Execute the following command to deploy the packaged template -aws cloudformation deploy --template-file /your/path/output-sam.yaml --stack-name +$ sam deploy --guided ``` -As the command output suggests, you can now use the cli to deploy the application. Choose a stack name and run the `aws cloudformation deploy` command from the output of the package command. - -``` -$ aws cloudformation deploy --template-file output-sam.yaml --stack-name ServerlessSpringSample --capabilities CAPABILITY_IAM -``` - -Once the application is deployed, you can describe the stack to show the API endpoint that was created. The endpoint should be the `SparkPetStoreApi` key of the `Outputs` property: - -``` -$ aws cloudformation describe-stacks --stack-name ServerlessSpringSample -{ - "Stacks": [ - { - "StackId": "arn:aws:cloudformation:us-west-2:xxxxxxxx:stack/JerseySample/xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx", - "Description": "Example Pet Store API written with spark with the aws-serverless-java-container library", - "Tags": [], - "Outputs": [ - { - "Description": "URL for application", - "OutputKey": "PetStoreApi", - "OutputValue": "https://xxxxxxx.execute-api.us-west-2.amazonaws.com/Prod/pets" - } - ], - "CreationTime": "2016-12-13T22:59:31.552Z", - "Capabilities": [ - "CAPABILITY_IAM" - ], - "StackName": "JerseySample", - "NotificationARNs": [], - "StackStatus": "UPDATE_COMPLETE" - } - ] -} +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 +--------------------------------------------------------------------------------------------------------- -Copy the `OutputValue` into a browser to test a first request. +$ curl https://xxxxxxxxxx.execute-api.us-west-2.amazonaws.com/pets +``` \ No newline at end of file diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index 7d7a74c44..433f5741b 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -7,13 +7,13 @@ repositories { dependencies { compile ( - 'org.springframework:spring-webmvc:5.1.9.RELEASE', - 'org.springframework:spring-context:5.1.9.RELEASE', + 'org.springframework:spring-webmvc:5.2.5.RELEASE', + 'org.springframework:spring-context:5.2.5.RELEASE', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[1.0,)', 'org.apache.logging.log4j:log4j-core:2.8.2', 'org.apache.logging.log4j:log4j-api:2.8.2', 'org.apache.logging.log4j:log4j-slf4j-impl:2.8.2', - 'com.fasterxml.jackson.core:jackson-databind:2.9.10', + 'com.fasterxml.jackson.core:jackson-databind:2.10.3', 'com.amazonaws:aws-lambda-java-log4j2:1.1.0', ) } diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index 86d26471d..2798eafa1 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -26,7 +26,7 @@ 1.8 1.8 - 5.2.3.RELEASE + 5.2.5.RELEASE 4.12 2.8.2 diff --git a/samples/spring/pet-store/sam.yaml b/samples/spring/pet-store/template.yml similarity index 71% rename from samples/spring/pet-store/sam.yaml rename to samples/spring/pet-store/template.yml index 6a6f07e47..8c3dec021 100644 --- a/samples/spring/pet-store/sam.yaml +++ b/samples/spring/pet-store/template.yml @@ -13,20 +13,20 @@ Resources: Properties: Handler: com.amazonaws.serverless.sample.spring.StreamLambdaHandler::handleRequest Runtime: java8 - CodeUri: target/serverless-spring-example-1.0-SNAPSHOT-lambda-package.zip + CodeUri: . MemorySize: 512 Policies: AWSLambdaBasicExecutionRole Timeout: 30 Events: - GetResource: - Type: Api + HttpApiEvent: + Type: HttpApi Properties: - Path: /{proxy+} - Method: any + TimeoutInMillis: 20000 + PayloadFormatVersion: '1.0' Outputs: SpringPetStoreApi: Description: URL for application - Value: !Sub 'https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/pets' + Value: !Sub 'https://${ServerlessHttpApi}.execute-api.${AWS::Region}.amazonaws.com/pets' Export: Name: SpringPetStoreApi diff --git a/samples/springboot/pet-store/README.md b/samples/springboot/pet-store/README.md index ae9100cb3..4462f1592 100644 --- a/samples/springboot/pet-store/README.md +++ b/samples/springboot/pet-store/README.md @@ -1,62 +1,36 @@ # Serverless Spring Boot example -A basic pet store written with the [Spring Boot framework](https://projects.spring.io/spring-boot/). The `LambdaHandler` object is the main entry point for Lambda. +A basic pet store written with the [Spring Boot framework](https://projects.spring.io/spring-boot/). 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 `sam.yaml` file in the root folder contains the application definition +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. -## Installation -To build and install the sample application you will need [Maven](https://maven.apache.org/) and the [AWS CLI](https://aws.amazon.com/cli/) installed on your computer. +## 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/) -In a shell, navigate to the sample's folder and use maven to build a deployable jar. +## Deployment +In a shell, navigate to the sample's folder and use the SAM CLI to build a deployable package ``` -$ mvn package +$ sam build ``` -This command should generate a `serverless-spring-boot-example-1.0-SNAPSHOT.jar` in the `target` folder. Now that we have generated the jar file, we can use the AWS CLI to package the template for deployment. +This command compiles the application and prepares a deployment package in the `.aws-sam` sub-directory. -You will need an S3 bucket to store the artifacts for deployment. Once you have created the S3 bucket, run the following command from the sample's folder: +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 ``` -$ aws cloudformation package --template-file sam.yaml --output-template-file output-sam.yaml --s3-bucket -Uploading to xxxxxxxxxxxxxxxxxxxxxxxxxx 6464692 / 6464692.0 (100.00%) -Successfully packaged artifacts and wrote output template to file output-sam.yaml. -Execute the following command to deploy the packaged template -aws cloudformation deploy --template-file /your/path/output-sam.yaml --stack-name +$ sam deploy --guided ``` -As the command output suggests, you can now use the cli to deploy the application. Choose a stack name and run the `aws cloudformation deploy` command from the output of the package command. - -``` -$ aws cloudformation deploy --template-file output-sam.yaml --stack-name ServerlessSpringBootSample --capabilities CAPABILITY_IAM -``` - -Once the application is deployed, you can describe the stack to show the API endpoint that was created. The endpoint should be the `SpringBootPetStoreApi` key of the `Outputs` property: - -``` -$ aws cloudformation describe-stacks --stack-name ServerlessSpringBootSample -{ - "Stacks": [ - { - "StackId": "arn:aws:cloudformation:us-west-2:xxxxxxxx:stack/JerseySample/xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx", - "Description": "Example Pet Store API written with spark with the aws-serverless-java-container library", - "Tags": [], - "Outputs": [ - { - "Description": "URL for application", - "OutputKey": "SpringBootPetStoreApi", - "OutputValue": "https://xxxxxxx.execute-api.us-west-2.amazonaws.com/Prod/pets" - } - ], - "CreationTime": "2016-12-13T22:59:31.552Z", - "Capabilities": [ - "CAPABILITY_IAM" - ], - "StackName": "JerseySample", - "NotificationARNs": [], - "StackStatus": "UPDATE_COMPLETE" - } - ] -} +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 +--------------------------------------------------------------------------------------------------------- -Copy the `OutputValue` into a browser to test a first request. +$ curl https://xxxxxxxxxx.execute-api.us-west-2.amazonaws.com/pets +``` \ No newline at end of file diff --git a/samples/springboot/pet-store/build.gradle b/samples/springboot/pet-store/build.gradle index 53295266a..caaeea89c 100644 --- a/samples/springboot/pet-store/build.gradle +++ b/samples/springboot/pet-store/build.gradle @@ -1,6 +1,3 @@ -plugins { - id 'org.springframework.boot' version '1.5.22.RELEASE' -} apply plugin: 'java' repositories { @@ -11,7 +8,7 @@ repositories { dependencies { compile ( - 'org.springframework.boot:spring-boot-starter-web', + 'org.springframework.boot:spring-boot-starter-web:1.5.22.RELEASE', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[1.0,)', 'io.symphonia:lambda-logging:1.0.1' ) diff --git a/samples/springboot/pet-store/sam.yaml b/samples/springboot/pet-store/template.yml similarity index 72% rename from samples/springboot/pet-store/sam.yaml rename to samples/springboot/pet-store/template.yml index 23e143a95..de08aa74b 100644 --- a/samples/springboot/pet-store/sam.yaml +++ b/samples/springboot/pet-store/template.yml @@ -13,20 +13,20 @@ Resources: Properties: Handler: com.amazonaws.serverless.sample.springboot.StreamLambdaHandler::handleRequest Runtime: java8 - CodeUri: target/serverless-spring-boot-example-1.0-SNAPSHOT-lambda-package.zip + CodeUri: . MemorySize: 1512 Policies: AWSLambdaBasicExecutionRole Timeout: 60 Events: - GetResource: - Type: Api + HttpApiEvent: + Type: HttpApi Properties: - Path: /{proxy+} - Method: any + TimeoutInMillis: 20000 + PayloadFormatVersion: '1.0' Outputs: SpringBootPetStoreApi: Description: URL for application - Value: !Sub 'https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/pets' + Value: !Sub 'https://${ServerlessHttpApi}.execute-api.${AWS::Region}.amazonaws.com/pets' Export: Name: SpringBootPetStoreApi diff --git a/samples/springboot2/pet-store/README.md b/samples/springboot2/pet-store/README.md index 5f8edb68b..8e15b3773 100644 --- a/samples/springboot2/pet-store/README.md +++ b/samples/springboot2/pet-store/README.md @@ -1,62 +1,36 @@ # Serverless Spring Boot 2 example -A basic pet store written with the [Spring Boot 2 framework](https://projects.spring.io/spring-boot/). The `LambdaHandler` object is the main entry point for Lambda. +A basic pet store written with the [Spring Boot 2 framework](https://projects.spring.io/spring-boot/). 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 `sam.yaml` file in the root folder contains the application definition +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. -## Installation -To build and install the sample application you will need [Maven](https://maven.apache.org/) and the [AWS CLI](https://aws.amazon.com/cli/) installed on your computer. +## 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/) -In a shell, navigate to the sample's folder and use maven to build a deployable jar. +## Deployment +In a shell, navigate to the sample's folder and use the SAM CLI to build a deployable package ``` -$ mvn package +$ sam build ``` -This command should generate a `serverless-spring-boot-example-1.0-SNAPSHOT.jar` in the `target` folder. Now that we have generated the jar file, we can use the AWS CLI to package the template for deployment. +This command compiles the application and prepares a deployment package in the `.aws-sam` sub-directory. -You will need an S3 bucket to store the artifacts for deployment. Once you have created the S3 bucket, run the following command from the sample's folder: +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 ``` -$ aws cloudformation package --template-file sam.yaml --output-template-file output-sam.yaml --s3-bucket -Uploading to xxxxxxxxxxxxxxxxxxxxxxxxxx 6464692 / 6464692.0 (100.00%) -Successfully packaged artifacts and wrote output template to file output-sam.yaml. -Execute the following command to deploy the packaged template -aws cloudformation deploy --template-file /your/path/output-sam.yaml --stack-name +$ sam deploy --guided ``` -As the command output suggests, you can now use the cli to deploy the application. Choose a stack name and run the `aws cloudformation deploy` command from the output of the package command. - -``` -$ aws cloudformation deploy --template-file output-sam.yaml --stack-name ServerlessSpringBootSample --capabilities CAPABILITY_IAM -``` - -Once the application is deployed, you can describe the stack to show the API endpoint that was created. The endpoint should be the `SpringBootPetStoreApi` key of the `Outputs` property: - -``` -$ aws cloudformation describe-stacks --stack-name ServerlessSpringBootSample -{ - "Stacks": [ - { - "StackId": "arn:aws:cloudformation:us-west-2:xxxxxxxx:stack/JerseySample/xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx", - "Description": "Example Pet Store API written with spark with the aws-serverless-java-container library", - "Tags": [], - "Outputs": [ - { - "Description": "URL for application", - "OutputKey": "SpringBootPetStoreApi", - "OutputValue": "https://xxxxxxx.execute-api.us-west-2.amazonaws.com/Prod/pets" - } - ], - "CreationTime": "2016-12-13T22:59:31.552Z", - "Capabilities": [ - "CAPABILITY_IAM" - ], - "StackName": "JerseySample", - "NotificationARNs": [], - "StackStatus": "UPDATE_COMPLETE" - } - ] -} +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 +--------------------------------------------------------------------------------------------------------- -Copy the `OutputValue` into a browser to test a first request. +$ curl https://xxxxxxxxxx.execute-api.us-west-2.amazonaws.com/pets +``` \ No newline at end of file diff --git a/samples/springboot2/pet-store/build.gradle b/samples/springboot2/pet-store/build.gradle index 65826e900..365f3ac22 100644 --- a/samples/springboot2/pet-store/build.gradle +++ b/samples/springboot2/pet-store/build.gradle @@ -1,6 +1,3 @@ -plugins { - id 'org.springframework.boot' version '2.1.8.RELEASE' -} apply plugin: 'java' repositories { @@ -11,10 +8,10 @@ repositories { dependencies { compile ( - implementation('org.springframework.boot:spring-boot-starter-web:2.1.8.RELEASE') { + implementation('org.springframework.boot:spring-boot-starter-web:2.2.6.RELEASE') { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat' }, - 'com.amazonaws.serverless:aws-serverless-java-container-springboot2:[1.0,)', + 'com.amazonaws.serverless:aws-serverless-java-container-springboot2:[1.4,)', 'io.symphonia:lambda-logging:1.0.1' ) testCompile("junit:junit") diff --git a/samples/springboot2/pet-store/pom.xml b/samples/springboot2/pet-store/pom.xml index 547a7ead1..f9444cbf4 100644 --- a/samples/springboot2/pet-store/pom.xml +++ b/samples/springboot2/pet-store/pom.xml @@ -10,7 +10,7 @@ org.springframework.boot spring-boot-starter-parent - 2.1.8.RELEASE + 2.2.6.RELEASE @@ -33,7 +33,7 @@ com.amazonaws.serverless aws-serverless-java-container-springboot2 - [0.1,) + [1.4,) diff --git a/samples/springboot2/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot2/filter/CognitoIdentityFilter.java b/samples/springboot2/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot2/filter/CognitoIdentityFilter.java index 3097bb80b..5c3482e40 100644 --- a/samples/springboot2/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot2/filter/CognitoIdentityFilter.java +++ b/samples/springboot2/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot2/filter/CognitoIdentityFilter.java @@ -41,6 +41,7 @@ public void doFilter(ServletRequest servletRequest, ServletResponse servletRespo if (apiGwContext == null) { log.warn("API Gateway context is null"); filterChain.doFilter(servletRequest, servletResponse); + return; } if (!AwsProxyRequestContext.class.isAssignableFrom(apiGwContext.getClass())) { log.warn("API Gateway context object is not of valid type"); diff --git a/samples/springboot2/pet-store/sam.yaml b/samples/springboot2/pet-store/template.yml similarity index 72% rename from samples/springboot2/pet-store/sam.yaml rename to samples/springboot2/pet-store/template.yml index c00d45c3f..a82974790 100644 --- a/samples/springboot2/pet-store/sam.yaml +++ b/samples/springboot2/pet-store/template.yml @@ -13,20 +13,20 @@ Resources: Properties: Handler: com.amazonaws.serverless.sample.springboot2.StreamLambdaHandler::handleRequest Runtime: java8 - CodeUri: target/serverless-springboot2-example-1.0-SNAPSHOT-lambda-package.zip + CodeUri: . MemorySize: 1512 Policies: AWSLambdaBasicExecutionRole Timeout: 60 Events: - GetResource: - Type: Api + HttpApiEvent: + Type: HttpApi Properties: - Path: /{proxy+} - Method: any + TimeoutInMillis: 20000 + PayloadFormatVersion: '1.0' Outputs: SpringBootPetStoreApi: Description: URL for application - Value: !Sub 'https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/pets' + Value: !Sub 'https://${ServerlessHttpApi}.execute-api.${AWS::Region}.amazonaws.com/pets' Export: Name: SpringBootPetStoreApi diff --git a/samples/struts2/pet-store/README.md b/samples/struts2/pet-store/README.md index 9203dd896..89cc1676b 100644 --- a/samples/struts2/pet-store/README.md +++ b/samples/struts2/pet-store/README.md @@ -1,62 +1,36 @@ # Serverless Struts2 example A basic pet store written with the [Apache Struts framework](https://struts.apache.org). The `Struts2LambdaHandler` object provided by the `aws-serverless-java-container-struts2` 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 `sam.yaml` file in the root folder contains the application definition +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 -## Installation -To build and install the sample application you will need [Maven](https://maven.apache.org/) and the [AWS CLI](https://aws.amazon.com/cli/) installed on your computer. +## 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/) -In a shell, navigate to the sample's folder and use maven to build a deployable jar. +## Deployment +In a shell, navigate to the sample's folder and use the SAM CLI to build a deployable package ``` -$ mvn package +$ sam build ``` -This command should generate a `serverless-struts-example-1.0-SNAPSHOT.jar` in the `target` folder. Now that we have generated the zip file, we can use the AWS CLI to package the template for deployment. +This command compiles the application and prepares a deployment package in the `.aws-sam` sub-directory. -You will need an S3 bucket to store the artifacts for deployment. Once you have created the S3 bucket, run the following command from the sample's folder: +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 ``` -$ aws cloudformation package --template-file sam.yaml --output-template-file output-sam.yaml --s3-bucket -Uploading to xxxxxxxxxxxxxxxxxxxxxxxxxx 6464692 / 6464692.0 (100.00%) -Successfully packaged artifacts and wrote output template to file output-sam.yaml. -Execute the following command to deploy the packaged template -aws cloudformation deploy --template-file /your/path/output-sam.yaml --stack-name +$ sam deploy --guided ``` -As the command output suggests, you can now use the cli to deploy the application. Choose a stack name and run the `aws cloudformation deploy` command from the output of the package command. - -``` -$ aws cloudformation deploy --template-file output-sam.yaml --stack-name ServerlessSpringSample --capabilities CAPABILITY_IAM -``` - -Once the application is deployed, you can describe the stack to show the API endpoint that was created. The endpoint should be the `SparkPetStoreApi` key of the `Outputs` property: - -``` -$ aws cloudformation describe-stacks --stack-name ServerlessSpringSample -{ - "Stacks": [ - { - "StackId": "arn:aws:cloudformation:us-west-2:xxxxxxxx:stack/JerseySample/xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx", - "Description": "Example Pet Store API written with Apache Struts with the aws-serverless-java-container library", - "Tags": [], - "Outputs": [ - { - "Description": "URL for application", - "OutputKey": "PetStoreApi", - "OutputValue": "https://xxxxxxx.execute-api.us-west-2.amazonaws.com/Prod/pets" - } - ], - "CreationTime": "2016-12-13T22:59:31.552Z", - "Capabilities": [ - "CAPABILITY_IAM" - ], - "StackName": "StrutsSample", - "NotificationARNs": [], - "StackStatus": "UPDATE_COMPLETE" - } - ] -} +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 +--------------------------------------------------------------------------------------------------------- -Copy the `OutputValue` into a browser to test a first request. +$ curl https://xxxxxxxxxx.execute-api.us-west-2.amazonaws.com/pets +``` \ No newline at end of file diff --git a/samples/struts2/pet-store/build.gradle b/samples/struts2/pet-store/build.gradle index 2d7e42500..24f018973 100644 --- a/samples/struts2/pet-store/build.gradle +++ b/samples/struts2/pet-store/build.gradle @@ -8,13 +8,13 @@ repositories { dependencies { compile ( 'com.amazonaws.serverless:aws-serverless-java-container-struts2:[1.0,)', - 'org.apache.struts:struts2-convention-plugin:2.5.20', - 'org.apache.struts:struts2-rest-plugin:2.5.20', - 'org.apache.struts:struts2-bean-validation-plugin:2.5.20', - 'org.apache.struts:struts2-junit-plugin:2.5.20', + 'org.apache.struts:struts2-convention-plugin:2.5.22', + 'org.apache.struts:struts2-rest-plugin:2.5.22', + 'org.apache.struts:struts2-bean-validation-plugin:2.5.22', + 'org.apache.struts:struts2-junit-plugin:2.5.22', 'com.jgeppert.struts2:struts2-aws-lambda-support-plugin:1.1.0', 'org.hibernate:hibernate-validator:4.3.2.Final', - 'com.fasterxml.jackson.core:jackson-databind:2.10.1', + 'com.fasterxml.jackson.core:jackson-databind:2.10.3', 'org.apache.logging.log4j:log4j-core:2.8.2', 'org.apache.logging.log4j:log4j-api:2.8.2', 'org.apache.logging.log4j:log4j-slf4j-impl:2.8.2', diff --git a/samples/struts2/pet-store/pom.xml b/samples/struts2/pet-store/pom.xml index 9689fc6a7..b761207d6 100644 --- a/samples/struts2/pet-store/pom.xml +++ b/samples/struts2/pet-store/pom.xml @@ -26,8 +26,8 @@ 1.8 1.8 - 2.5.20 - 2.10.1 + 2.5.22 + 2.10.3 4.12 2.11.1 diff --git a/samples/struts2/pet-store/sam.yaml b/samples/struts2/pet-store/template.yml similarity index 72% rename from samples/struts2/pet-store/sam.yaml rename to samples/struts2/pet-store/template.yml index c44aa3201..72128dd5b 100644 --- a/samples/struts2/pet-store/sam.yaml +++ b/samples/struts2/pet-store/template.yml @@ -13,20 +13,20 @@ Resources: Properties: Handler: com.amazonaws.serverless.proxy.struts2.Struts2LambdaHandler::handleRequest Runtime: java8 - CodeUri: target/serverless-struts-example-1.0-SNAPSHOT-lambda.zip + CodeUri: . MemorySize: 256 Policies: AWSLambdaBasicExecutionRole Timeout: 30 Events: - GetResource: - Type: Api + HttpApiEvent: + Type: HttpApi Properties: - Path: /{proxy+} - Method: any + TimeoutInMillis: 20000 + PayloadFormatVersion: '1.0' Outputs: SpringPetStoreApi: Description: URL for application - Value: !Sub 'https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/pets' + Value: !Sub 'https://${ServerlessHttpApi}.execute-api.${AWS::Region}.amazonaws.com/pets' Export: Name: Struts2PetStoreApi From 588e2c722d7dc298a12ec2add98d4b06b2b8a7b2 Mon Sep 17 00:00:00 2001 From: Stefano Buliani Date: Wed, 8 Apr 2020 12:01:46 -0700 Subject: [PATCH 085/888] chore: Preparing for release 1.5 to new AWS sonatype instance --- pom.xml | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/pom.xml b/pom.xml index e61b9b739..bbc7eb559 100644 --- a/pom.xml +++ b/pom.xml @@ -7,13 +7,6 @@ 1.5-SNAPSHOT AWS Serverless Java container - - - org.sonatype.oss - oss-parent - 7 - - aws-serverless-java-container-core aws-serverless-java-container-jersey @@ -35,6 +28,14 @@ scm:git:git@github.com:awslabs/aws-serverless-java-container.git + + + aws-oss-sonatype-staging + AWS Sonatype staging + https://aws.oss.sonatype.org + + + The Apache Software License, Version 2.0 From 5948b6e777a4a74bc879cd5fd798429726c77ba1 Mon Sep 17 00:00:00 2001 From: Stefano Buliani Date: Wed, 8 Apr 2020 13:01:48 -0700 Subject: [PATCH 086/888] fix: Fixed version of release plugin to the same used by sonatype parent project --- pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/pom.xml b/pom.xml index bbc7eb559..3b1f4fb02 100644 --- a/pom.xml +++ b/pom.xml @@ -132,6 +132,7 @@ org.apache.maven.plugins maven-release-plugin + 2.1 clean verify install false From 57730cf73ef5f388eef0bf86eb1ec4107cbf8d24 Mon Sep 17 00:00:00 2001 From: Stefano Buliani Date: Wed, 8 Apr 2020 13:07:41 -0700 Subject: [PATCH 087/888] Revert "fix: Fixed version of release plugin to the same used by sonatype parent project" This reverts commit 5948b6e777a4a74bc879cd5fd798429726c77ba1. --- pom.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/pom.xml b/pom.xml index 3b1f4fb02..bbc7eb559 100644 --- a/pom.xml +++ b/pom.xml @@ -132,7 +132,6 @@ org.apache.maven.plugins maven-release-plugin - 2.1 clean verify install false From c8e8f414a94cb910c4e612369f17ac5aead89b0e Mon Sep 17 00:00:00 2001 From: Stefano Buliani Date: Wed, 8 Apr 2020 14:21:22 -0700 Subject: [PATCH 088/888] chore: Added project description, url, and developer information --- pom.xml | 42 +++++++++++++++++++++++++++++++++++++++--- 1 file changed, 39 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index bbc7eb559..e7a04b40d 100644 --- a/pom.xml +++ b/pom.xml @@ -6,6 +6,23 @@ pom 1.5-SNAPSHOT AWS Serverless Java container + A Java framework to run Spring, Spring Boot, Jersey, Spark, and Struts applications inside AWS Lambda + https://github.com/awslabs/aws-serverless-java-container + + GitHub Issues + https://github.com/awslabs/aws-serverless-java-container/issues + + + + + amazonwebservices + Amazon Web Services + https://aws.amazon.com + + developer + + + aws-serverless-java-container-core @@ -28,11 +45,30 @@ scm:git:git@github.com:awslabs/aws-serverless-java-container.git + + + sonatype-nexus-snapshots + Sonatype Nexus Snapshots + https://aws.oss.sonatype.org/content/repositories/snapshots + + false + + + true + + + + + + sonatype-nexus-snapshots + Sonatype Nexus Snapshots + https://aws.oss.sonatype.org/content/repositories/snapshots/ + - aws-oss-sonatype-staging - AWS Sonatype staging - https://aws.oss.sonatype.org + sonatype-nexus-staging + Nexus Release Repository + https://aws.oss.sonatype.org/service/local/staging/deploy/maven2/ From 5008e6ae7f98f9ca5056903c3b5784996dfefbea Mon Sep 17 00:00:00 2001 From: Stefano Buliani Date: Wed, 8 Apr 2020 14:42:22 -0700 Subject: [PATCH 089/888] [maven-release-plugin] prepare release aws-serverless-java-container-1.5 --- aws-serverless-java-container-core/pom.xml | 4 ++-- aws-serverless-java-container-jersey/pom.xml | 6 +++--- aws-serverless-java-container-spark/pom.xml | 6 +++--- aws-serverless-java-container-spring/pom.xml | 6 +++--- aws-serverless-java-container-springboot2/pom.xml | 9 ++++----- aws-serverless-java-container-struts2/pom.xml | 6 +++--- aws-serverless-jersey-archetype/pom.xml | 7 ++++--- aws-serverless-spark-archetype/pom.xml | 7 ++++--- aws-serverless-spring-archetype/pom.xml | 7 ++++--- aws-serverless-springboot-archetype/pom.xml | 7 ++++--- aws-serverless-springboot2-archetype/pom.xml | 7 ++++--- aws-serverless-struts2-archetype/pom.xml | 7 ++++--- pom.xml | 5 +++-- 13 files changed, 45 insertions(+), 39 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 7145733ed..432abb525 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Core Allows Java applications written for a servlet container to run in AWS Lambda https://aws.amazon.com/lambda - 1.5-SNAPSHOT + 1.5 com.amazonaws.serverless aws-serverless-java-container - 1.5-SNAPSHOT + 1.5 .. diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index b1c9b0318..8bd505fe4 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Jersey implementation Allows Java applications written for Jersey to run in AWS Lambda https://aws.amazon.com/lambda - 1.5-SNAPSHOT + 1.5 com.amazonaws.serverless aws-serverless-java-container - 1.5-SNAPSHOT + 1.5 .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.5-SNAPSHOT + 1.5 com.fasterxml.jackson.core diff --git a/aws-serverless-java-container-spark/pom.xml b/aws-serverless-java-container-spark/pom.xml index e5200e3f2..7d77d154f 100644 --- a/aws-serverless-java-container-spark/pom.xml +++ b/aws-serverless-java-container-spark/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spark implementation Allows Java applications written for Spark to run in AWS Lambda https://aws.amazon.com/lambda - 1.5-SNAPSHOT + 1.5 com.amazonaws.serverless aws-serverless-java-container - 1.5-SNAPSHOT + 1.5 .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.5-SNAPSHOT + 1.5 diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 6065d464f..f6d4747d0 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spring implementation Allows Java applications written for the Spring framework to run in AWS Lambda https://aws.amazon.com/lambda - 1.5-SNAPSHOT + 1.5 com.amazonaws.serverless aws-serverless-java-container - 1.5-SNAPSHOT + 1.5 .. @@ -26,7 +26,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.5-SNAPSHOT + 1.5 diff --git a/aws-serverless-java-container-springboot2/pom.xml b/aws-serverless-java-container-springboot2/pom.xml index 10d995fee..e844df722 100644 --- a/aws-serverless-java-container-springboot2/pom.xml +++ b/aws-serverless-java-container-springboot2/pom.xml @@ -1,10 +1,9 @@ - + aws-serverless-java-container com.amazonaws.serverless - 1.5-SNAPSHOT + 1.5 4.0.0 @@ -13,7 +12,7 @@ AWS Serverless Java container support - SpringBoot 2 implementation Allows Java applications written for SpringBoot 2 to run in AWS Lambda https://aws.amazon.com/lambda - 1.5-SNAPSHOT + 1.5 5.2.5.RELEASE @@ -28,7 +27,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.5-SNAPSHOT + 1.5 diff --git a/aws-serverless-java-container-struts2/pom.xml b/aws-serverless-java-container-struts2/pom.xml index 7e456c850..53d69ad2f 100644 --- a/aws-serverless-java-container-struts2/pom.xml +++ b/aws-serverless-java-container-struts2/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Struts2 implementation Allows Java applications written for the Struts2 framework to run in AWS Lambda https://aws.amazon.com/lambda - 1.5-SNAPSHOT + 1.5 com.amazonaws.serverless aws-serverless-java-container - 1.5-SNAPSHOT + 1.5 @@ -23,7 +23,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.5-SNAPSHOT + 1.5 diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index 5b2aa8018..64366271b 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -4,17 +4,18 @@ com.amazonaws.serverless aws-serverless-java-container - 1.5-SNAPSHOT + 1.5 com.amazonaws.serverless.archetypes aws-serverless-jersey-archetype - 1.5-SNAPSHOT + 1.5 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - + aws-serverless-java-container-1.5 + diff --git a/aws-serverless-spark-archetype/pom.xml b/aws-serverless-spark-archetype/pom.xml index 0118ea5c9..6bedd48b1 100644 --- a/aws-serverless-spark-archetype/pom.xml +++ b/aws-serverless-spark-archetype/pom.xml @@ -4,17 +4,18 @@ com.amazonaws.serverless aws-serverless-java-container - 1.5-SNAPSHOT + 1.5 com.amazonaws.serverless.archetypes aws-serverless-spark-archetype - 1.5-SNAPSHOT + 1.5 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - + aws-serverless-java-container-1.5 + diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index 128a51bf8..1178013b5 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -4,17 +4,18 @@ com.amazonaws.serverless aws-serverless-java-container - 1.5-SNAPSHOT + 1.5 com.amazonaws.serverless.archetypes aws-serverless-spring-archetype - 1.5-SNAPSHOT + 1.5 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - + aws-serverless-java-container-1.5 + diff --git a/aws-serverless-springboot-archetype/pom.xml b/aws-serverless-springboot-archetype/pom.xml index a8f669095..afe5e8047 100644 --- a/aws-serverless-springboot-archetype/pom.xml +++ b/aws-serverless-springboot-archetype/pom.xml @@ -4,17 +4,18 @@ com.amazonaws.serverless aws-serverless-java-container - 1.5-SNAPSHOT + 1.5 com.amazonaws.serverless.archetypes aws-serverless-springboot-archetype - 1.5-SNAPSHOT + 1.5 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - + aws-serverless-java-container-1.5 + diff --git a/aws-serverless-springboot2-archetype/pom.xml b/aws-serverless-springboot2-archetype/pom.xml index 41a98455d..3ca908465 100644 --- a/aws-serverless-springboot2-archetype/pom.xml +++ b/aws-serverless-springboot2-archetype/pom.xml @@ -4,17 +4,18 @@ com.amazonaws.serverless aws-serverless-java-container - 1.5-SNAPSHOT + 1.5 com.amazonaws.serverless.archetypes aws-serverless-springboot2-archetype - 1.5-SNAPSHOT + 1.5 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - + aws-serverless-java-container-1.5 + diff --git a/aws-serverless-struts2-archetype/pom.xml b/aws-serverless-struts2-archetype/pom.xml index e309fdd8a..c866f59c5 100644 --- a/aws-serverless-struts2-archetype/pom.xml +++ b/aws-serverless-struts2-archetype/pom.xml @@ -4,17 +4,18 @@ com.amazonaws.serverless aws-serverless-java-container - 1.5-SNAPSHOT + 1.5 com.amazonaws.serverless.archetypes aws-serverless-struts2-archetype - 1.5-SNAPSHOT + 1.5 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - + aws-serverless-java-container-1.5 + diff --git a/pom.xml b/pom.xml index e7a04b40d..0606e5ac8 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazonaws.serverless aws-serverless-java-container pom - 1.5-SNAPSHOT + 1.5 AWS Serverless Java container A Java framework to run Spring, Spring Boot, Jersey, Spark, and Struts applications inside AWS Lambda https://github.com/awslabs/aws-serverless-java-container @@ -43,7 +43,8 @@ https://github.com/awslabs/aws-serverless-java-container.git scm:git:git@github.com:awslabs/aws-serverless-java-container.git scm:git:git@github.com:awslabs/aws-serverless-java-container.git - + aws-serverless-java-container-1.5 + From 452f84f21175500dfd4e127015ae3ca4704b0a7f Mon Sep 17 00:00:00 2001 From: Stefano Buliani Date: Wed, 8 Apr 2020 14:42:24 -0700 Subject: [PATCH 090/888] [maven-release-plugin] prepare for next development iteration --- aws-serverless-java-container-core/pom.xml | 4 ++-- aws-serverless-java-container-jersey/pom.xml | 6 +++--- aws-serverless-java-container-spark/pom.xml | 6 +++--- aws-serverless-java-container-spring/pom.xml | 6 +++--- aws-serverless-java-container-springboot2/pom.xml | 6 +++--- aws-serverless-java-container-struts2/pom.xml | 6 +++--- aws-serverless-jersey-archetype/pom.xml | 6 +++--- aws-serverless-spark-archetype/pom.xml | 6 +++--- aws-serverless-spring-archetype/pom.xml | 6 +++--- aws-serverless-springboot-archetype/pom.xml | 6 +++--- aws-serverless-springboot2-archetype/pom.xml | 6 +++--- aws-serverless-struts2-archetype/pom.xml | 6 +++--- pom.xml | 4 ++-- 13 files changed, 37 insertions(+), 37 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 432abb525..200108b28 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Core Allows Java applications written for a servlet container to run in AWS Lambda https://aws.amazon.com/lambda - 1.5 + 1.6-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.5 + 1.6-SNAPSHOT .. diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index 8bd505fe4..e9d4dbf46 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Jersey implementation Allows Java applications written for Jersey to run in AWS Lambda https://aws.amazon.com/lambda - 1.5 + 1.6-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.5 + 1.6-SNAPSHOT .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.5 + 1.6-SNAPSHOT com.fasterxml.jackson.core diff --git a/aws-serverless-java-container-spark/pom.xml b/aws-serverless-java-container-spark/pom.xml index 7d77d154f..bbbb53b4c 100644 --- a/aws-serverless-java-container-spark/pom.xml +++ b/aws-serverless-java-container-spark/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spark implementation Allows Java applications written for Spark to run in AWS Lambda https://aws.amazon.com/lambda - 1.5 + 1.6-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.5 + 1.6-SNAPSHOT .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.5 + 1.6-SNAPSHOT diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index f6d4747d0..f0a7c984a 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spring implementation Allows Java applications written for the Spring framework to run in AWS Lambda https://aws.amazon.com/lambda - 1.5 + 1.6-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.5 + 1.6-SNAPSHOT .. @@ -26,7 +26,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.5 + 1.6-SNAPSHOT diff --git a/aws-serverless-java-container-springboot2/pom.xml b/aws-serverless-java-container-springboot2/pom.xml index e844df722..e485b890e 100644 --- a/aws-serverless-java-container-springboot2/pom.xml +++ b/aws-serverless-java-container-springboot2/pom.xml @@ -3,7 +3,7 @@ aws-serverless-java-container com.amazonaws.serverless - 1.5 + 1.6-SNAPSHOT 4.0.0 @@ -12,7 +12,7 @@ AWS Serverless Java container support - SpringBoot 2 implementation Allows Java applications written for SpringBoot 2 to run in AWS Lambda https://aws.amazon.com/lambda - 1.5 + 1.6-SNAPSHOT 5.2.5.RELEASE @@ -27,7 +27,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.5 + 1.6-SNAPSHOT diff --git a/aws-serverless-java-container-struts2/pom.xml b/aws-serverless-java-container-struts2/pom.xml index 53d69ad2f..40ab552eb 100644 --- a/aws-serverless-java-container-struts2/pom.xml +++ b/aws-serverless-java-container-struts2/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Struts2 implementation Allows Java applications written for the Struts2 framework to run in AWS Lambda https://aws.amazon.com/lambda - 1.5 + 1.6-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.5 + 1.6-SNAPSHOT @@ -23,7 +23,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.5 + 1.6-SNAPSHOT diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index 64366271b..93f18286b 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.5 + 1.6-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-jersey-archetype - 1.5 + 1.6-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.5 + HEAD diff --git a/aws-serverless-spark-archetype/pom.xml b/aws-serverless-spark-archetype/pom.xml index 6bedd48b1..ccd50e996 100644 --- a/aws-serverless-spark-archetype/pom.xml +++ b/aws-serverless-spark-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.5 + 1.6-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-spark-archetype - 1.5 + 1.6-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.5 + HEAD diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index 1178013b5..e53803fcb 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.5 + 1.6-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-spring-archetype - 1.5 + 1.6-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.5 + HEAD diff --git a/aws-serverless-springboot-archetype/pom.xml b/aws-serverless-springboot-archetype/pom.xml index afe5e8047..6a9727d75 100644 --- a/aws-serverless-springboot-archetype/pom.xml +++ b/aws-serverless-springboot-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.5 + 1.6-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-springboot-archetype - 1.5 + 1.6-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.5 + HEAD diff --git a/aws-serverless-springboot2-archetype/pom.xml b/aws-serverless-springboot2-archetype/pom.xml index 3ca908465..76a3c52d6 100644 --- a/aws-serverless-springboot2-archetype/pom.xml +++ b/aws-serverless-springboot2-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.5 + 1.6-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-springboot2-archetype - 1.5 + 1.6-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.5 + HEAD diff --git a/aws-serverless-struts2-archetype/pom.xml b/aws-serverless-struts2-archetype/pom.xml index c866f59c5..1ac7fc093 100644 --- a/aws-serverless-struts2-archetype/pom.xml +++ b/aws-serverless-struts2-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.5 + 1.6-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-struts2-archetype - 1.5 + 1.6-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.5 + HEAD diff --git a/pom.xml b/pom.xml index 0606e5ac8..8d322c7db 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazonaws.serverless aws-serverless-java-container pom - 1.5 + 1.6-SNAPSHOT AWS Serverless Java container A Java framework to run Spring, Spring Boot, Jersey, Spark, and Struts applications inside AWS Lambda https://github.com/awslabs/aws-serverless-java-container @@ -43,7 +43,7 @@ https://github.com/awslabs/aws-serverless-java-container.git scm:git:git@github.com:awslabs/aws-serverless-java-container.git scm:git:git@github.com:awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.5 + HEAD From 253910f3fb414844db30d22f346783d5ec48a43c Mon Sep 17 00:00:00 2001 From: Stefano Buliani Date: Mon, 20 Apr 2020 22:42:55 -0700 Subject: [PATCH 091/888] fix: Updated sample maven build files to still produce a jar so that SAM CLI's sam build command with maven (clean install) can work to address (#336) --- samples/jersey/pet-store/pom.xml | 12 ------------ samples/spark/pet-store/pom.xml | 12 ------------ samples/spring/pet-store/pom.xml | 12 ------------ samples/springboot/pet-store/pom.xml | 12 ------------ samples/springboot2/pet-store/pom.xml | 12 ------------ 5 files changed, 60 deletions(-) diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index bacdbe042..0a7e4d2c6 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -121,18 +121,6 @@ - - - org.apache.maven.plugins - maven-jar-plugin - 3.1.1 - - - default-jar - none - - - org.apache.maven.plugins diff --git a/samples/spark/pet-store/pom.xml b/samples/spark/pet-store/pom.xml index 26a2f256b..ab5745a3e 100644 --- a/samples/spark/pet-store/pom.xml +++ b/samples/spark/pet-store/pom.xml @@ -105,18 +105,6 @@ - - - org.apache.maven.plugins - maven-jar-plugin - 3.1.1 - - - default-jar - none - - - org.apache.maven.plugins diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index 2798eafa1..927db2674 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -144,18 +144,6 @@ - - - org.apache.maven.plugins - maven-jar-plugin - 3.1.1 - - - default-jar - none - - - org.apache.maven.plugins diff --git a/samples/springboot/pet-store/pom.xml b/samples/springboot/pet-store/pom.xml index 639b927a1..951704763 100644 --- a/samples/springboot/pet-store/pom.xml +++ b/samples/springboot/pet-store/pom.xml @@ -76,18 +76,6 @@ - - - org.apache.maven.plugins - maven-jar-plugin - 3.1.1 - - - default-jar - none - - - org.apache.maven.plugins diff --git a/samples/springboot2/pet-store/pom.xml b/samples/springboot2/pet-store/pom.xml index f9444cbf4..0532ec63e 100644 --- a/samples/springboot2/pet-store/pom.xml +++ b/samples/springboot2/pet-store/pom.xml @@ -82,18 +82,6 @@ - - - org.apache.maven.plugins - maven-jar-plugin - 3.1.1 - - - default-jar - none - - - org.apache.maven.plugins From 0d189cdb9bef5b4bbd6b3db34b75b66315dbbf49 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 17 Jun 2020 21:02:21 -0700 Subject: [PATCH 092/888] Bump hibernate-validator in /samples/struts2/pet-store (#357) Bumps [hibernate-validator](https://github.com/hibernate/hibernate-validator) from 4.3.2.Final to 5.3.5.Final. - [Release notes](https://github.com/hibernate/hibernate-validator/releases) - [Changelog](https://github.com/hibernate/hibernate-validator/blob/5.3.5.Final/changelog.txt) - [Commits](https://github.com/hibernate/hibernate-validator/compare/4.3.2.Final...5.3.5.Final) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- samples/struts2/pet-store/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/struts2/pet-store/pom.xml b/samples/struts2/pet-store/pom.xml index b761207d6..cfe483fe9 100644 --- a/samples/struts2/pet-store/pom.xml +++ b/samples/struts2/pet-store/pom.xml @@ -81,7 +81,7 @@ org.hibernate hibernate-validator - 4.3.2.Final + 5.3.5.Final From 1ab2c56eed93c93c03554c777b7635ed63d08842 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 2 Jul 2020 08:36:11 -0700 Subject: [PATCH 093/888] Bump log4j.version from 2.8.2 to 2.13.3 in /samples/spring/pet-store (#359) Bumps `log4j.version` from 2.8.2 to 2.13.3. Updates `log4j-core` from 2.8.2 to 2.13.3 Updates `log4j-api` from 2.8.2 to 2.13.3 Updates `log4j-slf4j-impl` from 2.8.2 to 2.13.3 Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- samples/spring/pet-store/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index 927db2674..cdad48e8c 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -28,7 +28,7 @@ 1.8 5.2.5.RELEASE 4.12 - 2.8.2 + 2.13.3 From 6510147e7b2e8404982ba8ee7ba8c79f0ebf43ce Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 2 Jul 2020 08:36:26 -0700 Subject: [PATCH 094/888] Bump log4j.version from 2.11.1 to 2.13.3 in /samples/struts2/pet-store (#360) Bumps `log4j.version` from 2.11.1 to 2.13.3. Updates `log4j-core` from 2.11.1 to 2.13.3 Updates `log4j-api` from 2.11.1 to 2.13.3 Updates `log4j-slf4j-impl` from 2.11.1 to 2.13.3 Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- samples/struts2/pet-store/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/struts2/pet-store/pom.xml b/samples/struts2/pet-store/pom.xml index cfe483fe9..03d7cbe3a 100644 --- a/samples/struts2/pet-store/pom.xml +++ b/samples/struts2/pet-store/pom.xml @@ -29,7 +29,7 @@ 2.5.22 2.10.3 4.12 - 2.11.1 + 2.13.3 From 79b80731fc076d916553ef3cd80b89bc2232e710 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ant=C3=B3nio=20Ribeiro?= Date: Wed, 8 Jul 2020 22:49:01 +0100 Subject: [PATCH 095/888] Fix for issue #355 (#356) Co-authored-by: Antonio Ribeiro --- .../archetype-resources/build.gradle | 45 ++++++++++++------- .../resources/archetype-resources/pom.xml | 2 +- pom.xml | 2 +- 3 files changed, 32 insertions(+), 17 deletions(-) diff --git a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle index 9e4b4ab18..05e936438 100644 --- a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle @@ -6,22 +6,37 @@ repositories { } dependencies { - compile ( - 'com.amazonaws.serverless:aws-serverless-java-container-struts2:[1.0,)', - 'org.apache.struts:struts2-convention-plugin:2.5.22', - 'org.apache.struts:struts2-rest-plugin:2.5.22', - 'org.apache.struts:struts2-bean-validation-plugin:2.5.22', - 'org.apache.struts:struts2-junit-plugin:2.5.22', - 'com.jgeppert.struts2:struts2-aws-lambda-support-plugin:1.0.0', - 'org.hibernate:hibernate-validator:4.3.2.Final', - 'com.fasterxml.jackson.core:jackson-databind:2.10.3', - 'org.apache.logging.log4j:log4j-core:2.8.2', - 'org.apache.logging.log4j:log4j-api:2.8.2', - 'org.apache.logging.log4j:log4j-slf4j-impl:2.8.2', - 'com.amazonaws:aws-lambda-java-log4j2:1.1.0', - ) - testCompile("junit:junit:4.12") + compile ('com.amazonaws.serverless:aws-serverless-java-container-struts2:[1.0,)') { + exclude group: 'org.apache.struts', module: 'struts2-core' + exclude group: 'org.apache.logging.log4j', module: 'log4j-api' + } + compile ('org.apache.struts:struts2-convention-plugin:2.5.22') { + exclude group: 'org.apache.struts', module: 'struts2-core' + } + compile ('org.apache.struts:struts2-rest-plugin:2.5.22') { + exclude group: 'org.apache.struts', module: 'struts2-core' + } + compile ('org.apache.struts:struts2-bean-validation-plugin:2.5.22') { + exclude group: 'org.apache.struts', module: 'struts2-core' + } + compile ('com.jgeppert.struts2:struts2-aws-lambda-support-plugin:1.0.0') { + exclude group: 'org.apache.struts', module: 'struts2-core' + } + compile ('org.apache.struts:struts2-core:2.5.22') { + exclude group: 'org.apache.logging.log4j', module: 'log4j-api' + } + compile ('org.hibernate:hibernate-validator:4.3.2.Final') + compile ('com.fasterxml.jackson.core:jackson-databind:2.10.3') + compile ('org.apache.logging.log4j:log4j-core:2.8.2') + compile ('org.apache.logging.log4j:log4j-api:2.8.2') + compile ('org.apache.logging.log4j:log4j-slf4j-impl:2.8.2') + compile ('com.amazonaws:aws-lambda-java-log4j2:1.1.0') + + testCompile('junit:junit:4.12') + testCompile('org.apache.struts:struts2-junit-plugin:2.5.22') { + exclude group: 'org.apache.struts', module: 'struts2-core' + } } task buildZip(type: Zip) { diff --git a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml index 935c0e9f2..7fbb31949 100644 --- a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml @@ -18,7 +18,7 @@ 2.5.22 2.10.3 4.12 - 2.11.1 + 2.8.2 diff --git a/pom.xml b/pom.xml index 8d322c7db..292995dac 100644 --- a/pom.xml +++ b/pom.xml @@ -85,7 +85,7 @@ 0.7 5.3.2 2.10.3 - 1.8.0-beta4 + 1.7.30 From 19d0309ce503547049829a772a57b8bcb9341d67 Mon Sep 17 00:00:00 2001 From: Stefano Buliani <2996317+sapessi@users.noreply.github.com> Date: Wed, 15 Jul 2020 10:44:35 -0700 Subject: [PATCH 096/888] Merge fixes for patch release 1.5.1 (#364) * fix: Adding pathParameters to v2 proxy event as reported in #358. * fix: Address JSON content type issue reported in #352 and #344 * fix: Fixed bug caught by integration tests for #352 * fix: Fix struts tests for the changes made for #352 * test: Attempting to replicate the issue reported in #342 * test: Reverting exception test in Spring package since it's only available in Spring5, not Spring4 * fix: Sigh, forgot to remove the import for the class that doesn't exist from the previous commit * fix: Addresses bug reported in query string parsing (#363) for HTTP API support where we have a query string key, followed by a value declarator (=), but then no value * chore: Update GitHub issue and PR templates * fix: Fixed issue reported by SpotBugs with the exception logging of the HTTP API query string parsing --- .github/ISSUE_TEMPLATE.md | 22 ++++- .github/PULL_REQUEST_TEMPLATE.md | 9 ++ .../AwsHttpApiV2ProxyHttpServletRequest.java | 19 ++-- .../servlet/AwsHttpServletResponse.java | 43 ++++++--- .../testutils/AwsProxyRequestBuilder.java | 1 - .../proxy/model/HttpApiV2ProxyRequest.java | 9 ++ .../servlet/AwsHttpServletResponseTest.java | 24 +++++ .../proxy/spring/echoapp/EchoResource.java | 1 + .../proxy/spring/ServletAppTest.java | 92 ++++++++++++++++++- .../servletapp/LambdaStreamHandler.java | 63 +++++++++++++ .../spring/servletapp/MessageController.java | 24 +++++ .../proxy/struts2/Struts2AwsProxyTest.java | 2 +- 12 files changed, 282 insertions(+), 27 deletions(-) create mode 100644 .github/PULL_REQUEST_TEMPLATE.md create mode 100644 aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/LambdaStreamHandler.java diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index 14b1a472a..32e04baae 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -1,12 +1,30 @@ -* Framework version: XX -* Implementations: Jersey / Spring / Spring Boot / Spark +*To help us debug your issue fill in the basic information below using the options provided* + +*Serverless Java Container version*: `eg. 1.5` + +*Implementations:* `Jersey / Spring / Spring Boot / Spring Boot 2 / Spark` + +*Framework version:* `eg SpringBoot 2.2.6.RELEASE` + +*Frontend service:* `REST API / HTTP API / ALB` + +*Deployment method:* `eg SAM, Serverless Framework, Console` ## Scenario +*Describe what you are trying to accomplish* ## Expected behavior +*Describe how you would expect the application to behave* ## Actual behavior +*Describe what you are seeing instead* ## Steps to reproduce +*Provide code samples we can use to reproduce the issue as part of our integration tests. If there is a public repository for the misbehaving application link to it here* ## Full log output +*Paste the full log output from the Lambda function's CloudWatch logs* + +``` +logs +``` \ No newline at end of file diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 000000000..379cffdb7 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,9 @@ +*Issue #, if available:* + +*Description of changes:* + + +By submitting this pull request + +- [ ] I confirm that my contribution is made under the terms of the Apache 2.0 license. +- [ ] I confirm that I've made a best effort attempt to update all relevant documentation. \ No newline at end of file diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2ProxyHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2ProxyHttpServletRequest.java index e65b506e9..dcc481600 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2ProxyHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2ProxyHttpServletRequest.java @@ -482,16 +482,19 @@ private MultiValuedTreeMap parseRawQueryString(String qs) { MultiValuedTreeMap qsMap = new MultiValuedTreeMap<>(); for (String value : qs.split(QUERY_STRING_SEPARATOR)) { - if (!value.contains(QUERY_STRING_KEY_VALUE_SEPARATOR)) { - log.warn("Invalid query string parameter: " + SecurityUtils.crlf(value)); - continue; - } - - String[] kv = value.split(QUERY_STRING_KEY_VALUE_SEPARATOR); try { - qsMap.add(URLDecoder.decode(kv[0], LambdaContainerHandler.getContainerConfig().getUriEncoding()), kv[1]); + if (!value.contains(QUERY_STRING_KEY_VALUE_SEPARATOR)) { + qsMap.add(URLDecoder.decode(value, LambdaContainerHandler.getContainerConfig().getUriEncoding()), null); + log.warn("Query string parameter with empty value and no =: " + SecurityUtils.crlf(value)); + continue; + } + + String[] kv = value.split(QUERY_STRING_KEY_VALUE_SEPARATOR); + String key = URLDecoder.decode(kv[0], LambdaContainerHandler.getContainerConfig().getUriEncoding()); + String val = kv.length == 2 ? kv[1] : null; + qsMap.add(key, val); } catch (UnsupportedEncodingException e) { - log.error("Unsupported encoding in query string key: " + SecurityUtils.crlf(kv[0]), e); + log.error("Unsupported encoding in query string key: " + SecurityUtils.crlf(value), e); } } return qsMap; diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponse.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponse.java index 153cdb91e..63a2dca80 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponse.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponse.java @@ -28,6 +28,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.ws.rs.core.HttpHeaders; +import javax.ws.rs.core.MediaType; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; @@ -387,18 +388,26 @@ public void setContentType(String s) { if (s == null) { return; } - - // we have no forced character encoding - if (characterEncoding == null) { - setHeader(HttpHeaders.CONTENT_TYPE, s, true); - return; + String contentType = s; + String charEncoding = characterEncoding; + + // TODO: Make the utilities to parse header values from the request object generic and reuse them here + if (s.contains("charset=")) { // we have a forced charset + int charsetIndex = s.indexOf("charset=") + 8; + int endCharsetIndex = s.indexOf(" ", charsetIndex); + if (endCharsetIndex == -1) { + endCharsetIndex = s.length(); + } + charEncoding = s.substring(charsetIndex, endCharsetIndex).toUpperCase(Locale.getDefault()); + contentType = s.split(";")[0]; } - if (s.contains(";")) { // we have a forced charset - setHeader(HttpHeaders.CONTENT_TYPE, String.format("%s; charset=%s", s.split(";")[0], characterEncoding), true); - } else { - setHeader(HttpHeaders.CONTENT_TYPE, String.format("%s; charset=%s", s, characterEncoding), true); + if (charEncoding == null) { + setHeader(HttpHeaders.CONTENT_TYPE, String.format("%s", contentType), true); + return; } + characterEncoding = charEncoding; + setHeader(HttpHeaders.CONTENT_TYPE, String.format("%s; charset=%s", contentType, charEncoding), true); } @@ -421,11 +430,23 @@ public void flushBuffer() throws IOException { } String charset = characterEncoding; - if(charset == null) { + byte[] respBody = bodyOutputStream.toByteArray(); + + // The content type is json but we have no encoding specified, according to the RFC (https://tools.ietf.org/html/rfc4627#section-3) + // we should attempt to detect the encoding. However, since we are running in Lambda we shouldn't even consider + // big endian systems and it's highly unlikely we'll have apps using UTF-16/32 we simply force UTF-8 + if (headers != null && headers.getFirst(HttpHeaders.CONTENT_TYPE) != null && + headers.getFirst(HttpHeaders.CONTENT_TYPE).toLowerCase(Locale.getDefault()).trim().equals(MediaType.APPLICATION_JSON) && + charset == null) { + charset = "UTF-8"; + } + + // if at this point we are still null, we set the default + if (charset == null) { charset = LambdaContainerHandler.getContainerConfig().getDefaultContentCharset(); } - responseBody = new String(bodyOutputStream.toByteArray(), charset); + responseBody = new String(respBody, charset); log.debug("Response buffer flushed with {} bytes, latch={}", responseBody.length(), writersCountDownLatch.getCount()); isCommitted = true; writersCountDownLatch.countDown(); diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/testutils/AwsProxyRequestBuilder.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/testutils/AwsProxyRequestBuilder.java index 8d4dc63f2..848f25bb1 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/testutils/AwsProxyRequestBuilder.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/testutils/AwsProxyRequestBuilder.java @@ -482,7 +482,6 @@ public HttpApiV2ProxyRequest toHttpApiV2Request() { // we do not encode it rawQueryString.append(URLEncoder.encode(s, "UTF-8").replaceAll("%2C", ",")); } catch (UnsupportedEncodingException e) { - System.out.println("Ex!"); throw new RuntimeException(e); } } diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/HttpApiV2ProxyRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/HttpApiV2ProxyRequest.java index 6eee7dc4d..c50298eea 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/HttpApiV2ProxyRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/HttpApiV2ProxyRequest.java @@ -26,6 +26,7 @@ public class HttpApiV2ProxyRequest { private Map headers; private Map queryStringParameters; private String body; + private Map pathParameters; private boolean isBase64Encoded; private Map stageVariables; private HttpApiV2ProxyRequestContext requestContext; @@ -90,6 +91,14 @@ public String getBody() { return body; } + public Map getPathParameters() { + return pathParameters; + } + + public void setPathParameters(Map pathParameters) { + this.pathParameters = pathParameters; + } + public void setBody(String body) { this.body = body; } diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponseTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponseTest.java index 65fc91776..4731a0359 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponseTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponseTest.java @@ -1,6 +1,7 @@ package com.amazonaws.serverless.proxy.internal.servlet; +import com.amazonaws.serverless.proxy.model.ContainerConfig; import com.amazonaws.serverless.proxy.model.Headers; import org.junit.Test; @@ -36,6 +37,8 @@ public class AwsHttpServletResponseTest { private static final Pattern MAX_AGE_PATTERN = Pattern.compile("Max-Age=(-?[0-9]+)"); private static final Pattern EXPIRES_PATTERN = Pattern.compile("Expires=(.*)$"); + private static final String CONTENT_TYPE_WITH_CHARSET = "application/json; charset=UTF-8"; + @Test public void cookie_addCookie_verifyPath() { AwsHttpServletResponse resp = new AwsHttpServletResponse(null, null); @@ -301,6 +304,27 @@ public void characterEncoding_setCharacterEncodingAndsetContentType() { assertEquals("UTF-8", resp.getCharacterEncoding()); } + @Test + public void characterEncoding_setCharacterEncodingInContentType_characterEncodingPopulatedCorrectly() { + AwsHttpServletResponse resp = new AwsHttpServletResponse(null, null); + resp.setContentType(CONTENT_TYPE_WITH_CHARSET); + + assertEquals(CONTENT_TYPE_WITH_CHARSET, resp.getContentType()); + assertEquals(CONTENT_TYPE_WITH_CHARSET, resp.getHeader("Content-Type")); + assertEquals("UTF-8", resp.getCharacterEncoding()); + } + + @Test + public void characterEncoding_setCharacterEncodingInContentType_overridesDefault() { + AwsHttpServletResponse resp = new AwsHttpServletResponse(null, null); + resp.setCharacterEncoding(ContainerConfig.DEFAULT_CONTENT_CHARSET); + resp.setContentType(CONTENT_TYPE_WITH_CHARSET); + + assertEquals(CONTENT_TYPE_WITH_CHARSET, resp.getContentType()); + assertEquals(CONTENT_TYPE_WITH_CHARSET, resp.getHeader("Content-Type")); + assertEquals("UTF-8", resp.getCharacterEncoding()); + } + private int getMaxAge(String header) { Matcher ageMatcher = MAX_AGE_PATTERN.matcher(header); assertTrue(ageMatcher.find()); diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/EchoResource.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/EchoResource.java index c07020013..ceb358bea 100644 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/EchoResource.java +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/EchoResource.java @@ -38,6 +38,7 @@ public class EchoResource { public static final String TEST_GENERATE_URI = "test"; public static final String STRING_BODY = "Hello"; + public static final String EX_MESSAGE = "404 exception message"; @Bean public MultipartResolver multipartResolver() { diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/ServletAppTest.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/ServletAppTest.java index 88cf735dc..de2228434 100644 --- a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/ServletAppTest.java +++ b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/ServletAppTest.java @@ -3,11 +3,10 @@ import com.amazonaws.serverless.proxy.internal.LambdaContainerHandler; import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; import com.amazonaws.serverless.proxy.internal.testutils.MockLambdaContext; +import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.serverless.proxy.model.AwsProxyResponse; -import com.amazonaws.serverless.proxy.spring.servletapp.LambdaHandler; -import com.amazonaws.serverless.proxy.spring.servletapp.MessageController; -import com.amazonaws.serverless.proxy.spring.servletapp.MessageData; -import com.amazonaws.serverless.proxy.spring.servletapp.UserData; +import com.amazonaws.serverless.proxy.model.ContainerConfig; +import com.amazonaws.serverless.proxy.spring.servletapp.*; import com.fasterxml.jackson.core.JsonProcessingException; import org.junit.Assert; import org.junit.Test; @@ -17,8 +16,12 @@ import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.MediaType; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; import java.util.Arrays; import java.util.Collection; +import java.util.stream.Collectors; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @@ -108,4 +111,85 @@ public void echoMessage_fileNameLikeParameter_returnsMessage() { assertEquals(200, resp.getStatusCode()); assertEquals("test.test.test", resp.getBody()); } + + @Test + public void getUtf8String_returnsValidUtf8String() { + // We expect strings to come back as UTF-8 correctly because Spring itself will call the setCharacterEncoding + // method on the response to set it to UTF- + LambdaContainerHandler.getContainerConfig().setDefaultContentCharset(ContainerConfig.DEFAULT_CONTENT_CHARSET); + AwsProxyRequestBuilder req = new AwsProxyRequestBuilder("/content-type/utf8", "GET") + .header(HttpHeaders.ACCEPT, MediaType.TEXT_PLAIN); + AwsProxyResponse resp = handler.handleRequest(req, lambdaContext); + assertNotNull(resp); + assertEquals(200, resp.getStatusCode()); + assertEquals("text/plain; charset=UTF-8", resp.getMultiValueHeaders().get(HttpHeaders.CONTENT_TYPE).stream().collect(Collectors.joining(","))); + assertEquals(MessageController.UTF8_RESPONSE, resp.getBody()); + } + + @Test + public void getUtf8Json_returnsValidUtf8String() { + LambdaContainerHandler.getContainerConfig().setDefaultContentCharset(ContainerConfig.DEFAULT_CONTENT_CHARSET); + AwsProxyRequestBuilder req = new AwsProxyRequestBuilder("/content-type/jsonutf8", "GET"); + AwsProxyResponse resp = handler.handleRequest(req, lambdaContext); + assertNotNull(resp); + assertEquals(200, resp.getStatusCode()); + assertEquals("{\"s\":\""+MessageController.UTF8_RESPONSE+"\"}", resp.getBody()); + } + + @Test + public void stream_getUtf8String_returnsValidUtf8String() throws IOException { + LambdaContainerHandler.getContainerConfig().setDefaultContentCharset(ContainerConfig.DEFAULT_CONTENT_CHARSET); + LambdaStreamHandler streamHandler = new LambdaStreamHandler(type); + AwsProxyRequestBuilder reqBuilder = new AwsProxyRequestBuilder("/content-type/utf8", "GET") + .header(HttpHeaders.ACCEPT, MediaType.TEXT_PLAIN); + InputStream req = null; + switch (type) { + case "ALB": + req = reqBuilder.alb().buildStream(); + break; + case "API_GW": + req = reqBuilder.buildStream(); + break; + case "HTTP_API": + req = reqBuilder.toHttpApiV2RequestStream(); + } + ByteArrayOutputStream out = new ByteArrayOutputStream(); + streamHandler.handleRequest(req, out, lambdaContext); + AwsProxyResponse resp = LambdaContainerHandler.getObjectMapper().readValue(out.toByteArray(), AwsProxyResponse.class); + assertNotNull(resp); + assertEquals(200, resp.getStatusCode()); + assertEquals(MessageController.UTF8_RESPONSE, resp.getBody()); + } + + @Test + public void stream_getUtf8Json_returnsValidUtf8String() throws IOException { + LambdaContainerHandler.getContainerConfig().setDefaultContentCharset(ContainerConfig.DEFAULT_CONTENT_CHARSET); + LambdaStreamHandler streamHandler = new LambdaStreamHandler(type); + AwsProxyRequestBuilder reqBuilder = new AwsProxyRequestBuilder("/content-type/jsonutf8", "GET"); + InputStream req = null; + switch (type) { + case "ALB": + req = reqBuilder.alb().buildStream(); + break; + case "API_GW": + req = reqBuilder.buildStream(); + break; + case "HTTP_API": + req = reqBuilder.toHttpApiV2RequestStream(); + } + ByteArrayOutputStream out = new ByteArrayOutputStream(); + streamHandler.handleRequest(req, out, lambdaContext); + AwsProxyResponse resp = LambdaContainerHandler.getObjectMapper().readValue(out.toByteArray(), AwsProxyResponse.class); + assertNotNull(resp); + assertEquals(200, resp.getStatusCode()); + assertEquals("{\"s\":\""+MessageController.UTF8_RESPONSE+"\"}", resp.getBody()); + } + + @Test + public void springExceptionMapping_throw404Ex_expectMappedTo404() { + AwsProxyRequestBuilder req = new AwsProxyRequestBuilder("/ex/customstatus", "GET"); + AwsProxyResponse resp = handler.handleRequest(req, lambdaContext); + assertNotNull(resp); + assertEquals(404, resp.getStatusCode()); + } } diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/LambdaStreamHandler.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/LambdaStreamHandler.java new file mode 100644 index 000000000..fd7d71d79 --- /dev/null +++ b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/LambdaStreamHandler.java @@ -0,0 +1,63 @@ +package com.amazonaws.serverless.proxy.spring.servletapp; + +import com.amazonaws.serverless.exceptions.ContainerInitializationException; +import com.amazonaws.serverless.proxy.InitializationWrapper; +import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; +import com.amazonaws.serverless.proxy.model.AwsProxyRequest; +import com.amazonaws.serverless.proxy.model.AwsProxyResponse; +import com.amazonaws.serverless.proxy.model.HttpApiV2ProxyRequest; +import com.amazonaws.serverless.proxy.spring.SpringBootLambdaContainerHandler; +import com.amazonaws.serverless.proxy.spring.SpringBootProxyHandlerBuilder; +import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.RequestHandler; +import com.amazonaws.services.lambda.runtime.RequestStreamHandler; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +public class LambdaStreamHandler implements RequestStreamHandler { + private static SpringBootLambdaContainerHandler handler; + private static SpringBootLambdaContainerHandler httpApiHandler; + private String type; + + public LambdaStreamHandler(String reqType) { + type = reqType; + try { + switch (type) { + case "API_GW": + case "ALB": + handler = new SpringBootProxyHandlerBuilder() + .defaultProxy() + .initializationWrapper(new InitializationWrapper()) + .servletApplication() + .springBootApplication(ServletApplication.class) + .buildAndInitialize(); + break; + case "HTTP_API": + httpApiHandler = new SpringBootProxyHandlerBuilder() + .defaultHttpApiV2Proxy() + .initializationWrapper(new InitializationWrapper()) + .servletApplication() + .springBootApplication(ServletApplication.class) + .buildAndInitialize(); + break; + } + } catch (ContainerInitializationException e) { + e.printStackTrace(); + } + } + + @Override + public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) throws IOException { + switch (type) { + case "API_GW": + case "ALB": + handler.proxyStream(inputStream, outputStream, context); + break; + case "HTTP_API": + httpApiHandler.proxyStream(inputStream, outputStream, context); + } + + } +} diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/MessageController.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/MessageController.java index d46806b61..6bd516324 100644 --- a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/MessageController.java +++ b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/MessageController.java @@ -1,15 +1,22 @@ package com.amazonaws.serverless.proxy.spring.servletapp; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.validation.Errors; import org.springframework.web.bind.annotation.*; +import org.springframework.web.server.ResponseStatusException; import javax.validation.Valid; +import java.util.HashMap; +import java.util.Map; @RestController public class MessageController { public static final String HELLO_MESSAGE = "Hello"; public static final String VALID_MESSAGE = "VALID"; + public static final String UTF8_RESPONSE = "öüäß фрыцшщ"; + public static final String EX_MESSAGE = "404 exception message"; @RequestMapping(path="/hello", method=RequestMethod.GET, produces = {"text/plain"}) public String hello() { @@ -36,4 +43,21 @@ public String returnMessage(@RequestBody MessageData data) { public String returnPathMessage(@PathVariable(value="message") String message) { return message; } + + @GetMapping(value = "/content-type/utf8", produces = "text/plain") + public ResponseEntity getUtf8String() { + return ResponseEntity.ok(UTF8_RESPONSE); + } + + @GetMapping(value = "/content-type/jsonutf8", produces=MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity> getUtf8Json() { + Map resp = new HashMap(); + resp.put("s", UTF8_RESPONSE); + return ResponseEntity.ok(resp); + } + + @GetMapping(value = "/ex/customstatus") + public String throw404Exception() { + throw new ResponseStatusException(HttpStatus.NOT_FOUND, EX_MESSAGE); + } } diff --git a/aws-serverless-java-container-struts2/src/test/java/com/amazonaws/serverless/proxy/struts2/Struts2AwsProxyTest.java b/aws-serverless-java-container-struts2/src/test/java/com/amazonaws/serverless/proxy/struts2/Struts2AwsProxyTest.java index 447b907bc..60666f4af 100644 --- a/aws-serverless-java-container-struts2/src/test/java/com/amazonaws/serverless/proxy/struts2/Struts2AwsProxyTest.java +++ b/aws-serverless-java-container-struts2/src/test/java/com/amazonaws/serverless/proxy/struts2/Struts2AwsProxyTest.java @@ -52,7 +52,7 @@ public class Struts2AwsProxyTest extends StrutsJUnit4TestCase { private static final String QUERY_STRING_KEY = "message"; private static final String QUERY_STRING_ENCODED_VALUE = "Hello Struts2"; private static final String USER_PRINCIPAL = "user1"; - private static final String CONTENT_TYPE_APPLICATION_JSON = "application/json;charset=UTF-8"; + private static final String CONTENT_TYPE_APPLICATION_JSON = "application/json; charset=UTF-8"; private static ObjectMapper objectMapper = new ObjectMapper(); From ef8ba5ad39ee083d881ffe9cf5f7a07739e36007 Mon Sep 17 00:00:00 2001 From: Stefano Buliani Date: Wed, 15 Jul 2020 12:48:02 -0700 Subject: [PATCH 097/888] [maven-release-plugin] prepare release aws-serverless-java-container-1.5.1 --- aws-serverless-java-container-core/pom.xml | 4 ++-- aws-serverless-java-container-jersey/pom.xml | 6 +++--- aws-serverless-java-container-spark/pom.xml | 6 +++--- aws-serverless-java-container-spring/pom.xml | 6 +++--- aws-serverless-java-container-springboot2/pom.xml | 6 +++--- aws-serverless-java-container-struts2/pom.xml | 6 +++--- aws-serverless-jersey-archetype/pom.xml | 6 +++--- aws-serverless-spark-archetype/pom.xml | 6 +++--- aws-serverless-spring-archetype/pom.xml | 6 +++--- aws-serverless-springboot-archetype/pom.xml | 6 +++--- aws-serverless-springboot2-archetype/pom.xml | 6 +++--- aws-serverless-struts2-archetype/pom.xml | 6 +++--- pom.xml | 4 ++-- 13 files changed, 37 insertions(+), 37 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 200108b28..9efa9a0c6 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Core Allows Java applications written for a servlet container to run in AWS Lambda https://aws.amazon.com/lambda - 1.6-SNAPSHOT + 1.5.1 com.amazonaws.serverless aws-serverless-java-container - 1.6-SNAPSHOT + 1.5.1 .. diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index e9d4dbf46..cffc05960 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Jersey implementation Allows Java applications written for Jersey to run in AWS Lambda https://aws.amazon.com/lambda - 1.6-SNAPSHOT + 1.5.1 com.amazonaws.serverless aws-serverless-java-container - 1.6-SNAPSHOT + 1.5.1 .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.6-SNAPSHOT + 1.5.1 com.fasterxml.jackson.core diff --git a/aws-serverless-java-container-spark/pom.xml b/aws-serverless-java-container-spark/pom.xml index bbbb53b4c..75cea7637 100644 --- a/aws-serverless-java-container-spark/pom.xml +++ b/aws-serverless-java-container-spark/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spark implementation Allows Java applications written for Spark to run in AWS Lambda https://aws.amazon.com/lambda - 1.6-SNAPSHOT + 1.5.1 com.amazonaws.serverless aws-serverless-java-container - 1.6-SNAPSHOT + 1.5.1 .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.6-SNAPSHOT + 1.5.1 diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index f0a7c984a..4edebfd45 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spring implementation Allows Java applications written for the Spring framework to run in AWS Lambda https://aws.amazon.com/lambda - 1.6-SNAPSHOT + 1.5.1 com.amazonaws.serverless aws-serverless-java-container - 1.6-SNAPSHOT + 1.5.1 .. @@ -26,7 +26,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.6-SNAPSHOT + 1.5.1 diff --git a/aws-serverless-java-container-springboot2/pom.xml b/aws-serverless-java-container-springboot2/pom.xml index e485b890e..568025261 100644 --- a/aws-serverless-java-container-springboot2/pom.xml +++ b/aws-serverless-java-container-springboot2/pom.xml @@ -3,7 +3,7 @@ aws-serverless-java-container com.amazonaws.serverless - 1.6-SNAPSHOT + 1.5.1 4.0.0 @@ -12,7 +12,7 @@ AWS Serverless Java container support - SpringBoot 2 implementation Allows Java applications written for SpringBoot 2 to run in AWS Lambda https://aws.amazon.com/lambda - 1.6-SNAPSHOT + 1.5.1 5.2.5.RELEASE @@ -27,7 +27,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.6-SNAPSHOT + 1.5.1 diff --git a/aws-serverless-java-container-struts2/pom.xml b/aws-serverless-java-container-struts2/pom.xml index 40ab552eb..14b87e326 100644 --- a/aws-serverless-java-container-struts2/pom.xml +++ b/aws-serverless-java-container-struts2/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Struts2 implementation Allows Java applications written for the Struts2 framework to run in AWS Lambda https://aws.amazon.com/lambda - 1.6-SNAPSHOT + 1.5.1 com.amazonaws.serverless aws-serverless-java-container - 1.6-SNAPSHOT + 1.5.1 @@ -23,7 +23,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.6-SNAPSHOT + 1.5.1 diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index 93f18286b..1f8ee79f2 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.6-SNAPSHOT + 1.5.1 com.amazonaws.serverless.archetypes aws-serverless-jersey-archetype - 1.6-SNAPSHOT + 1.5.1 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.5.1 diff --git a/aws-serverless-spark-archetype/pom.xml b/aws-serverless-spark-archetype/pom.xml index ccd50e996..de64ee7d0 100644 --- a/aws-serverless-spark-archetype/pom.xml +++ b/aws-serverless-spark-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.6-SNAPSHOT + 1.5.1 com.amazonaws.serverless.archetypes aws-serverless-spark-archetype - 1.6-SNAPSHOT + 1.5.1 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.5.1 diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index e53803fcb..9060d2c93 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.6-SNAPSHOT + 1.5.1 com.amazonaws.serverless.archetypes aws-serverless-spring-archetype - 1.6-SNAPSHOT + 1.5.1 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.5.1 diff --git a/aws-serverless-springboot-archetype/pom.xml b/aws-serverless-springboot-archetype/pom.xml index 6a9727d75..e44673835 100644 --- a/aws-serverless-springboot-archetype/pom.xml +++ b/aws-serverless-springboot-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.6-SNAPSHOT + 1.5.1 com.amazonaws.serverless.archetypes aws-serverless-springboot-archetype - 1.6-SNAPSHOT + 1.5.1 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.5.1 diff --git a/aws-serverless-springboot2-archetype/pom.xml b/aws-serverless-springboot2-archetype/pom.xml index 76a3c52d6..f262be305 100644 --- a/aws-serverless-springboot2-archetype/pom.xml +++ b/aws-serverless-springboot2-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.6-SNAPSHOT + 1.5.1 com.amazonaws.serverless.archetypes aws-serverless-springboot2-archetype - 1.6-SNAPSHOT + 1.5.1 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.5.1 diff --git a/aws-serverless-struts2-archetype/pom.xml b/aws-serverless-struts2-archetype/pom.xml index 1ac7fc093..79cc36295 100644 --- a/aws-serverless-struts2-archetype/pom.xml +++ b/aws-serverless-struts2-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.6-SNAPSHOT + 1.5.1 com.amazonaws.serverless.archetypes aws-serverless-struts2-archetype - 1.6-SNAPSHOT + 1.5.1 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.5.1 diff --git a/pom.xml b/pom.xml index 292995dac..fe5f4e08d 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazonaws.serverless aws-serverless-java-container pom - 1.6-SNAPSHOT + 1.5.1 AWS Serverless Java container A Java framework to run Spring, Spring Boot, Jersey, Spark, and Struts applications inside AWS Lambda https://github.com/awslabs/aws-serverless-java-container @@ -43,7 +43,7 @@ https://github.com/awslabs/aws-serverless-java-container.git scm:git:git@github.com:awslabs/aws-serverless-java-container.git scm:git:git@github.com:awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.5.1 From e4812726e34cdd3e9a669e2deb54899e6eff5193 Mon Sep 17 00:00:00 2001 From: Stefano Buliani Date: Wed, 15 Jul 2020 12:48:02 -0700 Subject: [PATCH 098/888] [maven-release-plugin] prepare for next development iteration --- aws-serverless-java-container-core/pom.xml | 4 ++-- aws-serverless-java-container-jersey/pom.xml | 6 +++--- aws-serverless-java-container-spark/pom.xml | 6 +++--- aws-serverless-java-container-spring/pom.xml | 6 +++--- aws-serverless-java-container-springboot2/pom.xml | 6 +++--- aws-serverless-java-container-struts2/pom.xml | 6 +++--- aws-serverless-jersey-archetype/pom.xml | 6 +++--- aws-serverless-spark-archetype/pom.xml | 6 +++--- aws-serverless-spring-archetype/pom.xml | 6 +++--- aws-serverless-springboot-archetype/pom.xml | 6 +++--- aws-serverless-springboot2-archetype/pom.xml | 6 +++--- aws-serverless-struts2-archetype/pom.xml | 6 +++--- pom.xml | 4 ++-- 13 files changed, 37 insertions(+), 37 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 9efa9a0c6..200108b28 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Core Allows Java applications written for a servlet container to run in AWS Lambda https://aws.amazon.com/lambda - 1.5.1 + 1.6-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.5.1 + 1.6-SNAPSHOT .. diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index cffc05960..e9d4dbf46 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Jersey implementation Allows Java applications written for Jersey to run in AWS Lambda https://aws.amazon.com/lambda - 1.5.1 + 1.6-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.5.1 + 1.6-SNAPSHOT .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.5.1 + 1.6-SNAPSHOT com.fasterxml.jackson.core diff --git a/aws-serverless-java-container-spark/pom.xml b/aws-serverless-java-container-spark/pom.xml index 75cea7637..bbbb53b4c 100644 --- a/aws-serverless-java-container-spark/pom.xml +++ b/aws-serverless-java-container-spark/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spark implementation Allows Java applications written for Spark to run in AWS Lambda https://aws.amazon.com/lambda - 1.5.1 + 1.6-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.5.1 + 1.6-SNAPSHOT .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.5.1 + 1.6-SNAPSHOT diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 4edebfd45..f0a7c984a 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spring implementation Allows Java applications written for the Spring framework to run in AWS Lambda https://aws.amazon.com/lambda - 1.5.1 + 1.6-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.5.1 + 1.6-SNAPSHOT .. @@ -26,7 +26,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.5.1 + 1.6-SNAPSHOT diff --git a/aws-serverless-java-container-springboot2/pom.xml b/aws-serverless-java-container-springboot2/pom.xml index 568025261..e485b890e 100644 --- a/aws-serverless-java-container-springboot2/pom.xml +++ b/aws-serverless-java-container-springboot2/pom.xml @@ -3,7 +3,7 @@ aws-serverless-java-container com.amazonaws.serverless - 1.5.1 + 1.6-SNAPSHOT 4.0.0 @@ -12,7 +12,7 @@ AWS Serverless Java container support - SpringBoot 2 implementation Allows Java applications written for SpringBoot 2 to run in AWS Lambda https://aws.amazon.com/lambda - 1.5.1 + 1.6-SNAPSHOT 5.2.5.RELEASE @@ -27,7 +27,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.5.1 + 1.6-SNAPSHOT diff --git a/aws-serverless-java-container-struts2/pom.xml b/aws-serverless-java-container-struts2/pom.xml index 14b87e326..40ab552eb 100644 --- a/aws-serverless-java-container-struts2/pom.xml +++ b/aws-serverless-java-container-struts2/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Struts2 implementation Allows Java applications written for the Struts2 framework to run in AWS Lambda https://aws.amazon.com/lambda - 1.5.1 + 1.6-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.5.1 + 1.6-SNAPSHOT @@ -23,7 +23,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.5.1 + 1.6-SNAPSHOT diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index 1f8ee79f2..93f18286b 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.5.1 + 1.6-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-jersey-archetype - 1.5.1 + 1.6-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.5.1 + HEAD diff --git a/aws-serverless-spark-archetype/pom.xml b/aws-serverless-spark-archetype/pom.xml index de64ee7d0..ccd50e996 100644 --- a/aws-serverless-spark-archetype/pom.xml +++ b/aws-serverless-spark-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.5.1 + 1.6-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-spark-archetype - 1.5.1 + 1.6-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.5.1 + HEAD diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index 9060d2c93..e53803fcb 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.5.1 + 1.6-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-spring-archetype - 1.5.1 + 1.6-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.5.1 + HEAD diff --git a/aws-serverless-springboot-archetype/pom.xml b/aws-serverless-springboot-archetype/pom.xml index e44673835..6a9727d75 100644 --- a/aws-serverless-springboot-archetype/pom.xml +++ b/aws-serverless-springboot-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.5.1 + 1.6-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-springboot-archetype - 1.5.1 + 1.6-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.5.1 + HEAD diff --git a/aws-serverless-springboot2-archetype/pom.xml b/aws-serverless-springboot2-archetype/pom.xml index f262be305..76a3c52d6 100644 --- a/aws-serverless-springboot2-archetype/pom.xml +++ b/aws-serverless-springboot2-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.5.1 + 1.6-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-springboot2-archetype - 1.5.1 + 1.6-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.5.1 + HEAD diff --git a/aws-serverless-struts2-archetype/pom.xml b/aws-serverless-struts2-archetype/pom.xml index 79cc36295..1ac7fc093 100644 --- a/aws-serverless-struts2-archetype/pom.xml +++ b/aws-serverless-struts2-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.5.1 + 1.6-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-struts2-archetype - 1.5.1 + 1.6-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.5.1 + HEAD diff --git a/pom.xml b/pom.xml index fe5f4e08d..292995dac 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazonaws.serverless aws-serverless-java-container pom - 1.5.1 + 1.6-SNAPSHOT AWS Serverless Java container A Java framework to run Spring, Spring Boot, Jersey, Spark, and Struts applications inside AWS Lambda https://github.com/awslabs/aws-serverless-java-container @@ -43,7 +43,7 @@ https://github.com/awslabs/aws-serverless-java-container.git scm:git:git@github.com:awslabs/aws-serverless-java-container.git scm:git:git@github.com:awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.5.1 + HEAD From 771a2fad353b78c2c79f8e5ccd7410b4ffa4265a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 9 Sep 2020 12:55:45 -0700 Subject: [PATCH 099/888] Bump hibernate-validator in /aws-serverless-java-container-spring (#379) Bumps [hibernate-validator](https://github.com/hibernate/hibernate-validator) from 5.4.1.Final to 5.4.2.Final. - [Release notes](https://github.com/hibernate/hibernate-validator/releases) - [Changelog](https://github.com/hibernate/hibernate-validator/blob/5.4.2.Final/changelog.txt) - [Commits](https://github.com/hibernate/hibernate-validator/compare/5.4.1.Final...5.4.2.Final) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- aws-serverless-java-container-spring/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index f0a7c984a..20c4f082c 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -72,7 +72,7 @@ org.hibernate hibernate-validator - 5.4.1.Final + 5.4.2.Final test From 4ec803b7af146ab09d7cd6eed48205d4e4e648bb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 9 Sep 2020 12:56:16 -0700 Subject: [PATCH 100/888] Bump hibernate-validator in /samples/struts2/pet-store (#378) Bumps [hibernate-validator](https://github.com/hibernate/hibernate-validator) from 5.3.5.Final to 5.3.6.Final. - [Release notes](https://github.com/hibernate/hibernate-validator/releases) - [Changelog](https://github.com/hibernate/hibernate-validator/blob/5.3.6.Final/changelog.txt) - [Commits](https://github.com/hibernate/hibernate-validator/compare/5.3.5.Final...5.3.6.Final) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- samples/struts2/pet-store/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/struts2/pet-store/pom.xml b/samples/struts2/pet-store/pom.xml index 03d7cbe3a..767c25a77 100644 --- a/samples/struts2/pet-store/pom.xml +++ b/samples/struts2/pet-store/pom.xml @@ -81,7 +81,7 @@ org.hibernate hibernate-validator - 5.3.5.Final + 5.3.6.Final From d3ec49490ced49c0c4cff2be049d7699e6c20b09 Mon Sep 17 00:00:00 2001 From: Abhijeet Joshi Date: Fri, 25 Sep 2020 01:14:54 +0800 Subject: [PATCH 101/888] updated spring version (#381) * updated spring version * updated struts2 version because of vulnarabilities * removed the un-necessary new line --- aws-serverless-java-container-springboot2/pom.xml | 2 +- aws-serverless-java-container-struts2/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/aws-serverless-java-container-springboot2/pom.xml b/aws-serverless-java-container-springboot2/pom.xml index e485b890e..b52dd6f27 100644 --- a/aws-serverless-java-container-springboot2/pom.xml +++ b/aws-serverless-java-container-springboot2/pom.xml @@ -15,7 +15,7 @@ 1.6-SNAPSHOT - 5.2.5.RELEASE + 5.2.9.RELEASE 2.2.6.RELEASE 5.2.2.RELEASE 1.8 diff --git a/aws-serverless-java-container-struts2/pom.xml b/aws-serverless-java-container-struts2/pom.xml index 40ab552eb..74f7f0f5a 100644 --- a/aws-serverless-java-container-struts2/pom.xml +++ b/aws-serverless-java-container-struts2/pom.xml @@ -15,7 +15,7 @@ - 2.5.20 + 2.5.22 From edf11fe3383eab59f30dcdf5d8d492b20476a5b1 Mon Sep 17 00:00:00 2001 From: Kevin Sewell Date: Thu, 1 Oct 2020 20:50:20 +0200 Subject: [PATCH 102/888] fix: ensuring that headers are case insensitive (#383) * fix: ensuring that headers are case insensitive * fix: updating spring version in ci Co-authored-by: Kevin Sewell --- .github/workflows/continuous-integration-workflow.yml | 10 +++++----- .../internal/testutils/AwsProxyRequestBuilder.java | 2 +- aws-serverless-java-container-spring/pom.xml | 2 +- .../main/resources/archetype-resources/build.gradle | 4 ++-- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/spring/pet-store/build.gradle | 4 ++-- samples/spring/pet-store/pom.xml | 2 +- 7 files changed, 13 insertions(+), 13 deletions(-) diff --git a/.github/workflows/continuous-integration-workflow.yml b/.github/workflows/continuous-integration-workflow.yml index 025848302..8d209bb0c 100644 --- a/.github/workflows/continuous-integration-workflow.yml +++ b/.github/workflows/continuous-integration-workflow.yml @@ -49,11 +49,11 @@ jobs: # Spring core 5.2 and above. SpringBoot 1.5 is deprecated run: ./gha_build.sh spring true true -Djacoco.minCoverage=0.4 - name: Build Spring 4.3 - run: ./gha_build.sh spring false false -Dspring.version=4.3.25.RELEASE -Dspring-security.version=4.2.13.RELEASE + run: ./gha_build.sh spring false false -Dspring.version=4.3.29.RELEASE -Dspring-security.version=4.2.18.RELEASE - name: Build Spring 5.0 - run: ./gha_build.sh spring false false -Dspring.version=5.0.16.RELEASE -Dspring-security.version=5.0.14.RELEASE + run: ./gha_build.sh spring false false -Dspring.version=5.0.19.RELEASE -Dspring-security.version=5.0.18.RELEASE - name: Build Spring 5.1 - run: ./gha_build.sh spring false false -Dspring.version=5.1.14.RELEASE -Dspring-security.version=5.1.8.RELEASE + run: ./gha_build.sh spring false false -Dspring.version=5.1.18.RELEASE -Dspring-security.version=5.1.12.RELEASE build_springboot2: name: Build and test SpringBoot 2 @@ -63,9 +63,9 @@ jobs: - name: Build latest run: ./gha_build.sh springboot2 true true - name: Build Spring Boot 2.0 - run: ./gha_build.sh springboot2 false false -Dspringboot.version=2.0.9.RELEASE -Dspring.version=5.0.16.RELEASE -Dspringsecurity.version=5.0.14.RELEASE + run: ./gha_build.sh springboot2 false false -Dspringboot.version=2.0.9.RELEASE -Dspring.version=5.0.19.RELEASE -Dspringsecurity.version=5.0.18.RELEASE - name: Build Spring Boot 2.1 - run: ./gha_build.sh springboot2 false false -Dspringboot.version=2.1.12.RELEASE -Dspring.version=5.1.13.RELEASE -Dspringsecurity.version=5.1.8.RELEASE + run: ./gha_build.sh springboot2 false false -Dspringboot.version=2.1.17.RELEASE -Dspring.version=5.1.18.RELEASE -Dspringsecurity.version=5.1.12.RELEASE build_struts2: name: Build and test Struts 2 diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/testutils/AwsProxyRequestBuilder.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/testutils/AwsProxyRequestBuilder.java index 848f25bb1..11bcd58ef 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/testutils/AwsProxyRequestBuilder.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/testutils/AwsProxyRequestBuilder.java @@ -457,7 +457,7 @@ public HttpApiV2ProxyRequest toHttpApiV2Request() { if (request.getMultiValueHeaders() != null && request.getMultiValueHeaders().containsKey(HttpHeaders.COOKIE)) { req.setCookies(Arrays.asList(request.getMultiValueHeaders().getFirst(HttpHeaders.COOKIE).split(";"))); } - req.setHeaders(new HashMap<>()); + req.setHeaders(new TreeMap<>(String.CASE_INSENSITIVE_ORDER)); if (request.getMultiValueHeaders() != null) { request.getMultiValueHeaders().forEach((key, value) -> req.getHeaders().put(key, value.get(0))); } diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 20c4f082c..d7788009b 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -16,7 +16,7 @@ - 5.2.5.RELEASE + 5.2.9.RELEASE 1.5.22.RELEASE 5.2.2.RELEASE diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index e73185939..d430d695f 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -7,8 +7,8 @@ repositories { dependencies { compile ( - 'org.springframework:spring-webmvc:5.2.5.RELEASE', - 'org.springframework:spring-context:5.2.5.RELEASE', + 'org.springframework:spring-webmvc:5.2.9.RELEASE', + 'org.springframework:spring-context:5.2.9.RELEASE', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[1.0,)', 'org.apache.logging.log4j:log4j-core:2.8.2', 'org.apache.logging.log4j:log4j-api:2.8.2', diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index a41ddd6ec..42bf384e2 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 1.8 - 5.2.5.RELEASE + 5.2.9.RELEASE 4.12 2.8.2 diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index 433f5741b..14e243069 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -7,8 +7,8 @@ repositories { dependencies { compile ( - 'org.springframework:spring-webmvc:5.2.5.RELEASE', - 'org.springframework:spring-context:5.2.5.RELEASE', + 'org.springframework:spring-webmvc:5.2.9.RELEASE', + 'org.springframework:spring-context:5.2.9.RELEASE', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[1.0,)', 'org.apache.logging.log4j:log4j-core:2.8.2', 'org.apache.logging.log4j:log4j-api:2.8.2', diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index cdad48e8c..440ff32e1 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -26,7 +26,7 @@ 1.8 1.8 - 5.2.5.RELEASE + 5.2.9.RELEASE 4.12 2.13.3 From 5c4ca2bccae2885034d07dcca4e597f8864953e5 Mon Sep 17 00:00:00 2001 From: Stefano Buliani <2996317+sapessi@users.noreply.github.com> Date: Tue, 6 Oct 2020 14:41:38 -0700 Subject: [PATCH 103/888] Release 1.5.2 (#385) * fix: Use single value headers for HTTP API response (#377) Parametrized the use of the single value headers for the response writer to support the v2 proxy schema for HTTP API * fix: Updated HTTP API handler constructor (#377) Changed default httpApiV2 constructor for the handler in all the framework implementations * fix: Switched to non-mime encoder for respponse (#339) --- .../AwsProxyHttpServletResponseWriter.java | 29 ++++++++++++++++++- .../ServletLambdaContainerHandlerBuilder.java | 2 +- .../jersey/JerseyLambdaContainerHandler.java | 2 +- .../spark/SparkLambdaContainerHandler.java | 2 +- .../proxy/spring/ServletAppTest.java | 17 +++++++++-- .../Struts2LambdaContainerHandler.java | 2 +- 6 files changed, 47 insertions(+), 7 deletions(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletResponseWriter.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletResponseWriter.java index ba98eedb2..de84b5c2d 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletResponseWriter.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletResponseWriter.java @@ -19,11 +19,14 @@ import com.amazonaws.serverless.proxy.internal.testutils.Timer; import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.serverless.proxy.model.AwsProxyResponse; +import com.amazonaws.serverless.proxy.model.Headers; import com.amazonaws.services.lambda.runtime.Context; import javax.ws.rs.core.Response; import java.util.Base64; +import java.util.HashMap; +import java.util.Map; /** @@ -32,6 +35,16 @@ */ public class AwsProxyHttpServletResponseWriter extends ResponseWriter { + private boolean writeSingleValueHeaders; + + public AwsProxyHttpServletResponseWriter() { + this(false); + } + + public AwsProxyHttpServletResponseWriter(boolean singleValueHeaders) { + writeSingleValueHeaders = singleValueHeaders; + } + //------------------------------------------------------------- // Methods - Implementation //------------------------------------------------------------- @@ -47,13 +60,16 @@ public AwsProxyResponse writeResponse(AwsHttpServletResponse containerResponse, if (!isBinary(containerResponse.getContentType()) && isValidUtf8(containerResponse.getAwsResponseBodyBytes())) { responseString = containerResponse.getAwsResponseBodyString(); } else { - responseString = Base64.getMimeEncoder().encodeToString(containerResponse.getAwsResponseBodyBytes()); + responseString = Base64.getEncoder().encodeToString(containerResponse.getAwsResponseBodyBytes()); awsProxyResponse.setBase64Encoded(true); } awsProxyResponse.setBody(responseString); } awsProxyResponse.setMultiValueHeaders(containerResponse.getAwsResponseHeaders()); + if (writeSingleValueHeaders) { + awsProxyResponse.setHeaders(toSingleValueHeaders(containerResponse.getAwsResponseHeaders())); + } awsProxyResponse.setStatusCode(containerResponse.getStatus()); @@ -65,6 +81,17 @@ public AwsProxyResponse writeResponse(AwsHttpServletResponse containerResponse, return awsProxyResponse; } + private Map toSingleValueHeaders(Headers h) { + Map out = new HashMap<>(); + if (h == null || h.isEmpty()) { + return out; + } + for (String k : h.keySet()) { + out.put(k, h.getFirst(k)); + } + return out; + } + private boolean isBinary(String contentType) { if(contentType != null) { int semidx = contentType.indexOf(';'); diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/ServletLambdaContainerHandlerBuilder.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/ServletLambdaContainerHandlerBuilder.java index 88e59fb61..caead2aaf 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/ServletLambdaContainerHandlerBuilder.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/ServletLambdaContainerHandlerBuilder.java @@ -110,7 +110,7 @@ public Builder defaultProxy() { public Builder defaultHttpApiV2Proxy() { initializationWrapper(new InitializationWrapper()) .requestReader((RequestReader) new AwsHttpApiV2HttpServletRequestReader()) - .responseWriter((ResponseWriter) new AwsProxyHttpServletResponseWriter()) + .responseWriter((ResponseWriter) new AwsProxyHttpServletResponseWriter(true)) .securityContextWriter((SecurityContextWriter) new AwsHttpApiV2SecurityContextWriter()) .exceptionHandler((ExceptionHandler) new AwsProxyExceptionHandler()) .requestTypeClass((Class) HttpApiV2ProxyRequest.class) diff --git a/aws-serverless-java-container-jersey/src/main/java/com/amazonaws/serverless/proxy/jersey/JerseyLambdaContainerHandler.java b/aws-serverless-java-container-jersey/src/main/java/com/amazonaws/serverless/proxy/jersey/JerseyLambdaContainerHandler.java index bb9d95091..fe50cd0fd 100644 --- a/aws-serverless-java-container-jersey/src/main/java/com/amazonaws/serverless/proxy/jersey/JerseyLambdaContainerHandler.java +++ b/aws-serverless-java-container-jersey/src/main/java/com/amazonaws/serverless/proxy/jersey/JerseyLambdaContainerHandler.java @@ -116,7 +116,7 @@ public static JerseyLambdaContainerHandler newHandler = new SparkLambdaContainerHandler<>(HttpApiV2ProxyRequest.class, AwsProxyResponse.class, new AwsHttpApiV2HttpServletRequestReader(), - new AwsProxyHttpServletResponseWriter(), + new AwsProxyHttpServletResponseWriter(true), new AwsHttpApiV2SecurityContextWriter(), new AwsProxyExceptionHandler(), new LambdaEmbeddedServerFactory()); diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/ServletAppTest.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/ServletAppTest.java index de2228434..7c80dc86b 100644 --- a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/ServletAppTest.java +++ b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/ServletAppTest.java @@ -23,8 +23,7 @@ import java.util.Collection; import java.util.stream.Collectors; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.*; @RunWith(Parameterized.class) public class ServletAppTest { @@ -192,4 +191,18 @@ public void springExceptionMapping_throw404Ex_expectMappedTo404() { assertNotNull(resp); assertEquals(404, resp.getStatusCode()); } + + @Test + public void echoMessage_populatesSingleValueHeadersForHttpApiV2() { + AwsProxyRequestBuilder req = new AwsProxyRequestBuilder("/message", "POST") + .header(HttpHeaders.CONTENT_TYPE, "application/json;v=1") + .header(HttpHeaders.ACCEPT, "application/json;v=1") + .body(new MessageData("test message")); + AwsProxyResponse resp = handler.handleRequest(req, lambdaContext); + if ("HTTP_API".equals(type)) { + assertNotNull(resp.getHeaders()); + } else { + assertNull(resp.getHeaders()); + } + } } diff --git a/aws-serverless-java-container-struts2/src/main/java/com/amazonaws/serverless/proxy/struts2/Struts2LambdaContainerHandler.java b/aws-serverless-java-container-struts2/src/main/java/com/amazonaws/serverless/proxy/struts2/Struts2LambdaContainerHandler.java index 3a536c9b2..99c89c449 100644 --- a/aws-serverless-java-container-struts2/src/main/java/com/amazonaws/serverless/proxy/struts2/Struts2LambdaContainerHandler.java +++ b/aws-serverless-java-container-struts2/src/main/java/com/amazonaws/serverless/proxy/struts2/Struts2LambdaContainerHandler.java @@ -65,7 +65,7 @@ public static Struts2LambdaContainerHandler Date: Tue, 6 Oct 2020 15:05:16 -0700 Subject: [PATCH 104/888] [maven-release-plugin] prepare release aws-serverless-java-container-1.5.2 --- aws-serverless-java-container-core/pom.xml | 4 ++-- aws-serverless-java-container-jersey/pom.xml | 6 +++--- aws-serverless-java-container-spark/pom.xml | 6 +++--- aws-serverless-java-container-spring/pom.xml | 6 +++--- aws-serverless-java-container-springboot2/pom.xml | 6 +++--- aws-serverless-java-container-struts2/pom.xml | 6 +++--- aws-serverless-jersey-archetype/pom.xml | 6 +++--- aws-serverless-spark-archetype/pom.xml | 6 +++--- aws-serverless-spring-archetype/pom.xml | 6 +++--- aws-serverless-springboot-archetype/pom.xml | 6 +++--- aws-serverless-springboot2-archetype/pom.xml | 6 +++--- aws-serverless-struts2-archetype/pom.xml | 6 +++--- pom.xml | 4 ++-- 13 files changed, 37 insertions(+), 37 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 200108b28..82bfc542d 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Core Allows Java applications written for a servlet container to run in AWS Lambda https://aws.amazon.com/lambda - 1.6-SNAPSHOT + 1.5.2 com.amazonaws.serverless aws-serverless-java-container - 1.6-SNAPSHOT + 1.5.2 .. diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index e9d4dbf46..b52573eaf 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Jersey implementation Allows Java applications written for Jersey to run in AWS Lambda https://aws.amazon.com/lambda - 1.6-SNAPSHOT + 1.5.2 com.amazonaws.serverless aws-serverless-java-container - 1.6-SNAPSHOT + 1.5.2 .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.6-SNAPSHOT + 1.5.2 com.fasterxml.jackson.core diff --git a/aws-serverless-java-container-spark/pom.xml b/aws-serverless-java-container-spark/pom.xml index bbbb53b4c..9233136cf 100644 --- a/aws-serverless-java-container-spark/pom.xml +++ b/aws-serverless-java-container-spark/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spark implementation Allows Java applications written for Spark to run in AWS Lambda https://aws.amazon.com/lambda - 1.6-SNAPSHOT + 1.5.2 com.amazonaws.serverless aws-serverless-java-container - 1.6-SNAPSHOT + 1.5.2 .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.6-SNAPSHOT + 1.5.2 diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index d7788009b..d9823f973 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spring implementation Allows Java applications written for the Spring framework to run in AWS Lambda https://aws.amazon.com/lambda - 1.6-SNAPSHOT + 1.5.2 com.amazonaws.serverless aws-serverless-java-container - 1.6-SNAPSHOT + 1.5.2 .. @@ -26,7 +26,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.6-SNAPSHOT + 1.5.2 diff --git a/aws-serverless-java-container-springboot2/pom.xml b/aws-serverless-java-container-springboot2/pom.xml index b52dd6f27..4f6cbb2f4 100644 --- a/aws-serverless-java-container-springboot2/pom.xml +++ b/aws-serverless-java-container-springboot2/pom.xml @@ -3,7 +3,7 @@ aws-serverless-java-container com.amazonaws.serverless - 1.6-SNAPSHOT + 1.5.2 4.0.0 @@ -12,7 +12,7 @@ AWS Serverless Java container support - SpringBoot 2 implementation Allows Java applications written for SpringBoot 2 to run in AWS Lambda https://aws.amazon.com/lambda - 1.6-SNAPSHOT + 1.5.2 5.2.9.RELEASE @@ -27,7 +27,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.6-SNAPSHOT + 1.5.2 diff --git a/aws-serverless-java-container-struts2/pom.xml b/aws-serverless-java-container-struts2/pom.xml index 74f7f0f5a..daff15d59 100644 --- a/aws-serverless-java-container-struts2/pom.xml +++ b/aws-serverless-java-container-struts2/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Struts2 implementation Allows Java applications written for the Struts2 framework to run in AWS Lambda https://aws.amazon.com/lambda - 1.6-SNAPSHOT + 1.5.2 com.amazonaws.serverless aws-serverless-java-container - 1.6-SNAPSHOT + 1.5.2 @@ -23,7 +23,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.6-SNAPSHOT + 1.5.2 diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index 93f18286b..e66857388 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.6-SNAPSHOT + 1.5.2 com.amazonaws.serverless.archetypes aws-serverless-jersey-archetype - 1.6-SNAPSHOT + 1.5.2 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.5.2 diff --git a/aws-serverless-spark-archetype/pom.xml b/aws-serverless-spark-archetype/pom.xml index ccd50e996..e4c15fdab 100644 --- a/aws-serverless-spark-archetype/pom.xml +++ b/aws-serverless-spark-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.6-SNAPSHOT + 1.5.2 com.amazonaws.serverless.archetypes aws-serverless-spark-archetype - 1.6-SNAPSHOT + 1.5.2 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.5.2 diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index e53803fcb..6f1c880c5 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.6-SNAPSHOT + 1.5.2 com.amazonaws.serverless.archetypes aws-serverless-spring-archetype - 1.6-SNAPSHOT + 1.5.2 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.5.2 diff --git a/aws-serverless-springboot-archetype/pom.xml b/aws-serverless-springboot-archetype/pom.xml index 6a9727d75..781abcf41 100644 --- a/aws-serverless-springboot-archetype/pom.xml +++ b/aws-serverless-springboot-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.6-SNAPSHOT + 1.5.2 com.amazonaws.serverless.archetypes aws-serverless-springboot-archetype - 1.6-SNAPSHOT + 1.5.2 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.5.2 diff --git a/aws-serverless-springboot2-archetype/pom.xml b/aws-serverless-springboot2-archetype/pom.xml index 76a3c52d6..e078bd90d 100644 --- a/aws-serverless-springboot2-archetype/pom.xml +++ b/aws-serverless-springboot2-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.6-SNAPSHOT + 1.5.2 com.amazonaws.serverless.archetypes aws-serverless-springboot2-archetype - 1.6-SNAPSHOT + 1.5.2 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.5.2 diff --git a/aws-serverless-struts2-archetype/pom.xml b/aws-serverless-struts2-archetype/pom.xml index 1ac7fc093..585ba23b9 100644 --- a/aws-serverless-struts2-archetype/pom.xml +++ b/aws-serverless-struts2-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.6-SNAPSHOT + 1.5.2 com.amazonaws.serverless.archetypes aws-serverless-struts2-archetype - 1.6-SNAPSHOT + 1.5.2 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.5.2 diff --git a/pom.xml b/pom.xml index 292995dac..e75bf19b0 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazonaws.serverless aws-serverless-java-container pom - 1.6-SNAPSHOT + 1.5.2 AWS Serverless Java container A Java framework to run Spring, Spring Boot, Jersey, Spark, and Struts applications inside AWS Lambda https://github.com/awslabs/aws-serverless-java-container @@ -43,7 +43,7 @@ https://github.com/awslabs/aws-serverless-java-container.git scm:git:git@github.com:awslabs/aws-serverless-java-container.git scm:git:git@github.com:awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.5.2 From fa97bf9fb6d8847c1d248fe41c006f194ca6265a Mon Sep 17 00:00:00 2001 From: Stefano Buliani Date: Tue, 6 Oct 2020 15:05:16 -0700 Subject: [PATCH 105/888] [maven-release-plugin] prepare for next development iteration --- aws-serverless-java-container-core/pom.xml | 4 ++-- aws-serverless-java-container-jersey/pom.xml | 6 +++--- aws-serverless-java-container-spark/pom.xml | 6 +++--- aws-serverless-java-container-spring/pom.xml | 6 +++--- aws-serverless-java-container-springboot2/pom.xml | 6 +++--- aws-serverless-java-container-struts2/pom.xml | 6 +++--- aws-serverless-jersey-archetype/pom.xml | 6 +++--- aws-serverless-spark-archetype/pom.xml | 6 +++--- aws-serverless-spring-archetype/pom.xml | 6 +++--- aws-serverless-springboot-archetype/pom.xml | 6 +++--- aws-serverless-springboot2-archetype/pom.xml | 6 +++--- aws-serverless-struts2-archetype/pom.xml | 6 +++--- pom.xml | 4 ++-- 13 files changed, 37 insertions(+), 37 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 82bfc542d..200108b28 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Core Allows Java applications written for a servlet container to run in AWS Lambda https://aws.amazon.com/lambda - 1.5.2 + 1.6-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.5.2 + 1.6-SNAPSHOT .. diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index b52573eaf..e9d4dbf46 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Jersey implementation Allows Java applications written for Jersey to run in AWS Lambda https://aws.amazon.com/lambda - 1.5.2 + 1.6-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.5.2 + 1.6-SNAPSHOT .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.5.2 + 1.6-SNAPSHOT com.fasterxml.jackson.core diff --git a/aws-serverless-java-container-spark/pom.xml b/aws-serverless-java-container-spark/pom.xml index 9233136cf..bbbb53b4c 100644 --- a/aws-serverless-java-container-spark/pom.xml +++ b/aws-serverless-java-container-spark/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spark implementation Allows Java applications written for Spark to run in AWS Lambda https://aws.amazon.com/lambda - 1.5.2 + 1.6-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.5.2 + 1.6-SNAPSHOT .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.5.2 + 1.6-SNAPSHOT diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index d9823f973..d7788009b 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spring implementation Allows Java applications written for the Spring framework to run in AWS Lambda https://aws.amazon.com/lambda - 1.5.2 + 1.6-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.5.2 + 1.6-SNAPSHOT .. @@ -26,7 +26,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.5.2 + 1.6-SNAPSHOT diff --git a/aws-serverless-java-container-springboot2/pom.xml b/aws-serverless-java-container-springboot2/pom.xml index 4f6cbb2f4..b52dd6f27 100644 --- a/aws-serverless-java-container-springboot2/pom.xml +++ b/aws-serverless-java-container-springboot2/pom.xml @@ -3,7 +3,7 @@ aws-serverless-java-container com.amazonaws.serverless - 1.5.2 + 1.6-SNAPSHOT 4.0.0 @@ -12,7 +12,7 @@ AWS Serverless Java container support - SpringBoot 2 implementation Allows Java applications written for SpringBoot 2 to run in AWS Lambda https://aws.amazon.com/lambda - 1.5.2 + 1.6-SNAPSHOT 5.2.9.RELEASE @@ -27,7 +27,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.5.2 + 1.6-SNAPSHOT diff --git a/aws-serverless-java-container-struts2/pom.xml b/aws-serverless-java-container-struts2/pom.xml index daff15d59..74f7f0f5a 100644 --- a/aws-serverless-java-container-struts2/pom.xml +++ b/aws-serverless-java-container-struts2/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Struts2 implementation Allows Java applications written for the Struts2 framework to run in AWS Lambda https://aws.amazon.com/lambda - 1.5.2 + 1.6-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.5.2 + 1.6-SNAPSHOT @@ -23,7 +23,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.5.2 + 1.6-SNAPSHOT diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index e66857388..93f18286b 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.5.2 + 1.6-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-jersey-archetype - 1.5.2 + 1.6-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.5.2 + HEAD diff --git a/aws-serverless-spark-archetype/pom.xml b/aws-serverless-spark-archetype/pom.xml index e4c15fdab..ccd50e996 100644 --- a/aws-serverless-spark-archetype/pom.xml +++ b/aws-serverless-spark-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.5.2 + 1.6-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-spark-archetype - 1.5.2 + 1.6-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.5.2 + HEAD diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index 6f1c880c5..e53803fcb 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.5.2 + 1.6-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-spring-archetype - 1.5.2 + 1.6-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.5.2 + HEAD diff --git a/aws-serverless-springboot-archetype/pom.xml b/aws-serverless-springboot-archetype/pom.xml index 781abcf41..6a9727d75 100644 --- a/aws-serverless-springboot-archetype/pom.xml +++ b/aws-serverless-springboot-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.5.2 + 1.6-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-springboot-archetype - 1.5.2 + 1.6-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.5.2 + HEAD diff --git a/aws-serverless-springboot2-archetype/pom.xml b/aws-serverless-springboot2-archetype/pom.xml index e078bd90d..76a3c52d6 100644 --- a/aws-serverless-springboot2-archetype/pom.xml +++ b/aws-serverless-springboot2-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.5.2 + 1.6-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-springboot2-archetype - 1.5.2 + 1.6-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.5.2 + HEAD diff --git a/aws-serverless-struts2-archetype/pom.xml b/aws-serverless-struts2-archetype/pom.xml index 585ba23b9..1ac7fc093 100644 --- a/aws-serverless-struts2-archetype/pom.xml +++ b/aws-serverless-struts2-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.5.2 + 1.6-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-struts2-archetype - 1.5.2 + 1.6-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.5.2 + HEAD diff --git a/pom.xml b/pom.xml index e75bf19b0..292995dac 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazonaws.serverless aws-serverless-java-container pom - 1.5.2 + 1.6-SNAPSHOT AWS Serverless Java container A Java framework to run Spring, Spring Boot, Jersey, Spark, and Struts applications inside AWS Lambda https://github.com/awslabs/aws-serverless-java-container @@ -43,7 +43,7 @@ https://github.com/awslabs/aws-serverless-java-container.git scm:git:git@github.com:awslabs/aws-serverless-java-container.git scm:git:git@github.com:awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.5.2 + HEAD From 61bbef6fa44978c168e473afea63456228ccbc93 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 14 Oct 2020 08:24:45 -0700 Subject: [PATCH 106/888] Bump junit from 4.12 to 4.13.1 (#387) Bumps [junit](https://github.com/junit-team/junit4) from 4.12 to 4.13.1. - [Release notes](https://github.com/junit-team/junit4/releases) - [Changelog](https://github.com/junit-team/junit4/blob/main/doc/ReleaseNotes4.12.md) - [Commits](https://github.com/junit-team/junit4/compare/r4.12...r4.13.1) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 292995dac..d0a65ef32 100644 --- a/pom.xml +++ b/pom.xml @@ -93,7 +93,7 @@ junit junit - 4.12 + 4.13.1 test From 1acb68a70c70d87b46a3309f860f3d8a18e7704b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 14 Oct 2020 08:25:03 -0700 Subject: [PATCH 107/888] Bump junit from 4.12 to 4.13.1 in /samples/struts2/pet-store (#388) Bumps [junit](https://github.com/junit-team/junit4) from 4.12 to 4.13.1. - [Release notes](https://github.com/junit-team/junit4/releases) - [Changelog](https://github.com/junit-team/junit4/blob/main/doc/ReleaseNotes4.12.md) - [Commits](https://github.com/junit-team/junit4/compare/r4.12...r4.13.1) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- samples/struts2/pet-store/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/struts2/pet-store/pom.xml b/samples/struts2/pet-store/pom.xml index 767c25a77..0cf0feaf6 100644 --- a/samples/struts2/pet-store/pom.xml +++ b/samples/struts2/pet-store/pom.xml @@ -28,7 +28,7 @@ 1.8 2.5.22 2.10.3 - 4.12 + 4.13.1 2.13.3 From 5bfacf247dabdb100336beb523d2a8fd5c8b487a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 14 Oct 2020 08:25:22 -0700 Subject: [PATCH 108/888] Bump junit from 4.12 to 4.13.1 in /samples/spring/pet-store (#389) Bumps [junit](https://github.com/junit-team/junit4) from 4.12 to 4.13.1. - [Release notes](https://github.com/junit-team/junit4/releases) - [Changelog](https://github.com/junit-team/junit4/blob/main/doc/ReleaseNotes4.12.md) - [Commits](https://github.com/junit-team/junit4/compare/r4.12...r4.13.1) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- samples/spring/pet-store/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index 440ff32e1..4997c048f 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -27,7 +27,7 @@ 1.8 1.8 5.2.9.RELEASE - 4.12 + 4.13.1 2.13.3 From e3cffe118fac0879484c52eafd56fbf0198dc8c8 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Wed, 6 Jan 2021 13:43:08 +0100 Subject: [PATCH 109/888] allow compilation with JDK version >8 (update jacoco and spotbugs, added activation dependency) --- aws-serverless-java-container-core/pom.xml | 19 +++++++++++++++++-- aws-serverless-java-container-jersey/pom.xml | 4 ++-- aws-serverless-java-container-spark/pom.xml | 4 ++-- aws-serverless-java-container-spring/pom.xml | 4 ++-- .../pom.xml | 4 ++-- aws-serverless-java-container-struts2/pom.xml | 4 ++-- 6 files changed, 27 insertions(+), 12 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 200108b28..301778da0 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -104,7 +104,7 @@ org.jacoco jacoco-maven-plugin - 0.8.1 + 0.8.6 ${basedir}/target/coverage-reports/jacoco-unit.exec ${basedir}/target/coverage-reports/jacoco-unit.exec @@ -151,7 +151,7 @@ com.github.spotbugs spotbugs-maven-plugin - 3.1.1 + 4.2.0 + + org.eclipse.jetty + jetty-bom + 9.4.43.v20210629 + pom + import + + + + From 7843026728c96306b27c9af89603bd1d3d245fa4 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Thu, 22 Jul 2021 11:19:04 +0200 Subject: [PATCH 117/888] Update Jersey version to 2.34 --- aws-serverless-java-container-jersey/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 6 +++--- .../src/main/resources/archetype-resources/pom.xml | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index 98ce91a1a..32c2f47e3 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -16,7 +16,7 @@ - 2.30.1 + 2.34 diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle index fef30c66d..e51ef0985 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle @@ -9,17 +9,17 @@ dependencies { implementation ( 'com.amazonaws:aws-lambda-java-core:1.2.0', 'com.amazonaws.serverless:aws-serverless-java-container-jersey:[1.0,)', - 'com.fasterxml.jackson.core:jackson-databind:2.9.10', + 'com.fasterxml.jackson.core:jackson-databind:2.12.0', 'io.symphonia:lambda-logging:1.0.1' ) - implementation("org.glassfish.jersey.media:jersey-media-json-jackson:2.29.1") { + implementation("org.glassfish.jersey.media:jersey-media-json-jackson:2.34") { exclude group: 'com.fasterxml.jackson.core', module: "jackson-annotations" exclude group: 'com.fasterxml.jackson.core', module: "jackson-databind" exclude group: 'com.fasterxml.jackson.core', module: "jackson-core" } - implementation("org.glassfish.jersey.inject:jersey-hk2:2.29.1") { + implementation("org.glassfish.jersey.inject:jersey-hk2:2.34") { exclude group: 'javax.inject', module: "javax.inject" } diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml index 9ba6472a9..0d1b86dff 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml @@ -14,7 +14,7 @@ 1.8 1.8 - 2.30.1 + 2.34 2.12.0 From beb1232092e5c9c7e9e39a03eca7d80b99f8223b Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Thu, 22 Jul 2021 11:32:14 +0200 Subject: [PATCH 118/888] CI: Use JDK 8 for older Jersey versions --- .github/workflows/continuous-integration-workflow.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/continuous-integration-workflow.yml b/.github/workflows/continuous-integration-workflow.yml index 8d209bb0c..b5212b127 100644 --- a/.github/workflows/continuous-integration-workflow.yml +++ b/.github/workflows/continuous-integration-workflow.yml @@ -22,6 +22,10 @@ jobs: - uses: actions/checkout@v2 - name: Build latest run: ./gha_build.sh jersey true true + - name: Set up JDK 8 + uses: actions/setup-java@v1 + with: + java-version: 8 - name: Build Jersey 2.27 run: ./gha_build.sh jersey false false -Djersey.version=2.27 - name: Build Jersey 2.28 From bd8b9078449187f3de509f914f4c250e03735da9 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Thu, 22 Jul 2021 12:47:23 +0200 Subject: [PATCH 119/888] add UTF-8 sourceEncoding property (to fix build on Windows machines) --- pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/pom.xml b/pom.xml index 737edd1db..20c7cf9ad 100644 --- a/pom.xml +++ b/pom.xml @@ -86,6 +86,7 @@ 5.3.2 2.12.0 1.7.30 + UTF-8 From 81ee66f2667070483629804b5222aeef9378ec86 Mon Sep 17 00:00:00 2001 From: Johannes Geppert Date: Tue, 8 Dec 2020 15:55:13 +0100 Subject: [PATCH 120/888] Remove unused logger instance --- .../serverless/proxy/struts2/Struts2LambdaHandler.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/aws-serverless-java-container-struts2/src/main/java/com/amazonaws/serverless/proxy/struts2/Struts2LambdaHandler.java b/aws-serverless-java-container-struts2/src/main/java/com/amazonaws/serverless/proxy/struts2/Struts2LambdaHandler.java index 26a01bd90..b4aee76c9 100644 --- a/aws-serverless-java-container-struts2/src/main/java/com/amazonaws/serverless/proxy/struts2/Struts2LambdaHandler.java +++ b/aws-serverless-java-container-struts2/src/main/java/com/amazonaws/serverless/proxy/struts2/Struts2LambdaHandler.java @@ -16,8 +16,6 @@ import com.amazonaws.serverless.proxy.model.AwsProxyResponse; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestStreamHandler; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import java.io.IOException; import java.io.InputStream; @@ -32,8 +30,6 @@ */ public class Struts2LambdaHandler implements RequestStreamHandler { - private static final Logger log = LoggerFactory.getLogger(Struts2LambdaHandler.class); - private final Struts2LambdaContainerHandler handler = Struts2LambdaContainerHandler .getAwsProxyHandler(); From 3ae17785ebeb9e36939977921203b02abb5e1ccc Mon Sep 17 00:00:00 2001 From: Johannes Geppert Date: Tue, 8 Dec 2020 15:55:39 +0100 Subject: [PATCH 121/888] Use latest available Apache Struts2 GA version 2.5.26 --- aws-serverless-java-container-struts2/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws-serverless-java-container-struts2/pom.xml b/aws-serverless-java-container-struts2/pom.xml index 7ace29f0f..769a7929b 100644 --- a/aws-serverless-java-container-struts2/pom.xml +++ b/aws-serverless-java-container-struts2/pom.xml @@ -15,7 +15,7 @@ - 2.5.22 + 2.5.26 From e5d824d89bc30d6c6e193445823f24ffefe77be9 Mon Sep 17 00:00:00 2001 From: Johannes Geppert Date: Tue, 8 Dec 2020 16:24:18 +0100 Subject: [PATCH 122/888] Use latest available dependency in Struts2 archetype --- .../src/main/resources/archetype-resources/pom.xml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml index cf642c423..e8906de56 100644 --- a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml @@ -15,10 +15,10 @@ 1.8 1.8 - 2.5.22 + 2.5.26 2.12.0 - 4.12 - 2.8.2 + 4.13.1 + 2.14.0 @@ -31,7 +31,7 @@ com.amazonaws aws-lambda-java-core - 1.2.0 + 1.2.1 @@ -63,14 +63,14 @@ com.jgeppert.struts2 struts2-aws-lambda-support-plugin - 1.1.0 + 1.3.0 org.hibernate hibernate-validator - 4.3.2.Final + 5.3.6.Final @@ -110,7 +110,7 @@ com.amazonaws aws-lambda-java-log4j2 - 1.1.0 + 1.2.0 From 4f37cb717dbdc59396a6a3916032c2acceecb0c6 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Thu, 22 Jul 2021 13:22:39 +0200 Subject: [PATCH 123/888] Use latest available Apache Struts2 GA version 2.5.26 --- .../resources/archetype-resources/build.gradle | 16 ++++++++-------- samples/struts2/pet-store/build.gradle | 14 +++++++------- samples/struts2/pet-store/pom.xml | 8 ++++---- 3 files changed, 19 insertions(+), 19 deletions(-) diff --git a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle index de84e9d9e..4cd4c6c4e 100644 --- a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle @@ -11,30 +11,30 @@ dependencies { exclude group: 'org.apache.struts', module: 'struts2-core' exclude group: 'org.apache.logging.log4j', module: 'log4j-api' } - implementation ('org.apache.struts:struts2-convention-plugin:2.5.22') { + implementation ('org.apache.struts:struts2-convention-plugin:2.5.26') { exclude group: 'org.apache.struts', module: 'struts2-core' } - implementation ('org.apache.struts:struts2-rest-plugin:2.5.22') { + implementation ('org.apache.struts:struts2-rest-plugin:2.5.26') { exclude group: 'org.apache.struts', module: 'struts2-core' } - implementation ('org.apache.struts:struts2-bean-validation-plugin:2.5.22') { + implementation ('org.apache.struts:struts2-bean-validation-plugin:2.5.26') { exclude group: 'org.apache.struts', module: 'struts2-core' } - implementation ('com.jgeppert.struts2:struts2-aws-lambda-support-plugin:1.0.0') { + implementation ('com.jgeppert.struts2:struts2-aws-lambda-support-plugin:1.3.0') { exclude group: 'org.apache.struts', module: 'struts2-core' } - implementation ('org.apache.struts:struts2-core:2.5.22') { + implementation ('org.apache.struts:struts2-core:2.5.26') { exclude group: 'org.apache.logging.log4j', module: 'log4j-api' } - implementation ('org.hibernate:hibernate-validator:4.3.2.Final') + implementation ('org.hibernate:hibernate-validator:5.3.6.Final') implementation ('com.fasterxml.jackson.core:jackson-databind:2.12.0') implementation ('org.apache.logging.log4j:log4j-core:2.8.2') implementation ('org.apache.logging.log4j:log4j-api:2.8.2') implementation ('org.apache.logging.log4j:log4j-slf4j-impl:2.8.2') - implementation ('com.amazonaws:aws-lambda-java-log4j2:1.1.0') + implementation ('com.amazonaws:aws-lambda-java-log4j2:1.2.0') testImplementation('junit:junit:4.12') - testImplementation('org.apache.struts:struts2-junit-plugin:2.5.22') { + testImplementation('org.apache.struts:struts2-junit-plugin:2.5.26') { exclude group: 'org.apache.struts', module: 'struts2-core' } } diff --git a/samples/struts2/pet-store/build.gradle b/samples/struts2/pet-store/build.gradle index 6239be661..96a492e30 100644 --- a/samples/struts2/pet-store/build.gradle +++ b/samples/struts2/pet-store/build.gradle @@ -8,17 +8,17 @@ repositories { dependencies { implementation ( 'com.amazonaws.serverless:aws-serverless-java-container-struts2:[1.0,)', - 'org.apache.struts:struts2-convention-plugin:2.5.22', - 'org.apache.struts:struts2-rest-plugin:2.5.22', - 'org.apache.struts:struts2-bean-validation-plugin:2.5.22', - 'org.apache.struts:struts2-junit-plugin:2.5.22', - 'com.jgeppert.struts2:struts2-aws-lambda-support-plugin:1.1.0', - 'org.hibernate:hibernate-validator:4.3.2.Final', + 'org.apache.struts:struts2-convention-plugin:2.5.26', + 'org.apache.struts:struts2-rest-plugin:2.5.26', + 'org.apache.struts:struts2-bean-validation-plugin:2.5.26', + 'org.apache.struts:struts2-junit-plugin:2.5.26', + 'com.jgeppert.struts2:struts2-aws-lambda-support-plugin:1.2.0', + 'org.hibernate:hibernate-validator:5.3.6.Final', 'com.fasterxml.jackson.core:jackson-databind:2.12.0', 'org.apache.logging.log4j:log4j-core:2.8.2', 'org.apache.logging.log4j:log4j-api:2.8.2', 'org.apache.logging.log4j:log4j-slf4j-impl:2.8.2', - 'com.amazonaws:aws-lambda-java-log4j2:1.1.0', + 'com.amazonaws:aws-lambda-java-log4j2:1.2.0', ) } diff --git a/samples/struts2/pet-store/pom.xml b/samples/struts2/pet-store/pom.xml index 031714dc6..59096afa2 100644 --- a/samples/struts2/pet-store/pom.xml +++ b/samples/struts2/pet-store/pom.xml @@ -26,7 +26,7 @@ 1.8 1.8 - 2.5.22 + 2.5.26 2.12.0 4.13.1 2.13.3 @@ -42,7 +42,7 @@ com.amazonaws aws-lambda-java-core - 1.2.0 + 1.2.1 @@ -74,7 +74,7 @@ com.jgeppert.struts2 struts2-aws-lambda-support-plugin - 1.1.0 + 1.3.0 @@ -121,7 +121,7 @@ com.amazonaws aws-lambda-java-log4j2 - 1.1.0 + 1.2.0 From c0a30db1b16fbb8cecd8ff11f53f201875b056d7 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Thu, 22 Jul 2021 13:46:10 +0200 Subject: [PATCH 124/888] Update Log4J --- aws-serverless-java-container-struts2/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 6 +++--- .../src/main/resources/archetype-resources/pom.xml | 4 ++-- .../src/main/resources/archetype-resources/build.gradle | 6 +++--- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/spring/pet-store/build.gradle | 8 ++++---- samples/spring/pet-store/pom.xml | 4 ++-- samples/struts2/pet-store/build.gradle | 6 +++--- samples/struts2/pet-store/pom.xml | 2 +- 9 files changed, 20 insertions(+), 20 deletions(-) diff --git a/aws-serverless-java-container-struts2/pom.xml b/aws-serverless-java-container-struts2/pom.xml index 769a7929b..767beac03 100644 --- a/aws-serverless-java-container-struts2/pom.xml +++ b/aws-serverless-java-container-struts2/pom.xml @@ -69,7 +69,7 @@ org.apache.logging.log4j log4j-to-slf4j - 2.11.1 + 2.14.1 org.slf4j diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index ae04aa9c8..9d3821249 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -10,9 +10,9 @@ dependencies { 'org.springframework:spring-webmvc:5.2.16.RELEASE', 'org.springframework:spring-context:5.2.16.RELEASE', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[1.0,)', - 'org.apache.logging.log4j:log4j-core:2.8.2', - 'org.apache.logging.log4j:log4j-api:2.8.2', - 'org.apache.logging.log4j:log4j-slf4j-impl:2.8.2', + 'org.apache.logging.log4j:log4j-core:2.14.1', + 'org.apache.logging.log4j:log4j-api:2.14.1', + 'org.apache.logging.log4j:log4j-slf4j-impl:2.14.1', 'com.fasterxml.jackson.core:jackson-databind:2.12.0', 'com.amazonaws:aws-lambda-java-log4j2:1.1.0', ) diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index 822f509ad..d981ccadf 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -18,7 +18,7 @@ 1.8 5.2.16.RELEASE 4.12 - 2.8.2 + 2.14.1 @@ -74,7 +74,7 @@ com.amazonaws aws-lambda-java-log4j2 - 1.1.0 + 1.2.0 diff --git a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle index 4cd4c6c4e..74e1f4977 100644 --- a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle @@ -28,9 +28,9 @@ dependencies { } implementation ('org.hibernate:hibernate-validator:5.3.6.Final') implementation ('com.fasterxml.jackson.core:jackson-databind:2.12.0') - implementation ('org.apache.logging.log4j:log4j-core:2.8.2') - implementation ('org.apache.logging.log4j:log4j-api:2.8.2') - implementation ('org.apache.logging.log4j:log4j-slf4j-impl:2.8.2') + implementation ('org.apache.logging.log4j:log4j-core:2.14.1') + implementation ('org.apache.logging.log4j:log4j-api:2.14.1') + implementation ('org.apache.logging.log4j:log4j-slf4j-impl:2.14.1') implementation ('com.amazonaws:aws-lambda-java-log4j2:1.2.0') testImplementation('junit:junit:4.12') diff --git a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml index e8906de56..bdcbed596 100644 --- a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml @@ -18,7 +18,7 @@ 2.5.26 2.12.0 4.13.1 - 2.14.0 + 2.14.1 diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index 522556916..843631572 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -10,11 +10,11 @@ dependencies { 'org.springframework:spring-webmvc:5.2.9.RELEASE', 'org.springframework:spring-context:5.2.9.RELEASE', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[1.0,)', - 'org.apache.logging.log4j:log4j-core:2.8.2', - 'org.apache.logging.log4j:log4j-api:2.8.2', - 'org.apache.logging.log4j:log4j-slf4j-impl:2.8.2', + 'org.apache.logging.log4j:log4j-core:2.14.1', + 'org.apache.logging.log4j:log4j-api:2.14.1', + 'org.apache.logging.log4j:log4j-slf4j-impl:2.14.1', 'com.fasterxml.jackson.core:jackson-databind:2.12.0', - 'com.amazonaws:aws-lambda-java-log4j2:1.1.0', + 'com.amazonaws:aws-lambda-java-log4j2:1.2.0', ) } diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index b82b2a952..0f538486d 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -28,7 +28,7 @@ 1.8 5.2.16.RELEASE 4.13.1 - 2.13.3 + 2.14.1 @@ -90,7 +90,7 @@ com.amazonaws aws-lambda-java-log4j2 - 1.1.0 + 1.2.0 diff --git a/samples/struts2/pet-store/build.gradle b/samples/struts2/pet-store/build.gradle index 96a492e30..6c0c42a74 100644 --- a/samples/struts2/pet-store/build.gradle +++ b/samples/struts2/pet-store/build.gradle @@ -15,9 +15,9 @@ dependencies { 'com.jgeppert.struts2:struts2-aws-lambda-support-plugin:1.2.0', 'org.hibernate:hibernate-validator:5.3.6.Final', 'com.fasterxml.jackson.core:jackson-databind:2.12.0', - 'org.apache.logging.log4j:log4j-core:2.8.2', - 'org.apache.logging.log4j:log4j-api:2.8.2', - 'org.apache.logging.log4j:log4j-slf4j-impl:2.8.2', + 'org.apache.logging.log4j:log4j-core:2.14.1', + 'org.apache.logging.log4j:log4j-api:2.14.1', + 'org.apache.logging.log4j:log4j-slf4j-impl:2.14.1', 'com.amazonaws:aws-lambda-java-log4j2:1.2.0', ) } diff --git a/samples/struts2/pet-store/pom.xml b/samples/struts2/pet-store/pom.xml index 59096afa2..f31b39c49 100644 --- a/samples/struts2/pet-store/pom.xml +++ b/samples/struts2/pet-store/pom.xml @@ -29,7 +29,7 @@ 2.5.26 2.12.0 4.13.1 - 2.13.3 + 2.14.1 From b0ac2efc463a885a85bf92d7c3647e78ded03cfa Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Thu, 22 Jul 2021 14:03:19 +0200 Subject: [PATCH 125/888] remove log4j-to-slf4j (log4j-slf4j-impl is used) --- aws-serverless-java-container-struts2/pom.xml | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/aws-serverless-java-container-struts2/pom.xml b/aws-serverless-java-container-struts2/pom.xml index 767beac03..e7ae1c106 100644 --- a/aws-serverless-java-container-struts2/pom.xml +++ b/aws-serverless-java-container-struts2/pom.xml @@ -66,18 +66,6 @@ ${jackson.version} - - org.apache.logging.log4j - log4j-to-slf4j - 2.14.1 - - - org.slf4j - slf4j-api - - - - javax.el javax.el-api From a70de223f24aa6a1a46034856bb0aec7ade0439b Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Thu, 22 Jul 2021 14:28:58 +0200 Subject: [PATCH 126/888] remove log4j-to-slf4j (log4j-slf4j-impl is used) --- .../src/main/resources/archetype-resources/build.gradle | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle index 74e1f4977..43a1f3e6f 100644 --- a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle @@ -5,11 +5,18 @@ repositories { mavenCentral() } +configurations { + implementation { + exclude group: 'org.apache.logging.log4j', module: 'log4j-to-slf4j' + } +} + dependencies { implementation ('com.amazonaws.serverless:aws-serverless-java-container-struts2:[1.0,)') { exclude group: 'org.apache.struts', module: 'struts2-core' exclude group: 'org.apache.logging.log4j', module: 'log4j-api' + exclude group: 'org.apache.logging.log4j', module: 'log4j-to-slf4j' } implementation ('org.apache.struts:struts2-convention-plugin:2.5.26') { exclude group: 'org.apache.struts', module: 'struts2-core' From ce7136c37f4c4c43b20d14a3d840c31505f5b1d6 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Thu, 7 Jan 2021 09:13:30 +0100 Subject: [PATCH 127/888] Improve extensibility, allow other servlets besides DispatcherServlet --- .../spring/SpringLambdaContainerHandler.java | 16 +++- .../spring/SpringProxyHandlerBuilder.java | 23 ++--- .../spring/extensibility/CustomServlet.java | 21 +++++ .../extensibility/CustomServletTest.java | 27 ++++++ .../CustomSpringLambdaContainerHandler.java | 92 +++++++++++++++++++ .../CustomSpringProxyHandlerBuilder.java | 15 +++ .../extensibility/StreamLambdaHandler.java | 32 +++++++ 7 files changed, 208 insertions(+), 18 deletions(-) create mode 100644 aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/extensibility/CustomServlet.java create mode 100644 aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/extensibility/CustomServletTest.java create mode 100644 aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/extensibility/CustomSpringLambdaContainerHandler.java create mode 100644 aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/extensibility/CustomSpringProxyHandlerBuilder.java create mode 100644 aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/extensibility/StreamLambdaHandler.java diff --git a/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringLambdaContainerHandler.java b/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringLambdaContainerHandler.java index 862df3bdf..22f7c17cd 100644 --- a/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringLambdaContainerHandler.java +++ b/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringLambdaContainerHandler.java @@ -37,7 +37,7 @@ * @param The expected return type */ public class SpringLambdaContainerHandler extends AwsLambdaServletContainerHandler { - private ConfigurableWebApplicationContext appContext; + protected final ConfigurableWebApplicationContext appContext; private String[] profiles; // State vars @@ -172,12 +172,20 @@ public void initialize() appContext.getEnvironment().setActiveProfiles(profiles); } appContext.setServletContext(getServletContext()); + registerServlets(); + // call initialize on AwsLambdaServletContainerHandler to initialize servlets that are set to load on startup + super.initialize(); + Timer.stop("SPRING_COLD_START"); + } + + /** + * Overriding this method allows to customize the standard Spring DispatcherServlet + * or to register additional servlets + */ + protected void registerServlets() { DispatcherServlet dispatcher = new DispatcherServlet(appContext); ServletRegistration.Dynamic reg = getServletContext().addServlet("dispatcherServlet", dispatcher); reg.addMapping("/"); reg.setLoadOnStartup(1); - // call initialize on AwsLambdaServletContainerHandler to initialize servlets that are set to load on startup - super.initialize(); - Timer.stop("SPRING_COLD_START"); } } diff --git a/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringProxyHandlerBuilder.java b/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringProxyHandlerBuilder.java index 689b6de28..b1f35c809 100644 --- a/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringProxyHandlerBuilder.java +++ b/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringProxyHandlerBuilder.java @@ -13,17 +13,14 @@ package com.amazonaws.serverless.proxy.spring; import com.amazonaws.serverless.exceptions.ContainerInitializationException; -import com.amazonaws.serverless.proxy.internal.servlet.AwsProxyHttpServletRequest; import com.amazonaws.serverless.proxy.internal.servlet.ServletLambdaContainerHandlerBuilder; -import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.serverless.proxy.model.AwsProxyResponse; -import org.springframework.web.WebApplicationInitializer; import org.springframework.web.context.ConfigurableWebApplicationContext; import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; import javax.servlet.http.HttpServletRequest; -public final class SpringProxyHandlerBuilder extends ServletLambdaContainerHandlerBuilder< +public class SpringProxyHandlerBuilder extends ServletLambdaContainerHandlerBuilder< RequestType, AwsProxyResponse, HttpServletRequest, @@ -69,22 +66,20 @@ public SpringLambdaContainerHandler build() throw } } - SpringLambdaContainerHandler handler = new SpringLambdaContainerHandler( - requestTypeClass, - responseTypeClass, - requestReader, - responseWriter, - securityContextWriter, - exceptionHandler, - ctx, - initializationWrapper - ); + SpringLambdaContainerHandler handler = createHandler(ctx); if (profiles != null) { handler.activateSpringProfiles(profiles); } return handler; } + protected SpringLambdaContainerHandler createHandler(ConfigurableWebApplicationContext ctx) { + return new SpringLambdaContainerHandler<>( + requestTypeClass, responseTypeClass, requestReader, responseWriter, + securityContextWriter, exceptionHandler, ctx, initializationWrapper + ); + } + @Override public SpringLambdaContainerHandler buildAndInitialize() throws ContainerInitializationException { SpringLambdaContainerHandler handler = build(); diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/extensibility/CustomServlet.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/extensibility/CustomServlet.java new file mode 100644 index 000000000..2b8604d3a --- /dev/null +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/extensibility/CustomServlet.java @@ -0,0 +1,21 @@ +package com.amazonaws.serverless.proxy.spring.extensibility; + +import org.springframework.context.ApplicationContext; + +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +public class CustomServlet extends HttpServlet { + private ApplicationContext appCtx; + + @Override + protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { + resp.getWriter().print("Unittest " + (appCtx!=null ? appCtx.getDisplayName() : "")); + } + + public void setAppCtx(ApplicationContext appCtx) { + this.appCtx = appCtx; + } +} diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/extensibility/CustomServletTest.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/extensibility/CustomServletTest.java new file mode 100644 index 000000000..9cac0aa1f --- /dev/null +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/extensibility/CustomServletTest.java @@ -0,0 +1,27 @@ +package com.amazonaws.serverless.proxy.spring.extensibility; + +import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; +import com.amazonaws.serverless.proxy.internal.testutils.MockLambdaContext; +import org.junit.Test; + +import javax.ws.rs.HttpMethod; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; + +import static org.junit.Assert.assertTrue; + +public class CustomServletTest { + + @Test + public void customServlet() throws IOException { + StreamLambdaHandler lambdaHandler = new StreamLambdaHandler(); + InputStream requestStream = new AwsProxyRequestBuilder("/test", HttpMethod.GET) + .buildStream(); + ByteArrayOutputStream responseStream = new ByteArrayOutputStream(); + lambdaHandler.handleRequest(requestStream, responseStream, new MockLambdaContext()); + assertTrue("response should contain value set in CustomServlet", + responseStream.toString().contains("Unittest")); + } + +} diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/extensibility/CustomSpringLambdaContainerHandler.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/extensibility/CustomSpringLambdaContainerHandler.java new file mode 100644 index 000000000..3ed872330 --- /dev/null +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/extensibility/CustomSpringLambdaContainerHandler.java @@ -0,0 +1,92 @@ +package com.amazonaws.serverless.proxy.spring.extensibility; + +import com.amazonaws.serverless.exceptions.ContainerInitializationException; +import com.amazonaws.serverless.proxy.*; +import com.amazonaws.serverless.proxy.internal.servlet.AwsHttpServletResponse; +import com.amazonaws.serverless.proxy.model.AwsProxyRequest; +import com.amazonaws.serverless.proxy.model.AwsProxyResponse; +import com.amazonaws.serverless.proxy.model.HttpApiV2ProxyRequest; +import com.amazonaws.serverless.proxy.spring.SpringLambdaContainerHandler; +import org.springframework.web.context.ConfigurableWebApplicationContext; + +import javax.servlet.ServletRegistration; +import javax.servlet.http.HttpServletRequest; + +public class CustomSpringLambdaContainerHandler extends SpringLambdaContainerHandler { + + /** + * Creates a default SpringLambdaContainerHandler initialized with the `AwsProxyRequest` and `AwsProxyResponse` objects + * @param config A set of classes annotated with the Spring @Configuration annotation + * @return An initialized instance of the `SpringLambdaContainerHandler` + * @throws ContainerInitializationException When the Spring framework fails to start. + */ + public static SpringLambdaContainerHandler getAwsProxyHandler(Class... config) throws ContainerInitializationException { + return new CustomSpringProxyHandlerBuilder() + .defaultProxy() + .initializationWrapper(new InitializationWrapper()) + .configurationClasses(config) + .buildAndInitialize(); + } + + /** + * Creates a default SpringLambdaContainerHandler initialized with the `AwsProxyRequest` and `AwsProxyResponse` objects and sets the given profiles as active + * @param applicationContext A custom ConfigurableWebApplicationContext to be used + * @param profiles The spring profiles to activate + * @return An initialized instance of the `SpringLambdaContainerHandler` + * @throws ContainerInitializationException When the Spring framework fails to start. + */ + public static SpringLambdaContainerHandler getAwsProxyHandler(ConfigurableWebApplicationContext applicationContext, String... profiles) + throws ContainerInitializationException { + return new CustomSpringProxyHandlerBuilder() + .defaultProxy() + .initializationWrapper(new InitializationWrapper()) + .springApplicationContext(applicationContext) + .profiles(profiles) + .buildAndInitialize(); + } + + /** + * Creates a default SpringLambdaContainerHandler initialized with the `HttpApiV2ProxyRequest` and `AwsProxyResponse` objects + * @param config A set of classes annotated with the Spring @Configuration annotation + * @return An initialized instance of the `SpringLambdaContainerHandler` + * @throws ContainerInitializationException When the Spring framework fails to start. + */ + public static SpringLambdaContainerHandler getHttpApiV2ProxyHandler(Class... config) throws ContainerInitializationException { + return new CustomSpringProxyHandlerBuilder() + .defaultHttpApiV2Proxy() + .initializationWrapper(new InitializationWrapper()) + .configurationClasses(config) + .buildAndInitialize(); + } + + /** + * Creates a new container handler with the given reader and writer objects + * + * @param requestTypeClass The class for the incoming Lambda event + * @param requestReader An implementation of `RequestReader` + * @param responseWriter An implementation of `ResponseWriter` + * @param securityContextWriter An implementation of `SecurityContextWriter` + * @param exceptionHandler An implementation of `ExceptionHandler` + */ + public CustomSpringLambdaContainerHandler(Class requestTypeClass, + Class responseTypeClass, + RequestReader requestReader, + ResponseWriter responseWriter, + SecurityContextWriter securityContextWriter, + ExceptionHandler exceptionHandler, + ConfigurableWebApplicationContext applicationContext, + InitializationWrapper init) { + super(requestTypeClass, responseTypeClass, requestReader, responseWriter, securityContextWriter, + exceptionHandler, applicationContext, init); + } + + @Override + protected void registerServlets() { + CustomServlet customServlet = new CustomServlet(); + customServlet.setAppCtx(appContext); + ServletRegistration.Dynamic reg = getServletContext().addServlet("customServlet", customServlet); + reg.addMapping("/"); + reg.setLoadOnStartup(1); + } + +} diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/extensibility/CustomSpringProxyHandlerBuilder.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/extensibility/CustomSpringProxyHandlerBuilder.java new file mode 100644 index 000000000..de74cf547 --- /dev/null +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/extensibility/CustomSpringProxyHandlerBuilder.java @@ -0,0 +1,15 @@ +package com.amazonaws.serverless.proxy.spring.extensibility; + +import com.amazonaws.serverless.proxy.model.AwsProxyResponse; +import com.amazonaws.serverless.proxy.spring.SpringLambdaContainerHandler; +import com.amazonaws.serverless.proxy.spring.SpringProxyHandlerBuilder; +import org.springframework.web.context.ConfigurableWebApplicationContext; + +public class CustomSpringProxyHandlerBuilder extends SpringProxyHandlerBuilder { + + @Override + protected SpringLambdaContainerHandler createHandler(ConfigurableWebApplicationContext ctx) { + return new CustomSpringLambdaContainerHandler<>(requestTypeClass, responseTypeClass, requestReader, responseWriter, + securityContextWriter, exceptionHandler, ctx, initializationWrapper); + } +} diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/extensibility/StreamLambdaHandler.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/extensibility/StreamLambdaHandler.java new file mode 100644 index 000000000..afc74869d --- /dev/null +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/extensibility/StreamLambdaHandler.java @@ -0,0 +1,32 @@ +package com.amazonaws.serverless.proxy.spring.extensibility; + + +import com.amazonaws.serverless.exceptions.ContainerInitializationException; +import com.amazonaws.serverless.proxy.model.AwsProxyRequest; +import com.amazonaws.serverless.proxy.model.AwsProxyResponse; +import com.amazonaws.serverless.proxy.spring.SpringLambdaContainerHandler; +import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.RequestStreamHandler; +import org.springframework.web.context.support.GenericWebApplicationContext; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + + +public class StreamLambdaHandler implements RequestStreamHandler { + private static final SpringLambdaContainerHandler handler; + static { + try { + handler = CustomSpringLambdaContainerHandler.getAwsProxyHandler(new GenericWebApplicationContext()); + } catch (ContainerInitializationException e) { + throw new RuntimeException("Could not initialize Spring framework", e); + } + } + + @Override + public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) + throws IOException { + handler.proxyStream(inputStream, outputStream, context); + } +} \ No newline at end of file From cf8abfe2580b83a5ae13016879661a60786d52fa Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Thu, 22 Jul 2021 16:57:04 +0200 Subject: [PATCH 128/888] Revert "Fixing the cookies field in the v2 request object." --- .../servlet/AwsHttpApiV2ProxyHttpServletRequest.java | 7 ------- .../servlet/AwsHttpApiV2HttpServletRequestReaderTest.java | 6 ------ 2 files changed, 13 deletions(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2ProxyHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2ProxyHttpServletRequest.java index f1ed21757..dcc481600 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2ProxyHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2ProxyHttpServletRequest.java @@ -75,13 +75,6 @@ public String getAuthType() { @Override public Cookie[] getCookies() { - if (request.getCookies() != null && !request.getCookies().isEmpty()) { - return request.getCookies().stream() - .map(cookie -> cookie.split("=", 2)) - .map(parts -> new Cookie(SecurityUtils.crlf(parts[0]), SecurityUtils.crlf(parts[1]))) - .toArray(Cookie[]::new); - } - if (headers == null || !headers.containsKey(HttpHeaders.COOKIE)) { return new Cookie[0]; } diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2HttpServletRequestReaderTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2HttpServletRequestReaderTest.java index 4e19998d4..004d4d489 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2HttpServletRequestReaderTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2HttpServletRequestReaderTest.java @@ -7,7 +7,6 @@ import com.amazonaws.serverless.proxy.model.HttpApiV2ProxyRequestContext; import org.junit.Test; -import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import static org.junit.Assert.*; @@ -26,7 +25,6 @@ public void baseRequest_read_populatesSuccessfully() { .referer("localhost") .queryString("param1", "value1") .header("custom", "value") - .cookie("_cookie", "baked") .apiId("test").toHttpApiV2Request(); AwsHttpApiV2HttpServletRequestReader reader = new AwsHttpApiV2HttpServletRequestReader(); try { @@ -34,10 +32,6 @@ public void baseRequest_read_populatesSuccessfully() { assertEquals("/hello", servletRequest.getPathInfo()); assertEquals("value1", servletRequest.getParameter("param1")); assertEquals("value", servletRequest.getHeader("CUSTOM")); - Cookie[] cookies = servletRequest.getCookies(); - assertEquals(1, cookies.length); - assertEquals("_cookie", cookies[0].getName()); - assertEquals("baked", cookies[0].getValue()); assertNotNull(servletRequest.getAttribute(AwsHttpApiV2HttpServletRequestReader.HTTP_API_CONTEXT_PROPERTY)); assertEquals("test", From ad4a7a32b6494ce8af2a457341d613bdf957d0fc Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 23 Jul 2021 09:39:16 +0200 Subject: [PATCH 129/888] remove unused BasicHeaderValueParser --- .../proxy/internal/servlet/AwsHttpServletRequest.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java index f02cefd1c..6996b9b14 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java @@ -27,7 +27,6 @@ import org.apache.commons.io.FilenameUtils; import org.apache.commons.io.IOUtils; import org.apache.commons.io.input.NullInputStream; -import org.apache.http.message.BasicHeaderValueParser; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -83,7 +82,6 @@ public abstract class AwsHttpServletRequest implements HttpServletRequest { private ServletContext servletContext; private AwsHttpSession session; private String queryString; - private BasicHeaderValueParser headerParser; private Map multipartFormParameters; private Map> urlEncodedFormParameters; @@ -107,7 +105,6 @@ public abstract class AwsHttpServletRequest implements HttpServletRequest { AwsHttpServletRequest(Context lambdaContext) { this.lambdaContext = lambdaContext; attributes = new HashMap<>(); - headerParser = new BasicHeaderValueParser(); setAttribute(DISPATCHER_TYPE_ATTRIBUTE, DispatcherType.REQUEST); } From ddc9b61ecc886f96d04226c3ab1773c66e2f2913 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 23 Jul 2021 09:40:11 +0200 Subject: [PATCH 130/888] set httpcore dependency to optional (#394) --- aws-serverless-java-container-core/pom.xml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 23029ab4a..297af2409 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -74,7 +74,7 @@ org.apache.httpcomponents httpmime - 4.5.6 + 4.5.13 compile @@ -88,8 +88,10 @@ org.apache.httpcomponents httpcore - 4.4.10 + 4.4.14 compile + true org.springframework.security From ed157dbfa0327d6781a4cc4ce2697ec8006b6ab3 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 23 Jul 2021 10:14:15 +0200 Subject: [PATCH 131/888] Drop Spring Boot 1.x support (#419) --- aws-serverless-java-container-spring/pom.xml | 33 --- .../SpringBootLambdaContainerHandler.java | 208 ------------------ .../spring/SpringBootProxyHandlerBuilder.java | 77 ------- ...SpringBootServletConfigurationSupport.java | 24 -- ...erverlessServletEmbeddedServerFactory.java | 67 ------ .../serverless/proxy/spring/SlowAppTest.java | 26 --- .../proxy/spring/SpringBootAppTest.java | 201 ----------------- .../proxy/spring/SpringBootSecurityTest.java | 74 ------- ...rlessServletEmbeddedServerFactoryTest.java | 118 ---------- .../spring/sbsecurityapp/LambdaHandler.java | 33 --- .../spring/sbsecurityapp/TestApplication.java | 13 -- .../spring/sbsecurityapp/TestController.java | 47 ---- .../sbsecurityapp/TestSecurityConfig.java | 44 ---- .../spring/springbootapp/LambdaHandler.java | 58 ----- .../spring/springbootapp/TestApplication.java | 14 -- .../spring/springbootapp/TestController.java | 84 ------- .../springbootslowapp/MessageController.java | 15 -- .../springbootslowapp/SBLambdaHandler.java | 40 ---- .../springbootslowapp/TestApplication.java | 26 --- aws-serverless-springboot-archetype/pom.xml | 80 ------- .../META-INF/maven/archetype-metadata.xml | 39 ---- .../resources/archetype-resources/README.md | 99 --------- .../archetype-resources/build.gradle | 29 --- .../resources/archetype-resources/pom.xml | 141 ------------ .../archetype-resources/src/assembly/bin.xml | 27 --- .../src/main/java/Application.java | 72 ------ .../src/main/java/StreamLambdaHandler.java | 33 --- .../main/java/controller/PingController.java | 20 -- .../src/main/resources/application.properties | 3 - .../test/java/StreamLambdaHandlerTest.java | 90 -------- .../archetype-resources/template.yml | 52 ----- .../projects/base/archetype.properties | 3 - .../src/test/resources/projects/base/goal.txt | 1 - pom.xml | 1 - 34 files changed, 1892 deletions(-) delete mode 100644 aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java delete mode 100644 aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootProxyHandlerBuilder.java delete mode 100644 aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootServletConfigurationSupport.java delete mode 100644 aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactory.java delete mode 100644 aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringBootAppTest.java delete mode 100644 aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringBootSecurityTest.java delete mode 100644 aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactoryTest.java delete mode 100644 aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/sbsecurityapp/LambdaHandler.java delete mode 100644 aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/sbsecurityapp/TestApplication.java delete mode 100644 aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/sbsecurityapp/TestController.java delete mode 100644 aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/sbsecurityapp/TestSecurityConfig.java delete mode 100644 aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springbootapp/LambdaHandler.java delete mode 100644 aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springbootapp/TestApplication.java delete mode 100644 aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springbootapp/TestController.java delete mode 100644 aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springbootslowapp/MessageController.java delete mode 100644 aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springbootslowapp/SBLambdaHandler.java delete mode 100644 aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springbootslowapp/TestApplication.java delete mode 100644 aws-serverless-springboot-archetype/pom.xml delete mode 100644 aws-serverless-springboot-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml delete mode 100644 aws-serverless-springboot-archetype/src/main/resources/archetype-resources/README.md delete mode 100644 aws-serverless-springboot-archetype/src/main/resources/archetype-resources/build.gradle delete mode 100644 aws-serverless-springboot-archetype/src/main/resources/archetype-resources/pom.xml delete mode 100644 aws-serverless-springboot-archetype/src/main/resources/archetype-resources/src/assembly/bin.xml delete mode 100644 aws-serverless-springboot-archetype/src/main/resources/archetype-resources/src/main/java/Application.java delete mode 100644 aws-serverless-springboot-archetype/src/main/resources/archetype-resources/src/main/java/StreamLambdaHandler.java delete mode 100644 aws-serverless-springboot-archetype/src/main/resources/archetype-resources/src/main/java/controller/PingController.java delete mode 100644 aws-serverless-springboot-archetype/src/main/resources/archetype-resources/src/main/resources/application.properties delete mode 100644 aws-serverless-springboot-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java delete mode 100644 aws-serverless-springboot-archetype/src/main/resources/archetype-resources/template.yml delete mode 100644 aws-serverless-springboot-archetype/src/test/resources/projects/base/archetype.properties delete mode 100644 aws-serverless-springboot-archetype/src/test/resources/projects/base/goal.txt diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 2294f8a52..b5c553fab 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -17,7 +17,6 @@ 5.2.16.RELEASE - 1.5.22.RELEASE 5.2.11.RELEASE @@ -89,38 +88,6 @@ 2.2.4 test - - org.springframework.boot - spring-boot - ${springboot.version} - true - - - org.springframework - spring-context - - - org.springframework - spring-core - - - - - org.springframework.boot - spring-boot-autoconfigure - ${springboot.version} - test - - - org.springframework - spring-context - - - org.springframework - spring-core - - - org.springframework.security spring-security-config diff --git a/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java b/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java deleted file mode 100644 index 98841ed44..000000000 --- a/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java +++ /dev/null @@ -1,208 +0,0 @@ -/* - * Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance - * with the License. A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.proxy.spring; - -import com.amazonaws.serverless.exceptions.ContainerInitializationException; -import com.amazonaws.serverless.proxy.*; -import com.amazonaws.serverless.proxy.internal.testutils.Timer; -import com.amazonaws.serverless.proxy.model.AwsProxyRequest; -import com.amazonaws.serverless.proxy.model.AwsProxyResponse; -import com.amazonaws.serverless.proxy.internal.servlet.*; -import com.amazonaws.serverless.proxy.model.HttpApiV2ProxyRequest; -import com.amazonaws.serverless.proxy.spring.embedded.ServerlessServletEmbeddedServerFactory; -import com.amazonaws.services.lambda.runtime.Context; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.boot.SpringApplication; -import org.springframework.context.ConfigurableApplicationContext; -import org.springframework.core.env.ConfigurableEnvironment; -import org.springframework.core.env.StandardEnvironment; -import org.springframework.web.WebApplicationInitializer; -import org.springframework.web.context.ConfigurableWebApplicationContext; - -import javax.servlet.*; -import javax.servlet.http.HttpServletRequest; - -import java.util.concurrent.CountDownLatch; - -/** - * SpringBoot 1.x implementation of the `LambdaContainerHandler` abstract class. This class uses the `LambdaSpringApplicationInitializer` - * object behind the scenes to proxy requests. The default implementation leverages the `AwsProxyHttpServletRequest` and - * `AwsHttpServletResponse` implemented in the `aws-serverless-java-container-core` package. - * - * Important: Make sure to add LambdaFlushResponseListener in your SpringBootServletInitializer subclass configure(). - * - * @deprecated Spring officially deprecated - * SpringBoot 1.5.x as of August 2019. We recommend upgrading to SpringBoot 2.1 or above. SpringBoot 2 is supported - * in the - * aws-serverless-java-container-springboot2 module. - * - * @param The incoming event type - * @param The expected return type - */ -@Deprecated -public class SpringBootLambdaContainerHandler extends AwsLambdaServletContainerHandler { - private static final String DISPATCHER_SERVLET_REGISTRATION_NAME = "dispatcherServlet"; - - private final Class springBootInitializer; - private static final Logger log = LoggerFactory.getLogger(SpringBootLambdaContainerHandler.class); - private String[] springProfiles = null; - - private static SpringBootLambdaContainerHandler instance; - - // State vars - private boolean initialized; - - /** - * We need to rely on the static instance of this for SpringBoot because we need it to access the ServletContext. - * Normally, SpringBoot would initialize its own embedded container through the SpringApplication.run() - * method. However, in our case we need to rely on the pre-initialized handler and need to fetch information from it - * for our mock {@link com.amazonaws.serverless.proxy.spring.embedded.ServerlessServletEmbeddedServerFactory}. - * - * @return The initialized instance - */ - public static SpringBootLambdaContainerHandler getInstance() { - return instance; - } - - /** - * Creates a default SpringLambdaContainerHandler initialized with the `AwsProxyRequest` and `AwsProxyResponse` objects and the given Spring profiles - * @param springBootInitializer {@code SpringBootServletInitializer} class - * @param profiles A list of Spring profiles to activate - * @return An initialized instance of the `SpringLambdaContainerHandler` - * @throws ContainerInitializationException If an error occurs while initializing the Spring framework - */ - public static SpringBootLambdaContainerHandler getAwsProxyHandler(Class springBootInitializer, String... profiles) - throws ContainerInitializationException { - return new SpringBootProxyHandlerBuilder() - .defaultProxy() - .initializationWrapper(new InitializationWrapper()) - .springBootApplication(springBootInitializer) - .profiles(profiles) - .buildAndInitialize(); - } - - /** - * Creates a default SpringLambdaContainerHandler initialized with the `HttpApiV2ProxyRequest` and `AwsProxyResponse` objects and the given Spring profiles - * @param springBootInitializer {@code SpringBootServletInitializer} class - * @param profiles A list of Spring profiles to activate - * @return An initialized instance of the `SpringLambdaContainerHandler` - * @throws ContainerInitializationException If an error occurs while initializing the Spring framework - */ - public static SpringBootLambdaContainerHandler getHttpApiV2ProxyHandler(Class springBootInitializer, String... profiles) - throws ContainerInitializationException { - return new SpringBootProxyHandlerBuilder() - .defaultHttpApiV2Proxy() - .initializationWrapper(new InitializationWrapper()) - .springBootApplication(springBootInitializer) - .profiles(profiles) - .buildAndInitialize(); - } - - /** - * Creates a new container handler with the given reader and writer objects - * - * @param requestTypeClass The class for the incoming Lambda event - * @param requestReader An implementation of `RequestReader` - * @param responseWriter An implementation of `ResponseWriter` - * @param securityContextWriter An implementation of `SecurityContextWriter` - * @param exceptionHandler An implementation of `ExceptionHandler` - * @param springBootInitializer {@code SpringBootServletInitializer} class - * @throws ContainerInitializationException If an error occurs while initializing the Spring framework - */ - public SpringBootLambdaContainerHandler(Class requestTypeClass, - Class responseTypeClass, - RequestReader requestReader, - ResponseWriter responseWriter, - SecurityContextWriter securityContextWriter, - ExceptionHandler exceptionHandler, - Class springBootInitializer, - InitializationWrapper init) - throws ContainerInitializationException { - super(requestTypeClass, responseTypeClass, requestReader, responseWriter, securityContextWriter, exceptionHandler); - Timer.start("SPRINGBOOT_CONTAINER_HANDLER_CONSTRUCTOR"); - initialized = false; - this.springBootInitializer = springBootInitializer; - setInitializationWrapper(init); - SpringBootLambdaContainerHandler.setInstance(this); - - Timer.stop("SPRINGBOOT_CONTAINER_HANDLER_CONSTRUCTOR"); - } - - // this is not pretty. However, because SpringBoot wants to control all of the initialization - // we need to access this handler as a singleton from the EmbeddedContainer to set the servlet - // context and from the ServletConfigurationSupport implementation - private static void setInstance(SpringBootLambdaContainerHandler h) { - SpringBootLambdaContainerHandler.instance = h; - } - - public void activateSpringProfiles(String... profiles) { - springProfiles = profiles; - // force a re-initialization - initialized = false; - } - - @Override - protected AwsHttpServletResponse getContainerResponse(HttpServletRequest request, CountDownLatch latch) { - return new AwsHttpServletResponse(request, latch); - } - - @Override - protected void handleRequest(HttpServletRequest containerRequest, AwsHttpServletResponse containerResponse, Context lambdaContext) throws Exception { - // this method of the AwsLambdaServletContainerHandler sets the servlet context - Timer.start("SPRINGBOOT_HANDLE_REQUEST"); - - // wire up the application context on the first invocation - if (!initialized) { - initialize(); - } - - if (AwsHttpServletRequest.class.isAssignableFrom(containerRequest.getClass())) { - ((AwsHttpServletRequest)containerRequest).setServletContext(getServletContext()); - ((AwsHttpServletRequest)containerRequest).setResponse(containerResponse); - } - - // process filters & invoke servlet - Servlet reqServlet = ((AwsServletContext)getServletContext()).getServletForPath(containerRequest.getPathInfo()); - doFilter(containerRequest, containerResponse, reqServlet); - Timer.stop("SPRINGBOOT_HANDLE_REQUEST"); - } - - - @Override - public void initialize() - throws ContainerInitializationException { - Timer.start("SPRINGBOOT_COLD_START"); - - SpringApplication app = new SpringApplication( - springBootInitializer, - ServerlessServletEmbeddedServerFactory.class, - SpringBootServletConfigurationSupport.class - ); - if (springProfiles != null && springProfiles.length > 0) { - ConfigurableEnvironment springEnv = new StandardEnvironment(); - springEnv.setActiveProfiles(springProfiles); - app.setEnvironment(springEnv); - } - ConfigurableApplicationContext applicationContext = app.run(); - - ((ConfigurableWebApplicationContext)applicationContext).setServletContext(getServletContext()); - AwsServletRegistration reg = (AwsServletRegistration)getServletContext().getServletRegistration(DISPATCHER_SERVLET_REGISTRATION_NAME); - if (reg != null) { - reg.setLoadOnStartup(1); - } - super.initialize(); - initialized = true; - Timer.stop("SPRINGBOOT_COLD_START"); - } -} diff --git a/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootProxyHandlerBuilder.java b/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootProxyHandlerBuilder.java deleted file mode 100644 index 2f06e73e6..000000000 --- a/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootProxyHandlerBuilder.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance - * with the License. A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.proxy.spring; - -import com.amazonaws.serverless.exceptions.ContainerInitializationException; -import com.amazonaws.serverless.proxy.internal.servlet.AwsProxyHttpServletRequest; -import com.amazonaws.serverless.proxy.internal.servlet.ServletLambdaContainerHandlerBuilder; -import com.amazonaws.serverless.proxy.model.AwsProxyRequest; -import com.amazonaws.serverless.proxy.model.AwsProxyResponse; -import org.springframework.web.WebApplicationInitializer; - -import javax.servlet.http.HttpServletRequest; - -public final class SpringBootProxyHandlerBuilder extends ServletLambdaContainerHandlerBuilder< - RequestType, - AwsProxyResponse, - HttpServletRequest, - SpringBootLambdaContainerHandler, - SpringBootProxyHandlerBuilder> { - private Class springBootInitializer; - private String[] profiles; - - @Override - protected SpringBootProxyHandlerBuilder self() { - return this; - } - - - public SpringBootProxyHandlerBuilder springBootApplication(Class app) { - springBootInitializer = app; - return self(); - } - - public SpringBootProxyHandlerBuilder profiles(String... profiles) { - this.profiles = profiles; - return self(); - } - - @Override - public SpringBootLambdaContainerHandler build() throws ContainerInitializationException { - validate(); - if (springBootInitializer == null) { - throw new ContainerInitializationException("Missing spring boot application class in builder", null); - } - SpringBootLambdaContainerHandler handler = new SpringBootLambdaContainerHandler( - requestTypeClass, - responseTypeClass, - requestReader, - responseWriter, - securityContextWriter, - exceptionHandler, - springBootInitializer, - initializationWrapper - ); - if (profiles != null) { - handler.activateSpringProfiles(profiles); - } - return handler; - } - - @Override - public SpringBootLambdaContainerHandler buildAndInitialize() throws ContainerInitializationException { - SpringBootLambdaContainerHandler handler = build(); - initializationWrapper.start(handler); - return handler; - } -} diff --git a/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootServletConfigurationSupport.java b/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootServletConfigurationSupport.java deleted file mode 100644 index 9857c9620..000000000 --- a/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootServletConfigurationSupport.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance - * with the License. A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.proxy.spring; - -import org.springframework.boot.context.embedded.WebApplicationContextServletContextAwareProcessor; -import org.springframework.web.context.ConfigurableWebApplicationContext; - - -public class SpringBootServletConfigurationSupport extends WebApplicationContextServletContextAwareProcessor { - public SpringBootServletConfigurationSupport(ConfigurableWebApplicationContext webApplicationContext) { - super(webApplicationContext); - webApplicationContext.setServletContext(SpringBootLambdaContainerHandler.getInstance().getServletContext()); - } -} diff --git a/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactory.java b/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactory.java deleted file mode 100644 index bd567ed7d..000000000 --- a/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactory.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance - * with the License. A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.proxy.spring.embedded; - -import com.amazonaws.serverless.proxy.internal.servlet.AwsLambdaServletContainerHandler; -import com.amazonaws.serverless.proxy.spring.SpringBootLambdaContainerHandler; -import org.springframework.boot.context.embedded.AbstractEmbeddedServletContainerFactory; -import org.springframework.boot.context.embedded.EmbeddedServletContainer; -import org.springframework.boot.context.embedded.EmbeddedServletContainerException; -import org.springframework.boot.web.servlet.ServletContextInitializer; - -import javax.servlet.ServletException; - -/** - * Implementation of SpringBoot's embedded container factory and servlet container. This replaces SpringBoot's default - * embedded container and uses the {@link SpringBootLambdaContainerHandler} as a singleton to retrieve the current - * {@link javax.servlet.ServletContext} and pass it to the array of {@link javax.servlet.ServletContainerInitializer}. - */ -public class ServerlessServletEmbeddedServerFactory extends AbstractEmbeddedServletContainerFactory implements EmbeddedServletContainer { - private AwsLambdaServletContainerHandler handler; - private ServletContextInitializer[] initializers; - - public ServerlessServletEmbeddedServerFactory() { - super(); - handler = SpringBootLambdaContainerHandler.getInstance(); - } - - @Override - public EmbeddedServletContainer getEmbeddedServletContainer(ServletContextInitializer... servletContextInitializers) { - initializers = servletContextInitializers; - - return this; - } - - @Override - public void start() throws EmbeddedServletContainerException { - for (ServletContextInitializer i : initializers) { - try { - if (handler.getServletContext() == null) { - throw new EmbeddedServletContainerException("Attempting to initialize ServletEmbeddedWebServer without ServletContext in Handler", null); - } - i.onStartup(handler.getServletContext()); - } catch (ServletException e) { - throw new EmbeddedServletContainerException("Could not initialize Servlets", e); - } - } - } - - ServletContextInitializer[] getInitializers() { - return initializers; - } - - @Override - public void stop() throws EmbeddedServletContainerException { - - } -} diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SlowAppTest.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SlowAppTest.java index 29bc83ee8..0844b6246 100644 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SlowAppTest.java +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SlowAppTest.java @@ -5,13 +5,11 @@ import com.amazonaws.serverless.proxy.internal.testutils.MockLambdaContext; import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.serverless.proxy.model.AwsProxyResponse; -import com.amazonaws.serverless.proxy.spring.springbootslowapp.SBLambdaHandler; import com.amazonaws.serverless.proxy.spring.springslowapp.LambdaHandler; import com.amazonaws.serverless.proxy.spring.springslowapp.MessageController; import com.amazonaws.serverless.proxy.spring.springslowapp.SlowAppConfig; import org.junit.Assert; import org.junit.Test; -import org.springframework.core.SpringVersion; import java.time.Instant; import java.util.Objects; @@ -41,28 +39,4 @@ public void springSlowApp_continuesInBackgroundThread_returnsCorrect() { Assert.assertEquals(MessageController.HELLO_MESSAGE, resp.getBody()); } - @Test - public void springBootSlowApp_continuesInBackgroundThread_returnsCorrect() { - // We skip the tests if we are running against Spring 5.2.x - SpringBoot 1.5 is deprecated and no longer - // breaking changes in the latest Spring releases have not been supported in it. - // TODO: Update the check to verify any Spring version above 5.2 - assumeFalse(Objects.requireNonNull(SpringVersion.getVersion()).startsWith("5.2")); - - SBLambdaHandler slowApp = null; - try { - slowApp = new SBLambdaHandler(); - } catch (ContainerInitializationException e) { - e.printStackTrace(); - fail("Exception during initialization"); - } - System.out.println("Start time: " + slowApp.getConstructorTime()); - assertTrue(slowApp.getConstructorTime() < 10_000); - AwsProxyRequest req = new AwsProxyRequestBuilder("/hello", "GET").build(); - long startRequestTime = Instant.now().toEpochMilli(); - AwsProxyResponse resp = slowApp.handleRequest(req, new MockLambdaContext()); - long endRequestTime = Instant.now().toEpochMilli(); - assertTrue(endRequestTime - startRequestTime > SlowAppConfig.SlowDownInit.INIT_SLEEP_TIME_MS - 10_000); - assertEquals(200, resp.getStatusCode()); - Assert.assertEquals(MessageController.HELLO_MESSAGE, resp.getBody()); - } } diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringBootAppTest.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringBootAppTest.java deleted file mode 100644 index 2a345b6ff..000000000 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringBootAppTest.java +++ /dev/null @@ -1,201 +0,0 @@ -package com.amazonaws.serverless.proxy.spring; - - -import com.amazonaws.serverless.proxy.internal.LambdaContainerHandler; -import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; -import com.amazonaws.serverless.proxy.internal.testutils.MockLambdaContext; -import com.amazonaws.serverless.proxy.model.AwsProxyRequest; -import com.amazonaws.serverless.proxy.model.AwsProxyResponse; -import com.amazonaws.serverless.proxy.model.Headers; -import com.amazonaws.serverless.proxy.model.MultiValuedTreeMap; -import com.amazonaws.serverless.proxy.spring.echoapp.model.SingleValueModel; -import com.amazonaws.serverless.proxy.spring.springbootapp.LambdaHandler; -import com.amazonaws.serverless.proxy.spring.springbootapp.TestController; - -import com.fasterxml.jackson.databind.ObjectMapper; -import org.junit.BeforeClass; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; -import org.springframework.core.SpringVersion; - -import javax.ws.rs.core.HttpHeaders; -import java.io.IOException; -import java.util.Arrays; -import java.util.Collection; -import java.util.Objects; - -import static com.amazonaws.serverless.proxy.spring.springbootapp.TestController.CUSTOM_HEADER_NAME; -import static com.amazonaws.serverless.proxy.spring.springbootapp.TestController.CUSTOM_QS_NAME; -import static org.junit.Assert.*; -import static org.junit.Assume.assumeFalse; - - -@RunWith(Parameterized.class) -public class SpringBootAppTest { - private LambdaHandler handler; - private MockLambdaContext context = new MockLambdaContext(); - private ObjectMapper mapper = new ObjectMapper(); - - private String type; - - @Parameterized.Parameters - public static Collection data() { - return Arrays.asList(new Object[] { "API_GW", "ALB", "HTTP_API" }); - } - - @BeforeClass - public static void before() { - // We skip the tests if we are running against Spring 5.2.x - SpringBoot 1.5 is deprecated and no longer - // breaking changes in the latest Spring releases have not been supported in it. - // TODO: Update the check to verify any Spring version above 5.2 - assumeFalse(Objects.requireNonNull(SpringVersion.getVersion()).startsWith("5.2")); - } - - public SpringBootAppTest(String reqType) { - type = reqType; - handler = new LambdaHandler(type); - } - - @Test - public void testMethod_springSecurity_doesNotThrowException() { - AwsProxyRequestBuilder req = new AwsProxyRequestBuilder("/test", "GET"); - AwsProxyResponse resp = handler.handleRequest(req, context); - assertNotNull(resp); - assertEquals(200, resp.getStatusCode()); - validateSingleValueModel(resp, TestController.TEST_VALUE); - } - - @Test - public void testMethod_testRequestFromString_doesNotThrowNpe() throws IOException { - AwsProxyRequestBuilder req = new AwsProxyRequestBuilder().fromJsonString("{\n" + - " \"resource\": \"/missing-params\",\n" + - " \"path\": \"/missing-params\",\n" + - " \"httpMethod\": \"GET\",\n" + - " \"headers\": null,\n" + - " \"multiValueHeaders\": null,\n" + - " \"queryStringParameters\": null,\n" + - " \"multiValueQueryStringParameters\": null,\n" + - " \"pathParameters\": null,\n" + - " \"stageVariables\": null,\n" + - " \"requestContext\": {\n" + - " \"resourcePath\": \"/path/resource\",\n" + - " \"httpMethod\": \"POST\",\n" + - " \"path\": \"//path/resource\",\n" + - " \"accountId\": \"accountIdNumber\",\n" + - " \"protocol\": \"HTTP/1.1\",\n" + - " \"stage\": \"test-invoke-stage\",\n" + - " \"domainPrefix\": \"testPrefix\",\n" + - " \"identity\": {\n" + - " \"cognitoIdentityPoolId\": null,\n" + - " \"cognitoIdentityId\": null,\n" + - " \"apiKey\": \"test-invoke-api-key\",\n" + - " \"principalOrgId\": null,\n" + - " \"cognitoAuthenticationType\": null,\n" + - " \"userArn\": \"actual arn\",\n" + - " \"apiKeyId\": \"test-invoke-api-key-id\"\n" + - " }\n" + - " },\n" + - " \"body\": \"{ \\\"Key1\\\": \\\"Value1\\\", \\\"Key2\\\": \\\"Value2\\\", \\\"Key3\\\": \\\"Vaue3\\\" }\",\n" + - " \"isBase64Encoded\": \"false\"\n" + - "}"); - - AwsProxyResponse resp = handler.handleRequest(req, context); - assertNotNull(resp); - // Spring identifies the missing header - assertEquals(400, resp.getStatusCode()); - req.multiValueHeaders(new Headers()); - req.header(CUSTOM_HEADER_NAME, "val"); - resp = handler.handleRequest(req, context); - assertEquals(400, resp.getStatusCode()); - req.multiValueQueryString(new MultiValuedTreeMap<>()); - req.queryString(CUSTOM_QS_NAME, "val"); - resp = handler.handleRequest(req, context); - assertEquals(200, resp.getStatusCode()); - } - - @Test - public void defaultError_requestForward_springBootForwardsToDefaultErrorPage() { - AwsProxyRequestBuilder req = new AwsProxyRequestBuilder("/test2", "GET"); - AwsProxyResponse resp = handler.handleRequest(req, context); - assertNotNull(resp); - assertEquals(404, resp.getStatusCode()); - assertNotNull(resp.getMultiValueHeaders()); - } - - @Test - public void requestUri_dotInPathParam_expectRoutingToMethod() { - AwsProxyRequestBuilder req = new AwsProxyRequestBuilder("/test/testdomain.com", "GET"); - - AwsProxyResponse resp = handler.handleRequest(req, context); - assertNotNull(resp); - assertEquals(200, resp.getStatusCode()); - validateSingleValueModel(resp, "testdomain.com"); - } - - @Test - public void queryString_commaSeparatedList_expectUnmarshalAsList() { - AwsProxyRequestBuilder req = new AwsProxyRequestBuilder("/test/query-string", "GET") - .queryString("list", "v1,v2,v3"); - AwsProxyResponse resp = handler.handleRequest(req, context); - assertNotNull(resp); - assertEquals(200, resp.getStatusCode()); - validateSingleValueModel(resp, "3"); - } - - @Test - public void queryString_multipleParamsWithSameName_expectUnmarshalAsList() { - AwsProxyRequestBuilder req = new AwsProxyRequestBuilder("/test/query-string", "GET") - .queryString("list", "v1").queryString("list", "v2"); - AwsProxyResponse resp = handler.handleRequest(req, context); - assertNotNull(resp); - assertEquals(200, resp.getStatusCode()); - validateSingleValueModel(resp, "2"); - } - - @Test - public void staticContent_getHtmlFile_returnsHtmlContent() { - LambdaContainerHandler.getContainerConfig().addValidFilePath(System.getProperty("user.dir")); - AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/static.html", "GET") - .header(HttpHeaders.ACCEPT, "text/html") - .header(HttpHeaders.CONTENT_TYPE, "text/plain"); - AwsProxyResponse output = handler.handleRequest(request, context); - assertEquals(200, output.getStatusCode()); - assertTrue(output.getBody().contains("

Static

")); - } - - @Test - public void utf8_returnUtf8String_expectCorrectHeaderMediaAndCharset() { - LambdaContainerHandler.getContainerConfig().setDefaultContentCharset("UTF-8"); - AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/test/utf8", "GET"); - AwsProxyResponse output = handler.handleRequest(request, context); - validateSingleValueModel(output, TestController.UTF8_TEST_STRING); - assertTrue(output.getMultiValueHeaders().containsKey(HttpHeaders.CONTENT_TYPE)); - assertTrue(output.getMultiValueHeaders().getFirst(HttpHeaders.CONTENT_TYPE).contains(";")); - assertTrue(output.getMultiValueHeaders().getFirst(HttpHeaders.CONTENT_TYPE).contains("charset=UTF-8")); - } - - @Test - public void utf8_returnUtf8String_expectCorrectHeaderMediaAndCharsetNoDefault() { - - AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/test/utf8", "GET") - .header("Content-Type", "application/json; charset=UTF-8"); - AwsProxyResponse output = handler.handleRequest(request, context); - validateSingleValueModel(output, TestController.UTF8_TEST_STRING); - assertTrue(output.getMultiValueHeaders().containsKey(HttpHeaders.CONTENT_TYPE)); - assertTrue(output.getMultiValueHeaders().getFirst(HttpHeaders.CONTENT_TYPE).contains(";")); - assertTrue(output.getMultiValueHeaders().getFirst(HttpHeaders.CONTENT_TYPE).contains("charset=UTF-8")); - } - - - private void validateSingleValueModel(AwsProxyResponse output, String value) { - try { - SingleValueModel response = mapper.readValue(output.getBody(), SingleValueModel.class); - assertNotNull(response.getValue()); - assertEquals(value, response.getValue()); - } catch (IOException e) { - e.printStackTrace(); - fail("Exception while parsing response body: " + e.getMessage()); - } - } -} diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringBootSecurityTest.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringBootSecurityTest.java deleted file mode 100644 index 49ba0e003..000000000 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringBootSecurityTest.java +++ /dev/null @@ -1,74 +0,0 @@ -package com.amazonaws.serverless.proxy.spring; - - -import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; -import com.amazonaws.serverless.proxy.internal.testutils.MockLambdaContext; -import com.amazonaws.serverless.proxy.model.AwsProxyRequest; -import com.amazonaws.serverless.proxy.model.AwsProxyResponse; -import com.amazonaws.serverless.proxy.spring.echoapp.model.SingleValueModel; -import com.amazonaws.serverless.proxy.spring.sbsecurityapp.LambdaHandler; -import com.amazonaws.serverless.proxy.spring.sbsecurityapp.TestController; -import com.amazonaws.serverless.proxy.spring.sbsecurityapp.TestSecurityConfig; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; -import org.junit.BeforeClass; -import org.junit.Test; -import org.springframework.core.SpringVersion; - -import javax.ws.rs.core.HttpHeaders; -import java.io.IOException; -import java.util.Base64; -import java.util.Objects; - -import static org.junit.Assert.*; -import static org.junit.Assume.assumeFalse; - - -public class SpringBootSecurityTest { - private LambdaHandler handler = new LambdaHandler(); - private MockLambdaContext context = new MockLambdaContext(); - private ObjectMapper mapper = new ObjectMapper(); - - @BeforeClass - public static void before() { - // We skip the tests if we are running against Spring 5.2.x - SpringBoot 1.5 is deprecated and no longer - // breaking changes in the latest Spring releases have not been supported in it. - // TODO: Update the check to verify any Spring version above 5.2 - assumeFalse(Objects.requireNonNull(SpringVersion.getVersion()).startsWith("5.2")); - } - - @Test - public void correctUser_springSecurityBasicAuth_requestSucceeds() throws JsonProcessingException { - String authValue = Base64.getMimeEncoder().encodeToString((TestSecurityConfig.USERNAME + ":" + TestSecurityConfig.PASSWORD).getBytes()); - AwsProxyRequest req = new AwsProxyRequestBuilder("/user", "GET") - .header(HttpHeaders.AUTHORIZATION, "Basic " + authValue).build(); - AwsProxyResponse resp = handler.handleRequest(req, context); - assertNotNull(resp); - assertEquals(200, resp.getStatusCode()); - validateSingleValueModel(resp, TestSecurityConfig.USERNAME); - } - - @Test - public void wrongUser_springSecurityBasicAuth_requestRedirectsSuccessfully() throws JsonProcessingException { - String authValue = Base64.getMimeEncoder().encodeToString((TestSecurityConfig.NO_ADMIN_USERNAME + ":" + TestSecurityConfig.PASSWORD).getBytes()); - AwsProxyRequest req = new AwsProxyRequestBuilder("/user", "GET") - .header(HttpHeaders.AUTHORIZATION, "Basic " + authValue).build(); - AwsProxyResponse resp = handler.handleRequest(req, context); - assertNotNull(resp); - mapper.enable(SerializationFeature.INDENT_OUTPUT); - assertEquals(403, resp.getStatusCode()); - validateSingleValueModel(resp, TestController.ACCESS_DENIED); - } - - private void validateSingleValueModel(AwsProxyResponse output, String value) { - try { - SingleValueModel response = mapper.readValue(output.getBody(), SingleValueModel.class); - assertNotNull(response.getValue()); - assertEquals(value, response.getValue()); - } catch (IOException e) { - e.printStackTrace(); - fail("Exception while parsing response body: " + e.getMessage()); - } - } -} diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactoryTest.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactoryTest.java deleted file mode 100644 index 2ae76a6ca..000000000 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactoryTest.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.amazonaws.serverless.proxy.spring.embedded; - -import com.amazonaws.serverless.exceptions.ContainerInitializationException; -import com.amazonaws.serverless.proxy.spring.SpringBootLambdaContainerHandler; -import com.amazonaws.serverless.proxy.spring.springbootapp.TestApplication; -import org.junit.BeforeClass; -import org.junit.Test; -import org.springframework.boot.context.embedded.EmbeddedServletContainer; -import org.springframework.boot.context.embedded.EmbeddedServletContainerException; -import org.springframework.boot.web.servlet.ServletContextInitializer; -import org.springframework.core.SpringVersion; - -import javax.servlet.*; -import java.io.IOException; -import java.util.Objects; - -import static org.junit.Assert.*; -import static org.junit.Assume.assumeFalse; - -public class ServerlessServletEmbeddedServerFactoryTest { - - @BeforeClass - public static void before() { - // We skip the tests if we are running against Spring 5.2.x - SpringBoot 1.5 is deprecated and no longer - // breaking changes in the latest Spring releases have not been supported in it. - // TODO: Update the check to verify any Spring version above 5.2 - assumeFalse(Objects.requireNonNull(SpringVersion.getVersion()).startsWith("5.2")); - } - - // initialize a container handler to that the embedded factory can grab its instnace - private SpringBootLambdaContainerHandler h = SpringBootLambdaContainerHandler.getAwsProxyHandler(TestApplication.class); - - public ServerlessServletEmbeddedServerFactoryTest() throws ContainerInitializationException { - } - - @Test - public void getContainer_populatesInitializers() { - ServerlessServletEmbeddedServerFactory factory = new ServerlessServletEmbeddedServerFactory(); - TestServlet initializer = new TestServlet(false); - EmbeddedServletContainer container = factory.getEmbeddedServletContainer(initializer); - assertNotNull(((ServerlessServletEmbeddedServerFactory)container).getInitializers()); - assertEquals(1, ((ServerlessServletEmbeddedServerFactory)container).getInitializers().length); - assertEquals(initializer, ((ServerlessServletEmbeddedServerFactory)container).getInitializers()[0]); - container.stop(); // calling stop just once to get the test coverage since there's no code in it - } - - @Test - public void start_throwsException() { - ServerlessServletEmbeddedServerFactory factory = new ServerlessServletEmbeddedServerFactory(); - TestServlet initializer = new TestServlet(true); - EmbeddedServletContainer container = factory.getEmbeddedServletContainer(initializer); - try { - container.start(); - } catch (EmbeddedServletContainerException e) { - assertTrue(ServletException.class.isAssignableFrom(e.getCause().getClass())); - assertEquals(TestServlet.EXCEPTION_MESSAGE, e.getCause().getMessage()); - return; - } - fail("Did not throw the expected exception"); - } - - @Test - public void start_withoutException_setsServletContext() { - ServerlessServletEmbeddedServerFactory factory = new ServerlessServletEmbeddedServerFactory(); - TestServlet initializer = new TestServlet(false); - EmbeddedServletContainer container = factory.getEmbeddedServletContainer(initializer); - container.start(); - assertNotNull(initializer.getCtx()); - assertEquals(h.getServletContext(), initializer.getCtx()); - } - - public static class TestServlet implements Servlet, ServletContextInitializer { - private ServletContext ctx; - private boolean throwOnInit; - public static final String EXCEPTION_MESSAGE = "Throw on init"; - - public TestServlet(boolean throwOnInit) { - this.throwOnInit = throwOnInit; - } - - @Override - public void init(ServletConfig servletConfig) throws ServletException { - - } - - @Override - public ServletConfig getServletConfig() { - return null; - } - - @Override - public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { - - } - - @Override - public String getServletInfo() { - return null; - } - - @Override - public void destroy() { - - } - - @Override - public void onStartup(ServletContext servletContext) throws ServletException { - ctx = servletContext; - if (throwOnInit) { - throw new ServletException(EXCEPTION_MESSAGE); - } - } - - public ServletContext getCtx() { - return ctx; - } - } -} diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/sbsecurityapp/LambdaHandler.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/sbsecurityapp/LambdaHandler.java deleted file mode 100644 index b5a7ea96d..000000000 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/sbsecurityapp/LambdaHandler.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.amazonaws.serverless.proxy.spring.sbsecurityapp; - - -import com.amazonaws.serverless.exceptions.ContainerInitializationException; -import com.amazonaws.serverless.proxy.model.AwsProxyRequest; -import com.amazonaws.serverless.proxy.model.AwsProxyResponse; -import com.amazonaws.serverless.proxy.spring.SpringBootLambdaContainerHandler; -import com.amazonaws.services.lambda.runtime.Context; -import com.amazonaws.services.lambda.runtime.RequestHandler; - - -public class LambdaHandler - implements RequestHandler -{ - SpringBootLambdaContainerHandler handler; - boolean isinitialized = false; - - public AwsProxyResponse handleRequest(AwsProxyRequest awsProxyRequest, Context context) - { - if (!isinitialized) { - isinitialized = true; - try { - handler = SpringBootLambdaContainerHandler.getAwsProxyHandler(TestApplication.class); - } catch (ContainerInitializationException e) { - e.printStackTrace(); - return null; - } - } - AwsProxyResponse res = handler.proxy(awsProxyRequest, context); - return res; - } -} - diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/sbsecurityapp/TestApplication.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/sbsecurityapp/TestApplication.java deleted file mode 100644 index 34be320f0..000000000 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/sbsecurityapp/TestApplication.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.amazonaws.serverless.proxy.spring.sbsecurityapp; - - -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.support.SpringBootServletInitializer; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.PropertySource; - - -@SpringBootApplication -@ComponentScan(basePackages = "com.amazonaws.serverless.proxy.spring.sbsecurityapp") -public class TestApplication extends SpringBootServletInitializer { -} diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/sbsecurityapp/TestController.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/sbsecurityapp/TestController.java deleted file mode 100644 index 33be36f80..000000000 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/sbsecurityapp/TestController.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.amazonaws.serverless.proxy.spring.sbsecurityapp; - - -import com.amazonaws.serverless.proxy.spring.echoapp.model.SingleValueModel; -import org.springframework.context.annotation.Configuration; -import org.springframework.security.config.annotation.web.builders.HttpSecurity; -import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; -import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.core.userdetails.UserDetails; -import org.springframework.web.bind.annotation.*; -import org.springframework.web.servlet.config.annotation.ContentNegotiationConfigurer; -import org.springframework.web.servlet.config.annotation.PathMatchConfigurer; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; - -import javax.servlet.http.HttpServletResponse; -import java.security.Principal; -import java.util.List; - - -@RestController -public class TestController { - public static final String ACCESS_DENIED = "AccessDenied"; - - @RequestMapping(path = "/user", method = { RequestMethod.GET }) - public SingleValueModel testGet() { - Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal(); - SingleValueModel value = new SingleValueModel(); - - if (principal instanceof UserDetails) { - String username = ((UserDetails)principal).getUsername(); - value.setValue(username); - } else { - value.setValue(null); - } - return value; - } - - @RequestMapping(path = "/access-denied", method = { RequestMethod.GET }) - public SingleValueModel accessDenied() { - SingleValueModel model = new SingleValueModel(); - model.setValue(ACCESS_DENIED); - return model; - } - - -} diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/sbsecurityapp/TestSecurityConfig.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/sbsecurityapp/TestSecurityConfig.java deleted file mode 100644 index b3ca81eaf..000000000 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/sbsecurityapp/TestSecurityConfig.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.amazonaws.serverless.proxy.spring.sbsecurityapp; - -import org.springframework.context.annotation.Configuration; -import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; -import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; -import org.springframework.security.config.annotation.web.builders.HttpSecurity; -import org.springframework.security.config.annotation.web.builders.WebSecurity; -import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; -import org.springframework.security.config.http.SessionCreationPolicy; -import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; - - -@Configuration -@EnableGlobalMethodSecurity(prePostEnabled = true) -@EnableWebSecurity -public class TestSecurityConfig extends WebSecurityConfigurerAdapter { - public static final String USERNAME = "test"; - public static final String NO_ADMIN_USERNAME = "test2"; - public static final String PASSWORD = "123"; - public static BCryptPasswordEncoder pEncoder = new BCryptPasswordEncoder(); - @Override - protected void configure(AuthenticationManagerBuilder auth) throws Exception { - auth.inMemoryAuthentication().withUser(USERNAME).password(pEncoder.encode(PASSWORD)).roles("ADMIN") - .and().withUser(NO_ADMIN_USERNAME).password(pEncoder.encode(PASSWORD)).roles("USER") - .and().passwordEncoder(pEncoder); - - } - - @Override - public void configure(WebSecurity web) throws Exception { - } - - @Override - protected void configure(HttpSecurity http) throws Exception { - http.csrf().disable(); - http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS); - http.httpBasic(); - http - .authorizeRequests() - .antMatchers("/user").hasRole("ADMIN") - .and().exceptionHandling().accessDeniedPage("/access-denied"); - } -} diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springbootapp/LambdaHandler.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springbootapp/LambdaHandler.java deleted file mode 100644 index aee0bd035..000000000 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springbootapp/LambdaHandler.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.amazonaws.serverless.proxy.spring.springbootapp; - - -import com.amazonaws.serverless.exceptions.ContainerInitializationException; -import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; -import com.amazonaws.serverless.proxy.model.AwsProxyRequest; -import com.amazonaws.serverless.proxy.model.AwsProxyResponse; -import com.amazonaws.serverless.proxy.model.HttpApiV2ProxyRequest; -import com.amazonaws.serverless.proxy.spring.SpringBootLambdaContainerHandler; -import com.amazonaws.serverless.proxy.spring.springbootapp.TestApplication; -import com.amazonaws.services.lambda.runtime.Context; -import com.amazonaws.services.lambda.runtime.RequestHandler; - - -public class LambdaHandler - implements RequestHandler -{ - SpringBootLambdaContainerHandler handler; - SpringBootLambdaContainerHandler httpApiHandler; - private String type; - - public LambdaHandler(String reqType) { - type = reqType; - switch (type) { - case "API_GW": - case "ALB": - try { - handler = SpringBootLambdaContainerHandler.getAwsProxyHandler(TestApplication.class); - } catch (ContainerInitializationException e) { - e.printStackTrace(); - throw new RuntimeException(e); - } - break; - case "HTTP_API": - try { - httpApiHandler = SpringBootLambdaContainerHandler.getHttpApiV2ProxyHandler(TestApplication.class); - } catch (ContainerInitializationException e) { - e.printStackTrace(); - throw new RuntimeException(e); - } - } - } - - public AwsProxyResponse handleRequest(AwsProxyRequestBuilder awsProxyRequest, Context context) - { - switch (type) { - case "API_GW": - return handler.proxy(awsProxyRequest.build(), context); - case "ALB": - return handler.proxy(awsProxyRequest.alb().build(), context); - case "HTTP_API": - return httpApiHandler.proxy(awsProxyRequest.toHttpApiV2Request(), context); - default: - throw new RuntimeException("Unknown request type: " + type); - } - } -} - diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springbootapp/TestApplication.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springbootapp/TestApplication.java deleted file mode 100644 index fda1f8012..000000000 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springbootapp/TestApplication.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.amazonaws.serverless.proxy.spring.springbootapp; - - -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.support.SpringBootServletInitializer; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.PropertySource; - - -@SpringBootApplication -@ComponentScan(basePackages = "com.amazonaws.serverless.proxy.spring.springbootapp") -@PropertySource("classpath:boot-application.properties") -public class TestApplication extends SpringBootServletInitializer { -} diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springbootapp/TestController.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springbootapp/TestController.java deleted file mode 100644 index 900ce50ea..000000000 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springbootapp/TestController.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.amazonaws.serverless.proxy.spring.springbootapp; - - -import com.amazonaws.serverless.proxy.spring.echoapp.model.SingleValueModel; - -import org.springframework.context.annotation.Configuration; -import org.springframework.security.config.annotation.web.builders.HttpSecurity; -import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; -import org.springframework.web.bind.annotation.*; -import org.springframework.web.servlet.config.annotation.ContentNegotiationConfigurer; -import org.springframework.web.servlet.config.annotation.PathMatchConfigurer; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; - -import javax.servlet.http.HttpServletResponse; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - - -@RestController -@EnableWebSecurity -public class TestController extends WebSecurityConfigurerAdapter { - public static final String TEST_VALUE = "test"; - public static final String UTF8_TEST_STRING = "health心跳测试完成。可正常使用"; - public static final String CUSTOM_HEADER_NAME = "X-Custom-Header"; - public static final String CUSTOM_QS_NAME = "qs"; - - // workaround to address the most annoying issue in the world: https://blog.georgovassilis.com/2015/10/29/spring-mvc-rest-controller-says-406-when-emails-are-part-url-path/ - @Configuration - public static class CustomConfig extends WebMvcConfigurerAdapter { - @Override - public void configurePathMatch(PathMatchConfigurer configurer) { - configurer.setUseSuffixPatternMatch(false); - } - - @Override - public void configureContentNegotiation(ContentNegotiationConfigurer configurer) { - configurer.favorPathExtension(false); - } - } - - @RequestMapping(path = "/test", method = { RequestMethod.GET }) - public SingleValueModel testGet() { - SingleValueModel value = new SingleValueModel(); - value.setValue(TEST_VALUE); - return value; - } - - @RequestMapping(path = "/missing-params", method = {RequestMethod.GET}) - public Map testInvalidParameters(@RequestHeader(CUSTOM_HEADER_NAME) String h1, @RequestParam(CUSTOM_QS_NAME) String qsValue) { - Map output = new HashMap<>(); - output.put("header", h1 == null); - output.put("queryString", qsValue == null); - return output; - } - - @RequestMapping(path = "/test/{domain}", method = { RequestMethod.GET}) - public SingleValueModel testDomainInPath(@PathVariable("domain") String domainName) { - SingleValueModel value = new SingleValueModel(); - value.setValue(domainName); - return value; - } - - @RequestMapping(path = "/test/query-string", method = { RequestMethod.GET }) - public SingleValueModel testQueryStringList(@RequestParam("list") List qsValues) { - assert qsValues != null; - SingleValueModel value = new SingleValueModel(); - value.setValue(qsValues.size() + ""); - return value; - } - - @RequestMapping(value="/test/utf8",method=RequestMethod.GET) - public Object testUtf8(String name, HttpServletResponse response){ - SingleValueModel model = new SingleValueModel(); - model.setValue(UTF8_TEST_STRING); - return model; - } - - @Override - protected void configure(HttpSecurity http) throws Exception { - http.sessionManagement().disable(); - } -} diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springbootslowapp/MessageController.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springbootslowapp/MessageController.java deleted file mode 100644 index 20dda4174..000000000 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springbootslowapp/MessageController.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.amazonaws.serverless.proxy.spring.springbootslowapp; - -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RestController; - -@RestController -public class MessageController { - public static final String HELLO_MESSAGE = "Hello"; - - @RequestMapping(path="/hello", method= RequestMethod.GET) - public String hello() { - return HELLO_MESSAGE; - } -} diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springbootslowapp/SBLambdaHandler.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springbootslowapp/SBLambdaHandler.java deleted file mode 100644 index 157b6c438..000000000 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springbootslowapp/SBLambdaHandler.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.amazonaws.serverless.proxy.spring.springbootslowapp; - - -import com.amazonaws.serverless.exceptions.ContainerInitializationException; -import com.amazonaws.serverless.proxy.model.AwsProxyRequest; -import com.amazonaws.serverless.proxy.model.AwsProxyResponse; -import com.amazonaws.serverless.proxy.spring.SpringBootLambdaContainerHandler; -import com.amazonaws.serverless.proxy.spring.SpringBootProxyHandlerBuilder; -import com.amazonaws.services.lambda.runtime.Context; -import com.amazonaws.services.lambda.runtime.RequestHandler; - -import java.time.Instant; - - -public class SBLambdaHandler - implements RequestHandler -{ - SpringBootLambdaContainerHandler handler; - private long constructorTime; - - public SBLambdaHandler() throws ContainerInitializationException { - long startTime = Instant.now().toEpochMilli(); - handler = new SpringBootProxyHandlerBuilder() - .defaultProxy() - .asyncInit(Instant.now().toEpochMilli()) - .springBootApplication(TestApplication.class) - .buildAndInitialize(); - constructorTime = Instant.now().toEpochMilli() - startTime; - } - - public long getConstructorTime() { - return constructorTime; - } - - public AwsProxyResponse handleRequest(AwsProxyRequest awsProxyRequest, Context context) - { - return handler.proxy(awsProxyRequest, context); - } -} - diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springbootslowapp/TestApplication.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springbootslowapp/TestApplication.java deleted file mode 100644 index 7e9dce5a9..000000000 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springbootslowapp/TestApplication.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.amazonaws.serverless.proxy.spring.springbootslowapp; - - -import org.springframework.beans.factory.InitializingBean; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.support.SpringBootServletInitializer; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.stereotype.Component; - -// Need to explicitly exclude security because of some bizarre witchcraft inside SpringBoot that -// enables it even when I don't ask for it - this is only true when I test against spring-webmvc 4.3.x -@SpringBootApplication(exclude = { - org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration.class -}) -@ComponentScan(basePackages="com.amazonaws.serverless.proxy.spring.springbootslowapp") -public class TestApplication extends SpringBootServletInitializer { - @Component - public static class SlowDownInit implements InitializingBean { - public static final int INIT_SLEEP_TIME_MS = 13_000; - - @Override - public void afterPropertiesSet() throws Exception { - Thread.sleep(INIT_SLEEP_TIME_MS); - } - } -} diff --git a/aws-serverless-springboot-archetype/pom.xml b/aws-serverless-springboot-archetype/pom.xml deleted file mode 100644 index 6a9727d75..000000000 --- a/aws-serverless-springboot-archetype/pom.xml +++ /dev/null @@ -1,80 +0,0 @@ - - 4.0.0 - - - com.amazonaws.serverless - aws-serverless-java-container - 1.6-SNAPSHOT - - - com.amazonaws.serverless.archetypes - aws-serverless-springboot-archetype - 1.6-SNAPSHOT - maven-archetype - - - https://github.com/awslabs/aws-serverless-java-container.git - HEAD - - - - - The Apache Software License, Version 2.0 - http://www.apache.org/licenses/LICENSE-2.0.txt - repo - - - - - - - src/main/resources - true - - archetype-resources/pom.xml - archetype-resources/README.md - - - - src/main/resources - false - - archetype-resources/pom.xml - - - - - - - org.apache.maven.archetype - archetype-packaging - 3.0.1 - - - - - - - org.apache.maven.plugins - maven-resources-plugin - 3.1.0 - - \ - - - - org.apache.maven.plugins - maven-archetype-plugin - 3.0.1 - - - - integration-test - - - - - - - - diff --git a/aws-serverless-springboot-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml b/aws-serverless-springboot-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml deleted file mode 100644 index 5379692ba..000000000 --- a/aws-serverless-springboot-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - src/main/java - - **/*.java - - - - src/main/resources - - **/*.properties - - - - src/test/java - - **/*.java - - - - src/assembly - - * - - - - - - template.yml - README.md - build.gradle - - - - \ No newline at end of file diff --git a/aws-serverless-springboot-archetype/src/main/resources/archetype-resources/README.md b/aws-serverless-springboot-archetype/src/main/resources/archetype-resources/README.md deleted file mode 100644 index 1dc39a0a2..000000000 --- a/aws-serverless-springboot-archetype/src/main/resources/archetype-resources/README.md +++ /dev/null @@ -1,99 +0,0 @@ -#set($resourceName = $artifactId) -#macro(replaceChar $originalName, $char) - #if($originalName.contains($char)) - #set($tokens = $originalName.split($char)) - #set($newResourceName = "") - #foreach($token in $tokens) - #set($newResourceName = $newResourceName + $token.substring(0,1).toUpperCase() + $token.substring(1).toLowerCase()) - #end - ${newResourceName} - #else - #set($newResourceName = $originalName.substring(0,1).toUpperCase() + $originalName.substring(1)) - ${newResourceName} - #end -#end -#set($resourceName = "#replaceChar($resourceName, '-')") -#set($resourceName = "#replaceChar($resourceName, '.')") -#set($resourceName = $resourceName.replaceAll("\n", "").trim()) -# \${artifactId} serverless API -The \${artifactId} project, created with [`aws-serverless-java-container`](https://github.com/awslabs/aws-serverless-java-container). - -The starter project defines a simple `/ping` resource that can accept `GET` requests with its tests. - -The project folder also includes a `template.yml` file. You can use this [SAM](https://github.com/awslabs/serverless-application-model) file to deploy the project to AWS Lambda and Amazon API Gateway or test in local with the [SAM CLI](https://github.com/awslabs/aws-sam-cli). - -#[[##]]# 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/) - -#[[##]]# Building the project -You can use the SAM CLI to quickly build the project -```bash -$ mvn archetype:generate -DartifactId=\${artifactId} -DarchetypeGroupId=com.amazonaws.serverless.archetypes -DarchetypeArtifactId=aws-serverless-jersey-archetype -DarchetypeVersion=${project.version} -DgroupId=\${groupId} -Dversion=\${version} -Dinteractive=false -$ cd \${artifactId} -$ sam build -Building resource '\${resourceName}Function' -Running JavaGradleWorkflow:GradleBuild -Running JavaGradleWorkflow:CopyArtifacts - -Build Succeeded - -Built Artifacts : .aws-sam/build -Built Template : .aws-sam/build/template.yaml - -Commands you can use next -========================= -[*] Invoke Function: sam local invoke -[*] Deploy: sam deploy --guided -``` - -#[[##]]# Testing locally with the SAM CLI - -From the project root folder - where the `template.yml` file is located - start the API with the SAM CLI. - -```bash -$ sam local start-api - -... -Mounting ${groupId}.StreamLambdaHandler::handleRequest (java8) at http://127.0.0.1:3000/{proxy+} [OPTIONS GET HEAD POST PUT DELETE PATCH] -... -``` - -Using a new shell, you can send a test ping request to your API: - -```bash -$ curl -s http://127.0.0.1:3000/ping | python -m json.tool - -{ - "pong": "Hello, World!" -} -``` - -#[[##]]# Deploying to AWS -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 -------------------------------------------------------------------------------------------------------------- -\${resourceName}Api - URL for application https://xxxxxxxxxx.execute-api.us-west-2.amazonaws.com/Prod/pets -------------------------------------------------------------------------------------------------------------- -``` - -Copy the `OutputValue` into a browser or use curl to test your first request: - -```bash -$ curl -s https://xxxxxxx.execute-api.us-west-2.amazonaws.com/Prod/ping | python -m json.tool - -{ - "pong": "Hello, World!" -} -``` diff --git a/aws-serverless-springboot-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-springboot-archetype/src/main/resources/archetype-resources/build.gradle deleted file mode 100644 index 584c41021..000000000 --- a/aws-serverless-springboot-archetype/src/main/resources/archetype-resources/build.gradle +++ /dev/null @@ -1,29 +0,0 @@ -apply plugin: 'java' - -repositories { - jcenter() - mavenLocal() - mavenCentral() -} - -dependencies { - implementation ( - 'org.springframework.boot:spring-boot-starter-web:1.5.22.RELEASE', - 'com.amazonaws.serverless:aws-serverless-java-container-spring:[1.0,)', - 'io.symphonia:lambda-logging:1.0.1' - ) - - testImplementation("junit:junit:4.12") -} - -task buildZip(type: Zip) { - from compileJava - from processResources - into('lib') { - from(configurations.compileClasspath) { - exclude 'tomcat-embed-*' - } - } -} - -build.dependsOn buildZip diff --git a/aws-serverless-springboot-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot-archetype/src/main/resources/archetype-resources/pom.xml deleted file mode 100644 index f3a4a650b..000000000 --- a/aws-serverless-springboot-archetype/src/main/resources/archetype-resources/pom.xml +++ /dev/null @@ -1,141 +0,0 @@ -#set($dollar = '$') - - - 4.0.0 - - \${groupId} - \${artifactId} - \${version} - jar - - Serverless Spring Boot API - https://github.com/awslabs/aws-serverless-java-container - - - org.springframework.boot - spring-boot-starter-parent - 1.5.22.RELEASE - - - - 1.8 - 1.8 - - - - - com.amazonaws.serverless - aws-serverless-java-container-spring - ${project.version} - - - - org.springframework.boot - spring-boot-starter-web - - - - junit - junit - 4.12 - test - - - - - - shaded-jar - - - - org.apache.maven.plugins - maven-shade-plugin - 2.3 - - false - - - - package - - shade - - - - - org.apache.tomcat.embed:* - - - - - - - - - - - assembly-zip - - true - - - - - - org.apache.maven.plugins - maven-jar-plugin - 3.1.1 - - - default-jar - none - - - - - - org.apache.maven.plugins - maven-dependency-plugin - 3.1.1 - - - copy-dependencies - package - - copy-dependencies - - - ${dollar}{project.build.directory}${dollar}{file.separator}lib - runtime - - - - - - org.apache.maven.plugins - maven-assembly-plugin - 3.1.0 - - - zip-assembly - package - - single - - - ${dollar}{project.artifactId}-${dollar}{project.version} - - src${dollar}{file.separator}assembly${dollar}{file.separator}bin.xml - - false - - - - - - - - - diff --git a/aws-serverless-springboot-archetype/src/main/resources/archetype-resources/src/assembly/bin.xml b/aws-serverless-springboot-archetype/src/main/resources/archetype-resources/src/assembly/bin.xml deleted file mode 100644 index 1e085057d..000000000 --- a/aws-serverless-springboot-archetype/src/main/resources/archetype-resources/src/assembly/bin.xml +++ /dev/null @@ -1,27 +0,0 @@ - - lambda-package - - zip - - false - - - - ${project.build.directory}${file.separator}lib - lib - - tomcat-embed* - - - - - ${project.build.directory}${file.separator}classes - - ** - - ${file.separator} - - - \ No newline at end of file diff --git a/aws-serverless-springboot-archetype/src/main/resources/archetype-resources/src/main/java/Application.java b/aws-serverless-springboot-archetype/src/main/resources/archetype-resources/src/main/java/Application.java deleted file mode 100644 index 0d25d61bd..000000000 --- a/aws-serverless-springboot-archetype/src/main/resources/archetype-resources/src/main/java/Application.java +++ /dev/null @@ -1,72 +0,0 @@ -#macro(loggingOff) - logging.level.root:OFF -#end -#set($logging = "#loggingOff()") -#set($logging = $logging.replaceAll("\n", "").trim()) -package ${groupId}; - -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.support.SpringBootServletInitializer; -import org.springframework.context.annotation.Bean; -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; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import ${groupId}.controller.PingController; - - -@SpringBootApplication -// We use direct @Import instead of @ComponentScan to speed up cold starts -// @ComponentScan(basePackages = "${groupId}.controller") -@Import({ PingController.class }) -public class Application extends SpringBootServletInitializer { - - /* - * 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; - } - }; - } - - public static void main(String[] args) { - SpringApplication.run(Application.class, args); - } -} \ No newline at end of file diff --git a/aws-serverless-springboot-archetype/src/main/resources/archetype-resources/src/main/java/StreamLambdaHandler.java b/aws-serverless-springboot-archetype/src/main/resources/archetype-resources/src/main/java/StreamLambdaHandler.java deleted file mode 100644 index e022540c1..000000000 --- a/aws-serverless-springboot-archetype/src/main/resources/archetype-resources/src/main/java/StreamLambdaHandler.java +++ /dev/null @@ -1,33 +0,0 @@ -package ${groupId}; - - -import com.amazonaws.serverless.exceptions.ContainerInitializationException; -import com.amazonaws.serverless.proxy.model.AwsProxyRequest; -import com.amazonaws.serverless.proxy.model.AwsProxyResponse; -import com.amazonaws.serverless.proxy.spring.SpringBootLambdaContainerHandler; -import com.amazonaws.services.lambda.runtime.Context; -import com.amazonaws.services.lambda.runtime.RequestStreamHandler; - -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; - - -public class StreamLambdaHandler implements RequestStreamHandler { - private static SpringBootLambdaContainerHandler handler; - static { - try { - handler = SpringBootLambdaContainerHandler.getAwsProxyHandler(Application.class); - } catch (ContainerInitializationException e) { - // if we fail here. We re-throw the exception to force another cold start - e.printStackTrace(); - throw new RuntimeException("Could not initialize Spring Boot application", e); - } - } - - @Override - public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) - throws IOException { - handler.proxyStream(inputStream, outputStream, context); - } -} \ No newline at end of file diff --git a/aws-serverless-springboot-archetype/src/main/resources/archetype-resources/src/main/java/controller/PingController.java b/aws-serverless-springboot-archetype/src/main/resources/archetype-resources/src/main/java/controller/PingController.java deleted file mode 100644 index 94f517f07..000000000 --- a/aws-serverless-springboot-archetype/src/main/resources/archetype-resources/src/main/java/controller/PingController.java +++ /dev/null @@ -1,20 +0,0 @@ -package ${groupId}.controller; - - -import org.springframework.web.bind.annotation.*; -import org.springframework.web.servlet.config.annotation.EnableWebMvc; - -import java.util.HashMap; -import java.util.Map; - - -@RestController -@EnableWebMvc -public class PingController { - @RequestMapping(path = "/ping", method = RequestMethod.GET) - public Map ping() { - Map pong = new HashMap<>(); - pong.put("pong", "Hello, World!"); - return pong; - } -} diff --git a/aws-serverless-springboot-archetype/src/main/resources/archetype-resources/src/main/resources/application.properties b/aws-serverless-springboot-archetype/src/main/resources/archetype-resources/src/main/resources/application.properties deleted file mode 100644 index ec1cb9792..000000000 --- a/aws-serverless-springboot-archetype/src/main/resources/archetype-resources/src/main/resources/application.properties +++ /dev/null @@ -1,3 +0,0 @@ -# Reduce logging level to make sure the application works with SAM local -# https://github.com/awslabs/aws-serverless-java-container/issues/134 -logging.level.root=WARN \ No newline at end of file diff --git a/aws-serverless-springboot-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java b/aws-serverless-springboot-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java deleted file mode 100644 index 3f232ebc6..000000000 --- a/aws-serverless-springboot-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java +++ /dev/null @@ -1,90 +0,0 @@ -package ${groupId}; - - -import com.amazonaws.serverless.proxy.internal.LambdaContainerHandler; -import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; -import com.amazonaws.serverless.proxy.internal.testutils.MockLambdaContext; -import com.amazonaws.serverless.proxy.model.AwsProxyResponse; -import com.amazonaws.services.lambda.runtime.Context; - -import org.junit.BeforeClass; -import org.junit.Test; - -import javax.ws.rs.HttpMethod; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; - -import static org.junit.Assert.*; - - -public class StreamLambdaHandlerTest { - - private static StreamLambdaHandler handler; - private static Context lambdaContext; - - @BeforeClass - public static void setUp() { - handler = new StreamLambdaHandler(); - lambdaContext = new MockLambdaContext(); - } - - @Test - public void ping_streamRequest_respondsWithHello() { - InputStream requestStream = new AwsProxyRequestBuilder("/ping", HttpMethod.GET) - .header(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON) - .buildStream(); - ByteArrayOutputStream responseStream = new ByteArrayOutputStream(); - - handle(requestStream, responseStream); - - AwsProxyResponse response = readResponse(responseStream); - assertNotNull(response); - assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode()); - - assertFalse(response.isBase64Encoded()); - - assertTrue(response.getBody().contains("pong")); - assertTrue(response.getBody().contains("Hello, World!")); - - assertTrue(response.getMultiValueHeaders().containsKey(HttpHeaders.CONTENT_TYPE)); - assertTrue(response.getMultiValueHeaders().getFirst(HttpHeaders.CONTENT_TYPE).startsWith(MediaType.APPLICATION_JSON)); - } - - @Test - public void invalidResource_streamRequest_responds404() { - InputStream requestStream = new AwsProxyRequestBuilder("/pong", HttpMethod.GET) - .header(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON) - .buildStream(); - ByteArrayOutputStream responseStream = new ByteArrayOutputStream(); - - handle(requestStream, responseStream); - - AwsProxyResponse response = readResponse(responseStream); - assertNotNull(response); - assertEquals(Response.Status.NOT_FOUND.getStatusCode(), response.getStatusCode()); - } - - private void handle(InputStream is, ByteArrayOutputStream os) { - try { - handler.handleRequest(is, os, lambdaContext); - } catch (IOException e) { - e.printStackTrace(); - fail(e.getMessage()); - } - } - - private AwsProxyResponse readResponse(ByteArrayOutputStream responseStream) { - try { - return LambdaContainerHandler.getObjectMapper().readValue(responseStream.toByteArray(), AwsProxyResponse.class); - } catch (IOException e) { - e.printStackTrace(); - fail("Error while parsing response: " + e.getMessage()); - } - return null; - } -} diff --git a/aws-serverless-springboot-archetype/src/main/resources/archetype-resources/template.yml b/aws-serverless-springboot-archetype/src/main/resources/archetype-resources/template.yml deleted file mode 100644 index 832028a20..000000000 --- a/aws-serverless-springboot-archetype/src/main/resources/archetype-resources/template.yml +++ /dev/null @@ -1,52 +0,0 @@ -#set($resourceName = $artifactId) -#macro(replaceChar $originalName, $char) - #if($originalName.contains($char)) - #set($tokens = $originalName.split($char)) - #set($newResourceName = "") - #foreach($token in $tokens) - #set($newResourceName = $newResourceName + $token.substring(0,1).toUpperCase() + $token.substring(1).toLowerCase()) - #end - ${newResourceName} - #else - #set($newResourceName = $originalName.substring(0,1).toUpperCase() + $originalName.substring(1)) - ${newResourceName} - #end -#end -#set($resourceName = "#replaceChar($resourceName, '-')") -#set($resourceName = "#replaceChar($resourceName, '.')") -#set($resourceName = $resourceName.replaceAll("\n", "").trim()) -#macro(regionVar) - AWS::Region -#end -#set($awsRegion = "#regionVar()") -#set($awsRegion = $awsRegion.replaceAll("\n", "").trim()) -AWSTemplateFormatVersion: '2010-09-09' -Transform: AWS::Serverless-2016-10-31 -Description: AWS Serverless Spring Boot API - ${groupId}::${artifactId} -Globals: - Api: - EndpointConfiguration: REGIONAL - -Resources: - ${resourceName}Function: - Type: AWS::Serverless::Function - Properties: - Handler: ${groupId}.StreamLambdaHandler::handleRequest - Runtime: java8 - CodeUri: . - MemorySize: 512 - Policies: AWSLambdaBasicExecutionRole - Timeout: 30 - Events: - ProxyResource: - Type: Api - Properties: - Path: /{proxy+} - Method: any - -Outputs: - ${resourceName}Api: - Description: URL for application - Value: !Sub 'https://${ServerlessRestApi}.execute-api.${${awsRegion}}.amazonaws.com/Prod/ping' - Export: - Name: ${resourceName}Api diff --git a/aws-serverless-springboot-archetype/src/test/resources/projects/base/archetype.properties b/aws-serverless-springboot-archetype/src/test/resources/projects/base/archetype.properties deleted file mode 100644 index 7df3bf6e1..000000000 --- a/aws-serverless-springboot-archetype/src/test/resources/projects/base/archetype.properties +++ /dev/null @@ -1,3 +0,0 @@ -groupId=test.service -artifactId=springboot-archetype-test -version=1.0-SNAPSHOT diff --git a/aws-serverless-springboot-archetype/src/test/resources/projects/base/goal.txt b/aws-serverless-springboot-archetype/src/test/resources/projects/base/goal.txt deleted file mode 100644 index 597acc768..000000000 --- a/aws-serverless-springboot-archetype/src/test/resources/projects/base/goal.txt +++ /dev/null @@ -1 +0,0 @@ -package \ No newline at end of file diff --git a/pom.xml b/pom.xml index 20c7cf9ad..1ecd48c47 100644 --- a/pom.xml +++ b/pom.xml @@ -35,7 +35,6 @@ aws-serverless-jersey-archetype aws-serverless-spark-archetype aws-serverless-spring-archetype - aws-serverless-springboot-archetype aws-serverless-springboot2-archetype From 593ae0d15a3c04b6c3a20dfaba94f0030e1abd82 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 23 Jul 2021 10:16:53 +0200 Subject: [PATCH 132/888] Drop Spring Boot 1.x sample (#419) --- samples/springboot/pet-store/README.md | 36 ----- samples/springboot/pet-store/build.gradle | 28 ---- samples/springboot/pet-store/pom.xml | 124 ------------------ .../springboot/pet-store/src/assembly/bin.xml | 27 ---- .../sample/springboot/Application.java | 69 ---------- .../springboot/StreamLambdaHandler.java | 50 ------- .../springboot/controller/PetsController.java | 77 ----------- .../filter/CognitoIdentityFilter.java | 68 ---------- .../sample/springboot/model/Error.java | 29 ---- .../sample/springboot/model/Pet.java | 55 -------- .../sample/springboot/model/PetData.java | 117 ----------------- .../pet-store/src/main/resources/logback.xml | 5 - samples/springboot/pet-store/template.yml | 32 ----- 13 files changed, 717 deletions(-) delete mode 100644 samples/springboot/pet-store/README.md delete mode 100644 samples/springboot/pet-store/build.gradle delete mode 100644 samples/springboot/pet-store/pom.xml delete mode 100644 samples/springboot/pet-store/src/assembly/bin.xml delete mode 100644 samples/springboot/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot/Application.java delete mode 100644 samples/springboot/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot/StreamLambdaHandler.java delete mode 100644 samples/springboot/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot/controller/PetsController.java delete mode 100644 samples/springboot/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot/filter/CognitoIdentityFilter.java delete mode 100644 samples/springboot/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot/model/Error.java delete mode 100644 samples/springboot/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot/model/Pet.java delete mode 100644 samples/springboot/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot/model/PetData.java delete mode 100644 samples/springboot/pet-store/src/main/resources/logback.xml delete mode 100644 samples/springboot/pet-store/template.yml diff --git a/samples/springboot/pet-store/README.md b/samples/springboot/pet-store/README.md deleted file mode 100644 index 4462f1592..000000000 --- a/samples/springboot/pet-store/README.md +++ /dev/null @@ -1,36 +0,0 @@ -# Serverless Spring Boot example -A basic pet store written with the [Spring Boot framework](https://projects.spring.io/spring-boot/). 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/samples/springboot/pet-store/build.gradle b/samples/springboot/pet-store/build.gradle deleted file mode 100644 index 4ac22f065..000000000 --- a/samples/springboot/pet-store/build.gradle +++ /dev/null @@ -1,28 +0,0 @@ -apply plugin: 'java' - -repositories { - jcenter() - mavenLocal() - mavenCentral() -} - -dependencies { - implementation ( - 'org.springframework.boot:spring-boot-starter-web:1.5.22.RELEASE', - 'com.amazonaws.serverless:aws-serverless-java-container-spring:[1.0,)', - 'io.symphonia:lambda-logging:1.0.1' - ) - testImplementation("junit:junit") -} - -task buildZip(type: Zip) { - from compileJava - from processResources - into('lib') { - from(configurations.compileClasspath) { - exclude 'tomcat-embed-*' - } - } -} - -build.dependsOn buildZip diff --git a/samples/springboot/pet-store/pom.xml b/samples/springboot/pet-store/pom.xml deleted file mode 100644 index 951704763..000000000 --- a/samples/springboot/pet-store/pom.xml +++ /dev/null @@ -1,124 +0,0 @@ - - - 4.0.0 - - com.amazonaws.serverless.sample - serverless-spring-boot-example - 1.0-SNAPSHOT - - - org.springframework.boot - spring-boot-starter-parent - 1.5.22.RELEASE - - - - 1.8 - 1.8 - - - - - org.springframework.boot - spring-boot-starter-web - - - - com.amazonaws.serverless - aws-serverless-java-container-spring - [0.1,) - - - - - io.symphonia - lambda-logging - 1.0.1 - - - - - - shaded-jar - - - - org.apache.maven.plugins - maven-shade-plugin - 2.3 - - false - - - - package - - shade - - - - - org.apache.tomcat.embed:* - - - - - - - - - - - assembly-zip - - true - - - - - - org.apache.maven.plugins - maven-dependency-plugin - 3.1.1 - - - copy-dependencies - package - - copy-dependencies - - - ${project.build.directory}/lib - runtime - - - - - - org.apache.maven.plugins - maven-assembly-plugin - 3.1.0 - - - zip-assembly - package - - single - - - ${project.artifactId}-${project.version} - - src${file.separator}assembly${file.separator}bin.xml - - false - - - - - - - - - - diff --git a/samples/springboot/pet-store/src/assembly/bin.xml b/samples/springboot/pet-store/src/assembly/bin.xml deleted file mode 100644 index 1e085057d..000000000 --- a/samples/springboot/pet-store/src/assembly/bin.xml +++ /dev/null @@ -1,27 +0,0 @@ - - lambda-package - - zip - - false - - - - ${project.build.directory}${file.separator}lib - lib - - tomcat-embed* - - - - - ${project.build.directory}${file.separator}classes - - ** - - ${file.separator} - - - \ No newline at end of file diff --git a/samples/springboot/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot/Application.java b/samples/springboot/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot/Application.java deleted file mode 100644 index 3019b05e7..000000000 --- a/samples/springboot/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot/Application.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.amazonaws.serverless.sample.springboot; - -import com.amazonaws.serverless.sample.springboot.controller.PetsController; - -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.support.SpringBootServletInitializer; -import org.springframework.context.annotation.Bean; -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; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - - -@SpringBootApplication -@Import({ PetsController.class }) -public class Application extends SpringBootServletInitializer { - - // silence console logging - @Value("${logging.level.root:OFF}") - String message = ""; - - /* - * 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; - } - }; - } - - public static void main(String[] args) { - SpringApplication.run(Application.class, args); - } -} \ No newline at end of file diff --git a/samples/springboot/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot/StreamLambdaHandler.java b/samples/springboot/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot/StreamLambdaHandler.java deleted file mode 100644 index 38e6dae8c..000000000 --- a/samples/springboot/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot/StreamLambdaHandler.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.amazonaws.serverless.sample.springboot; - - -import com.amazonaws.serverless.exceptions.ContainerInitializationException; -import com.amazonaws.serverless.proxy.internal.testutils.Timer; -import com.amazonaws.serverless.proxy.model.AwsProxyRequest; -import com.amazonaws.serverless.proxy.model.AwsProxyResponse; -import com.amazonaws.serverless.proxy.spring.SpringBootLambdaContainerHandler; -import com.amazonaws.serverless.sample.springboot.filter.CognitoIdentityFilter; -import com.amazonaws.services.lambda.runtime.Context; -import com.amazonaws.services.lambda.runtime.RequestStreamHandler; - -import javax.servlet.DispatcherType; -import javax.servlet.FilterRegistration; - -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.util.EnumSet; - - -public class StreamLambdaHandler implements RequestStreamHandler { - private static SpringBootLambdaContainerHandler handler; - static { - try { - handler = SpringBootLambdaContainerHandler.getAwsProxyHandler(Application.class); - - // we use the onStartup method of the handler to register our custom filter - handler.onStartup(servletContext -> { - FilterRegistration.Dynamic registration = servletContext.addFilter("CognitoIdentityFilter", CognitoIdentityFilter.class); - registration.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), true, "/*"); - }); - } catch (ContainerInitializationException e) { - // if we fail here. We re-throw the exception to force another cold start - e.printStackTrace(); - throw new RuntimeException("Could not initialize Spring Boot application", e); - } - } - - public StreamLambdaHandler() { - // we enable the timer for debugging. This SHOULD NOT be enabled in production. - Timer.enable(); - } - - @Override - public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) - throws IOException { - handler.proxyStream(inputStream, outputStream, context); - } -} diff --git a/samples/springboot/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot/controller/PetsController.java b/samples/springboot/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot/controller/PetsController.java deleted file mode 100644 index 2680d111b..000000000 --- a/samples/springboot/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot/controller/PetsController.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance - * with the License. A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.sample.springboot.controller; - - - -import com.amazonaws.serverless.sample.springboot.model.Pet; -import com.amazonaws.serverless.sample.springboot.model.PetData; - -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; -import org.springframework.web.servlet.config.annotation.EnableWebMvc; - -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; - } - - @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/samples/springboot/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot/filter/CognitoIdentityFilter.java b/samples/springboot/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot/filter/CognitoIdentityFilter.java deleted file mode 100644 index 025f565dc..000000000 --- a/samples/springboot/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot/filter/CognitoIdentityFilter.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.amazonaws.serverless.sample.springboot.filter; - - -import com.amazonaws.serverless.proxy.RequestReader; -import com.amazonaws.serverless.proxy.model.AwsProxyRequestContext; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; - -import java.io.IOException; - - -/** - * Simple Filter implementation that looks for a Cognito identity id in the API Gateway request context - * and stores the value in a request attribute. The filter is registered with aws-serverless-java-container - * in the onStartup method from the {@link com.amazonaws.serverless.sample.springboot.StreamLambdaHandler} class. - */ -public class CognitoIdentityFilter implements Filter { - public static final String COGNITO_IDENTITY_ATTRIBUTE = "com.amazonaws.serverless.cognitoId"; - - private static Logger log = LoggerFactory.getLogger(CognitoIdentityFilter.class); - - @Override - public void init(FilterConfig filterConfig) - throws ServletException { - // nothing to do in init - } - - - @Override - public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) - throws IOException, ServletException { - Object apiGwContext = servletRequest.getAttribute(RequestReader.API_GATEWAY_CONTEXT_PROPERTY); - if (apiGwContext == null) { - log.warn("API Gateway context is null"); - filterChain.doFilter(servletRequest, servletResponse); - } - if (!AwsProxyRequestContext.class.isAssignableFrom(apiGwContext.getClass())) { - log.warn("API Gateway context object is not of valid type"); - filterChain.doFilter(servletRequest, servletResponse); - } - - AwsProxyRequestContext ctx = (AwsProxyRequestContext)apiGwContext; - if (ctx.getIdentity() == null) { - log.warn("Identity context is null"); - filterChain.doFilter(servletRequest, servletResponse); - } - String cognitoIdentityId = ctx.getIdentity().getCognitoIdentityId(); - if (cognitoIdentityId == null || "".equals(cognitoIdentityId.trim())) { - log.warn("Cognito identity id in request is null"); - } - servletRequest.setAttribute(COGNITO_IDENTITY_ATTRIBUTE, cognitoIdentityId); - filterChain.doFilter(servletRequest, servletResponse); - } - - - @Override - public void destroy() { - // nothing to do in destroy - } -} diff --git a/samples/springboot/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot/model/Error.java b/samples/springboot/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot/model/Error.java deleted file mode 100644 index 74d7ecbfe..000000000 --- a/samples/springboot/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot/model/Error.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance - * with the License. A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.sample.springboot.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/samples/springboot/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot/model/Pet.java b/samples/springboot/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot/model/Pet.java deleted file mode 100644 index 1b07530cd..000000000 --- a/samples/springboot/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot/model/Pet.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance - * with the License. A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.sample.springboot.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/samples/springboot/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot/model/PetData.java b/samples/springboot/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot/model/PetData.java deleted file mode 100644 index 05026fd3d..000000000 --- a/samples/springboot/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot/model/PetData.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance - * with the License. A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.sample.springboot.model; - - -import java.util.ArrayList; -import java.util.Calendar; -import java.util.Date; -import java.util.GregorianCalendar; -import java.util.List; -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/samples/springboot/pet-store/src/main/resources/logback.xml b/samples/springboot/pet-store/src/main/resources/logback.xml deleted file mode 100644 index 14a3a84fa..000000000 --- a/samples/springboot/pet-store/src/main/resources/logback.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/samples/springboot/pet-store/template.yml b/samples/springboot/pet-store/template.yml deleted file mode 100644 index de08aa74b..000000000 --- a/samples/springboot/pet-store/template.yml +++ /dev/null @@ -1,32 +0,0 @@ -AWSTemplateFormatVersion: '2010-09-09' -Transform: AWS::Serverless-2016-10-31 -Description: Example Pet Store API written with SpringBoot with the aws-serverless-java-container library - -Globals: - Api: - # API Gateway regional endpoints - EndpointConfiguration: REGIONAL - -Resources: - PetStoreFunction: - Type: AWS::Serverless::Function - Properties: - Handler: com.amazonaws.serverless.sample.springboot.StreamLambdaHandler::handleRequest - Runtime: java8 - CodeUri: . - MemorySize: 1512 - Policies: AWSLambdaBasicExecutionRole - Timeout: 60 - Events: - HttpApiEvent: - Type: HttpApi - Properties: - TimeoutInMillis: 20000 - PayloadFormatVersion: '1.0' - -Outputs: - SpringBootPetStoreApi: - Description: URL for application - Value: !Sub 'https://${ServerlessHttpApi}.execute-api.${AWS::Region}.amazonaws.com/pets' - Export: - Name: SpringBootPetStoreApi From 67b3bcb86187ac3d8b41610c729928f934190157 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 23 Jul 2021 10:30:40 +0200 Subject: [PATCH 133/888] Remove special Spring Boot 1.x handling from GitHub CI build script (#419) --- gha_build.sh | 32 ++++++++------------------------ 1 file changed, 8 insertions(+), 24 deletions(-) diff --git a/gha_build.sh b/gha_build.sh index 9867bf509..1db7ffc70 100755 --- a/gha_build.sh +++ b/gha_build.sh @@ -85,27 +85,11 @@ function sample { # set up the master pom otherwise we won't be able to find new dependencies cd ${WORKING_DIR}/ && mvn -q --non-recursive clean install -case $1 in - # special case for spring since we include both spring and springboot 1.x in one package - spring) - install ${FRAMEWORK} ${EXTRA_PARAMS} - if [[ "$RUN_ARCHETYPE" = true ]] ; then - archetype ${FRAMEWORK} - archetype springboot - fi - if [[ "$RUN_SAMPLES" = true ]] ; then - sample ${FRAMEWORK} - sample springboot - fi - break - ;; - *) - install ${FRAMEWORK} ${EXTRA_PARAMS} - if [[ "$RUN_ARCHETYPE" = true ]] ; then - archetype ${FRAMEWORK} - fi - if [[ "$RUN_SAMPLES" = true ]] ; then - sample ${FRAMEWORK} - fi - ;; -esac \ No newline at end of file +install ${FRAMEWORK} ${EXTRA_PARAMS} +if [[ "$RUN_ARCHETYPE" = true ]] ; then + archetype ${FRAMEWORK} +fi +if [[ "$RUN_SAMPLES" = true ]] ; then + sample ${FRAMEWORK} +fi +;; \ No newline at end of file From 38c98d2ee6ba92188591593128a6b43ca5690898 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 23 Jul 2021 10:31:37 +0200 Subject: [PATCH 134/888] Update hibernate-validator (CVE-2017-7536) --- aws-serverless-java-container-spring/pom.xml | 2 +- aws-serverless-java-container-springboot2/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/struts2/pet-store/build.gradle | 2 +- samples/struts2/pet-store/pom.xml | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index b5c553fab..370bfdd96 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -71,7 +71,7 @@ org.hibernate hibernate-validator - 5.4.2.Final + 5.4.3.Final test diff --git a/aws-serverless-java-container-springboot2/pom.xml b/aws-serverless-java-container-springboot2/pom.xml index 15bd9f824..2a313a4ce 100644 --- a/aws-serverless-java-container-springboot2/pom.xml +++ b/aws-serverless-java-container-springboot2/pom.xml @@ -156,7 +156,7 @@ org.hibernate hibernate-validator - 6.1.2.Final + 6.1.7.Final test diff --git a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle index 43a1f3e6f..0f3f4c682 100644 --- a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle @@ -33,7 +33,7 @@ dependencies { implementation ('org.apache.struts:struts2-core:2.5.26') { exclude group: 'org.apache.logging.log4j', module: 'log4j-api' } - implementation ('org.hibernate:hibernate-validator:5.3.6.Final') + implementation ('org.hibernate:hibernate-validator:5.4.3.Final') implementation ('com.fasterxml.jackson.core:jackson-databind:2.12.0') implementation ('org.apache.logging.log4j:log4j-core:2.14.1') implementation ('org.apache.logging.log4j:log4j-api:2.14.1') diff --git a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml index bdcbed596..3634cf8ae 100644 --- a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml @@ -70,7 +70,7 @@ org.hibernate hibernate-validator - 5.3.6.Final + 5.4.3.Final diff --git a/samples/struts2/pet-store/build.gradle b/samples/struts2/pet-store/build.gradle index 6c0c42a74..bfd3d8058 100644 --- a/samples/struts2/pet-store/build.gradle +++ b/samples/struts2/pet-store/build.gradle @@ -13,7 +13,7 @@ dependencies { 'org.apache.struts:struts2-bean-validation-plugin:2.5.26', 'org.apache.struts:struts2-junit-plugin:2.5.26', 'com.jgeppert.struts2:struts2-aws-lambda-support-plugin:1.2.0', - 'org.hibernate:hibernate-validator:5.3.6.Final', + 'org.hibernate:hibernate-validator:5.4.3.Final', 'com.fasterxml.jackson.core:jackson-databind:2.12.0', 'org.apache.logging.log4j:log4j-core:2.14.1', 'org.apache.logging.log4j:log4j-api:2.14.1', diff --git a/samples/struts2/pet-store/pom.xml b/samples/struts2/pet-store/pom.xml index f31b39c49..68dbcc8fe 100644 --- a/samples/struts2/pet-store/pom.xml +++ b/samples/struts2/pet-store/pom.xml @@ -81,7 +81,7 @@ org.hibernate hibernate-validator - 5.3.6.Final + 5.4.3.Final From 2aaa322a7def8ca4fe76eec6c95b79ffe6b9692b Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 23 Jul 2021 10:50:26 +0200 Subject: [PATCH 135/888] Remove special Spring Boot 1.x handling from GitHub CI build script (#419) --- gha_build.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/gha_build.sh b/gha_build.sh index 1db7ffc70..9d0001ca4 100755 --- a/gha_build.sh +++ b/gha_build.sh @@ -91,5 +91,4 @@ if [[ "$RUN_ARCHETYPE" = true ]] ; then fi if [[ "$RUN_SAMPLES" = true ]] ; then sample ${FRAMEWORK} -fi -;; \ No newline at end of file +fi \ No newline at end of file From 750f819079f4ec10987f851b4f58845662ac6971 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 23 Jul 2021 10:31:37 +0200 Subject: [PATCH 136/888] Update hibernate-validator (CVE-2017-7536) --- aws-serverless-java-container-spring/pom.xml | 2 +- aws-serverless-java-container-springboot2/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/struts2/pet-store/build.gradle | 2 +- samples/struts2/pet-store/pom.xml | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 2294f8a52..bdd2b380e 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -72,7 +72,7 @@ org.hibernate hibernate-validator - 5.4.2.Final + 5.4.3.Final test diff --git a/aws-serverless-java-container-springboot2/pom.xml b/aws-serverless-java-container-springboot2/pom.xml index 15bd9f824..2a313a4ce 100644 --- a/aws-serverless-java-container-springboot2/pom.xml +++ b/aws-serverless-java-container-springboot2/pom.xml @@ -156,7 +156,7 @@ org.hibernate hibernate-validator - 6.1.2.Final + 6.1.7.Final test diff --git a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle index 43a1f3e6f..0f3f4c682 100644 --- a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle @@ -33,7 +33,7 @@ dependencies { implementation ('org.apache.struts:struts2-core:2.5.26') { exclude group: 'org.apache.logging.log4j', module: 'log4j-api' } - implementation ('org.hibernate:hibernate-validator:5.3.6.Final') + implementation ('org.hibernate:hibernate-validator:5.4.3.Final') implementation ('com.fasterxml.jackson.core:jackson-databind:2.12.0') implementation ('org.apache.logging.log4j:log4j-core:2.14.1') implementation ('org.apache.logging.log4j:log4j-api:2.14.1') diff --git a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml index bdcbed596..3634cf8ae 100644 --- a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml @@ -70,7 +70,7 @@ org.hibernate hibernate-validator - 5.3.6.Final + 5.4.3.Final diff --git a/samples/struts2/pet-store/build.gradle b/samples/struts2/pet-store/build.gradle index 6c0c42a74..bfd3d8058 100644 --- a/samples/struts2/pet-store/build.gradle +++ b/samples/struts2/pet-store/build.gradle @@ -13,7 +13,7 @@ dependencies { 'org.apache.struts:struts2-bean-validation-plugin:2.5.26', 'org.apache.struts:struts2-junit-plugin:2.5.26', 'com.jgeppert.struts2:struts2-aws-lambda-support-plugin:1.2.0', - 'org.hibernate:hibernate-validator:5.3.6.Final', + 'org.hibernate:hibernate-validator:5.4.3.Final', 'com.fasterxml.jackson.core:jackson-databind:2.12.0', 'org.apache.logging.log4j:log4j-core:2.14.1', 'org.apache.logging.log4j:log4j-api:2.14.1', diff --git a/samples/struts2/pet-store/pom.xml b/samples/struts2/pet-store/pom.xml index f31b39c49..68dbcc8fe 100644 --- a/samples/struts2/pet-store/pom.xml +++ b/samples/struts2/pet-store/pom.xml @@ -81,7 +81,7 @@ org.hibernate hibernate-validator - 5.3.6.Final + 5.4.3.Final From 84d84e7fd6878d0fadcd452177d31d0fd9dd4ced Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 23 Jul 2021 13:40:53 +0200 Subject: [PATCH 137/888] Use latest versions of Spring, Spring Security, Spring Boot and Micronaut --- .../continuous-integration-workflow.yml | 19 ++++++++++++------- aws-serverless-java-container-core/pom.xml | 2 +- aws-serverless-java-container-spring/pom.xml | 4 ++-- .../pom.xml | 6 +++--- .../archetype-resources/build.gradle | 4 ++-- .../resources/archetype-resources/pom.xml | 2 +- .../archetype-resources/build.gradle | 2 +- .../resources/archetype-resources/pom.xml | 2 +- samples/micronaut/pet-store/build.gradle | 6 +++--- samples/micronaut/pet-store/gradle.properties | 2 +- samples/spring/pet-store/build.gradle | 4 ++-- samples/spring/pet-store/pom.xml | 2 +- samples/springboot2/pet-store/build.gradle | 2 +- samples/springboot2/pet-store/pom.xml | 2 +- 14 files changed, 32 insertions(+), 27 deletions(-) diff --git a/.github/workflows/continuous-integration-workflow.yml b/.github/workflows/continuous-integration-workflow.yml index b5212b127..d02e4e30d 100644 --- a/.github/workflows/continuous-integration-workflow.yml +++ b/.github/workflows/continuous-integration-workflow.yml @@ -53,11 +53,13 @@ jobs: # Spring core 5.2 and above. SpringBoot 1.5 is deprecated run: ./gha_build.sh spring true true -Djacoco.minCoverage=0.4 - name: Build Spring 4.3 - run: ./gha_build.sh spring false false -Dspring.version=4.3.29.RELEASE -Dspring-security.version=4.2.18.RELEASE + run: ./gha_build.sh spring false false -Dspring.version=4.3.30.RELEASE -Dspring-security.version=4.2.20.RELEASE - name: Build Spring 5.0 - run: ./gha_build.sh spring false false -Dspring.version=5.0.19.RELEASE -Dspring-security.version=5.0.18.RELEASE + run: ./gha_build.sh spring false false -Dspring.version=5.0.20.RELEASE -Dspring-security.version=5.0.19.RELEASE - name: Build Spring 5.1 - run: ./gha_build.sh spring false false -Dspring.version=5.1.18.RELEASE -Dspring-security.version=5.1.12.RELEASE + run: ./gha_build.sh spring false false -Dspring.version=5.1.20.RELEASE -Dspring-security.version=5.1.13.RELEASE + - name: Build Spring 5.2 + run: ./gha_build.sh spring false false -Dspring.version=5.2.16.RELEASE -Dspring-security.version=5.2.11.RELEASE build_springboot2: name: Build and test SpringBoot 2 @@ -66,10 +68,13 @@ jobs: - uses: actions/checkout@v2 - name: Build latest run: ./gha_build.sh springboot2 true true - - name: Build Spring Boot 2.0 - run: ./gha_build.sh springboot2 false false -Dspringboot.version=2.0.9.RELEASE -Dspring.version=5.0.19.RELEASE -Dspringsecurity.version=5.0.18.RELEASE - - name: Build Spring Boot 2.1 - run: ./gha_build.sh springboot2 false false -Dspringboot.version=2.1.17.RELEASE -Dspring.version=5.1.18.RELEASE -Dspringsecurity.version=5.1.12.RELEASE + # https://github.com/spring-projects/spring-boot/wiki/Supported-Versions + - name: Build Spring Boot 2.2 + run: ./gha_build.sh springboot2 false false -Dspringboot.version=2.2.13.RELEASE -Dspring.version=5.2.12.RELEASE -Dspringsecurity.version=5.2.8.RELEASE + - name: Build Spring Boot 2.3 + run: ./gha_build.sh springboot2 false false -Dspringboot.version=2.3.12.RELEASE -Dspring.version=5.2.15.RELEASE -Dspringsecurity.version=5.3.9 + - name: Build Spring Boot 2.4 + run: ./gha_build.sh springboot2 false false -Dspringboot.version=2.4.9 -Dspring.version=5.3.9 -Dspringsecurity.version=5.4.7 build_struts2: name: Build and test Struts 2 diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 297af2409..0af82a9c2 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -96,7 +96,7 @@ org.springframework.security spring-security-web - 5.2.11.RELEASE + 5.5.1 test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 370bfdd96..84d335169 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -16,8 +16,8 @@ - 5.2.16.RELEASE - 5.2.11.RELEASE + 5.3.9 + 5.5.1 diff --git a/aws-serverless-java-container-springboot2/pom.xml b/aws-serverless-java-container-springboot2/pom.xml index 2a313a4ce..aaa4ce4c8 100644 --- a/aws-serverless-java-container-springboot2/pom.xml +++ b/aws-serverless-java-container-springboot2/pom.xml @@ -15,9 +15,9 @@ 1.6-SNAPSHOT - 5.2.16.RELEASE - 2.2.13.RELEASE - 5.2.11.RELEASE + 5.3.9 + 2.5.3 + 5.5.1 1.8 1.8 diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index 9d3821249..95be75c46 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -7,8 +7,8 @@ repositories { dependencies { implementation ( - 'org.springframework:spring-webmvc:5.2.16.RELEASE', - 'org.springframework:spring-context:5.2.16.RELEASE', + 'org.springframework:spring-webmvc:5.3.9', + 'org.springframework:spring-context:5.3.9', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[1.0,)', 'org.apache.logging.log4j:log4j-core:2.14.1', 'org.apache.logging.log4j:log4j-api:2.14.1', diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index d981ccadf..db5b639e8 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 1.8 - 5.2.16.RELEASE + 5.3.9 4.12 2.14.1 diff --git a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle index 4ef18a41c..f6fa33320 100644 --- a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle @@ -8,7 +8,7 @@ repositories { dependencies { implementation ( - 'org.springframework.boot:spring-boot-starter-web:2.2.6.RELEASE', + 'org.springframework.boot:spring-boot-starter-web:2.5.3', 'com.amazonaws.serverless:aws-serverless-java-container-springboot2:[1.0,)', 'io.symphonia:lambda-logging:1.0.1' ) diff --git a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml index e25916482..5726d183e 100644 --- a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ org.springframework.boot spring-boot-starter-parent - 2.2.6.RELEASE + 2.5.3 diff --git a/samples/micronaut/pet-store/build.gradle b/samples/micronaut/pet-store/build.gradle index 6282d2d2c..688fb5511 100644 --- a/samples/micronaut/pet-store/build.gradle +++ b/samples/micronaut/pet-store/build.gradle @@ -3,7 +3,7 @@ plugins { id "com.github.johnrengelman.shadow" version "5.0.0" id "application" id "net.ltgt.apt-eclipse" version "0.21" - id "org.springframework.boot" version "2.1.12.RELEASE" + id "org.springframework.boot" version "2.5.3" id "io.spring.dependency-management" version "1.0.6.RELEASE" } @@ -53,8 +53,8 @@ dependencies { // spring support implementation("org.springframework.boot:spring-boot-starter-web") - runtime("io.micronaut.spring:micronaut-spring-boot:1.0.1") - runtime("io.micronaut.spring:micronaut-spring-web:1.0.1") + runtime("io.micronaut.spring:micronaut-spring-boot:4.0.0-RC2") + runtime("io.micronaut.spring:micronaut-spring-web:4.0.0-RC2") } test.classpath += configurations.developmentOnly diff --git a/samples/micronaut/pet-store/gradle.properties b/samples/micronaut/pet-store/gradle.properties index 04c818602..9208dc28d 100644 --- a/samples/micronaut/pet-store/gradle.properties +++ b/samples/micronaut/pet-store/gradle.properties @@ -1 +1 @@ -micronautVersion=1.2.3 \ No newline at end of file +micronautVersion=2.5.9 \ No newline at end of file diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index 843631572..441d06fa0 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -7,8 +7,8 @@ repositories { dependencies { implementation ( - 'org.springframework:spring-webmvc:5.2.9.RELEASE', - 'org.springframework:spring-context:5.2.9.RELEASE', + 'org.springframework:spring-webmvc:5.3.9', + 'org.springframework:spring-context:5.3.9', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[1.0,)', 'org.apache.logging.log4j:log4j-core:2.14.1', 'org.apache.logging.log4j:log4j-api:2.14.1', diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index 0f538486d..09d4d2efc 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -26,7 +26,7 @@ 1.8 1.8 - 5.2.16.RELEASE + 5.3.9 4.13.1 2.14.1 diff --git a/samples/springboot2/pet-store/build.gradle b/samples/springboot2/pet-store/build.gradle index 1ad1ff445..8ea300583 100644 --- a/samples/springboot2/pet-store/build.gradle +++ b/samples/springboot2/pet-store/build.gradle @@ -8,7 +8,7 @@ repositories { dependencies { implementation ( - implementation('org.springframework.boot:spring-boot-starter-web:2.2.6.RELEASE') { + implementation('org.springframework.boot:spring-boot-starter-web:2.5.3') { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat' }, 'com.amazonaws.serverless:aws-serverless-java-container-springboot2:[1.4,)', diff --git a/samples/springboot2/pet-store/pom.xml b/samples/springboot2/pet-store/pom.xml index 0532ec63e..32734e52b 100644 --- a/samples/springboot2/pet-store/pom.xml +++ b/samples/springboot2/pet-store/pom.xml @@ -10,7 +10,7 @@ org.springframework.boot spring-boot-starter-parent - 2.2.6.RELEASE + 2.5.3 From 4e1661f9a66b8845413da65319e62748ef869841 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 23 Jul 2021 14:04:34 +0200 Subject: [PATCH 138/888] Update Jersey version in sample --- samples/jersey/pet-store/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index 3ca193b56..cd0be0182 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -26,7 +26,7 @@ 1.8 1.8 - 2.30.1 + 2.34 2.12.0 From be474417ca6d6cae0f1fd3e3ce1e6c34cd8605c3 Mon Sep 17 00:00:00 2001 From: Georgios Andrianakis Date: Tue, 28 Jul 2020 16:12:19 +0300 Subject: [PATCH 139/888] Move afterburner registration to dedicated method This makes it a lot easier for frameworks that want to use the module in GraalVM, to exclude Afterburner (which does not work in GraalVM native image because it generated classes at runtime) --- .../serverless/proxy/internal/LambdaContainerHandler.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/LambdaContainerHandler.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/LambdaContainerHandler.java index d31ae257b..e29b1072c 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/LambdaContainerHandler.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/LambdaContainerHandler.java @@ -81,9 +81,12 @@ public abstract class LambdaContainerHandler Date: Fri, 23 Jul 2021 14:11:00 +0200 Subject: [PATCH 140/888] Update aws-lambda-java-core version --- aws-serverless-java-container-core/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- samples/jersey/pet-store/build.gradle | 2 +- samples/jersey/pet-store/pom.xml | 2 +- samples/spring/pet-store/pom.xml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 0af82a9c2..84a9f779f 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -25,7 +25,7 @@ com.amazonaws aws-lambda-java-core - 1.2.0 + 1.2.1 diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle index e51ef0985..f911093d7 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle @@ -7,7 +7,7 @@ repositories { dependencies { implementation ( - 'com.amazonaws:aws-lambda-java-core:1.2.0', + 'com.amazonaws:aws-lambda-java-core:1.2.1', 'com.amazonaws.serverless:aws-serverless-java-container-jersey:[1.0,)', 'com.fasterxml.jackson.core:jackson-databind:2.12.0', 'io.symphonia:lambda-logging:1.0.1' diff --git a/samples/jersey/pet-store/build.gradle b/samples/jersey/pet-store/build.gradle index 1805f9130..0466a1a28 100644 --- a/samples/jersey/pet-store/build.gradle +++ b/samples/jersey/pet-store/build.gradle @@ -7,7 +7,7 @@ repositories { dependencies { implementation ( - 'com.amazonaws:aws-lambda-java-core:1.2.0', + 'com.amazonaws:aws-lambda-java-core:1.2.1', 'com.amazonaws.serverless:aws-serverless-java-container-jersey:[1.0,)', 'com.fasterxml.jackson.core:jackson-databind:2.12.0', 'io.symphonia:lambda-logging:1.0.1' diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index cd0be0182..3b476ef77 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -40,7 +40,7 @@ com.amazonaws aws-lambda-java-core - 1.2.0 + 1.2.1 diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index 09d4d2efc..a9f4ee88b 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -41,7 +41,7 @@ com.amazonaws aws-lambda-java-core - 1.2.0 + 1.2.1 From 71a06b82c199fc080689a98d4e694762e5c4dfb2 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 23 Jul 2021 14:17:56 +0200 Subject: [PATCH 141/888] Update sparkjava version for samples and archetype --- .../src/main/resources/archetype-resources/build.gradle | 2 +- samples/spark/pet-store/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle index 9e3d10aa6..b6c842906 100644 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle @@ -7,7 +7,7 @@ repositories { dependencies { implementation ( - 'com.sparkjava:spark-core:2.9.1', + 'com.sparkjava:spark-core:2.9.3', 'com.amazonaws.serverless:aws-serverless-java-container-spark:[1.0,)', 'com.fasterxml.jackson.core:jackson-databind:2.12.0', 'io.symphonia:lambda-logging:1.0.1' diff --git a/samples/spark/pet-store/build.gradle b/samples/spark/pet-store/build.gradle index d31916776..7ac497bd7 100644 --- a/samples/spark/pet-store/build.gradle +++ b/samples/spark/pet-store/build.gradle @@ -7,7 +7,7 @@ repositories { dependencies { implementation ( - 'com.sparkjava:spark-core:2.9.1', + 'com.sparkjava:spark-core:2.9.3', 'com.amazonaws.serverless:aws-serverless-java-container-spark:[1.0,)', 'com.fasterxml.jackson.core:jackson-databind:2.12.0', 'io.symphonia:lambda-logging:1.0.1' From 1a6a9c722b06edf91e423a2b59b10e6803585d32 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 23 Jul 2021 14:21:27 +0200 Subject: [PATCH 142/888] Update Jackson databind version --- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- pom.xml | 2 +- samples/jersey/pet-store/build.gradle | 2 +- samples/jersey/pet-store/pom.xml | 2 +- samples/spark/pet-store/build.gradle | 2 +- samples/spark/pet-store/pom.xml | 2 +- samples/spring/pet-store/build.gradle | 2 +- samples/struts2/pet-store/build.gradle | 2 +- samples/struts2/pet-store/pom.xml | 2 +- 15 files changed, 15 insertions(+), 15 deletions(-) diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle index f911093d7..fd5a519c7 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle @@ -9,7 +9,7 @@ dependencies { implementation ( 'com.amazonaws:aws-lambda-java-core:1.2.1', 'com.amazonaws.serverless:aws-serverless-java-container-jersey:[1.0,)', - 'com.fasterxml.jackson.core:jackson-databind:2.12.0', + 'com.fasterxml.jackson.core:jackson-databind:2.12.4', 'io.symphonia:lambda-logging:1.0.1' ) diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml index 0d1b86dff..fd361bd71 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml @@ -15,7 +15,7 @@ 1.8 1.8 2.34 - 2.12.0 + 2.12.4 diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle index b6c842906..945708e45 100644 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle @@ -9,7 +9,7 @@ dependencies { implementation ( 'com.sparkjava:spark-core:2.9.3', 'com.amazonaws.serverless:aws-serverless-java-container-spark:[1.0,)', - 'com.fasterxml.jackson.core:jackson-databind:2.12.0', + 'com.fasterxml.jackson.core:jackson-databind:2.12.4', 'io.symphonia:lambda-logging:1.0.1' ) diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml index 2a4376246..3b3319367 100644 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 1.8 - 2.12.0 + 2.12.4 2.9.1 diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index 95be75c46..f50f2c6a4 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -13,7 +13,7 @@ dependencies { 'org.apache.logging.log4j:log4j-core:2.14.1', 'org.apache.logging.log4j:log4j-api:2.14.1', 'org.apache.logging.log4j:log4j-slf4j-impl:2.14.1', - 'com.fasterxml.jackson.core:jackson-databind:2.12.0', + 'com.fasterxml.jackson.core:jackson-databind:2.12.4', 'com.amazonaws:aws-lambda-java-log4j2:1.1.0', ) diff --git a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle index 0f3f4c682..e53e81162 100644 --- a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle @@ -34,7 +34,7 @@ dependencies { exclude group: 'org.apache.logging.log4j', module: 'log4j-api' } implementation ('org.hibernate:hibernate-validator:5.4.3.Final') - implementation ('com.fasterxml.jackson.core:jackson-databind:2.12.0') + implementation ('com.fasterxml.jackson.core:jackson-databind:2.12.4') implementation ('org.apache.logging.log4j:log4j-core:2.14.1') implementation ('org.apache.logging.log4j:log4j-api:2.14.1') implementation ('org.apache.logging.log4j:log4j-slf4j-impl:2.14.1') diff --git a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml index 3634cf8ae..08690bac2 100644 --- a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 1.8 2.5.26 - 2.12.0 + 2.12.4 4.13.1 2.14.1 diff --git a/pom.xml b/pom.xml index 1ecd48c47..d0dc9d327 100644 --- a/pom.xml +++ b/pom.xml @@ -83,7 +83,7 @@ 0.7 5.3.2 - 2.12.0 + 2.12.4 1.7.30 UTF-8 diff --git a/samples/jersey/pet-store/build.gradle b/samples/jersey/pet-store/build.gradle index 0466a1a28..00dfa51df 100644 --- a/samples/jersey/pet-store/build.gradle +++ b/samples/jersey/pet-store/build.gradle @@ -9,7 +9,7 @@ dependencies { implementation ( 'com.amazonaws:aws-lambda-java-core:1.2.1', 'com.amazonaws.serverless:aws-serverless-java-container-jersey:[1.0,)', - 'com.fasterxml.jackson.core:jackson-databind:2.12.0', + 'com.fasterxml.jackson.core:jackson-databind:2.12.4', 'io.symphonia:lambda-logging:1.0.1' ) diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index 3b476ef77..c8ab8b981 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -27,7 +27,7 @@ 1.8 1.8 2.34 - 2.12.0 + 2.12.4 diff --git a/samples/spark/pet-store/build.gradle b/samples/spark/pet-store/build.gradle index 7ac497bd7..f7da14e03 100644 --- a/samples/spark/pet-store/build.gradle +++ b/samples/spark/pet-store/build.gradle @@ -9,7 +9,7 @@ dependencies { implementation ( 'com.sparkjava:spark-core:2.9.3', 'com.amazonaws.serverless:aws-serverless-java-container-spark:[1.0,)', - 'com.fasterxml.jackson.core:jackson-databind:2.12.0', + 'com.fasterxml.jackson.core:jackson-databind:2.12.4', 'io.symphonia:lambda-logging:1.0.1' ) } diff --git a/samples/spark/pet-store/pom.xml b/samples/spark/pet-store/pom.xml index 722c26ece..bb773153f 100644 --- a/samples/spark/pet-store/pom.xml +++ b/samples/spark/pet-store/pom.xml @@ -26,7 +26,7 @@ 1.8 1.8 - 2.12.0 + 2.12.4 2.9.1 diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index 441d06fa0..3994b66db 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -13,7 +13,7 @@ dependencies { 'org.apache.logging.log4j:log4j-core:2.14.1', 'org.apache.logging.log4j:log4j-api:2.14.1', 'org.apache.logging.log4j:log4j-slf4j-impl:2.14.1', - 'com.fasterxml.jackson.core:jackson-databind:2.12.0', + 'com.fasterxml.jackson.core:jackson-databind:2.12.4', 'com.amazonaws:aws-lambda-java-log4j2:1.2.0', ) } diff --git a/samples/struts2/pet-store/build.gradle b/samples/struts2/pet-store/build.gradle index bfd3d8058..0229ddeee 100644 --- a/samples/struts2/pet-store/build.gradle +++ b/samples/struts2/pet-store/build.gradle @@ -14,7 +14,7 @@ dependencies { 'org.apache.struts:struts2-junit-plugin:2.5.26', 'com.jgeppert.struts2:struts2-aws-lambda-support-plugin:1.2.0', 'org.hibernate:hibernate-validator:5.4.3.Final', - 'com.fasterxml.jackson.core:jackson-databind:2.12.0', + 'com.fasterxml.jackson.core:jackson-databind:2.12.4', 'org.apache.logging.log4j:log4j-core:2.14.1', 'org.apache.logging.log4j:log4j-api:2.14.1', 'org.apache.logging.log4j:log4j-slf4j-impl:2.14.1', diff --git a/samples/struts2/pet-store/pom.xml b/samples/struts2/pet-store/pom.xml index 68dbcc8fe..9bf3449f0 100644 --- a/samples/struts2/pet-store/pom.xml +++ b/samples/struts2/pet-store/pom.xml @@ -27,7 +27,7 @@ 1.8 1.8 2.5.26 - 2.12.0 + 2.12.4 4.13.1 2.14.1 From 2eb20f72662e6a50cd7efd5e5b8e00634cad6456 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 23 Jul 2021 14:39:13 +0200 Subject: [PATCH 143/888] remove log4j-to-slf4j (log4j-slf4j-impl is used) --- samples/struts2/pet-store/build.gradle | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/samples/struts2/pet-store/build.gradle b/samples/struts2/pet-store/build.gradle index 0229ddeee..a29ea35bd 100644 --- a/samples/struts2/pet-store/build.gradle +++ b/samples/struts2/pet-store/build.gradle @@ -5,6 +5,12 @@ repositories { mavenCentral() } +configurations { + implementation { + exclude group: 'org.apache.logging.log4j', module: 'log4j-to-slf4j' + } +} + dependencies { implementation ( 'com.amazonaws.serverless:aws-serverless-java-container-struts2:[1.0,)', @@ -12,7 +18,7 @@ dependencies { 'org.apache.struts:struts2-rest-plugin:2.5.26', 'org.apache.struts:struts2-bean-validation-plugin:2.5.26', 'org.apache.struts:struts2-junit-plugin:2.5.26', - 'com.jgeppert.struts2:struts2-aws-lambda-support-plugin:1.2.0', + 'com.jgeppert.struts2:struts2-aws-lambda-support-plugin:1.3.0', 'org.hibernate:hibernate-validator:5.4.3.Final', 'com.fasterxml.jackson.core:jackson-databind:2.12.4', 'org.apache.logging.log4j:log4j-core:2.14.1', From 496aae0ef286bc0417fb6784cad426021b81695c Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 23 Jul 2021 14:56:26 +0200 Subject: [PATCH 144/888] Update maven-shade-plugin version to fix "Cannot load implementation hint 'org.springframework.boot.maven.PropertiesMergingResourceTransformer': org/apache/maven/plugins/shade/resource/ReproducibleResourceTransformer: org.apache.maven.plugins.shade.resource.ReproducibleResourceTransformer" --- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/jersey/pet-store/pom.xml | 2 +- samples/spark/pet-store/pom.xml | 2 +- samples/spring/pet-store/pom.xml | 2 +- samples/springboot2/pet-store/pom.xml | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml index fd361bd71..e72e17131 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml @@ -80,7 +80,7 @@ org.apache.maven.plugins maven-shade-plugin - 2.3 + 3.2.4 false diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml index 3b3319367..83069a1b7 100644 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml @@ -55,7 +55,7 @@ org.apache.maven.plugins maven-shade-plugin - 2.3 + 3.2.4 false diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index db5b639e8..5a02b9a5c 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -94,7 +94,7 @@ org.apache.maven.plugins maven-shade-plugin - 2.3 + 3.2.4 package diff --git a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml index 5726d183e..cbdb3b225 100644 --- a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml @@ -58,7 +58,7 @@ org.apache.maven.plugins maven-shade-plugin - 2.3 + 3.2.4 false diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index c8ab8b981..b65e0a495 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -98,7 +98,7 @@ org.apache.maven.plugins maven-shade-plugin - 2.3 + 3.2.4 false diff --git a/samples/spark/pet-store/pom.xml b/samples/spark/pet-store/pom.xml index bb773153f..c275d114b 100644 --- a/samples/spark/pet-store/pom.xml +++ b/samples/spark/pet-store/pom.xml @@ -67,7 +67,7 @@ org.apache.maven.plugins maven-shade-plugin - 2.3 + 3.2.4 false diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index a9f4ee88b..63960011a 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -109,7 +109,7 @@ org.apache.maven.plugins maven-shade-plugin - 2.3 + 3.2.4 package diff --git a/samples/springboot2/pet-store/pom.xml b/samples/springboot2/pet-store/pom.xml index 32734e52b..2eb9e0df0 100644 --- a/samples/springboot2/pet-store/pom.xml +++ b/samples/springboot2/pet-store/pom.xml @@ -52,7 +52,7 @@ org.apache.maven.plugins maven-shade-plugin - 2.3 + 3.2.4 false From 85dcf1d2f447cf203dfa01989b75f8d7cd0c4cf2 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 23 Jul 2021 15:31:42 +0200 Subject: [PATCH 145/888] use Spring 5.2.15 for Spring Boot 2.2 build (CVE-2021-22118) --- .github/workflows/continuous-integration-workflow.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/continuous-integration-workflow.yml b/.github/workflows/continuous-integration-workflow.yml index d02e4e30d..34666aca5 100644 --- a/.github/workflows/continuous-integration-workflow.yml +++ b/.github/workflows/continuous-integration-workflow.yml @@ -70,7 +70,7 @@ jobs: run: ./gha_build.sh springboot2 true true # https://github.com/spring-projects/spring-boot/wiki/Supported-Versions - name: Build Spring Boot 2.2 - run: ./gha_build.sh springboot2 false false -Dspringboot.version=2.2.13.RELEASE -Dspring.version=5.2.12.RELEASE -Dspringsecurity.version=5.2.8.RELEASE + run: ./gha_build.sh springboot2 false false -Dspringboot.version=2.2.13.RELEASE -Dspring.version=5.2.15.RELEASE -Dspringsecurity.version=5.2.8.RELEASE - name: Build Spring Boot 2.3 run: ./gha_build.sh springboot2 false false -Dspringboot.version=2.3.12.RELEASE -Dspring.version=5.2.15.RELEASE -Dspringsecurity.version=5.3.9 - name: Build Spring Boot 2.4 From a6f63e83e68940963756592ad5948a03c2376100 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 23 Jul 2021 15:44:50 +0200 Subject: [PATCH 146/888] fix Spring Security version for Spring Boot 2.3 build --- .github/workflows/continuous-integration-workflow.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/continuous-integration-workflow.yml b/.github/workflows/continuous-integration-workflow.yml index 34666aca5..c73f7741a 100644 --- a/.github/workflows/continuous-integration-workflow.yml +++ b/.github/workflows/continuous-integration-workflow.yml @@ -72,7 +72,7 @@ jobs: - name: Build Spring Boot 2.2 run: ./gha_build.sh springboot2 false false -Dspringboot.version=2.2.13.RELEASE -Dspring.version=5.2.15.RELEASE -Dspringsecurity.version=5.2.8.RELEASE - name: Build Spring Boot 2.3 - run: ./gha_build.sh springboot2 false false -Dspringboot.version=2.3.12.RELEASE -Dspring.version=5.2.15.RELEASE -Dspringsecurity.version=5.3.9 + run: ./gha_build.sh springboot2 false false -Dspringboot.version=2.3.12.RELEASE -Dspring.version=5.2.15.RELEASE -Dspringsecurity.version=5.3.9.RELEASE - name: Build Spring Boot 2.4 run: ./gha_build.sh springboot2 false false -Dspringboot.version=2.4.9 -Dspring.version=5.3.9 -Dspringsecurity.version=5.4.7 From 1d57069e57c2e842dc067ef29dacb241ee8a9fa2 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 23 Jul 2021 15:48:19 +0200 Subject: [PATCH 147/888] Update Slf4J and Junit versions --- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- pom.xml | 6 +++--- samples/spring/pet-store/pom.xml | 2 +- samples/struts2/pet-store/pom.xml | 2 +- 10 files changed, 12 insertions(+), 12 deletions(-) diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle index fd5a519c7..26cd8fe80 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle @@ -23,7 +23,7 @@ dependencies { exclude group: 'javax.inject', module: "javax.inject" } - testImplementation("junit:junit:4.12") + testImplementation("junit:junit:4.13.2") } task buildZip(type: Zip) { diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle index 945708e45..53a5f5ee6 100644 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle @@ -13,7 +13,7 @@ dependencies { 'io.symphonia:lambda-logging:1.0.1' ) - testImplementation("junit:junit:4.12") + testImplementation("junit:junit:4.13.2") } task buildZip(type: Zip) { diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index f50f2c6a4..083e5aedb 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -17,7 +17,7 @@ dependencies { 'com.amazonaws:aws-lambda-java-log4j2:1.1.0', ) - testImplementation("junit:junit:4.12") + testImplementation("junit:junit:4.13.2") } task buildZip(type: Zip) { diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index 5a02b9a5c..ccb13a449 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -17,7 +17,7 @@ 1.8 1.8 5.3.9 - 4.12 + 4.13.2 2.14.1 diff --git a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle index f6fa33320..1dea0ac49 100644 --- a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle @@ -13,7 +13,7 @@ dependencies { 'io.symphonia:lambda-logging:1.0.1' ) - testImplementation("junit:junit:4.12") + testImplementation("junit:junit:4.13.2") } task buildZip(type: Zip) { diff --git a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle index e53e81162..6afaed74b 100644 --- a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle @@ -40,7 +40,7 @@ dependencies { implementation ('org.apache.logging.log4j:log4j-slf4j-impl:2.14.1') implementation ('com.amazonaws:aws-lambda-java-log4j2:1.2.0') - testImplementation('junit:junit:4.12') + testImplementation('junit:junit:4.13.2') testImplementation('org.apache.struts:struts2-junit-plugin:2.5.26') { exclude group: 'org.apache.struts', module: 'struts2-core' } diff --git a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml index 08690bac2..c98f94751 100644 --- a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml @@ -17,7 +17,7 @@ 1.8 2.5.26 2.12.4 - 4.13.1 + 4.13.2 2.14.1 diff --git a/pom.xml b/pom.xml index d0dc9d327..0deed60bf 100644 --- a/pom.xml +++ b/pom.xml @@ -82,9 +82,9 @@ 0.7 - 5.3.2 + 6.2.2 2.12.4 - 1.7.30 + 1.7.32 UTF-8 @@ -93,7 +93,7 @@ junit junit - 4.13.1 + 4.13.2 test diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index 63960011a..4e745f58e 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -27,7 +27,7 @@ 1.8 1.8 5.3.9 - 4.13.1 + 4.13.2 2.14.1 diff --git a/samples/struts2/pet-store/pom.xml b/samples/struts2/pet-store/pom.xml index 9bf3449f0..8559e9091 100644 --- a/samples/struts2/pet-store/pom.xml +++ b/samples/struts2/pet-store/pom.xml @@ -28,7 +28,7 @@ 1.8 2.5.26 2.12.4 - 4.13.1 + 4.13.2 2.14.1 From ac986c0bffec5cdc1c19f28501446382cdb4e274 Mon Sep 17 00:00:00 2001 From: Johannes Geppert Date: Sat, 24 Jul 2021 14:01:02 +0200 Subject: [PATCH 148/888] Fix minor adjustments and typos README.md and template.yml --- samples/struts2/pet-store/README.md | 23 +++++++++++++++++------ samples/struts2/pet-store/template.yml | 2 +- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/samples/struts2/pet-store/README.md b/samples/struts2/pet-store/README.md index 89cc1676b..80ad76b6c 100644 --- a/samples/struts2/pet-store/README.md +++ b/samples/struts2/pet-store/README.md @@ -26,11 +26,22 @@ Once the deployment is completed, the SAM CLI will print out the stack's outputs ``` ... ---------------------------------------------------------------------------------------------------------- -OutputKey-Description OutputValue ---------------------------------------------------------------------------------------------------------- -PetStoreApi - URL for application https://xxxxxxxxxx.execute-api.us-west-2.amazonaws.com/pets ---------------------------------------------------------------------------------------------------------- +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +Outputs +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +Key Struts2PetStoreApi +Description URL for application +Value https://n60c1ycwa2.execute-api.eu-central-1.amazonaws.com/pets +------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ +``` +## Test -$ curl https://xxxxxxxxxx.execute-api.us-west-2.amazonaws.com/pets +### JSON Request: +``` +$ curl https://xxxxxxxxxx.execute-api.us-west-2.amazonaws.com/pets.json +``` + +### XML Request +``` +$ curl https://xxxxxxxxxx.execute-api.us-west-2.amazonaws.com/pets.xml ``` \ No newline at end of file diff --git a/samples/struts2/pet-store/template.yml b/samples/struts2/pet-store/template.yml index 72128dd5b..243b07a20 100644 --- a/samples/struts2/pet-store/template.yml +++ b/samples/struts2/pet-store/template.yml @@ -25,7 +25,7 @@ Resources: PayloadFormatVersion: '1.0' Outputs: - SpringPetStoreApi: + Struts2PetStoreApi: Description: URL for application Value: !Sub 'https://${ServerlessHttpApi}.execute-api.${AWS::Region}.amazonaws.com/pets' Export: From d4b64d292a39dee7efb70c382776b7e68385e75c Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 26 Jul 2021 13:56:03 +0200 Subject: [PATCH 149/888] Revert version updates for Micronaut sample, more work to be done (see micronaut-sample-update branch) --- samples/micronaut/pet-store/build.gradle | 6 +++--- samples/micronaut/pet-store/gradle.properties | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/samples/micronaut/pet-store/build.gradle b/samples/micronaut/pet-store/build.gradle index 688fb5511..6282d2d2c 100644 --- a/samples/micronaut/pet-store/build.gradle +++ b/samples/micronaut/pet-store/build.gradle @@ -3,7 +3,7 @@ plugins { id "com.github.johnrengelman.shadow" version "5.0.0" id "application" id "net.ltgt.apt-eclipse" version "0.21" - id "org.springframework.boot" version "2.5.3" + id "org.springframework.boot" version "2.1.12.RELEASE" id "io.spring.dependency-management" version "1.0.6.RELEASE" } @@ -53,8 +53,8 @@ dependencies { // spring support implementation("org.springframework.boot:spring-boot-starter-web") - runtime("io.micronaut.spring:micronaut-spring-boot:4.0.0-RC2") - runtime("io.micronaut.spring:micronaut-spring-web:4.0.0-RC2") + runtime("io.micronaut.spring:micronaut-spring-boot:1.0.1") + runtime("io.micronaut.spring:micronaut-spring-web:1.0.1") } test.classpath += configurations.developmentOnly diff --git a/samples/micronaut/pet-store/gradle.properties b/samples/micronaut/pet-store/gradle.properties index 9208dc28d..04c818602 100644 --- a/samples/micronaut/pet-store/gradle.properties +++ b/samples/micronaut/pet-store/gradle.properties @@ -1 +1 @@ -micronautVersion=2.5.9 \ No newline at end of file +micronautVersion=1.2.3 \ No newline at end of file From a27a160ff598a752818d8df6612708231b901eff Mon Sep 17 00:00:00 2001 From: Buliani Date: Tue, 27 Jul 2021 11:28:25 -0700 Subject: [PATCH 150/888] chore(deps): Bump in javadoc plugin version --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 0deed60bf..2502db5c6 100644 --- a/pom.xml +++ b/pom.xml @@ -163,7 +163,7 @@ org.apache.maven.plugins maven-javadoc-plugin - 2.10.4 + 3.3.0 From ac47d7ff6caa01a4422c2e032915420e8fe750d2 Mon Sep 17 00:00:00 2001 From: Buliani Date: Tue, 27 Jul 2021 11:49:06 -0700 Subject: [PATCH 151/888] [maven-release-plugin] prepare release aws-serverless-java-container-1.6 --- aws-serverless-java-container-core/pom.xml | 4 ++-- aws-serverless-java-container-jersey/pom.xml | 6 +++--- aws-serverless-java-container-spark/pom.xml | 6 +++--- aws-serverless-java-container-spring/pom.xml | 6 +++--- aws-serverless-java-container-springboot2/pom.xml | 6 +++--- aws-serverless-java-container-struts2/pom.xml | 6 +++--- aws-serverless-jersey-archetype/pom.xml | 6 +++--- aws-serverless-spark-archetype/pom.xml | 6 +++--- aws-serverless-spring-archetype/pom.xml | 6 +++--- aws-serverless-springboot2-archetype/pom.xml | 6 +++--- aws-serverless-struts2-archetype/pom.xml | 6 +++--- pom.xml | 4 ++-- 12 files changed, 34 insertions(+), 34 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 84a9f779f..37f52d7e9 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Core Allows Java applications written for a servlet container to run in AWS Lambda https://aws.amazon.com/lambda - 1.6-SNAPSHOT + 1.6 com.amazonaws.serverless aws-serverless-java-container - 1.6-SNAPSHOT + 1.6 .. diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index 32c2f47e3..d81ae6ff2 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Jersey implementation Allows Java applications written for Jersey to run in AWS Lambda https://aws.amazon.com/lambda - 1.6-SNAPSHOT + 1.6 com.amazonaws.serverless aws-serverless-java-container - 1.6-SNAPSHOT + 1.6 .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.6-SNAPSHOT + 1.6 com.fasterxml.jackson.core diff --git a/aws-serverless-java-container-spark/pom.xml b/aws-serverless-java-container-spark/pom.xml index 2cdfc2e55..38b39b21a 100644 --- a/aws-serverless-java-container-spark/pom.xml +++ b/aws-serverless-java-container-spark/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spark implementation Allows Java applications written for Spark to run in AWS Lambda https://aws.amazon.com/lambda - 1.6-SNAPSHOT + 1.6 com.amazonaws.serverless aws-serverless-java-container - 1.6-SNAPSHOT + 1.6 .. @@ -37,7 +37,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.6-SNAPSHOT + 1.6 diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 84d335169..93b8fd657 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spring implementation Allows Java applications written for the Spring framework to run in AWS Lambda https://aws.amazon.com/lambda - 1.6-SNAPSHOT + 1.6 com.amazonaws.serverless aws-serverless-java-container - 1.6-SNAPSHOT + 1.6 .. @@ -25,7 +25,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.6-SNAPSHOT + 1.6 diff --git a/aws-serverless-java-container-springboot2/pom.xml b/aws-serverless-java-container-springboot2/pom.xml index aaa4ce4c8..16d347bcb 100644 --- a/aws-serverless-java-container-springboot2/pom.xml +++ b/aws-serverless-java-container-springboot2/pom.xml @@ -3,7 +3,7 @@ aws-serverless-java-container com.amazonaws.serverless - 1.6-SNAPSHOT + 1.6 4.0.0 @@ -12,7 +12,7 @@ AWS Serverless Java container support - SpringBoot 2 implementation Allows Java applications written for SpringBoot 2 to run in AWS Lambda https://aws.amazon.com/lambda - 1.6-SNAPSHOT + 1.6 5.3.9 @@ -27,7 +27,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.6-SNAPSHOT + 1.6 diff --git a/aws-serverless-java-container-struts2/pom.xml b/aws-serverless-java-container-struts2/pom.xml index e7ae1c106..73c2be3ba 100644 --- a/aws-serverless-java-container-struts2/pom.xml +++ b/aws-serverless-java-container-struts2/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Struts2 implementation Allows Java applications written for the Struts2 framework to run in AWS Lambda https://aws.amazon.com/lambda - 1.6-SNAPSHOT + 1.6 com.amazonaws.serverless aws-serverless-java-container - 1.6-SNAPSHOT + 1.6 @@ -23,7 +23,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.6-SNAPSHOT + 1.6 diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index 93f18286b..0b0ed652d 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.6-SNAPSHOT + 1.6 com.amazonaws.serverless.archetypes aws-serverless-jersey-archetype - 1.6-SNAPSHOT + 1.6 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.6 diff --git a/aws-serverless-spark-archetype/pom.xml b/aws-serverless-spark-archetype/pom.xml index ccd50e996..a6cd51152 100644 --- a/aws-serverless-spark-archetype/pom.xml +++ b/aws-serverless-spark-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.6-SNAPSHOT + 1.6 com.amazonaws.serverless.archetypes aws-serverless-spark-archetype - 1.6-SNAPSHOT + 1.6 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.6 diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index e53803fcb..dfff59ebe 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.6-SNAPSHOT + 1.6 com.amazonaws.serverless.archetypes aws-serverless-spring-archetype - 1.6-SNAPSHOT + 1.6 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.6 diff --git a/aws-serverless-springboot2-archetype/pom.xml b/aws-serverless-springboot2-archetype/pom.xml index 76a3c52d6..e5cd32f46 100644 --- a/aws-serverless-springboot2-archetype/pom.xml +++ b/aws-serverless-springboot2-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.6-SNAPSHOT + 1.6 com.amazonaws.serverless.archetypes aws-serverless-springboot2-archetype - 1.6-SNAPSHOT + 1.6 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.6 diff --git a/aws-serverless-struts2-archetype/pom.xml b/aws-serverless-struts2-archetype/pom.xml index 1ac7fc093..dbecd3c3c 100644 --- a/aws-serverless-struts2-archetype/pom.xml +++ b/aws-serverless-struts2-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.6-SNAPSHOT + 1.6 com.amazonaws.serverless.archetypes aws-serverless-struts2-archetype - 1.6-SNAPSHOT + 1.6 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.6 diff --git a/pom.xml b/pom.xml index 2502db5c6..07e7de90f 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazonaws.serverless aws-serverless-java-container pom - 1.6-SNAPSHOT + 1.6 AWS Serverless Java container A Java framework to run Spring, Spring Boot, Jersey, Spark, and Struts applications inside AWS Lambda https://github.com/awslabs/aws-serverless-java-container @@ -42,7 +42,7 @@ https://github.com/awslabs/aws-serverless-java-container.git scm:git:git@github.com:awslabs/aws-serverless-java-container.git scm:git:git@github.com:awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.6 From 5fdf51095fb9cc7d4d5a890d6ee6f524c24274e4 Mon Sep 17 00:00:00 2001 From: Buliani Date: Tue, 27 Jul 2021 11:49:06 -0700 Subject: [PATCH 152/888] [maven-release-plugin] prepare for next development iteration --- aws-serverless-java-container-core/pom.xml | 4 ++-- aws-serverless-java-container-jersey/pom.xml | 6 +++--- aws-serverless-java-container-spark/pom.xml | 6 +++--- aws-serverless-java-container-spring/pom.xml | 6 +++--- aws-serverless-java-container-springboot2/pom.xml | 6 +++--- aws-serverless-java-container-struts2/pom.xml | 6 +++--- aws-serverless-jersey-archetype/pom.xml | 6 +++--- aws-serverless-spark-archetype/pom.xml | 6 +++--- aws-serverless-spring-archetype/pom.xml | 6 +++--- aws-serverless-springboot2-archetype/pom.xml | 6 +++--- aws-serverless-struts2-archetype/pom.xml | 6 +++--- pom.xml | 4 ++-- 12 files changed, 34 insertions(+), 34 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 37f52d7e9..970b2c86e 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Core Allows Java applications written for a servlet container to run in AWS Lambda https://aws.amazon.com/lambda - 1.6 + 1.7-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.6 + 1.7-SNAPSHOT .. diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index d81ae6ff2..7516a9962 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Jersey implementation Allows Java applications written for Jersey to run in AWS Lambda https://aws.amazon.com/lambda - 1.6 + 1.7-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.6 + 1.7-SNAPSHOT .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.6 + 1.7-SNAPSHOT com.fasterxml.jackson.core diff --git a/aws-serverless-java-container-spark/pom.xml b/aws-serverless-java-container-spark/pom.xml index 38b39b21a..5a93d0243 100644 --- a/aws-serverless-java-container-spark/pom.xml +++ b/aws-serverless-java-container-spark/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spark implementation Allows Java applications written for Spark to run in AWS Lambda https://aws.amazon.com/lambda - 1.6 + 1.7-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.6 + 1.7-SNAPSHOT .. @@ -37,7 +37,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.6 + 1.7-SNAPSHOT diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 93b8fd657..4fbb8e3ed 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spring implementation Allows Java applications written for the Spring framework to run in AWS Lambda https://aws.amazon.com/lambda - 1.6 + 1.7-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.6 + 1.7-SNAPSHOT .. @@ -25,7 +25,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.6 + 1.7-SNAPSHOT diff --git a/aws-serverless-java-container-springboot2/pom.xml b/aws-serverless-java-container-springboot2/pom.xml index 16d347bcb..ad7934cad 100644 --- a/aws-serverless-java-container-springboot2/pom.xml +++ b/aws-serverless-java-container-springboot2/pom.xml @@ -3,7 +3,7 @@ aws-serverless-java-container com.amazonaws.serverless - 1.6 + 1.7-SNAPSHOT 4.0.0 @@ -12,7 +12,7 @@ AWS Serverless Java container support - SpringBoot 2 implementation Allows Java applications written for SpringBoot 2 to run in AWS Lambda https://aws.amazon.com/lambda - 1.6 + 1.7-SNAPSHOT 5.3.9 @@ -27,7 +27,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.6 + 1.7-SNAPSHOT diff --git a/aws-serverless-java-container-struts2/pom.xml b/aws-serverless-java-container-struts2/pom.xml index 73c2be3ba..fe9a8f2d0 100644 --- a/aws-serverless-java-container-struts2/pom.xml +++ b/aws-serverless-java-container-struts2/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Struts2 implementation Allows Java applications written for the Struts2 framework to run in AWS Lambda https://aws.amazon.com/lambda - 1.6 + 1.7-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.6 + 1.7-SNAPSHOT @@ -23,7 +23,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.6 + 1.7-SNAPSHOT diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index 0b0ed652d..70d430102 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.6 + 1.7-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-jersey-archetype - 1.6 + 1.7-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.6 + HEAD diff --git a/aws-serverless-spark-archetype/pom.xml b/aws-serverless-spark-archetype/pom.xml index a6cd51152..71695939c 100644 --- a/aws-serverless-spark-archetype/pom.xml +++ b/aws-serverless-spark-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.6 + 1.7-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-spark-archetype - 1.6 + 1.7-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.6 + HEAD diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index dfff59ebe..7b36ba97b 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.6 + 1.7-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-spring-archetype - 1.6 + 1.7-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.6 + HEAD diff --git a/aws-serverless-springboot2-archetype/pom.xml b/aws-serverless-springboot2-archetype/pom.xml index e5cd32f46..e88d67696 100644 --- a/aws-serverless-springboot2-archetype/pom.xml +++ b/aws-serverless-springboot2-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.6 + 1.7-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-springboot2-archetype - 1.6 + 1.7-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.6 + HEAD diff --git a/aws-serverless-struts2-archetype/pom.xml b/aws-serverless-struts2-archetype/pom.xml index dbecd3c3c..807c0414a 100644 --- a/aws-serverless-struts2-archetype/pom.xml +++ b/aws-serverless-struts2-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.6 + 1.7-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-struts2-archetype - 1.6 + 1.7-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.6 + HEAD diff --git a/pom.xml b/pom.xml index 07e7de90f..0a82796b7 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazonaws.serverless aws-serverless-java-container pom - 1.6 + 1.7-SNAPSHOT AWS Serverless Java container A Java framework to run Spring, Spring Boot, Jersey, Spark, and Struts applications inside AWS Lambda https://github.com/awslabs/aws-serverless-java-container @@ -42,7 +42,7 @@ https://github.com/awslabs/aws-serverless-java-container.git scm:git:git@github.com:awslabs/aws-serverless-java-container.git scm:git:git@github.com:awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.6 + HEAD From a72bad46a263d07d71fc2765be94899bfddbba11 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Wed, 28 Jul 2021 08:07:27 +0200 Subject: [PATCH 153/888] Removed link to Spring Boot 1.x wiki page --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index cad345f06..e9dad056f 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,6 @@ Serverless Java Container natively supports API Gateway's proxy integration mode Follow the quick start guides in [our wiki](https://github.com/awslabs/aws-serverless-java-container/wiki) to integrate Serverless Java Container with your project: * [Spring quick start](https://github.com/awslabs/aws-serverless-java-container/wiki/Quick-start---Spring) -* [Spring Boot quick start](https://github.com/awslabs/aws-serverless-java-container/wiki/Quick-start---Spring-Boot) * [Spring Boot 2 quick start](https://github.com/awslabs/aws-serverless-java-container/wiki/Quick-start---Spring-Boot2) * [Apache Struts quick start](https://github.com/awslabs/aws-serverless-java-container/wiki/Quick-start---Struts) * [Jersey quick start](https://github.com/awslabs/aws-serverless-java-container/wiki/Quick-start---Jersey) From dff29b6215aa79798b83dd732016cf79e673c7a7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 10 Dec 2021 01:14:14 +0000 Subject: [PATCH 154/888] Bump log4j-api from 2.14.1 to 2.15.0 in /samples/struts2/pet-store Bumps log4j-api from 2.14.1 to 2.15.0. --- updated-dependencies: - dependency-name: org.apache.logging.log4j:log4j-api dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- samples/struts2/pet-store/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/struts2/pet-store/pom.xml b/samples/struts2/pet-store/pom.xml index 8559e9091..a7b594f4d 100644 --- a/samples/struts2/pet-store/pom.xml +++ b/samples/struts2/pet-store/pom.xml @@ -29,7 +29,7 @@ 2.5.26 2.12.4 4.13.2 - 2.14.1 + 2.15.0 From f9ee1dd35b0c54c75cc184dd396a9e3fab650dc1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 10 Dec 2021 01:14:22 +0000 Subject: [PATCH 155/888] Bump log4j-api from 2.14.1 to 2.15.0 in /samples/spring/pet-store Bumps log4j-api from 2.14.1 to 2.15.0. --- updated-dependencies: - dependency-name: org.apache.logging.log4j:log4j-api dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- samples/spring/pet-store/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index 4e745f58e..c19df853d 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -28,7 +28,7 @@ 1.8 5.3.9 4.13.2 - 2.14.1 + 2.15.0 From 074fa5b1e8d8a95f31bc4aa041a5d7a11558fb7a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 10 Dec 2021 01:46:28 +0000 Subject: [PATCH 156/888] Bump log4j-core from 2.14.1 to 2.15.0 in /samples/struts2/pet-store Bumps log4j-core from 2.14.1 to 2.15.0. --- updated-dependencies: - dependency-name: org.apache.logging.log4j:log4j-core dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- samples/struts2/pet-store/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/struts2/pet-store/pom.xml b/samples/struts2/pet-store/pom.xml index 8559e9091..a7b594f4d 100644 --- a/samples/struts2/pet-store/pom.xml +++ b/samples/struts2/pet-store/pom.xml @@ -29,7 +29,7 @@ 2.5.26 2.12.4 4.13.2 - 2.14.1 + 2.15.0 From 5cb4cd76d5479953287c135ce7badcae3f66f7a0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 10 Dec 2021 01:46:39 +0000 Subject: [PATCH 157/888] Bump log4j-core from 2.14.1 to 2.15.0 in /samples/spring/pet-store Bumps log4j-core from 2.14.1 to 2.15.0. --- updated-dependencies: - dependency-name: org.apache.logging.log4j:log4j-core dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- samples/spring/pet-store/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index 4e745f58e..c19df853d 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -28,7 +28,7 @@ 1.8 5.3.9 4.13.2 - 2.14.1 + 2.15.0 From 8283d0d5b60f091c0a4a25fe5f40294f36f4b19e Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Wed, 15 Dec 2021 12:58:51 +0100 Subject: [PATCH 158/888] Update Log4J dependency to 2.16.0 (CVE-2021-44228) --- .../src/main/resources/archetype-resources/build.gradle | 8 ++++---- .../src/main/resources/archetype-resources/pom.xml | 4 ++-- .../src/main/resources/archetype-resources/build.gradle | 8 ++++---- .../src/main/resources/archetype-resources/pom.xml | 4 ++-- samples/spring/pet-store/build.gradle | 8 ++++---- samples/spring/pet-store/pom.xml | 4 ++-- samples/struts2/pet-store/build.gradle | 8 ++++---- samples/struts2/pet-store/pom.xml | 4 ++-- 8 files changed, 24 insertions(+), 24 deletions(-) diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index 083e5aedb..92e0ce173 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -10,11 +10,11 @@ dependencies { 'org.springframework:spring-webmvc:5.3.9', 'org.springframework:spring-context:5.3.9', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[1.0,)', - 'org.apache.logging.log4j:log4j-core:2.14.1', - 'org.apache.logging.log4j:log4j-api:2.14.1', - 'org.apache.logging.log4j:log4j-slf4j-impl:2.14.1', + 'org.apache.logging.log4j:log4j-core:2.16.0', + 'org.apache.logging.log4j:log4j-api:2.16.0', + 'org.apache.logging.log4j:log4j-slf4j-impl:2.16.0', 'com.fasterxml.jackson.core:jackson-databind:2.12.4', - 'com.amazonaws:aws-lambda-java-log4j2:1.1.0', + 'com.amazonaws:aws-lambda-java-log4j2:1.3.0', ) testImplementation("junit:junit:4.13.2") diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index ccb13a449..cfd1220c0 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -18,7 +18,7 @@ 1.8 5.3.9 4.13.2 - 2.14.1 + 2.16.0 @@ -74,7 +74,7 @@ com.amazonaws aws-lambda-java-log4j2 - 1.2.0 + 1.3.0 diff --git a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle index 6afaed74b..b5a36ae8a 100644 --- a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle @@ -35,10 +35,10 @@ dependencies { } implementation ('org.hibernate:hibernate-validator:5.4.3.Final') implementation ('com.fasterxml.jackson.core:jackson-databind:2.12.4') - implementation ('org.apache.logging.log4j:log4j-core:2.14.1') - implementation ('org.apache.logging.log4j:log4j-api:2.14.1') - implementation ('org.apache.logging.log4j:log4j-slf4j-impl:2.14.1') - implementation ('com.amazonaws:aws-lambda-java-log4j2:1.2.0') + implementation ('org.apache.logging.log4j:log4j-core:2.16.0') + implementation ('org.apache.logging.log4j:log4j-api:2.16.0') + implementation ('org.apache.logging.log4j:log4j-slf4j-impl:2.16.0') + implementation ('com.amazonaws:aws-lambda-java-log4j2:1.3.0') testImplementation('junit:junit:4.13.2') testImplementation('org.apache.struts:struts2-junit-plugin:2.5.26') { diff --git a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml index c98f94751..9c862788e 100644 --- a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml @@ -18,7 +18,7 @@ 2.5.26 2.12.4 4.13.2 - 2.14.1 + 2.16.0 @@ -110,7 +110,7 @@ com.amazonaws aws-lambda-java-log4j2 - 1.2.0 + 1.3.0 diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index 3994b66db..fa543cd7b 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -10,11 +10,11 @@ dependencies { 'org.springframework:spring-webmvc:5.3.9', 'org.springframework:spring-context:5.3.9', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[1.0,)', - 'org.apache.logging.log4j:log4j-core:2.14.1', - 'org.apache.logging.log4j:log4j-api:2.14.1', - 'org.apache.logging.log4j:log4j-slf4j-impl:2.14.1', + 'org.apache.logging.log4j:log4j-core:2.16.0', + 'org.apache.logging.log4j:log4j-api:2.16.0', + 'org.apache.logging.log4j:log4j-slf4j-impl:2.16.0', 'com.fasterxml.jackson.core:jackson-databind:2.12.4', - 'com.amazonaws:aws-lambda-java-log4j2:1.2.0', + 'com.amazonaws:aws-lambda-java-log4j2:1.3.0', ) } diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index c19df853d..26c99dadc 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -28,7 +28,7 @@ 1.8 5.3.9 4.13.2 - 2.15.0 + 2.16.0 @@ -90,7 +90,7 @@ com.amazonaws aws-lambda-java-log4j2 - 1.2.0 + 1.3.0 diff --git a/samples/struts2/pet-store/build.gradle b/samples/struts2/pet-store/build.gradle index a29ea35bd..e8f06ea4b 100644 --- a/samples/struts2/pet-store/build.gradle +++ b/samples/struts2/pet-store/build.gradle @@ -21,10 +21,10 @@ dependencies { 'com.jgeppert.struts2:struts2-aws-lambda-support-plugin:1.3.0', 'org.hibernate:hibernate-validator:5.4.3.Final', 'com.fasterxml.jackson.core:jackson-databind:2.12.4', - 'org.apache.logging.log4j:log4j-core:2.14.1', - 'org.apache.logging.log4j:log4j-api:2.14.1', - 'org.apache.logging.log4j:log4j-slf4j-impl:2.14.1', - 'com.amazonaws:aws-lambda-java-log4j2:1.2.0', + 'org.apache.logging.log4j:log4j-core:2.16.0', + 'org.apache.logging.log4j:log4j-api:2.16.0', + 'org.apache.logging.log4j:log4j-slf4j-impl:2.16.0', + 'com.amazonaws:aws-lambda-java-log4j2:1.3.0', ) } diff --git a/samples/struts2/pet-store/pom.xml b/samples/struts2/pet-store/pom.xml index a7b594f4d..7dc5269f7 100644 --- a/samples/struts2/pet-store/pom.xml +++ b/samples/struts2/pet-store/pom.xml @@ -29,7 +29,7 @@ 2.5.26 2.12.4 4.13.2 - 2.15.0 + 2.16.0 @@ -121,7 +121,7 @@ com.amazonaws aws-lambda-java-log4j2 - 1.2.0 + 1.3.0 From 66e90a1f205fa45412604dc583aa89db67df4a93 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Wed, 15 Dec 2021 13:51:17 +0100 Subject: [PATCH 159/888] Explicitly set Log4J version for Struts2 as transitive dependency is outdated (CVE-2021-44228) --- aws-serverless-java-container-struts2/pom.xml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/aws-serverless-java-container-struts2/pom.xml b/aws-serverless-java-container-struts2/pom.xml index fe9a8f2d0..272379d7f 100644 --- a/aws-serverless-java-container-struts2/pom.xml +++ b/aws-serverless-java-container-struts2/pom.xml @@ -16,6 +16,7 @@ 2.5.26 + 2.16.0 @@ -37,6 +38,18 @@ + + org.apache.logging.log4j + log4j-api + ${log4j.version} + runtime + + + org.apache.logging.log4j + log4j-core + ${log4j.version} + runtime + org.apache.struts From 7f122e7f0f557a699d6b788567c2213596ee61e2 Mon Sep 17 00:00:00 2001 From: sapessi Date: Wed, 15 Dec 2021 08:53:09 -0800 Subject: [PATCH 160/888] [maven-release-plugin] prepare release aws-serverless-java-container-1.6.1 --- aws-serverless-java-container-core/pom.xml | 4 ++-- aws-serverless-java-container-jersey/pom.xml | 6 +++--- aws-serverless-java-container-spark/pom.xml | 6 +++--- aws-serverless-java-container-spring/pom.xml | 6 +++--- aws-serverless-java-container-springboot2/pom.xml | 6 +++--- aws-serverless-java-container-struts2/pom.xml | 6 +++--- aws-serverless-jersey-archetype/pom.xml | 6 +++--- aws-serverless-spark-archetype/pom.xml | 6 +++--- aws-serverless-spring-archetype/pom.xml | 6 +++--- aws-serverless-springboot2-archetype/pom.xml | 6 +++--- aws-serverless-struts2-archetype/pom.xml | 6 +++--- pom.xml | 4 ++-- 12 files changed, 34 insertions(+), 34 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 970b2c86e..b2bbfac3c 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Core Allows Java applications written for a servlet container to run in AWS Lambda https://aws.amazon.com/lambda - 1.7-SNAPSHOT + 1.6.1 com.amazonaws.serverless aws-serverless-java-container - 1.7-SNAPSHOT + 1.6.1 .. diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index 7516a9962..eba157f7f 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Jersey implementation Allows Java applications written for Jersey to run in AWS Lambda https://aws.amazon.com/lambda - 1.7-SNAPSHOT + 1.6.1 com.amazonaws.serverless aws-serverless-java-container - 1.7-SNAPSHOT + 1.6.1 .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.7-SNAPSHOT + 1.6.1 com.fasterxml.jackson.core diff --git a/aws-serverless-java-container-spark/pom.xml b/aws-serverless-java-container-spark/pom.xml index 5a93d0243..a42b7eb99 100644 --- a/aws-serverless-java-container-spark/pom.xml +++ b/aws-serverless-java-container-spark/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spark implementation Allows Java applications written for Spark to run in AWS Lambda https://aws.amazon.com/lambda - 1.7-SNAPSHOT + 1.6.1 com.amazonaws.serverless aws-serverless-java-container - 1.7-SNAPSHOT + 1.6.1 .. @@ -37,7 +37,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.7-SNAPSHOT + 1.6.1 diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 4fbb8e3ed..85acd16fb 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spring implementation Allows Java applications written for the Spring framework to run in AWS Lambda https://aws.amazon.com/lambda - 1.7-SNAPSHOT + 1.6.1 com.amazonaws.serverless aws-serverless-java-container - 1.7-SNAPSHOT + 1.6.1 .. @@ -25,7 +25,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.7-SNAPSHOT + 1.6.1 diff --git a/aws-serverless-java-container-springboot2/pom.xml b/aws-serverless-java-container-springboot2/pom.xml index ad7934cad..38b4d6321 100644 --- a/aws-serverless-java-container-springboot2/pom.xml +++ b/aws-serverless-java-container-springboot2/pom.xml @@ -3,7 +3,7 @@ aws-serverless-java-container com.amazonaws.serverless - 1.7-SNAPSHOT + 1.6.1 4.0.0 @@ -12,7 +12,7 @@ AWS Serverless Java container support - SpringBoot 2 implementation Allows Java applications written for SpringBoot 2 to run in AWS Lambda https://aws.amazon.com/lambda - 1.7-SNAPSHOT + 1.6.1 5.3.9 @@ -27,7 +27,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.7-SNAPSHOT + 1.6.1 diff --git a/aws-serverless-java-container-struts2/pom.xml b/aws-serverless-java-container-struts2/pom.xml index 272379d7f..470262be5 100644 --- a/aws-serverless-java-container-struts2/pom.xml +++ b/aws-serverless-java-container-struts2/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Struts2 implementation Allows Java applications written for the Struts2 framework to run in AWS Lambda https://aws.amazon.com/lambda - 1.7-SNAPSHOT + 1.6.1 com.amazonaws.serverless aws-serverless-java-container - 1.7-SNAPSHOT + 1.6.1 @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.7-SNAPSHOT + 1.6.1 diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index 70d430102..4542124a2 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.7-SNAPSHOT + 1.6.1 com.amazonaws.serverless.archetypes aws-serverless-jersey-archetype - 1.7-SNAPSHOT + 1.6.1 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.6.1 diff --git a/aws-serverless-spark-archetype/pom.xml b/aws-serverless-spark-archetype/pom.xml index 71695939c..a6ae7ae9b 100644 --- a/aws-serverless-spark-archetype/pom.xml +++ b/aws-serverless-spark-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.7-SNAPSHOT + 1.6.1 com.amazonaws.serverless.archetypes aws-serverless-spark-archetype - 1.7-SNAPSHOT + 1.6.1 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.6.1 diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index 7b36ba97b..e28518d9e 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.7-SNAPSHOT + 1.6.1 com.amazonaws.serverless.archetypes aws-serverless-spring-archetype - 1.7-SNAPSHOT + 1.6.1 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.6.1 diff --git a/aws-serverless-springboot2-archetype/pom.xml b/aws-serverless-springboot2-archetype/pom.xml index e88d67696..421bce87f 100644 --- a/aws-serverless-springboot2-archetype/pom.xml +++ b/aws-serverless-springboot2-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.7-SNAPSHOT + 1.6.1 com.amazonaws.serverless.archetypes aws-serverless-springboot2-archetype - 1.7-SNAPSHOT + 1.6.1 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.6.1 diff --git a/aws-serverless-struts2-archetype/pom.xml b/aws-serverless-struts2-archetype/pom.xml index 807c0414a..ad3ca4960 100644 --- a/aws-serverless-struts2-archetype/pom.xml +++ b/aws-serverless-struts2-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.7-SNAPSHOT + 1.6.1 com.amazonaws.serverless.archetypes aws-serverless-struts2-archetype - 1.7-SNAPSHOT + 1.6.1 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.6.1 diff --git a/pom.xml b/pom.xml index 0a82796b7..27029eea4 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazonaws.serverless aws-serverless-java-container pom - 1.7-SNAPSHOT + 1.6.1 AWS Serverless Java container A Java framework to run Spring, Spring Boot, Jersey, Spark, and Struts applications inside AWS Lambda https://github.com/awslabs/aws-serverless-java-container @@ -42,7 +42,7 @@ https://github.com/awslabs/aws-serverless-java-container.git scm:git:git@github.com:awslabs/aws-serverless-java-container.git scm:git:git@github.com:awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.6.1 From eddea6d6072a042616afcc96dcad2d767c218ee6 Mon Sep 17 00:00:00 2001 From: sapessi Date: Wed, 15 Dec 2021 08:53:09 -0800 Subject: [PATCH 161/888] [maven-release-plugin] prepare for next development iteration --- aws-serverless-java-container-core/pom.xml | 4 ++-- aws-serverless-java-container-jersey/pom.xml | 6 +++--- aws-serverless-java-container-spark/pom.xml | 6 +++--- aws-serverless-java-container-spring/pom.xml | 6 +++--- aws-serverless-java-container-springboot2/pom.xml | 6 +++--- aws-serverless-java-container-struts2/pom.xml | 6 +++--- aws-serverless-jersey-archetype/pom.xml | 6 +++--- aws-serverless-spark-archetype/pom.xml | 6 +++--- aws-serverless-spring-archetype/pom.xml | 6 +++--- aws-serverless-springboot2-archetype/pom.xml | 6 +++--- aws-serverless-struts2-archetype/pom.xml | 6 +++--- pom.xml | 4 ++-- 12 files changed, 34 insertions(+), 34 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index b2bbfac3c..970b2c86e 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Core Allows Java applications written for a servlet container to run in AWS Lambda https://aws.amazon.com/lambda - 1.6.1 + 1.7-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.6.1 + 1.7-SNAPSHOT .. diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index eba157f7f..7516a9962 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Jersey implementation Allows Java applications written for Jersey to run in AWS Lambda https://aws.amazon.com/lambda - 1.6.1 + 1.7-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.6.1 + 1.7-SNAPSHOT .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.6.1 + 1.7-SNAPSHOT com.fasterxml.jackson.core diff --git a/aws-serverless-java-container-spark/pom.xml b/aws-serverless-java-container-spark/pom.xml index a42b7eb99..5a93d0243 100644 --- a/aws-serverless-java-container-spark/pom.xml +++ b/aws-serverless-java-container-spark/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spark implementation Allows Java applications written for Spark to run in AWS Lambda https://aws.amazon.com/lambda - 1.6.1 + 1.7-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.6.1 + 1.7-SNAPSHOT .. @@ -37,7 +37,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.6.1 + 1.7-SNAPSHOT diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 85acd16fb..4fbb8e3ed 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spring implementation Allows Java applications written for the Spring framework to run in AWS Lambda https://aws.amazon.com/lambda - 1.6.1 + 1.7-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.6.1 + 1.7-SNAPSHOT .. @@ -25,7 +25,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.6.1 + 1.7-SNAPSHOT diff --git a/aws-serverless-java-container-springboot2/pom.xml b/aws-serverless-java-container-springboot2/pom.xml index 38b4d6321..ad7934cad 100644 --- a/aws-serverless-java-container-springboot2/pom.xml +++ b/aws-serverless-java-container-springboot2/pom.xml @@ -3,7 +3,7 @@ aws-serverless-java-container com.amazonaws.serverless - 1.6.1 + 1.7-SNAPSHOT 4.0.0 @@ -12,7 +12,7 @@ AWS Serverless Java container support - SpringBoot 2 implementation Allows Java applications written for SpringBoot 2 to run in AWS Lambda https://aws.amazon.com/lambda - 1.6.1 + 1.7-SNAPSHOT 5.3.9 @@ -27,7 +27,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.6.1 + 1.7-SNAPSHOT diff --git a/aws-serverless-java-container-struts2/pom.xml b/aws-serverless-java-container-struts2/pom.xml index 470262be5..272379d7f 100644 --- a/aws-serverless-java-container-struts2/pom.xml +++ b/aws-serverless-java-container-struts2/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Struts2 implementation Allows Java applications written for the Struts2 framework to run in AWS Lambda https://aws.amazon.com/lambda - 1.6.1 + 1.7-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.6.1 + 1.7-SNAPSHOT @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.6.1 + 1.7-SNAPSHOT diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index 4542124a2..70d430102 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.6.1 + 1.7-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-jersey-archetype - 1.6.1 + 1.7-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.6.1 + HEAD diff --git a/aws-serverless-spark-archetype/pom.xml b/aws-serverless-spark-archetype/pom.xml index a6ae7ae9b..71695939c 100644 --- a/aws-serverless-spark-archetype/pom.xml +++ b/aws-serverless-spark-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.6.1 + 1.7-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-spark-archetype - 1.6.1 + 1.7-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.6.1 + HEAD diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index e28518d9e..7b36ba97b 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.6.1 + 1.7-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-spring-archetype - 1.6.1 + 1.7-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.6.1 + HEAD diff --git a/aws-serverless-springboot2-archetype/pom.xml b/aws-serverless-springboot2-archetype/pom.xml index 421bce87f..e88d67696 100644 --- a/aws-serverless-springboot2-archetype/pom.xml +++ b/aws-serverless-springboot2-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.6.1 + 1.7-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-springboot2-archetype - 1.6.1 + 1.7-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.6.1 + HEAD diff --git a/aws-serverless-struts2-archetype/pom.xml b/aws-serverless-struts2-archetype/pom.xml index ad3ca4960..807c0414a 100644 --- a/aws-serverless-struts2-archetype/pom.xml +++ b/aws-serverless-struts2-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.6.1 + 1.7-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-struts2-archetype - 1.6.1 + 1.7-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.6.1 + HEAD diff --git a/pom.xml b/pom.xml index 27029eea4..0a82796b7 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazonaws.serverless aws-serverless-java-container pom - 1.6.1 + 1.7-SNAPSHOT AWS Serverless Java container A Java framework to run Spring, Spring Boot, Jersey, Spark, and Struts applications inside AWS Lambda https://github.com/awslabs/aws-serverless-java-container @@ -42,7 +42,7 @@ https://github.com/awslabs/aws-serverless-java-container.git scm:git:git@github.com:awslabs/aws-serverless-java-container.git scm:git:git@github.com:awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.6.1 + HEAD From 1db559c51aef3fbb5237fba2ac2e69e00fb1f840 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Sun, 19 Dec 2021 19:52:03 +0100 Subject: [PATCH 162/888] Update Log4J dependency to 2.17.0 (CVE-2021-45105) --- aws-serverless-java-container-struts2/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 6 +++--- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 6 +++--- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/spring/pet-store/build.gradle | 6 +++--- samples/spring/pet-store/pom.xml | 2 +- samples/struts2/pet-store/build.gradle | 6 +++--- samples/struts2/pet-store/pom.xml | 2 +- 9 files changed, 17 insertions(+), 17 deletions(-) diff --git a/aws-serverless-java-container-struts2/pom.xml b/aws-serverless-java-container-struts2/pom.xml index 272379d7f..4fe989229 100644 --- a/aws-serverless-java-container-struts2/pom.xml +++ b/aws-serverless-java-container-struts2/pom.xml @@ -16,7 +16,7 @@ 2.5.26 - 2.16.0 + 2.17.0 diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index 92e0ce173..c9caab5db 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -10,9 +10,9 @@ dependencies { 'org.springframework:spring-webmvc:5.3.9', 'org.springframework:spring-context:5.3.9', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[1.0,)', - 'org.apache.logging.log4j:log4j-core:2.16.0', - 'org.apache.logging.log4j:log4j-api:2.16.0', - 'org.apache.logging.log4j:log4j-slf4j-impl:2.16.0', + 'org.apache.logging.log4j:log4j-core:2.17.0', + 'org.apache.logging.log4j:log4j-api:2.17.0', + 'org.apache.logging.log4j:log4j-slf4j-impl:2.17.0', 'com.fasterxml.jackson.core:jackson-databind:2.12.4', 'com.amazonaws:aws-lambda-java-log4j2:1.3.0', ) diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index cfd1220c0..38df0ebe1 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -18,7 +18,7 @@ 1.8 5.3.9 4.13.2 - 2.16.0 + 2.17.0 diff --git a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle index b5a36ae8a..f0462e0c8 100644 --- a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle @@ -35,9 +35,9 @@ dependencies { } implementation ('org.hibernate:hibernate-validator:5.4.3.Final') implementation ('com.fasterxml.jackson.core:jackson-databind:2.12.4') - implementation ('org.apache.logging.log4j:log4j-core:2.16.0') - implementation ('org.apache.logging.log4j:log4j-api:2.16.0') - implementation ('org.apache.logging.log4j:log4j-slf4j-impl:2.16.0') + implementation ('org.apache.logging.log4j:log4j-core:2.17.0') + implementation ('org.apache.logging.log4j:log4j-api:2.17.0') + implementation ('org.apache.logging.log4j:log4j-slf4j-impl:2.17.0') implementation ('com.amazonaws:aws-lambda-java-log4j2:1.3.0') testImplementation('junit:junit:4.13.2') diff --git a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml index 9c862788e..c5247a243 100644 --- a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml @@ -18,7 +18,7 @@ 2.5.26 2.12.4 4.13.2 - 2.16.0 + 2.17.0 diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index fa543cd7b..e885ef5d6 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -10,9 +10,9 @@ dependencies { 'org.springframework:spring-webmvc:5.3.9', 'org.springframework:spring-context:5.3.9', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[1.0,)', - 'org.apache.logging.log4j:log4j-core:2.16.0', - 'org.apache.logging.log4j:log4j-api:2.16.0', - 'org.apache.logging.log4j:log4j-slf4j-impl:2.16.0', + 'org.apache.logging.log4j:log4j-core:2.17.0', + 'org.apache.logging.log4j:log4j-api:2.17.0', + 'org.apache.logging.log4j:log4j-slf4j-impl:2.17.0', 'com.fasterxml.jackson.core:jackson-databind:2.12.4', 'com.amazonaws:aws-lambda-java-log4j2:1.3.0', ) diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index 26c99dadc..e6cc8492f 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -28,7 +28,7 @@ 1.8 5.3.9 4.13.2 - 2.16.0 + 2.17.0 diff --git a/samples/struts2/pet-store/build.gradle b/samples/struts2/pet-store/build.gradle index e8f06ea4b..77ea7419b 100644 --- a/samples/struts2/pet-store/build.gradle +++ b/samples/struts2/pet-store/build.gradle @@ -21,9 +21,9 @@ dependencies { 'com.jgeppert.struts2:struts2-aws-lambda-support-plugin:1.3.0', 'org.hibernate:hibernate-validator:5.4.3.Final', 'com.fasterxml.jackson.core:jackson-databind:2.12.4', - 'org.apache.logging.log4j:log4j-core:2.16.0', - 'org.apache.logging.log4j:log4j-api:2.16.0', - 'org.apache.logging.log4j:log4j-slf4j-impl:2.16.0', + 'org.apache.logging.log4j:log4j-core:2.17.0', + 'org.apache.logging.log4j:log4j-api:2.17.0', + 'org.apache.logging.log4j:log4j-slf4j-impl:2.17.0', 'com.amazonaws:aws-lambda-java-log4j2:1.3.0', ) } diff --git a/samples/struts2/pet-store/pom.xml b/samples/struts2/pet-store/pom.xml index 7dc5269f7..efff55826 100644 --- a/samples/struts2/pet-store/pom.xml +++ b/samples/struts2/pet-store/pom.xml @@ -29,7 +29,7 @@ 2.5.26 2.12.4 4.13.2 - 2.16.0 + 2.17.0 From 1a41a69133eb326e33d52dfe809a975e0fe04428 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 27 Dec 2021 10:37:03 +0100 Subject: [PATCH 163/888] Update Struts2 dependency to 2.5.28.2 --- aws-serverless-java-container-struts2/pom.xml | 16 +--------------- .../resources/archetype-resources/build.gradle | 10 +++++----- .../main/resources/archetype-resources/pom.xml | 2 +- samples/struts2/pet-store/build.gradle | 8 ++++---- samples/struts2/pet-store/pom.xml | 2 +- 5 files changed, 12 insertions(+), 26 deletions(-) diff --git a/aws-serverless-java-container-struts2/pom.xml b/aws-serverless-java-container-struts2/pom.xml index 4fe989229..0454adb0d 100644 --- a/aws-serverless-java-container-struts2/pom.xml +++ b/aws-serverless-java-container-struts2/pom.xml @@ -15,8 +15,7 @@ - 2.5.26 - 2.17.0 + 2.5.28.2 @@ -38,19 +37,6 @@ - - org.apache.logging.log4j - log4j-api - ${log4j.version} - runtime - - - org.apache.logging.log4j - log4j-core - ${log4j.version} - runtime - - org.apache.struts struts2-json-plugin diff --git a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle index f0462e0c8..c943a9093 100644 --- a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle @@ -18,19 +18,19 @@ dependencies { exclude group: 'org.apache.logging.log4j', module: 'log4j-api' exclude group: 'org.apache.logging.log4j', module: 'log4j-to-slf4j' } - implementation ('org.apache.struts:struts2-convention-plugin:2.5.26') { + implementation ('org.apache.struts:struts2-convention-plugin:2.5.28.2') { exclude group: 'org.apache.struts', module: 'struts2-core' } - implementation ('org.apache.struts:struts2-rest-plugin:2.5.26') { + implementation ('org.apache.struts:struts2-rest-plugin:2.5.28.2') { exclude group: 'org.apache.struts', module: 'struts2-core' } - implementation ('org.apache.struts:struts2-bean-validation-plugin:2.5.26') { + implementation ('org.apache.struts:struts2-bean-validation-plugin:2.5.28.2') { exclude group: 'org.apache.struts', module: 'struts2-core' } implementation ('com.jgeppert.struts2:struts2-aws-lambda-support-plugin:1.3.0') { exclude group: 'org.apache.struts', module: 'struts2-core' } - implementation ('org.apache.struts:struts2-core:2.5.26') { + implementation ('org.apache.struts:struts2-core:2.5.28.2') { exclude group: 'org.apache.logging.log4j', module: 'log4j-api' } implementation ('org.hibernate:hibernate-validator:5.4.3.Final') @@ -41,7 +41,7 @@ dependencies { implementation ('com.amazonaws:aws-lambda-java-log4j2:1.3.0') testImplementation('junit:junit:4.13.2') - testImplementation('org.apache.struts:struts2-junit-plugin:2.5.26') { + testImplementation('org.apache.struts:struts2-junit-plugin:2.5.28.2') { exclude group: 'org.apache.struts', module: 'struts2-core' } } diff --git a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml index c5247a243..409b76286 100644 --- a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml @@ -15,7 +15,7 @@ 1.8 1.8 - 2.5.26 + 2.5.28.2 2.12.4 4.13.2 2.17.0 diff --git a/samples/struts2/pet-store/build.gradle b/samples/struts2/pet-store/build.gradle index 77ea7419b..9923630a6 100644 --- a/samples/struts2/pet-store/build.gradle +++ b/samples/struts2/pet-store/build.gradle @@ -14,10 +14,10 @@ configurations { dependencies { implementation ( 'com.amazonaws.serverless:aws-serverless-java-container-struts2:[1.0,)', - 'org.apache.struts:struts2-convention-plugin:2.5.26', - 'org.apache.struts:struts2-rest-plugin:2.5.26', - 'org.apache.struts:struts2-bean-validation-plugin:2.5.26', - 'org.apache.struts:struts2-junit-plugin:2.5.26', + 'org.apache.struts:struts2-convention-plugin:2.5.28.2', + 'org.apache.struts:struts2-rest-plugin:2.5.28.2', + 'org.apache.struts:struts2-bean-validation-plugin:2.5.28.2', + 'org.apache.struts:struts2-junit-plugin:2.5.28.2', 'com.jgeppert.struts2:struts2-aws-lambda-support-plugin:1.3.0', 'org.hibernate:hibernate-validator:5.4.3.Final', 'com.fasterxml.jackson.core:jackson-databind:2.12.4', diff --git a/samples/struts2/pet-store/pom.xml b/samples/struts2/pet-store/pom.xml index efff55826..0e36f5c8d 100644 --- a/samples/struts2/pet-store/pom.xml +++ b/samples/struts2/pet-store/pom.xml @@ -26,7 +26,7 @@ 1.8 1.8 - 2.5.26 + 2.5.28.2 2.12.4 4.13.2 2.17.0 From d3702dc6875afa0590e5274d8954ac2db4ff0b02 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 27 Dec 2021 10:58:19 +0100 Subject: [PATCH 164/888] Minor dependency updates (Jackson, Jersey, Jetty, aws-lambda-java-log4j2, --- aws-serverless-java-container-jersey/pom.xml | 2 +- aws-serverless-java-container-spark/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 6 +++--- .../src/main/resources/archetype-resources/pom.xml | 4 ++-- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 4 ++-- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 4 ++-- .../src/main/resources/archetype-resources/pom.xml | 4 ++-- pom.xml | 2 +- samples/jersey/pet-store/build.gradle | 2 +- samples/jersey/pet-store/pom.xml | 4 ++-- samples/spark/pet-store/build.gradle | 2 +- samples/spark/pet-store/pom.xml | 2 +- samples/spring/pet-store/build.gradle | 4 ++-- samples/spring/pet-store/pom.xml | 2 +- samples/struts2/pet-store/build.gradle | 4 ++-- samples/struts2/pet-store/pom.xml | 4 ++-- 19 files changed, 29 insertions(+), 29 deletions(-) diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index 7516a9962..1f279e1d2 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -16,7 +16,7 @@ - 2.34 + 2.35 diff --git a/aws-serverless-java-container-spark/pom.xml b/aws-serverless-java-container-spark/pom.xml index 5a93d0243..caf664e9f 100644 --- a/aws-serverless-java-container-spark/pom.xml +++ b/aws-serverless-java-container-spark/pom.xml @@ -25,7 +25,7 @@ org.eclipse.jetty jetty-bom - 9.4.43.v20210629 + 9.4.44.v20210927 pom import diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle index 26cd8fe80..30346bb30 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle @@ -9,17 +9,17 @@ dependencies { implementation ( 'com.amazonaws:aws-lambda-java-core:1.2.1', 'com.amazonaws.serverless:aws-serverless-java-container-jersey:[1.0,)', - 'com.fasterxml.jackson.core:jackson-databind:2.12.4', + 'com.fasterxml.jackson.core:jackson-databind:2.13.1', 'io.symphonia:lambda-logging:1.0.1' ) - implementation("org.glassfish.jersey.media:jersey-media-json-jackson:2.34") { + implementation("org.glassfish.jersey.media:jersey-media-json-jackson:2.35") { exclude group: 'com.fasterxml.jackson.core', module: "jackson-annotations" exclude group: 'com.fasterxml.jackson.core', module: "jackson-databind" exclude group: 'com.fasterxml.jackson.core', module: "jackson-core" } - implementation("org.glassfish.jersey.inject:jersey-hk2:2.34") { + implementation("org.glassfish.jersey.inject:jersey-hk2:2.35") { exclude group: 'javax.inject', module: "javax.inject" } diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml index e72e17131..91ea9cf9c 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml @@ -14,8 +14,8 @@ 1.8 1.8 - 2.34 - 2.12.4 + 2.35 + 2.13.1 diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle index 53a5f5ee6..fb54a3852 100644 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle @@ -9,7 +9,7 @@ dependencies { implementation ( 'com.sparkjava:spark-core:2.9.3', 'com.amazonaws.serverless:aws-serverless-java-container-spark:[1.0,)', - 'com.fasterxml.jackson.core:jackson-databind:2.12.4', + 'com.fasterxml.jackson.core:jackson-databind:2.13.1', 'io.symphonia:lambda-logging:1.0.1' ) diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml index 83069a1b7..a2a25c7f6 100644 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 1.8 - 2.12.4 + 2.13.1 2.9.1 diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index c9caab5db..3b6135ba9 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -13,8 +13,8 @@ dependencies { 'org.apache.logging.log4j:log4j-core:2.17.0', 'org.apache.logging.log4j:log4j-api:2.17.0', 'org.apache.logging.log4j:log4j-slf4j-impl:2.17.0', - 'com.fasterxml.jackson.core:jackson-databind:2.12.4', - 'com.amazonaws:aws-lambda-java-log4j2:1.3.0', + 'com.fasterxml.jackson.core:jackson-databind:2.13.1', + 'com.amazonaws:aws-lambda-java-log4j2:1.5.0', ) testImplementation("junit:junit:4.13.2") diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index 38df0ebe1..049813263 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -74,7 +74,7 @@ com.amazonaws aws-lambda-java-log4j2 - 1.3.0 + 1.5.0 diff --git a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle index c943a9093..72e1548e7 100644 --- a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle @@ -34,11 +34,11 @@ dependencies { exclude group: 'org.apache.logging.log4j', module: 'log4j-api' } implementation ('org.hibernate:hibernate-validator:5.4.3.Final') - implementation ('com.fasterxml.jackson.core:jackson-databind:2.12.4') + implementation ('com.fasterxml.jackson.core:jackson-databind:2.13.1') implementation ('org.apache.logging.log4j:log4j-core:2.17.0') implementation ('org.apache.logging.log4j:log4j-api:2.17.0') implementation ('org.apache.logging.log4j:log4j-slf4j-impl:2.17.0') - implementation ('com.amazonaws:aws-lambda-java-log4j2:1.3.0') + implementation ('com.amazonaws:aws-lambda-java-log4j2:1.5.0') testImplementation('junit:junit:4.13.2') testImplementation('org.apache.struts:struts2-junit-plugin:2.5.28.2') { diff --git a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml index 409b76286..6b36d0f2e 100644 --- a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 1.8 2.5.28.2 - 2.12.4 + 2.13.1 4.13.2 2.17.0 @@ -110,7 +110,7 @@ com.amazonaws aws-lambda-java-log4j2 - 1.3.0 + 1.5.0 diff --git a/pom.xml b/pom.xml index 0a82796b7..b89423892 100644 --- a/pom.xml +++ b/pom.xml @@ -83,7 +83,7 @@ 0.7 6.2.2 - 2.12.4 + 2.13.1 1.7.32 UTF-8 diff --git a/samples/jersey/pet-store/build.gradle b/samples/jersey/pet-store/build.gradle index 00dfa51df..a2c1f576d 100644 --- a/samples/jersey/pet-store/build.gradle +++ b/samples/jersey/pet-store/build.gradle @@ -9,7 +9,7 @@ dependencies { implementation ( 'com.amazonaws:aws-lambda-java-core:1.2.1', 'com.amazonaws.serverless:aws-serverless-java-container-jersey:[1.0,)', - 'com.fasterxml.jackson.core:jackson-databind:2.12.4', + 'com.fasterxml.jackson.core:jackson-databind:2.13.1', 'io.symphonia:lambda-logging:1.0.1' ) diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index b65e0a495..5cf040321 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -26,8 +26,8 @@ 1.8 1.8 - 2.34 - 2.12.4 + 2.35 + 2.13.1 diff --git a/samples/spark/pet-store/build.gradle b/samples/spark/pet-store/build.gradle index f7da14e03..1554edf51 100644 --- a/samples/spark/pet-store/build.gradle +++ b/samples/spark/pet-store/build.gradle @@ -9,7 +9,7 @@ dependencies { implementation ( 'com.sparkjava:spark-core:2.9.3', 'com.amazonaws.serverless:aws-serverless-java-container-spark:[1.0,)', - 'com.fasterxml.jackson.core:jackson-databind:2.12.4', + 'com.fasterxml.jackson.core:jackson-databind:2.13.1', 'io.symphonia:lambda-logging:1.0.1' ) } diff --git a/samples/spark/pet-store/pom.xml b/samples/spark/pet-store/pom.xml index c275d114b..82fb10d85 100644 --- a/samples/spark/pet-store/pom.xml +++ b/samples/spark/pet-store/pom.xml @@ -26,7 +26,7 @@ 1.8 1.8 - 2.12.4 + 2.13.1 2.9.1 diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index e885ef5d6..a4c9852c5 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -13,8 +13,8 @@ dependencies { 'org.apache.logging.log4j:log4j-core:2.17.0', 'org.apache.logging.log4j:log4j-api:2.17.0', 'org.apache.logging.log4j:log4j-slf4j-impl:2.17.0', - 'com.fasterxml.jackson.core:jackson-databind:2.12.4', - 'com.amazonaws:aws-lambda-java-log4j2:1.3.0', + 'com.fasterxml.jackson.core:jackson-databind:2.13.1', + 'com.amazonaws:aws-lambda-java-log4j2:1.5.0', ) } diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index e6cc8492f..d3a5b77b2 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -90,7 +90,7 @@ com.amazonaws aws-lambda-java-log4j2 - 1.3.0 + 1.5.0 diff --git a/samples/struts2/pet-store/build.gradle b/samples/struts2/pet-store/build.gradle index 9923630a6..943b3fb23 100644 --- a/samples/struts2/pet-store/build.gradle +++ b/samples/struts2/pet-store/build.gradle @@ -20,11 +20,11 @@ dependencies { 'org.apache.struts:struts2-junit-plugin:2.5.28.2', 'com.jgeppert.struts2:struts2-aws-lambda-support-plugin:1.3.0', 'org.hibernate:hibernate-validator:5.4.3.Final', - 'com.fasterxml.jackson.core:jackson-databind:2.12.4', + 'com.fasterxml.jackson.core:jackson-databind:2.13.1', 'org.apache.logging.log4j:log4j-core:2.17.0', 'org.apache.logging.log4j:log4j-api:2.17.0', 'org.apache.logging.log4j:log4j-slf4j-impl:2.17.0', - 'com.amazonaws:aws-lambda-java-log4j2:1.3.0', + 'com.amazonaws:aws-lambda-java-log4j2:1.5.0', ) } diff --git a/samples/struts2/pet-store/pom.xml b/samples/struts2/pet-store/pom.xml index 0e36f5c8d..d5f281f6f 100644 --- a/samples/struts2/pet-store/pom.xml +++ b/samples/struts2/pet-store/pom.xml @@ -27,7 +27,7 @@ 1.8 1.8 2.5.28.2 - 2.12.4 + 2.13.1 4.13.2 2.17.0 @@ -121,7 +121,7 @@ com.amazonaws aws-lambda-java-log4j2 - 1.3.0 + 1.5.0 From 87858ab07eba4c4b830bcf3c41b4c130c3b9d669 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 27 Dec 2021 11:09:48 +0100 Subject: [PATCH 165/888] Update Spring dependencies (framework to 5.3.14, boot to 2.6.2, security to 5.6.1) --- .github/workflows/continuous-integration-workflow.yml | 6 ++++-- aws-serverless-java-container-core/pom.xml | 2 +- aws-serverless-java-container-spring/pom.xml | 4 ++-- aws-serverless-java-container-springboot2/pom.xml | 6 +++--- .../src/main/resources/archetype-resources/build.gradle | 4 ++-- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/spring/pet-store/build.gradle | 4 ++-- samples/spring/pet-store/pom.xml | 2 +- samples/springboot2/pet-store/build.gradle | 2 +- samples/springboot2/pet-store/pom.xml | 2 +- 12 files changed, 20 insertions(+), 18 deletions(-) diff --git a/.github/workflows/continuous-integration-workflow.yml b/.github/workflows/continuous-integration-workflow.yml index c73f7741a..dbfc78478 100644 --- a/.github/workflows/continuous-integration-workflow.yml +++ b/.github/workflows/continuous-integration-workflow.yml @@ -72,9 +72,11 @@ jobs: - name: Build Spring Boot 2.2 run: ./gha_build.sh springboot2 false false -Dspringboot.version=2.2.13.RELEASE -Dspring.version=5.2.15.RELEASE -Dspringsecurity.version=5.2.8.RELEASE - name: Build Spring Boot 2.3 - run: ./gha_build.sh springboot2 false false -Dspringboot.version=2.3.12.RELEASE -Dspring.version=5.2.15.RELEASE -Dspringsecurity.version=5.3.9.RELEASE + run: ./gha_build.sh springboot2 false false -Dspringboot.version=2.3.12.RELEASE -Dspring.version=5.2.15.RELEASE -Dspringsecurity.version=5.3.14.RELEASE - name: Build Spring Boot 2.4 - run: ./gha_build.sh springboot2 false false -Dspringboot.version=2.4.9 -Dspring.version=5.3.9 -Dspringsecurity.version=5.4.7 + run: ./gha_build.sh springboot2 false false -Dspringboot.version=2.4.13 -Dspring.version=5.3.13 -Dspringsecurity.version=5.4.9 + - name: Build Spring Boot 2.5 + run: ./gha_build.sh springboot2 false false -Dspringboot.version=2.5.8 -Dspring.version=5.3.14 -Dspringsecurity.version=5.5.4 build_struts2: name: Build and test Struts 2 diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 970b2c86e..b59cd1e1a 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -96,7 +96,7 @@ org.springframework.security spring-security-web - 5.5.1 + 5.6.1 test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 4fbb8e3ed..ec4511ad4 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -16,8 +16,8 @@ - 5.3.9 - 5.5.1 + 5.3.14 + 5.6.1 diff --git a/aws-serverless-java-container-springboot2/pom.xml b/aws-serverless-java-container-springboot2/pom.xml index ad7934cad..29ceef115 100644 --- a/aws-serverless-java-container-springboot2/pom.xml +++ b/aws-serverless-java-container-springboot2/pom.xml @@ -15,9 +15,9 @@ 1.7-SNAPSHOT - 5.3.9 - 2.5.3 - 5.5.1 + 5.3.14 + 2.6.2 + 5.6.1 1.8 1.8 diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index 3b6135ba9..8b1946ac4 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -7,8 +7,8 @@ repositories { dependencies { implementation ( - 'org.springframework:spring-webmvc:5.3.9', - 'org.springframework:spring-context:5.3.9', + 'org.springframework:spring-webmvc:5.3.14', + 'org.springframework:spring-context:5.3.14', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[1.0,)', 'org.apache.logging.log4j:log4j-core:2.17.0', 'org.apache.logging.log4j:log4j-api:2.17.0', diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index 049813263..d6fda730f 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 1.8 - 5.3.9 + 5.3.14 4.13.2 2.17.0 diff --git a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle index 1dea0ac49..e502ef03f 100644 --- a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle @@ -8,7 +8,7 @@ repositories { dependencies { implementation ( - 'org.springframework.boot:spring-boot-starter-web:2.5.3', + 'org.springframework.boot:spring-boot-starter-web:2.6.2', 'com.amazonaws.serverless:aws-serverless-java-container-springboot2:[1.0,)', 'io.symphonia:lambda-logging:1.0.1' ) diff --git a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml index cbdb3b225..6234b9dbc 100644 --- a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ org.springframework.boot spring-boot-starter-parent - 2.5.3 + 2.6.2 diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index a4c9852c5..f91a9163d 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -7,8 +7,8 @@ repositories { dependencies { implementation ( - 'org.springframework:spring-webmvc:5.3.9', - 'org.springframework:spring-context:5.3.9', + 'org.springframework:spring-webmvc:5.3.14', + 'org.springframework:spring-context:5.3.14', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[1.0,)', 'org.apache.logging.log4j:log4j-core:2.17.0', 'org.apache.logging.log4j:log4j-api:2.17.0', diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index d3a5b77b2..7456dbca9 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -26,7 +26,7 @@ 1.8 1.8 - 5.3.9 + 5.3.14 4.13.2 2.17.0 diff --git a/samples/springboot2/pet-store/build.gradle b/samples/springboot2/pet-store/build.gradle index 8ea300583..16a33bcce 100644 --- a/samples/springboot2/pet-store/build.gradle +++ b/samples/springboot2/pet-store/build.gradle @@ -8,7 +8,7 @@ repositories { dependencies { implementation ( - implementation('org.springframework.boot:spring-boot-starter-web:2.5.3') { + implementation('org.springframework.boot:spring-boot-starter-web:2.6.2') { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat' }, 'com.amazonaws.serverless:aws-serverless-java-container-springboot2:[1.4,)', diff --git a/samples/springboot2/pet-store/pom.xml b/samples/springboot2/pet-store/pom.xml index 2eb9e0df0..458142088 100644 --- a/samples/springboot2/pet-store/pom.xml +++ b/samples/springboot2/pet-store/pom.xml @@ -10,7 +10,7 @@ org.springframework.boot spring-boot-starter-parent - 2.5.3 + 2.6.2 From b3d3ad0b5c960509f3ae9f8316cfb0b87dadc41b Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 27 Dec 2021 11:41:48 +0100 Subject: [PATCH 166/888] fix Spring Security version for Spring Boot 2.3 build --- .github/workflows/continuous-integration-workflow.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/continuous-integration-workflow.yml b/.github/workflows/continuous-integration-workflow.yml index dbfc78478..dd7f5050b 100644 --- a/.github/workflows/continuous-integration-workflow.yml +++ b/.github/workflows/continuous-integration-workflow.yml @@ -72,7 +72,7 @@ jobs: - name: Build Spring Boot 2.2 run: ./gha_build.sh springboot2 false false -Dspringboot.version=2.2.13.RELEASE -Dspring.version=5.2.15.RELEASE -Dspringsecurity.version=5.2.8.RELEASE - name: Build Spring Boot 2.3 - run: ./gha_build.sh springboot2 false false -Dspringboot.version=2.3.12.RELEASE -Dspring.version=5.2.15.RELEASE -Dspringsecurity.version=5.3.14.RELEASE + run: ./gha_build.sh springboot2 false false -Dspringboot.version=2.3.12.RELEASE -Dspring.version=5.2.15.RELEASE -Dspringsecurity.version=5.3.9.RELEASE - name: Build Spring Boot 2.4 run: ./gha_build.sh springboot2 false false -Dspringboot.version=2.4.13 -Dspring.version=5.3.13 -Dspringsecurity.version=5.4.9 - name: Build Spring Boot 2.5 From 4f08c518c5022f474bc96c152491a586cea7fa01 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Wed, 29 Dec 2021 15:06:30 +0100 Subject: [PATCH 167/888] Update Log4J dependency to 2.17.1 (CVE-2021-44832) --- .../src/main/resources/archetype-resources/build.gradle | 6 +++--- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 6 +++--- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/spring/pet-store/build.gradle | 6 +++--- samples/spring/pet-store/pom.xml | 2 +- samples/struts2/pet-store/build.gradle | 6 +++--- samples/struts2/pet-store/pom.xml | 2 +- 8 files changed, 16 insertions(+), 16 deletions(-) diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index 8b1946ac4..647a06ce0 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -10,9 +10,9 @@ dependencies { 'org.springframework:spring-webmvc:5.3.14', 'org.springframework:spring-context:5.3.14', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[1.0,)', - 'org.apache.logging.log4j:log4j-core:2.17.0', - 'org.apache.logging.log4j:log4j-api:2.17.0', - 'org.apache.logging.log4j:log4j-slf4j-impl:2.17.0', + 'org.apache.logging.log4j:log4j-core:2.17.1', + 'org.apache.logging.log4j:log4j-api:2.17.1', + 'org.apache.logging.log4j:log4j-slf4j-impl:2.17.1', 'com.fasterxml.jackson.core:jackson-databind:2.13.1', 'com.amazonaws:aws-lambda-java-log4j2:1.5.0', ) diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index d6fda730f..7bf984f60 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -18,7 +18,7 @@ 1.8 5.3.14 4.13.2 - 2.17.0 + 2.17.1 diff --git a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle index 72e1548e7..1e969a001 100644 --- a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle @@ -35,9 +35,9 @@ dependencies { } implementation ('org.hibernate:hibernate-validator:5.4.3.Final') implementation ('com.fasterxml.jackson.core:jackson-databind:2.13.1') - implementation ('org.apache.logging.log4j:log4j-core:2.17.0') - implementation ('org.apache.logging.log4j:log4j-api:2.17.0') - implementation ('org.apache.logging.log4j:log4j-slf4j-impl:2.17.0') + implementation ('org.apache.logging.log4j:log4j-core:2.17.1') + implementation ('org.apache.logging.log4j:log4j-api:2.17.1') + implementation ('org.apache.logging.log4j:log4j-slf4j-impl:2.17.1') implementation ('com.amazonaws:aws-lambda-java-log4j2:1.5.0') testImplementation('junit:junit:4.13.2') diff --git a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml index 6b36d0f2e..442f7bff1 100644 --- a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml @@ -18,7 +18,7 @@ 2.5.28.2 2.13.1 4.13.2 - 2.17.0 + 2.17.1 diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index f91a9163d..e2e66719e 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -10,9 +10,9 @@ dependencies { 'org.springframework:spring-webmvc:5.3.14', 'org.springframework:spring-context:5.3.14', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[1.0,)', - 'org.apache.logging.log4j:log4j-core:2.17.0', - 'org.apache.logging.log4j:log4j-api:2.17.0', - 'org.apache.logging.log4j:log4j-slf4j-impl:2.17.0', + 'org.apache.logging.log4j:log4j-core:2.17.1', + 'org.apache.logging.log4j:log4j-api:2.17.1', + 'org.apache.logging.log4j:log4j-slf4j-impl:2.17.1', 'com.fasterxml.jackson.core:jackson-databind:2.13.1', 'com.amazonaws:aws-lambda-java-log4j2:1.5.0', ) diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index 7456dbca9..05fb63acb 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -28,7 +28,7 @@ 1.8 5.3.14 4.13.2 - 2.17.0 + 2.17.1 diff --git a/samples/struts2/pet-store/build.gradle b/samples/struts2/pet-store/build.gradle index 943b3fb23..df617ff2b 100644 --- a/samples/struts2/pet-store/build.gradle +++ b/samples/struts2/pet-store/build.gradle @@ -21,9 +21,9 @@ dependencies { 'com.jgeppert.struts2:struts2-aws-lambda-support-plugin:1.3.0', 'org.hibernate:hibernate-validator:5.4.3.Final', 'com.fasterxml.jackson.core:jackson-databind:2.13.1', - 'org.apache.logging.log4j:log4j-core:2.17.0', - 'org.apache.logging.log4j:log4j-api:2.17.0', - 'org.apache.logging.log4j:log4j-slf4j-impl:2.17.0', + 'org.apache.logging.log4j:log4j-core:2.17.1', + 'org.apache.logging.log4j:log4j-api:2.17.1', + 'org.apache.logging.log4j:log4j-slf4j-impl:2.17.1', 'com.amazonaws:aws-lambda-java-log4j2:1.5.0', ) } diff --git a/samples/struts2/pet-store/pom.xml b/samples/struts2/pet-store/pom.xml index d5f281f6f..e0f7079c3 100644 --- a/samples/struts2/pet-store/pom.xml +++ b/samples/struts2/pet-store/pom.xml @@ -29,7 +29,7 @@ 2.5.28.2 2.13.1 4.13.2 - 2.17.0 + 2.17.1 From 54497cf1dcb15daac6254ee329da3b92f7432546 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Wed, 29 Dec 2021 16:35:38 +0100 Subject: [PATCH 168/888] Add support for Lambda Authorizers in combination with Http API 2.0 payload format (#386) --- .../proxy/model/HttpApiV2AuthorizerMap.java | 21 ++++++- .../model/HttpApiV2ProxyRequestTest.java | 62 +++++++++++++++++++ 2 files changed, 82 insertions(+), 1 deletion(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/HttpApiV2AuthorizerMap.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/HttpApiV2AuthorizerMap.java index e7017f60f..4fff028c4 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/HttpApiV2AuthorizerMap.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/HttpApiV2AuthorizerMap.java @@ -23,24 +23,35 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.deser.std.StdDeserializer; import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import com.fasterxml.jackson.databind.type.TypeFactory; import java.io.IOException; import java.util.HashMap; +import java.util.Map; @JsonSerialize(using = HttpApiV2AuthorizerMap.HttpApiV2AuthorizerSerializer.class) @JsonDeserialize(using = HttpApiV2AuthorizerMap.HttpApiV2AuthorizerDeserializer.class) public class HttpApiV2AuthorizerMap extends HashMap { private static final String JWT_KEY = "jwt"; + private static final String LAMBDA_KEY = "lambda"; private static final long serialVersionUID = 42L; public HttpApiV2JwtAuthorizer getJwtAuthorizer() { return (HttpApiV2JwtAuthorizer)get(JWT_KEY); } + public Map getLambdaAuthorizerContext() { + return (Map) get(LAMBDA_KEY); + } + public boolean isJwt() { return containsKey(JWT_KEY); } + public boolean isLambda() { + return containsKey(LAMBDA_KEY); + } + public void putJwtAuthorizer(HttpApiV2JwtAuthorizer jwt) { put(JWT_KEY, jwt); } @@ -56,10 +67,15 @@ public HttpApiV2AuthorizerDeserializer() { public HttpApiV2AuthorizerMap deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException { HttpApiV2AuthorizerMap map = new HttpApiV2AuthorizerMap(); JsonNode node = jsonParser.getCodec().readTree(jsonParser); - if (node.get(JWT_KEY) != null) { + if (node.has(JWT_KEY)) { HttpApiV2JwtAuthorizer authorizer = LambdaContainerHandler.getObjectMapper().treeToValue(node.get(JWT_KEY), HttpApiV2JwtAuthorizer.class); map.putJwtAuthorizer(authorizer); } + if (node.has(LAMBDA_KEY)) { + Map context = LambdaContainerHandler.getObjectMapper().treeToValue(node.get(LAMBDA_KEY), + TypeFactory.defaultInstance().constructMapType(HashMap.class, String.class, Object.class)); + map.put(LAMBDA_KEY, context); + } // we ignore other, unknown values return map; } @@ -78,6 +94,9 @@ public void serialize(HttpApiV2AuthorizerMap httpApiV2AuthorizerMap, JsonGenerat if (httpApiV2AuthorizerMap.isJwt()) { jsonGenerator.writeObjectField(JWT_KEY, httpApiV2AuthorizerMap.getJwtAuthorizer()); } + if (httpApiV2AuthorizerMap.isLambda()) { + jsonGenerator.writeObjectField(LAMBDA_KEY, httpApiV2AuthorizerMap.getLambdaAuthorizerContext()); + } jsonGenerator.writeEndObject(); } } diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/model/HttpApiV2ProxyRequestTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/model/HttpApiV2ProxyRequestTest.java index 420843300..c673a59e1 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/model/HttpApiV2ProxyRequestTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/model/HttpApiV2ProxyRequestTest.java @@ -83,6 +83,52 @@ public class HttpApiV2ProxyRequestTest { " \"isBase64Encoded\": true,\n" + " \"stageVariables\": {\"stageVariable1\": \"value1\", \"stageVariable2\": \"value2\"}\n" + " }\n"; + private static final String LAMBDA_AUTHORIZER = "{\n" + + " \"version\": \"2.0\",\n" + + " \"routeKey\": \"$default\",\n" + + " \"rawPath\": \"/my/path\",\n" + + " \"rawQueryString\": \"parameter1=value1¶meter1=value2¶meter2=value\",\n" + + " \"cookies\": [ \"cookie1\", \"cookie2\" ],\n" + + " \"headers\": {\n" + + " \"Header1\": \"value1\",\n" + + " \"Header2\": \"value2\"\n" + + " },\n" + + " \"queryStringParameters\": { \"parameter1\": \"value1,value2\", \"parameter2\": \"value\" },\n" + + " \"requestContext\": {\n" + + " \"accountId\": \"123456789012\",\n" + + " \"apiId\": \"api-id\",\n" + + " \"authorizer\": { \"lambda\": {\n" + + " \"arrayKey\": [\n" + + " \"value1\",\n" + + " \"value2\"\n" + + " ],\n" + + " \"booleanKey\": true,\n" + + " \"mapKey\": {\n" + + " \"value1\": \"value2\"\n" + + " },\n" + + " \"numberKey\": 1,\n" + + " \"stringKey\": \"value\"\n" + + " }" + + " },\n" + + " \"domainName\": \"id.execute-api.us-east-1.amazonaws.com\",\n" + + " \"domainPrefix\": \"id\",\n" + + " \"http\": {\n" + + " \"method\": \"POST\",\n" + + " \"path\": \"/my/path\",\n" + + " \"protocol\": \"HTTP/1.1\",\n" + + " \"sourceIp\": \"IP\",\n" + + " \"userAgent\": \"agent\"\n" + + " },\n" + + " \"requestId\": \"id\",\n" + + " \"routeKey\": \"$default\",\n" + + " \"stage\": \"$default\",\n" + + " \"time\": \"12/Mar/2020:19:03:58 +0000\",\n" + + " \"timeEpoch\": 1583348638390\n" + + " },\n" + + " \"body\": \"Hello from Lambda\",\n" + + " \"isBase64Encoded\": false,\n" + + " \"stageVariables\": {\"stageVariable1\": \"value1\", \"stageVariable2\": \"value2\"}\n" + + " }\n";; @Test public void deserialize_fromJsonString_authorizerPopulatedCorrectly() { @@ -102,6 +148,22 @@ public void deserialize_fromJsonString_authorizerEmptyMap() { HttpApiV2ProxyRequest req = LambdaContainerHandler.getObjectMapper().readValue(NO_AUTH_PROXY, HttpApiV2ProxyRequest.class); assertNotNull(req.getRequestContext().getAuthorizer()); assertFalse(req.getRequestContext().getAuthorizer().isJwt()); + assertFalse(req.getRequestContext().getAuthorizer().isLambda()); + } catch (JsonProcessingException e) { + e.printStackTrace(); + fail("Exception while parsing request" + e.getMessage()); + } + } + + @Test + public void deserialize_fromJsonString_lambdaAuthorizer() { + try { + HttpApiV2ProxyRequest req = LambdaContainerHandler.getObjectMapper().readValue(LAMBDA_AUTHORIZER, HttpApiV2ProxyRequest.class); + assertNotNull(req.getRequestContext().getAuthorizer()); + assertFalse(req.getRequestContext().getAuthorizer().isJwt()); + assertTrue(req.getRequestContext().getAuthorizer().isLambda()); + assertEquals(5, req.getRequestContext().getAuthorizer().getLambdaAuthorizerContext().size()); + assertEquals(1, req.getRequestContext().getAuthorizer().getLambdaAuthorizerContext().get("numberKey")); } catch (JsonProcessingException e) { e.printStackTrace(); fail("Exception while parsing request" + e.getMessage()); From 8382bcc084b00b47418119bd42e856455f391fc3 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Thu, 30 Dec 2021 10:31:33 +0100 Subject: [PATCH 169/888] Change AwsHttpServletRequest constructor to protected to allow extension (#422) --- .../proxy/internal/servlet/AwsHttpServletRequest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java index 6996b9b14..8ea22653c 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java @@ -102,7 +102,7 @@ public abstract class AwsHttpServletRequest implements HttpServletRequest { * AWS Lambda * @param lambdaContext The Lambda function context. This object is used for utility methods such as log */ - AwsHttpServletRequest(Context lambdaContext) { + protected AwsHttpServletRequest(Context lambdaContext) { this.lambdaContext = lambdaContext; attributes = new HashMap<>(); setAttribute(DISPATCHER_TYPE_ATTRIBUTE, DispatcherType.REQUEST); From b009775732cf042bde1f3e8cf98a08e537a2e369 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 3 Jan 2022 09:15:09 +0100 Subject: [PATCH 170/888] Jersey startup time improvements (#366) --- .../src/main/java/StreamLambdaHandler.java | 12 ++++++++++-- samples/jersey/pet-store/build.gradle | 4 ++-- samples/jersey/pet-store/pom.xml | 2 +- .../sample/jersey/StreamLambdaHandler.java | 8 ++++++++ 4 files changed, 21 insertions(+), 5 deletions(-) diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/src/main/java/StreamLambdaHandler.java b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/src/main/java/StreamLambdaHandler.java index a79670b7f..768a5ad98 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/src/main/java/StreamLambdaHandler.java +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/src/main/java/StreamLambdaHandler.java @@ -8,6 +8,7 @@ import org.glassfish.jersey.jackson.JacksonFeature; import org.glassfish.jersey.server.ResourceConfig; +import org.glassfish.jersey.server.ServerProperties; import java.io.IOException; import java.io.InputStream; @@ -18,8 +19,15 @@ public class StreamLambdaHandler implements RequestStreamHandler { private static final ResourceConfig jerseyApplication = new ResourceConfig() - .register(PingResource.class) - .register(JacksonFeature.class); + // properties to speed up Jersey start time + .property(ServerProperties.FEATURE_AUTO_DISCOVERY_DISABLE,true) + .property(ServerProperties.WADL_FEATURE_DISABLE,true) + .property(ServerProperties.METAINF_SERVICES_LOOKUP_DISABLE,true) + .property(ServerProperties.BV_FEATURE_DISABLE,true) + .property(ServerProperties.JSON_PROCESSING_FEATURE_DISABLE,true) + .property(ServerProperties.MOXY_JSON_FEATURE_DISABLE,true) + .register(PingResource.class) + .register(JacksonFeature.class); private static final JerseyLambdaContainerHandler handler = JerseyLambdaContainerHandler.getAwsProxyHandler(jerseyApplication); diff --git a/samples/jersey/pet-store/build.gradle b/samples/jersey/pet-store/build.gradle index a2c1f576d..f7da9f2ea 100644 --- a/samples/jersey/pet-store/build.gradle +++ b/samples/jersey/pet-store/build.gradle @@ -13,13 +13,13 @@ dependencies { 'io.symphonia:lambda-logging:1.0.1' ) - implementation("org.glassfish.jersey.media:jersey-media-json-jackson:2.30.1") { + implementation("org.glassfish.jersey.media:jersey-media-json-jackson:2.35") { exclude group: 'com.fasterxml.jackson.core', module: "jackson-annotations" exclude group: 'com.fasterxml.jackson.core', module: "jackson-databind" exclude group: 'com.fasterxml.jackson.core', module: "jackson-core" } - implementation("org.glassfish.jersey.inject:jersey-hk2:2.30.1") { + implementation("org.glassfish.jersey.inject:jersey-hk2:2.35") { exclude group: 'javax.inject', module: "javax.inject" } } diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index 5cf040321..c35199809 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -34,7 +34,7 @@ com.amazonaws.serverless aws-serverless-java-container-jersey - [0.1,) + [1.0,) diff --git a/samples/jersey/pet-store/src/main/java/com/amazonaws/serverless/sample/jersey/StreamLambdaHandler.java b/samples/jersey/pet-store/src/main/java/com/amazonaws/serverless/sample/jersey/StreamLambdaHandler.java index 20c6d534d..9701a2c37 100644 --- a/samples/jersey/pet-store/src/main/java/com/amazonaws/serverless/sample/jersey/StreamLambdaHandler.java +++ b/samples/jersey/pet-store/src/main/java/com/amazonaws/serverless/sample/jersey/StreamLambdaHandler.java @@ -11,6 +11,7 @@ import org.glassfish.jersey.jackson.JacksonFeature; import org.glassfish.jersey.server.ResourceConfig; +import org.glassfish.jersey.server.ServerProperties; import java.io.IOException; import java.io.InputStream; @@ -19,6 +20,13 @@ public class StreamLambdaHandler implements RequestStreamHandler { private static final ResourceConfig jerseyApplication = new ResourceConfig() + // properties to speed up Jersey start time + .property(ServerProperties.FEATURE_AUTO_DISCOVERY_DISABLE,true) + .property(ServerProperties.WADL_FEATURE_DISABLE,true) + .property(ServerProperties.METAINF_SERVICES_LOOKUP_DISABLE,true) + .property(ServerProperties.BV_FEATURE_DISABLE,true) + .property(ServerProperties.JSON_PROCESSING_FEATURE_DISABLE,true) + .property(ServerProperties.MOXY_JSON_FEATURE_DISABLE,true) .packages("com.amazonaws.serverless.sample.jersey") .register(JacksonFeature.class); private static final JerseyLambdaContainerHandler handler From 45169fb4f8e6329f658e060acd5246c95dd1c5ff Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 3 Jan 2022 09:32:55 +0100 Subject: [PATCH 171/888] Update Struts2 dependency to 2.5.28.3 --- aws-serverless-java-container-struts2/pom.xml | 2 +- .../main/resources/archetype-resources/build.gradle | 10 +++++----- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/struts2/pet-store/build.gradle | 8 ++++---- samples/struts2/pet-store/pom.xml | 2 +- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/aws-serverless-java-container-struts2/pom.xml b/aws-serverless-java-container-struts2/pom.xml index 0454adb0d..e888540da 100644 --- a/aws-serverless-java-container-struts2/pom.xml +++ b/aws-serverless-java-container-struts2/pom.xml @@ -15,7 +15,7 @@ - 2.5.28.2 + 2.5.28.3 diff --git a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle index 1e969a001..1edd92c3f 100644 --- a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle @@ -18,19 +18,19 @@ dependencies { exclude group: 'org.apache.logging.log4j', module: 'log4j-api' exclude group: 'org.apache.logging.log4j', module: 'log4j-to-slf4j' } - implementation ('org.apache.struts:struts2-convention-plugin:2.5.28.2') { + implementation ('org.apache.struts:struts2-convention-plugin:2.5.28.3') { exclude group: 'org.apache.struts', module: 'struts2-core' } - implementation ('org.apache.struts:struts2-rest-plugin:2.5.28.2') { + implementation ('org.apache.struts:struts2-rest-plugin:2.5.28.3') { exclude group: 'org.apache.struts', module: 'struts2-core' } - implementation ('org.apache.struts:struts2-bean-validation-plugin:2.5.28.2') { + implementation ('org.apache.struts:struts2-bean-validation-plugin:2.5.28.3') { exclude group: 'org.apache.struts', module: 'struts2-core' } implementation ('com.jgeppert.struts2:struts2-aws-lambda-support-plugin:1.3.0') { exclude group: 'org.apache.struts', module: 'struts2-core' } - implementation ('org.apache.struts:struts2-core:2.5.28.2') { + implementation ('org.apache.struts:struts2-core:2.5.28.3') { exclude group: 'org.apache.logging.log4j', module: 'log4j-api' } implementation ('org.hibernate:hibernate-validator:5.4.3.Final') @@ -41,7 +41,7 @@ dependencies { implementation ('com.amazonaws:aws-lambda-java-log4j2:1.5.0') testImplementation('junit:junit:4.13.2') - testImplementation('org.apache.struts:struts2-junit-plugin:2.5.28.2') { + testImplementation('org.apache.struts:struts2-junit-plugin:2.5.28.3') { exclude group: 'org.apache.struts', module: 'struts2-core' } } diff --git a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml index 442f7bff1..bbc66615e 100644 --- a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml @@ -15,7 +15,7 @@ 1.8 1.8 - 2.5.28.2 + 2.5.28.3 2.13.1 4.13.2 2.17.1 diff --git a/samples/struts2/pet-store/build.gradle b/samples/struts2/pet-store/build.gradle index df617ff2b..5532bd297 100644 --- a/samples/struts2/pet-store/build.gradle +++ b/samples/struts2/pet-store/build.gradle @@ -14,10 +14,10 @@ configurations { dependencies { implementation ( 'com.amazonaws.serverless:aws-serverless-java-container-struts2:[1.0,)', - 'org.apache.struts:struts2-convention-plugin:2.5.28.2', - 'org.apache.struts:struts2-rest-plugin:2.5.28.2', - 'org.apache.struts:struts2-bean-validation-plugin:2.5.28.2', - 'org.apache.struts:struts2-junit-plugin:2.5.28.2', + 'org.apache.struts:struts2-convention-plugin:2.5.28.3', + 'org.apache.struts:struts2-rest-plugin:2.5.28.3', + 'org.apache.struts:struts2-bean-validation-plugin:2.5.28.3', + 'org.apache.struts:struts2-junit-plugin:2.5.28.3', 'com.jgeppert.struts2:struts2-aws-lambda-support-plugin:1.3.0', 'org.hibernate:hibernate-validator:5.4.3.Final', 'com.fasterxml.jackson.core:jackson-databind:2.13.1', diff --git a/samples/struts2/pet-store/pom.xml b/samples/struts2/pet-store/pom.xml index e0f7079c3..294fc8501 100644 --- a/samples/struts2/pet-store/pom.xml +++ b/samples/struts2/pet-store/pom.xml @@ -26,7 +26,7 @@ 1.8 1.8 - 2.5.28.2 + 2.5.28.3 2.13.1 4.13.2 2.17.1 From 3ef1f63bddcf3d4f952833ceac678face2d67161 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Wed, 5 Jan 2022 09:40:21 +0100 Subject: [PATCH 172/888] minor javadoc fix --- .../proxy/spring/SpringBootLambdaContainerHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java b/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java index 0eaf58f97..ce6bad7b1 100644 --- a/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java +++ b/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java @@ -41,7 +41,7 @@ import java.util.concurrent.CountDownLatch; /** - * SpringBoot 1.x implementation of the `LambdaContainerHandler` abstract class. This class uses the `LambdaSpringApplicationInitializer` + * SpringBoot implementation of the `LambdaContainerHandler` abstract class. This class uses the `LambdaSpringApplicationInitializer` * object behind the scenes to proxy requests. The default implementation leverages the `AwsProxyHttpServletRequest` and * `AwsHttpServletResponse` implemented in the `aws-serverless-java-container-core` package. * From dbc58331a5b804d01e24b279b7f8d6f4676284cb Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Thu, 6 Jan 2022 11:27:47 +0100 Subject: [PATCH 173/888] fix: Updated sample and archetype maven build files to avoid "The packaging for this project did not assign a file to the build artifact" message (#336)" This reverts commit 253910f3 --- .../resources/archetype-resources/pom.xml | 14 +++++-- .../resources/archetype-resources/pom.xml | 14 +++++-- .../resources/archetype-resources/pom.xml | 14 +++++-- .../resources/archetype-resources/pom.xml | 14 +++++-- .../resources/archetype-resources/pom.xml | 2 +- samples/jersey/pet-store/pom.xml | 26 +++++++++++-- samples/spark/pet-store/pom.xml | 26 +++++++++++-- samples/spring/pet-store/pom.xml | 26 +++++++++++-- samples/springboot2/pet-store/pom.xml | 37 +++++++++++++++++-- samples/struts2/pet-store/pom.xml | 4 +- 10 files changed, 150 insertions(+), 27 deletions(-) diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml index 91ea9cf9c..cd2fab40a 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml @@ -107,7 +107,7 @@ org.apache.maven.plugins maven-jar-plugin - 3.1.1 + 3.2.0 default-jar @@ -115,11 +115,19 @@ + + org.apache.maven.plugins + maven-install-plugin + 3.0.0-M1 + + true + + org.apache.maven.plugins maven-dependency-plugin - 3.1.1 + 3.2.0 copy-dependencies @@ -137,7 +145,7 @@ org.apache.maven.plugins maven-assembly-plugin - 3.1.0 + 3.3.0 zip-assembly diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml index a2a25c7f6..3f134aa74 100644 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml @@ -97,7 +97,7 @@ org.apache.maven.plugins maven-jar-plugin - 3.1.1 + 3.2.0 default-jar @@ -105,11 +105,19 @@ + + org.apache.maven.plugins + maven-install-plugin + 3.0.0-M1 + + true + + org.apache.maven.plugins maven-dependency-plugin - 3.1.1 + 3.2.0 copy-dependencies @@ -127,7 +135,7 @@ org.apache.maven.plugins maven-assembly-plugin - 3.1.0 + 3.3.0 zip-assembly diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index 7bf984f60..12bf06906 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -133,7 +133,7 @@ org.apache.maven.plugins maven-jar-plugin - 3.1.1 + 3.2.0 default-jar @@ -141,11 +141,19 @@ + + org.apache.maven.plugins + maven-install-plugin + 3.0.0-M1 + + true + + org.apache.maven.plugins maven-dependency-plugin - 3.1.1 + 3.2.0 copy-dependencies @@ -163,7 +171,7 @@ org.apache.maven.plugins maven-assembly-plugin - 3.1.0 + 3.3.0 zip-assembly diff --git a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml index 6234b9dbc..359eb62b5 100644 --- a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml @@ -92,7 +92,7 @@ org.apache.maven.plugins maven-jar-plugin - 3.1.1 + 3.2.0 default-jar @@ -100,11 +100,19 @@ + + org.apache.maven.plugins + maven-install-plugin + 3.0.0-M1 + + true + + org.apache.maven.plugins maven-dependency-plugin - 3.1.1 + 3.2.0 copy-dependencies @@ -122,7 +130,7 @@ org.apache.maven.plugins maven-assembly-plugin - 3.1.0 + 3.3.0 zip-assembly diff --git a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml index bbc66615e..95c499012 100644 --- a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml @@ -126,7 +126,7 @@ org.apache.maven.plugins maven-assembly-plugin - 3.1.0 + 3.3.0 src/main/assembly/dist.xml diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index c35199809..71998d8a1 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -34,7 +34,7 @@ com.amazonaws.serverless aws-serverless-java-container-jersey - [1.0,) + [1.6,) @@ -121,11 +121,31 @@ + + + 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.1.1 + 3.2.0 copy-dependencies @@ -143,7 +163,7 @@ org.apache.maven.plugins maven-assembly-plugin - 3.1.0 + 3.3.0 zip-assembly diff --git a/samples/spark/pet-store/pom.xml b/samples/spark/pet-store/pom.xml index 82fb10d85..c4685d2e7 100644 --- a/samples/spark/pet-store/pom.xml +++ b/samples/spark/pet-store/pom.xml @@ -34,7 +34,7 @@ com.amazonaws.serverless aws-serverless-java-container-spark - [0.2,) + [1.6,) @@ -105,11 +105,31 @@ + + + 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.1.1 + 3.2.0 copy-dependencies @@ -127,7 +147,7 @@ org.apache.maven.plugins maven-assembly-plugin - 3.1.0 + 3.3.0 zip-assembly diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index 05fb63acb..dac58c272 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -35,7 +35,7 @@ com.amazonaws.serverless aws-serverless-java-container-spring - [0.1,) + [1.6,) @@ -144,11 +144,31 @@ + + + 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.1.1 + 3.2.0 copy-dependencies @@ -166,7 +186,7 @@ org.apache.maven.plugins maven-assembly-plugin - 3.1.0 + 3.3.0 zip-assembly diff --git a/samples/springboot2/pet-store/pom.xml b/samples/springboot2/pet-store/pom.xml index 458142088..7565f7d33 100644 --- a/samples/springboot2/pet-store/pom.xml +++ b/samples/springboot2/pet-store/pom.xml @@ -6,6 +6,9 @@ com.amazonaws.serverless.sample serverless-springboot2-example 1.0-SNAPSHOT + Spring Boot example for the aws-serverless-java-container library + Simple pet store written with the Spring framework and Spring Boot + https://aws.amazon.com/lambda/ org.springframework.boot @@ -13,6 +16,14 @@ 2.6.2 + + + The Apache Software License, Version 2.0 + http://www.apache.org/licenses/LICENSE-2.0.txt + repo + + + 1.8 1.8 @@ -33,7 +44,7 @@ com.amazonaws.serverless aws-serverless-java-container-springboot2 - [1.4,) + [1.6,) @@ -82,11 +93,31 @@ + + + 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.1.1 + 3.2.0 copy-dependencies @@ -104,7 +135,7 @@ org.apache.maven.plugins maven-assembly-plugin - 3.1.0 + 3.3.0 zip-assembly diff --git a/samples/struts2/pet-store/pom.xml b/samples/struts2/pet-store/pom.xml index 294fc8501..457f0833f 100644 --- a/samples/struts2/pet-store/pom.xml +++ b/samples/struts2/pet-store/pom.xml @@ -36,7 +36,7 @@ com.amazonaws.serverless aws-serverless-java-container-struts2 - [0.1,) + [1.6,) @@ -145,7 +145,7 @@ org.apache.maven.plugins maven-assembly-plugin - 3.1.0 + 3.3.0 src/main/assembly/dist.xml From 7722fe3516e2d9a211238a3464a3923b065629c2 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Thu, 6 Jan 2022 13:34:00 +0100 Subject: [PATCH 174/888] chore(deps): Update lambda-logging version to 1.0.3 --- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- samples/jersey/pet-store/build.gradle | 2 +- samples/spark/pet-store/build.gradle | 2 +- samples/spark/pet-store/pom.xml | 2 +- samples/springboot2/pet-store/pom.xml | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle index 30346bb30..fab27db50 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle @@ -10,7 +10,7 @@ dependencies { 'com.amazonaws:aws-lambda-java-core:1.2.1', 'com.amazonaws.serverless:aws-serverless-java-container-jersey:[1.0,)', 'com.fasterxml.jackson.core:jackson-databind:2.13.1', - 'io.symphonia:lambda-logging:1.0.1' + 'io.symphonia:lambda-logging:1.0.3' ) implementation("org.glassfish.jersey.media:jersey-media-json-jackson:2.35") { diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle index fb54a3852..143fd9dd8 100644 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle @@ -10,7 +10,7 @@ dependencies { 'com.sparkjava:spark-core:2.9.3', 'com.amazonaws.serverless:aws-serverless-java-container-spark:[1.0,)', 'com.fasterxml.jackson.core:jackson-databind:2.13.1', - 'io.symphonia:lambda-logging:1.0.1' + 'io.symphonia:lambda-logging:1.0.3' ) testImplementation("junit:junit:4.13.2") diff --git a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle index e502ef03f..4ef94378c 100644 --- a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle @@ -10,7 +10,7 @@ dependencies { implementation ( 'org.springframework.boot:spring-boot-starter-web:2.6.2', 'com.amazonaws.serverless:aws-serverless-java-container-springboot2:[1.0,)', - 'io.symphonia:lambda-logging:1.0.1' + 'io.symphonia:lambda-logging:1.0.3' ) testImplementation("junit:junit:4.13.2") diff --git a/samples/jersey/pet-store/build.gradle b/samples/jersey/pet-store/build.gradle index f7da9f2ea..fa04aadc2 100644 --- a/samples/jersey/pet-store/build.gradle +++ b/samples/jersey/pet-store/build.gradle @@ -10,7 +10,7 @@ dependencies { 'com.amazonaws:aws-lambda-java-core:1.2.1', 'com.amazonaws.serverless:aws-serverless-java-container-jersey:[1.0,)', 'com.fasterxml.jackson.core:jackson-databind:2.13.1', - 'io.symphonia:lambda-logging:1.0.1' + 'io.symphonia:lambda-logging:1.0.3' ) implementation("org.glassfish.jersey.media:jersey-media-json-jackson:2.35") { diff --git a/samples/spark/pet-store/build.gradle b/samples/spark/pet-store/build.gradle index 1554edf51..d07a67333 100644 --- a/samples/spark/pet-store/build.gradle +++ b/samples/spark/pet-store/build.gradle @@ -10,7 +10,7 @@ dependencies { 'com.sparkjava:spark-core:2.9.3', 'com.amazonaws.serverless:aws-serverless-java-container-spark:[1.0,)', 'com.fasterxml.jackson.core:jackson-databind:2.13.1', - 'io.symphonia:lambda-logging:1.0.1' + 'io.symphonia:lambda-logging:1.0.3' ) } diff --git a/samples/spark/pet-store/pom.xml b/samples/spark/pet-store/pom.xml index c4685d2e7..aa03786a9 100644 --- a/samples/spark/pet-store/pom.xml +++ b/samples/spark/pet-store/pom.xml @@ -55,7 +55,7 @@ io.symphonia lambda-logging - 1.0.1 + 1.0.3 diff --git a/samples/springboot2/pet-store/pom.xml b/samples/springboot2/pet-store/pom.xml index 7565f7d33..6ff84ce56 100644 --- a/samples/springboot2/pet-store/pom.xml +++ b/samples/springboot2/pet-store/pom.xml @@ -51,7 +51,7 @@ io.symphonia lambda-logging - 1.0.1 + 1.0.3 From e24c9160145ed672a2b23c3fd1bd967cd6b18ef6 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 7 Jan 2022 09:15:13 +0100 Subject: [PATCH 175/888] chore(deps): Update aws-lambda-java-log4j2 version to 1.5.1 --- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/spring/pet-store/build.gradle | 2 +- samples/spring/pet-store/pom.xml | 2 +- samples/struts2/pet-store/build.gradle | 2 +- samples/struts2/pet-store/pom.xml | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index 647a06ce0..9555f73c1 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -14,7 +14,7 @@ dependencies { 'org.apache.logging.log4j:log4j-api:2.17.1', 'org.apache.logging.log4j:log4j-slf4j-impl:2.17.1', 'com.fasterxml.jackson.core:jackson-databind:2.13.1', - 'com.amazonaws:aws-lambda-java-log4j2:1.5.0', + 'com.amazonaws:aws-lambda-java-log4j2:1.5.1', ) testImplementation("junit:junit:4.13.2") diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index 12bf06906..ce0553dea 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -74,7 +74,7 @@ com.amazonaws aws-lambda-java-log4j2 - 1.5.0 + 1.5.1 diff --git a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle index 1edd92c3f..dff76649c 100644 --- a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle @@ -38,7 +38,7 @@ dependencies { implementation ('org.apache.logging.log4j:log4j-core:2.17.1') implementation ('org.apache.logging.log4j:log4j-api:2.17.1') implementation ('org.apache.logging.log4j:log4j-slf4j-impl:2.17.1') - implementation ('com.amazonaws:aws-lambda-java-log4j2:1.5.0') + implementation ('com.amazonaws:aws-lambda-java-log4j2:1.5.1') testImplementation('junit:junit:4.13.2') testImplementation('org.apache.struts:struts2-junit-plugin:2.5.28.3') { diff --git a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml index 95c499012..d8b58a894 100644 --- a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml @@ -110,7 +110,7 @@ com.amazonaws aws-lambda-java-log4j2 - 1.5.0 + 1.5.1 diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index e2e66719e..123cf4dbc 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -14,7 +14,7 @@ dependencies { 'org.apache.logging.log4j:log4j-api:2.17.1', 'org.apache.logging.log4j:log4j-slf4j-impl:2.17.1', 'com.fasterxml.jackson.core:jackson-databind:2.13.1', - 'com.amazonaws:aws-lambda-java-log4j2:1.5.0', + 'com.amazonaws:aws-lambda-java-log4j2:1.5.1', ) } diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index dac58c272..693d96428 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -90,7 +90,7 @@ com.amazonaws aws-lambda-java-log4j2 - 1.5.0 + 1.5.1 diff --git a/samples/struts2/pet-store/build.gradle b/samples/struts2/pet-store/build.gradle index 5532bd297..f480ee3ea 100644 --- a/samples/struts2/pet-store/build.gradle +++ b/samples/struts2/pet-store/build.gradle @@ -24,7 +24,7 @@ dependencies { 'org.apache.logging.log4j:log4j-core:2.17.1', 'org.apache.logging.log4j:log4j-api:2.17.1', 'org.apache.logging.log4j:log4j-slf4j-impl:2.17.1', - 'com.amazonaws:aws-lambda-java-log4j2:1.5.0', + 'com.amazonaws:aws-lambda-java-log4j2:1.5.1', ) } diff --git a/samples/struts2/pet-store/pom.xml b/samples/struts2/pet-store/pom.xml index 457f0833f..1d646bffd 100644 --- a/samples/struts2/pet-store/pom.xml +++ b/samples/struts2/pet-store/pom.xml @@ -121,7 +121,7 @@ com.amazonaws aws-lambda-java-log4j2 - 1.5.0 + 1.5.1 From 108e8dc06a10088abadd61d409f147963f4d362e Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 7 Jan 2022 10:37:09 +0100 Subject: [PATCH 176/888] chore(deps): Updates to test/ optional dependencies --- aws-serverless-java-container-core/pom.xml | 2 +- aws-serverless-java-container-spring/pom.xml | 12 ++++++------ aws-serverless-java-container-springboot2/pom.xml | 10 +++++----- aws-serverless-java-container-struts2/pom.xml | 6 +++--- .../src/main/resources/archetype-resources/pom.xml | 13 +++++++++++++ 5 files changed, 28 insertions(+), 15 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index b59cd1e1a..0a8aa636b 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -88,7 +88,7 @@ org.apache.httpcomponents httpcore - 4.4.14 + 4.4.15 compile true diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index ec4511ad4..1579f1b0d 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -48,7 +48,7 @@ commons-codec commons-codec - 1.10 + 1.15 test @@ -69,23 +69,23 @@ - org.hibernate + org.hibernate.validator hibernate-validator - 5.4.3.Final + 6.2.1.Final test javax.el javax.el-api - 2.2.4 + 3.0.0 test - org.glassfish.web + org.glassfish javax.el - 2.2.4 + 3.0.0 test diff --git a/aws-serverless-java-container-springboot2/pom.xml b/aws-serverless-java-container-springboot2/pom.xml index 29ceef115..6595ab8da 100644 --- a/aws-serverless-java-container-springboot2/pom.xml +++ b/aws-serverless-java-container-springboot2/pom.xml @@ -148,15 +148,15 @@ test - javax.validation - validation-api - 2.0.1.Final + jakarta.validation + jakarta.validation-api + 2.0.2 test - org.hibernate + org.hibernate.validator hibernate-validator - 6.1.7.Final + 6.2.1.Final test diff --git a/aws-serverless-java-container-struts2/pom.xml b/aws-serverless-java-container-struts2/pom.xml index e888540da..6c38466c3 100644 --- a/aws-serverless-java-container-struts2/pom.xml +++ b/aws-serverless-java-container-struts2/pom.xml @@ -55,7 +55,7 @@ commons-codec commons-codec - 1.10 + 1.15 test @@ -68,7 +68,7 @@ javax.el javax.el-api - 2.2.4 + 2.2.5 test @@ -82,7 +82,7 @@ org.glassfish.web javax.el - 2.2.4 + 2.2.6 test diff --git a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml index d8b58a894..481a135c2 100644 --- a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml @@ -113,6 +113,19 @@ 1.5.1 + + javax.el + javax.el-api + 2.2.5 + test + + + org.glassfish.web + javax.el + 2.2.6 + test + + junit junit From 18aa8a97f9a347f7a904e0b1afdb5aa5ffd7f25b Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 7 Jan 2022 10:47:47 +0100 Subject: [PATCH 177/888] chore(deps): Remove unused jetbrain annotations dependency --- aws-serverless-java-container-springboot2/pom.xml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/aws-serverless-java-container-springboot2/pom.xml b/aws-serverless-java-container-springboot2/pom.xml index 6595ab8da..4dde4a585 100644 --- a/aws-serverless-java-container-springboot2/pom.xml +++ b/aws-serverless-java-container-springboot2/pom.xml @@ -159,12 +159,6 @@ 6.2.1.Final test - - org.jetbrains - annotations - 17.0.0 - compile - javax.activation From fee7a6da206cdd9adbc1b5db1db79d443828b66e Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 7 Jan 2022 10:53:39 +0100 Subject: [PATCH 178/888] fix: asyncInit() code sample (#391) --- .../src/main/java/StreamLambdaHandler.java | 5 ++--- .../serverless/sample/springboot2/StreamLambdaHandler.java | 5 ++--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/src/main/java/StreamLambdaHandler.java b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/src/main/java/StreamLambdaHandler.java index ba15c6d69..dca9650d3 100644 --- a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/src/main/java/StreamLambdaHandler.java +++ b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/src/main/java/StreamLambdaHandler.java @@ -19,10 +19,9 @@ public class StreamLambdaHandler implements RequestStreamHandler { try { handler = SpringBootLambdaContainerHandler.getAwsProxyHandler(Application.class); // For applications that take longer than 10 seconds to start, use the async builder: - // long startTime = Instant.now().toEpochMilli(); - // handler = new SpringBootProxyHandlerBuilder() + // handler = new SpringBootProxyHandlerBuilder() // .defaultProxy() - // .asyncInit(startTime) + // .asyncInit() // .springBootApplication(Application.class) // .buildAndInitialize(); } catch (ContainerInitializationException e) { diff --git a/samples/springboot2/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot2/StreamLambdaHandler.java b/samples/springboot2/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot2/StreamLambdaHandler.java index 0b7cf5541..01ea96630 100644 --- a/samples/springboot2/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot2/StreamLambdaHandler.java +++ b/samples/springboot2/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot2/StreamLambdaHandler.java @@ -26,10 +26,9 @@ public class StreamLambdaHandler implements RequestStreamHandler { handler = SpringBootLambdaContainerHandler.getAwsProxyHandler(Application.class); // For applications that take longer than 10 seconds to start, use the async builder: - // long startTime = Instant.now().toEpochMilli(); - // handler = new SpringBootProxyHandlerBuilder() + // handler = new SpringBootProxyHandlerBuilder() // .defaultProxy() - // .asyncInit(startTime) + // .asyncInit() // .springBootApplication(Application.class) // .buildAndInitialize(); From 0c890e32df88db015a91bfdaf8f922a63d066494 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 3 Jan 2022 11:48:29 +0100 Subject: [PATCH 179/888] Empty form params should not be omitted (#340) --- .../internal/servlet/AwsHttpServletRequest.java | 6 ++++-- .../AwsProxyHttpServletRequestFormTest.java | 17 +++++++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java index 8ea22653c..61d97bfef 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java @@ -496,14 +496,16 @@ protected Map> getFormUrlEncodedParametersMap() { urlEncodedFormParameters = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); for (String parameter : rawBodyContent.split(FORM_DATA_SEPARATOR)) { String[] parameterKeyValue = parameter.split(HEADER_KEY_VALUE_SEPARATOR); - if (parameterKeyValue.length < 2) { + if (parameterKeyValue.length < 1) { continue; } List values = new ArrayList<>(); if (urlEncodedFormParameters.containsKey(parameterKeyValue[0])) { values = urlEncodedFormParameters.get(parameterKeyValue[0]); } - values.add(decodeValueIfEncoded(parameterKeyValue[1])); + if (parameterKeyValue.length > 1) { + values.add(decodeValueIfEncoded(parameterKeyValue[1])); + } urlEncodedFormParameters.put(decodeValueIfEncoded(parameterKeyValue[0]), values); } Timer.stop("SERVLET_REQUEST_GET_FORM_PARAMS"); diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestFormTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestFormTest.java index b20982b7c..073f0dc89 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestFormTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestFormTest.java @@ -123,4 +123,21 @@ public void postForm_getParamsBase64Encoded_expectAllParams() { assertEquals(2, params.size()); assertEquals(true, params.containsKey(PART_KEY_1)); } + + /** + * issue #340 + */ + @Test + public void postForm_emptyParamPresent() { + AwsProxyRequest proxyRequest = new AwsProxyRequestBuilder("/form", "POST") + .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_FORM_URLENCODED).build(); + String body = PART_KEY_1 + "=" + "&" + PART_KEY_2 + "=" + PART_VALUE_2; + proxyRequest.setBody(body); + + HttpServletRequest request = new AwsProxyHttpServletRequest(proxyRequest, null, null); + Map params = request.getParameterMap(); + assertNotNull(params); + assertEquals(2, params.size()); + assertEquals(true, params.containsKey(PART_KEY_1)); + } } From cab58173de425f6eae99f4cf61ced0cee744f7c7 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 3 Jan 2022 12:00:42 +0100 Subject: [PATCH 180/888] use assertTrue for boolean checks --- .../internal/servlet/AwsProxyHttpServletRequestFormTest.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestFormTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestFormTest.java index 073f0dc89..7663937bf 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestFormTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestFormTest.java @@ -23,6 +23,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; @@ -121,7 +122,7 @@ public void postForm_getParamsBase64Encoded_expectAllParams() { Map params = request.getParameterMap(); assertNotNull(params); assertEquals(2, params.size()); - assertEquals(true, params.containsKey(PART_KEY_1)); + assertTrue(params.containsKey(PART_KEY_1)); } /** @@ -138,6 +139,6 @@ public void postForm_emptyParamPresent() { Map params = request.getParameterMap(); assertNotNull(params); assertEquals(2, params.size()); - assertEquals(true, params.containsKey(PART_KEY_1)); + assertTrue(params.containsKey(PART_KEY_1)); } } From 0288c488b61c44e9a26a650d887fcecb980075a1 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 3 Jan 2022 13:59:47 +0100 Subject: [PATCH 181/888] form param names must be included in getParameterNames() (#340) --- .../internal/servlet/AwsProxyHttpServletRequest.java | 10 +++++++--- .../servlet/AwsProxyHttpServletRequestFormTest.java | 3 +++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java index 97ae055bd..eecda99cb 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java @@ -45,6 +45,9 @@ import java.util.List; import java.util.Locale; import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; /** @@ -360,11 +363,12 @@ public String getParameter(String s) { @Override public Enumeration getParameterNames() { + Set formParameterNames = getFormUrlEncodedParametersMap().keySet(); if (request.getMultiValueQueryStringParameters() == null) { - return Collections.emptyEnumeration(); + return Collections.enumeration(formParameterNames); } - - return Collections.enumeration(request.getMultiValueQueryStringParameters().keySet()); + return Collections.enumeration(Stream.concat(formParameterNames.stream(), + request.getMultiValueQueryStringParameters().keySet().stream()).collect(Collectors.toSet())); } diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestFormTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestFormTest.java index 7663937bf..838ea6607 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestFormTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestFormTest.java @@ -18,6 +18,7 @@ import java.io.IOException; import java.nio.charset.Charset; import java.util.Base64; +import java.util.Collections; import java.util.Map; import java.util.Random; @@ -123,6 +124,7 @@ public void postForm_getParamsBase64Encoded_expectAllParams() { assertNotNull(params); assertEquals(2, params.size()); assertTrue(params.containsKey(PART_KEY_1)); + assertEquals(2, Collections.list(request.getParameterNames()).size()); } /** @@ -140,5 +142,6 @@ public void postForm_emptyParamPresent() { assertNotNull(params); assertEquals(2, params.size()); assertTrue(params.containsKey(PART_KEY_1)); + assertEquals(2, Collections.list(request.getParameterNames()).size()); } } From 3b5f1f021dc102678e2fb4da24c798b13b2457dd Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Wed, 19 Jan 2022 11:14:59 +0100 Subject: [PATCH 182/888] chore(deps): Update SLF4J version to 1.7.33 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index b89423892..44bb13365 100644 --- a/pom.xml +++ b/pom.xml @@ -84,7 +84,7 @@ 0.7 6.2.2 2.13.1 - 1.7.32 + 1.7.33 UTF-8 From 92ad7386daae797a4b808c9173e549087d5c9fb1 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 14 Feb 2022 12:47:48 +0100 Subject: [PATCH 183/888] fix: getServletContextName() must not throw UnsupportedOperationException (#448) --- .../serverless/proxy/internal/servlet/AwsServletContext.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java index cf2e3920b..864a9bf10 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java @@ -310,8 +310,7 @@ public void removeAttribute(String s) { @Override public String getServletContextName() { - // TODO: This can also come from a reader interface - throw new UnsupportedOperationException(); + return null; } From 7b5a66b6451a1b615ae1b62c30b8744e697184ff Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Tue, 15 Feb 2022 19:58:32 +0100 Subject: [PATCH 184/888] chore(deps): Update SLF4J version to 1.7.36 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 44bb13365..84e86d7d1 100644 --- a/pom.xml +++ b/pom.xml @@ -84,7 +84,7 @@ 0.7 6.2.2 2.13.1 - 1.7.33 + 1.7.36 UTF-8 From 0a55c8aae69ba12f5baff857d01a485d71151ddb Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Tue, 15 Feb 2022 21:12:39 +0100 Subject: [PATCH 185/888] chore(deps): Update Spring dependencies (framework to 5.3.15, boot to 2.6.3) --- aws-serverless-java-container-spring/pom.xml | 2 +- aws-serverless-java-container-springboot2/pom.xml | 4 ++-- .../src/main/resources/archetype-resources/build.gradle | 4 ++-- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/spring/pet-store/build.gradle | 4 ++-- samples/spring/pet-store/pom.xml | 2 +- samples/springboot2/pet-store/pom.xml | 2 +- 9 files changed, 12 insertions(+), 12 deletions(-) diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 1579f1b0d..9f2a4bc0c 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -16,7 +16,7 @@ - 5.3.14 + 5.3.15 5.6.1 diff --git a/aws-serverless-java-container-springboot2/pom.xml b/aws-serverless-java-container-springboot2/pom.xml index 4dde4a585..80ffd84d7 100644 --- a/aws-serverless-java-container-springboot2/pom.xml +++ b/aws-serverless-java-container-springboot2/pom.xml @@ -15,8 +15,8 @@ 1.7-SNAPSHOT - 5.3.14 - 2.6.2 + 5.3.15 + 2.6.3 5.6.1 1.8 1.8 diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index 9555f73c1..3edfb6851 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -7,8 +7,8 @@ repositories { dependencies { implementation ( - 'org.springframework:spring-webmvc:5.3.14', - 'org.springframework:spring-context:5.3.14', + 'org.springframework:spring-webmvc:5.3.15', + 'org.springframework:spring-context:5.3.15', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[1.0,)', 'org.apache.logging.log4j:log4j-core:2.17.1', 'org.apache.logging.log4j:log4j-api:2.17.1', diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index ce0553dea..0ac770215 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 1.8 - 5.3.14 + 5.3.15 4.13.2 2.17.1 diff --git a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle index 4ef94378c..dde89ac5f 100644 --- a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle @@ -8,7 +8,7 @@ repositories { dependencies { implementation ( - 'org.springframework.boot:spring-boot-starter-web:2.6.2', + 'org.springframework.boot:spring-boot-starter-web:2.6.3', 'com.amazonaws.serverless:aws-serverless-java-container-springboot2:[1.0,)', 'io.symphonia:lambda-logging:1.0.3' ) diff --git a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml index 359eb62b5..c798b2c91 100644 --- a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ org.springframework.boot spring-boot-starter-parent - 2.6.2 + 2.6.3 diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index 123cf4dbc..95cc4d902 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -7,8 +7,8 @@ repositories { dependencies { implementation ( - 'org.springframework:spring-webmvc:5.3.14', - 'org.springframework:spring-context:5.3.14', + 'org.springframework:spring-webmvc:5.3.15', + 'org.springframework:spring-context:5.3.15', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[1.0,)', 'org.apache.logging.log4j:log4j-core:2.17.1', 'org.apache.logging.log4j:log4j-api:2.17.1', diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index 693d96428..39f3d37af 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -26,7 +26,7 @@ 1.8 1.8 - 5.3.14 + 5.3.15 4.13.2 2.17.1 diff --git a/samples/springboot2/pet-store/pom.xml b/samples/springboot2/pet-store/pom.xml index 6ff84ce56..c81e1e0cf 100644 --- a/samples/springboot2/pet-store/pom.xml +++ b/samples/springboot2/pet-store/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 2.6.2 + 2.6.3 From 4392c33751b956a398e2e664cde2c319764c77af Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Tue, 15 Feb 2022 21:16:52 +0100 Subject: [PATCH 186/888] chore(deps): Update Jetty dependency --- aws-serverless-java-container-spark/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws-serverless-java-container-spark/pom.xml b/aws-serverless-java-container-spark/pom.xml index caf664e9f..5211650f1 100644 --- a/aws-serverless-java-container-spark/pom.xml +++ b/aws-serverless-java-container-spark/pom.xml @@ -25,7 +25,7 @@ org.eclipse.jetty jetty-bom - 9.4.44.v20210927 + 9.4.45.v20220203 pom import From 85bcf3db7118d47d20275b5d1bc4d92f5fc81c2f Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Tue, 15 Feb 2022 21:24:20 +0100 Subject: [PATCH 187/888] chore(deps): Update Struts2 dependency to 2.5.29 --- aws-serverless-java-container-struts2/pom.xml | 2 +- .../main/resources/archetype-resources/build.gradle | 10 +++++----- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/struts2/pet-store/build.gradle | 8 ++++---- samples/struts2/pet-store/pom.xml | 2 +- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/aws-serverless-java-container-struts2/pom.xml b/aws-serverless-java-container-struts2/pom.xml index 6c38466c3..c383578ac 100644 --- a/aws-serverless-java-container-struts2/pom.xml +++ b/aws-serverless-java-container-struts2/pom.xml @@ -15,7 +15,7 @@ - 2.5.28.3 + 2.5.29 diff --git a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle index dff76649c..0c752a407 100644 --- a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle @@ -18,19 +18,19 @@ dependencies { exclude group: 'org.apache.logging.log4j', module: 'log4j-api' exclude group: 'org.apache.logging.log4j', module: 'log4j-to-slf4j' } - implementation ('org.apache.struts:struts2-convention-plugin:2.5.28.3') { + implementation ('org.apache.struts:struts2-convention-plugin:2.5.29') { exclude group: 'org.apache.struts', module: 'struts2-core' } - implementation ('org.apache.struts:struts2-rest-plugin:2.5.28.3') { + implementation ('org.apache.struts:struts2-rest-plugin:2.5.29') { exclude group: 'org.apache.struts', module: 'struts2-core' } - implementation ('org.apache.struts:struts2-bean-validation-plugin:2.5.28.3') { + implementation ('org.apache.struts:struts2-bean-validation-plugin:2.5.29') { exclude group: 'org.apache.struts', module: 'struts2-core' } implementation ('com.jgeppert.struts2:struts2-aws-lambda-support-plugin:1.3.0') { exclude group: 'org.apache.struts', module: 'struts2-core' } - implementation ('org.apache.struts:struts2-core:2.5.28.3') { + implementation ('org.apache.struts:struts2-core:2.5.29') { exclude group: 'org.apache.logging.log4j', module: 'log4j-api' } implementation ('org.hibernate:hibernate-validator:5.4.3.Final') @@ -41,7 +41,7 @@ dependencies { implementation ('com.amazonaws:aws-lambda-java-log4j2:1.5.1') testImplementation('junit:junit:4.13.2') - testImplementation('org.apache.struts:struts2-junit-plugin:2.5.28.3') { + testImplementation('org.apache.struts:struts2-junit-plugin:2.5.29') { exclude group: 'org.apache.struts', module: 'struts2-core' } } diff --git a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml index 481a135c2..e387c47c3 100644 --- a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml @@ -15,7 +15,7 @@ 1.8 1.8 - 2.5.28.3 + 2.5.29 2.13.1 4.13.2 2.17.1 diff --git a/samples/struts2/pet-store/build.gradle b/samples/struts2/pet-store/build.gradle index f480ee3ea..51da7fef3 100644 --- a/samples/struts2/pet-store/build.gradle +++ b/samples/struts2/pet-store/build.gradle @@ -14,10 +14,10 @@ configurations { dependencies { implementation ( 'com.amazonaws.serverless:aws-serverless-java-container-struts2:[1.0,)', - 'org.apache.struts:struts2-convention-plugin:2.5.28.3', - 'org.apache.struts:struts2-rest-plugin:2.5.28.3', - 'org.apache.struts:struts2-bean-validation-plugin:2.5.28.3', - 'org.apache.struts:struts2-junit-plugin:2.5.28.3', + 'org.apache.struts:struts2-convention-plugin:2.5.29', + 'org.apache.struts:struts2-rest-plugin:2.5.29', + 'org.apache.struts:struts2-bean-validation-plugin:2.5.29', + 'org.apache.struts:struts2-junit-plugin:2.5.29', 'com.jgeppert.struts2:struts2-aws-lambda-support-plugin:1.3.0', 'org.hibernate:hibernate-validator:5.4.3.Final', 'com.fasterxml.jackson.core:jackson-databind:2.13.1', diff --git a/samples/struts2/pet-store/pom.xml b/samples/struts2/pet-store/pom.xml index 1d646bffd..2bbdd429a 100644 --- a/samples/struts2/pet-store/pom.xml +++ b/samples/struts2/pet-store/pom.xml @@ -26,7 +26,7 @@ 1.8 1.8 - 2.5.28.3 + 2.5.29 2.13.1 4.13.2 2.17.1 From 9af380bef32e5412aa69d6674387e85a908aca9e Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Wed, 16 Feb 2022 10:22:19 +0100 Subject: [PATCH 188/888] Create GitHub action to automate releases --- .github/workflows/release.yml | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 .github/workflows/release.yml diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 000000000..e887deeee --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,33 @@ +name: Publish package to the Maven Central Repository +on: + workflow_dispatch: + inputs: + releaseVersion: + description: "Version to use for the release." + required: true + default: "X.Y.Z" + developmentVersion: + description: "Version to use for further development" + required: true + default: "X.Y.Z-SNAPSHOT" +jobs: + release: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Set up Maven + uses: actions/setup-java@v2 + with: + distribution: 'temurin' # Corretto isn't supported right now https://github.com/actions/setup-java/issues/68 + java-version: 8 + server-id: sonatype-nexus-staging + server-username: MAVEN_USERNAME + server-password: MAVEN_PASSWORD + gpg-private-key: ${{ secrets.GPG_SIGNING_KEY }} # Value of the GPG private key to import + gpg-passphrase: GPG_PASSPHRASE # env variable for GPG private key passphrase + - name: Release and publish package + run: mvn release:prepare release:perform -B -DreleaseVersion=${{ github.event.inputs.releaseVersion }} -DdevelopmentVersion=${{ github.event.inputs.developmentVersion }} + env: + MAVEN_USERNAME: ${{ secrets.OSSRH_JIRA_USERNAME }} + MAVEN_PASSWORD: ${{ secrets.OSSRH_JIRA_PASSWORD }} + GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} From b028c0f19af1a6ea691e634714a92f6b81794878 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Wed, 16 Feb 2022 10:58:57 +0100 Subject: [PATCH 189/888] chore: release automation - configure Git user --- .github/workflows/release.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e887deeee..57fd9681f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -15,6 +15,10 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 + - name: Configure Git User # may be removed after https://github.com/actions/checkout/issues/13 is resolved + run: | + git config user.email "${{ github.actor }}@users.noreply.github.com" + git config user.name "${{ github.actor }}" - name: Set up Maven uses: actions/setup-java@v2 with: From e82eb908a058949526c32c4a0ff898fcf85d6e22 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Wed, 16 Feb 2022 11:12:06 +0100 Subject: [PATCH 190/888] chore: release automation - update maven-gpg-plugin to fix gpg: signing failed: Inappropriate ioctl for device --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 84e86d7d1..bd732025c 100644 --- a/pom.xml +++ b/pom.xml @@ -193,7 +193,7 @@ org.apache.maven.plugins maven-gpg-plugin - 1.6 + 3.0.1 sign-artifacts From 158fe6e0a996c81368bc537773e1ac4ac4e0b4a7 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Wed, 16 Feb 2022 11:42:03 +0100 Subject: [PATCH 191/888] chore: release automation - maven-release-plugin config --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index bd732025c..cb266b8e2 100644 --- a/pom.xml +++ b/pom.xml @@ -171,8 +171,8 @@ maven-release-plugin clean verify install - false true + chore: release From 91129910273e483f8ce3c27ac3aa7882b8f1e057 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Wed, 16 Feb 2022 12:06:07 +0100 Subject: [PATCH 192/888] chore: release automation - use https instead of ssh connection --- aws-serverless-jersey-archetype/pom.xml | 3 +-- aws-serverless-spark-archetype/pom.xml | 3 +-- aws-serverless-spring-archetype/pom.xml | 3 +-- aws-serverless-springboot2-archetype/pom.xml | 3 +-- aws-serverless-struts2-archetype/pom.xml | 3 +-- pom.xml | 8 +++----- 6 files changed, 8 insertions(+), 15 deletions(-) diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index 70d430102..c9420435b 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -14,8 +14,7 @@ https://github.com/awslabs/aws-serverless-java-container.git - HEAD - + diff --git a/aws-serverless-spark-archetype/pom.xml b/aws-serverless-spark-archetype/pom.xml index 71695939c..9e46e7abf 100644 --- a/aws-serverless-spark-archetype/pom.xml +++ b/aws-serverless-spark-archetype/pom.xml @@ -14,8 +14,7 @@ https://github.com/awslabs/aws-serverless-java-container.git - HEAD - + diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index 7b36ba97b..cc3119e9a 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -14,8 +14,7 @@ https://github.com/awslabs/aws-serverless-java-container.git - HEAD - + diff --git a/aws-serverless-springboot2-archetype/pom.xml b/aws-serverless-springboot2-archetype/pom.xml index e88d67696..bda5c41c0 100644 --- a/aws-serverless-springboot2-archetype/pom.xml +++ b/aws-serverless-springboot2-archetype/pom.xml @@ -14,8 +14,7 @@ https://github.com/awslabs/aws-serverless-java-container.git - HEAD - + diff --git a/aws-serverless-struts2-archetype/pom.xml b/aws-serverless-struts2-archetype/pom.xml index 807c0414a..4086e9922 100644 --- a/aws-serverless-struts2-archetype/pom.xml +++ b/aws-serverless-struts2-archetype/pom.xml @@ -14,8 +14,7 @@ https://github.com/awslabs/aws-serverless-java-container.git - HEAD - + diff --git a/pom.xml b/pom.xml index cb266b8e2..a7c92ae5c 100644 --- a/pom.xml +++ b/pom.xml @@ -39,11 +39,9 @@ - https://github.com/awslabs/aws-serverless-java-container.git - scm:git:git@github.com:awslabs/aws-serverless-java-container.git - scm:git:git@github.com:awslabs/aws-serverless-java-container.git - HEAD - + https://github.com/awslabs/aws-serverless-java-container + https://github.com/awslabs/aws-serverless-java-container.git + From 9fd23c6c747846bb4b7a400bf8960c04a35acd4b Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Wed, 16 Feb 2022 12:09:32 +0100 Subject: [PATCH 193/888] chore: release automation - use https instead of ssh connection --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index a7c92ae5c..3e91563b4 100644 --- a/pom.xml +++ b/pom.xml @@ -40,7 +40,7 @@ https://github.com/awslabs/aws-serverless-java-container - https://github.com/awslabs/aws-serverless-java-container.git + scm:git:https://github.com/awslabs/aws-serverless-java-container.git From c857510e0fe4a7e9ad3d50b143ef5145bb6361c8 Mon Sep 17 00:00:00 2001 From: deki Date: Wed, 16 Feb 2022 11:17:43 +0000 Subject: [PATCH 194/888] chore: releaseprepare release aws-serverless-java-container-1.7 --- aws-serverless-java-container-core/pom.xml | 4 ++-- aws-serverless-java-container-jersey/pom.xml | 6 +++--- aws-serverless-java-container-spark/pom.xml | 6 +++--- aws-serverless-java-container-spring/pom.xml | 6 +++--- aws-serverless-java-container-springboot2/pom.xml | 6 +++--- aws-serverless-java-container-struts2/pom.xml | 6 +++--- aws-serverless-jersey-archetype/pom.xml | 7 ++++--- aws-serverless-spark-archetype/pom.xml | 7 ++++--- aws-serverless-spring-archetype/pom.xml | 7 ++++--- aws-serverless-springboot2-archetype/pom.xml | 7 ++++--- aws-serverless-struts2-archetype/pom.xml | 7 ++++--- pom.xml | 5 +++-- 12 files changed, 40 insertions(+), 34 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 0a8aa636b..d4c7edf40 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Core Allows Java applications written for a servlet container to run in AWS Lambda https://aws.amazon.com/lambda - 1.7-SNAPSHOT + 1.7 com.amazonaws.serverless aws-serverless-java-container - 1.7-SNAPSHOT + 1.7 .. diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index 1f279e1d2..3d82febad 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Jersey implementation Allows Java applications written for Jersey to run in AWS Lambda https://aws.amazon.com/lambda - 1.7-SNAPSHOT + 1.7 com.amazonaws.serverless aws-serverless-java-container - 1.7-SNAPSHOT + 1.7 .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.7-SNAPSHOT + 1.7 com.fasterxml.jackson.core diff --git a/aws-serverless-java-container-spark/pom.xml b/aws-serverless-java-container-spark/pom.xml index 5211650f1..299a34d62 100644 --- a/aws-serverless-java-container-spark/pom.xml +++ b/aws-serverless-java-container-spark/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spark implementation Allows Java applications written for Spark to run in AWS Lambda https://aws.amazon.com/lambda - 1.7-SNAPSHOT + 1.7 com.amazonaws.serverless aws-serverless-java-container - 1.7-SNAPSHOT + 1.7 .. @@ -37,7 +37,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.7-SNAPSHOT + 1.7 diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 9f2a4bc0c..82ff947e4 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spring implementation Allows Java applications written for the Spring framework to run in AWS Lambda https://aws.amazon.com/lambda - 1.7-SNAPSHOT + 1.7 com.amazonaws.serverless aws-serverless-java-container - 1.7-SNAPSHOT + 1.7 .. @@ -25,7 +25,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.7-SNAPSHOT + 1.7 diff --git a/aws-serverless-java-container-springboot2/pom.xml b/aws-serverless-java-container-springboot2/pom.xml index 80ffd84d7..da4d0ac52 100644 --- a/aws-serverless-java-container-springboot2/pom.xml +++ b/aws-serverless-java-container-springboot2/pom.xml @@ -3,7 +3,7 @@ aws-serverless-java-container com.amazonaws.serverless - 1.7-SNAPSHOT + 1.7 4.0.0 @@ -12,7 +12,7 @@ AWS Serverless Java container support - SpringBoot 2 implementation Allows Java applications written for SpringBoot 2 to run in AWS Lambda https://aws.amazon.com/lambda - 1.7-SNAPSHOT + 1.7 5.3.15 @@ -27,7 +27,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.7-SNAPSHOT + 1.7 diff --git a/aws-serverless-java-container-struts2/pom.xml b/aws-serverless-java-container-struts2/pom.xml index c383578ac..870af950f 100644 --- a/aws-serverless-java-container-struts2/pom.xml +++ b/aws-serverless-java-container-struts2/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Struts2 implementation Allows Java applications written for the Struts2 framework to run in AWS Lambda https://aws.amazon.com/lambda - 1.7-SNAPSHOT + 1.7 com.amazonaws.serverless aws-serverless-java-container - 1.7-SNAPSHOT + 1.7 @@ -23,7 +23,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.7-SNAPSHOT + 1.7 diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index c9420435b..2a1bd7650 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -4,17 +4,18 @@ com.amazonaws.serverless aws-serverless-java-container - 1.7-SNAPSHOT + 1.7 com.amazonaws.serverless.archetypes aws-serverless-jersey-archetype - 1.7-SNAPSHOT + 1.7 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - + aws-serverless-java-container-1.7 + diff --git a/aws-serverless-spark-archetype/pom.xml b/aws-serverless-spark-archetype/pom.xml index 9e46e7abf..ce7677c38 100644 --- a/aws-serverless-spark-archetype/pom.xml +++ b/aws-serverless-spark-archetype/pom.xml @@ -4,17 +4,18 @@ com.amazonaws.serverless aws-serverless-java-container - 1.7-SNAPSHOT + 1.7 com.amazonaws.serverless.archetypes aws-serverless-spark-archetype - 1.7-SNAPSHOT + 1.7 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - + aws-serverless-java-container-1.7 + diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index cc3119e9a..b1e81fd82 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -4,17 +4,18 @@ com.amazonaws.serverless aws-serverless-java-container - 1.7-SNAPSHOT + 1.7 com.amazonaws.serverless.archetypes aws-serverless-spring-archetype - 1.7-SNAPSHOT + 1.7 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - + aws-serverless-java-container-1.7 + diff --git a/aws-serverless-springboot2-archetype/pom.xml b/aws-serverless-springboot2-archetype/pom.xml index bda5c41c0..ae051343a 100644 --- a/aws-serverless-springboot2-archetype/pom.xml +++ b/aws-serverless-springboot2-archetype/pom.xml @@ -4,17 +4,18 @@ com.amazonaws.serverless aws-serverless-java-container - 1.7-SNAPSHOT + 1.7 com.amazonaws.serverless.archetypes aws-serverless-springboot2-archetype - 1.7-SNAPSHOT + 1.7 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - + aws-serverless-java-container-1.7 + diff --git a/aws-serverless-struts2-archetype/pom.xml b/aws-serverless-struts2-archetype/pom.xml index 4086e9922..e6e1c5d39 100644 --- a/aws-serverless-struts2-archetype/pom.xml +++ b/aws-serverless-struts2-archetype/pom.xml @@ -4,17 +4,18 @@ com.amazonaws.serverless aws-serverless-java-container - 1.7-SNAPSHOT + 1.7 com.amazonaws.serverless.archetypes aws-serverless-struts2-archetype - 1.7-SNAPSHOT + 1.7 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - + aws-serverless-java-container-1.7 + diff --git a/pom.xml b/pom.xml index 3e91563b4..65f72e041 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazonaws.serverless aws-serverless-java-container pom - 1.7-SNAPSHOT + 1.7 AWS Serverless Java container A Java framework to run Spring, Spring Boot, Jersey, Spark, and Struts applications inside AWS Lambda https://github.com/awslabs/aws-serverless-java-container @@ -41,7 +41,8 @@ https://github.com/awslabs/aws-serverless-java-container scm:git:https://github.com/awslabs/aws-serverless-java-container.git - + aws-serverless-java-container-1.7 + From d647d3cd5d85539b47ba6a51bf87d49448178a5a Mon Sep 17 00:00:00 2001 From: deki Date: Wed, 16 Feb 2022 11:17:45 +0000 Subject: [PATCH 195/888] chore: releaseprepare for next development iteration --- aws-serverless-java-container-core/pom.xml | 4 ++-- aws-serverless-java-container-jersey/pom.xml | 6 +++--- aws-serverless-java-container-spark/pom.xml | 6 +++--- aws-serverless-java-container-spring/pom.xml | 6 +++--- aws-serverless-java-container-springboot2/pom.xml | 6 +++--- aws-serverless-java-container-struts2/pom.xml | 6 +++--- aws-serverless-jersey-archetype/pom.xml | 6 +++--- aws-serverless-spark-archetype/pom.xml | 6 +++--- aws-serverless-spring-archetype/pom.xml | 6 +++--- aws-serverless-springboot2-archetype/pom.xml | 6 +++--- aws-serverless-struts2-archetype/pom.xml | 6 +++--- pom.xml | 4 ++-- 12 files changed, 34 insertions(+), 34 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index d4c7edf40..70213cdff 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Core Allows Java applications written for a servlet container to run in AWS Lambda https://aws.amazon.com/lambda - 1.7 + 1.8-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.7 + 1.8-SNAPSHOT .. diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index 3d82febad..ad6d3144b 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Jersey implementation Allows Java applications written for Jersey to run in AWS Lambda https://aws.amazon.com/lambda - 1.7 + 1.8-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.7 + 1.8-SNAPSHOT .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.7 + 1.8-SNAPSHOT com.fasterxml.jackson.core diff --git a/aws-serverless-java-container-spark/pom.xml b/aws-serverless-java-container-spark/pom.xml index 299a34d62..0267da06a 100644 --- a/aws-serverless-java-container-spark/pom.xml +++ b/aws-serverless-java-container-spark/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spark implementation Allows Java applications written for Spark to run in AWS Lambda https://aws.amazon.com/lambda - 1.7 + 1.8-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.7 + 1.8-SNAPSHOT .. @@ -37,7 +37,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.7 + 1.8-SNAPSHOT diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 82ff947e4..f8ad2d60b 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spring implementation Allows Java applications written for the Spring framework to run in AWS Lambda https://aws.amazon.com/lambda - 1.7 + 1.8-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.7 + 1.8-SNAPSHOT .. @@ -25,7 +25,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.7 + 1.8-SNAPSHOT diff --git a/aws-serverless-java-container-springboot2/pom.xml b/aws-serverless-java-container-springboot2/pom.xml index da4d0ac52..535ace66c 100644 --- a/aws-serverless-java-container-springboot2/pom.xml +++ b/aws-serverless-java-container-springboot2/pom.xml @@ -3,7 +3,7 @@ aws-serverless-java-container com.amazonaws.serverless - 1.7 + 1.8-SNAPSHOT 4.0.0 @@ -12,7 +12,7 @@ AWS Serverless Java container support - SpringBoot 2 implementation Allows Java applications written for SpringBoot 2 to run in AWS Lambda https://aws.amazon.com/lambda - 1.7 + 1.8-SNAPSHOT 5.3.15 @@ -27,7 +27,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.7 + 1.8-SNAPSHOT diff --git a/aws-serverless-java-container-struts2/pom.xml b/aws-serverless-java-container-struts2/pom.xml index 870af950f..880b1074e 100644 --- a/aws-serverless-java-container-struts2/pom.xml +++ b/aws-serverless-java-container-struts2/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Struts2 implementation Allows Java applications written for the Struts2 framework to run in AWS Lambda https://aws.amazon.com/lambda - 1.7 + 1.8-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.7 + 1.8-SNAPSHOT @@ -23,7 +23,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.7 + 1.8-SNAPSHOT diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index 2a1bd7650..fa79a42f9 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.7 + 1.8-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-jersey-archetype - 1.7 + 1.8-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.7 + HEAD diff --git a/aws-serverless-spark-archetype/pom.xml b/aws-serverless-spark-archetype/pom.xml index ce7677c38..86f6aacd5 100644 --- a/aws-serverless-spark-archetype/pom.xml +++ b/aws-serverless-spark-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.7 + 1.8-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-spark-archetype - 1.7 + 1.8-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.7 + HEAD diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index b1e81fd82..019c29022 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.7 + 1.8-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-spring-archetype - 1.7 + 1.8-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.7 + HEAD diff --git a/aws-serverless-springboot2-archetype/pom.xml b/aws-serverless-springboot2-archetype/pom.xml index ae051343a..9706c5773 100644 --- a/aws-serverless-springboot2-archetype/pom.xml +++ b/aws-serverless-springboot2-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.7 + 1.8-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-springboot2-archetype - 1.7 + 1.8-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.7 + HEAD diff --git a/aws-serverless-struts2-archetype/pom.xml b/aws-serverless-struts2-archetype/pom.xml index e6e1c5d39..f72bdc996 100644 --- a/aws-serverless-struts2-archetype/pom.xml +++ b/aws-serverless-struts2-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.7 + 1.8-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-struts2-archetype - 1.7 + 1.8-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.7 + HEAD diff --git a/pom.xml b/pom.xml index 65f72e041..874cfd2d6 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazonaws.serverless aws-serverless-java-container pom - 1.7 + 1.8-SNAPSHOT AWS Serverless Java container A Java framework to run Spring, Spring Boot, Jersey, Spark, and Struts applications inside AWS Lambda https://github.com/awslabs/aws-serverless-java-container @@ -41,7 +41,7 @@ https://github.com/awslabs/aws-serverless-java-container scm:git:https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.7 + HEAD From 7294aad170fca494450b1ab491440d5e2ae9edff Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Wed, 16 Feb 2022 12:37:11 +0100 Subject: [PATCH 196/888] chore(deps): Update OWASP dependency checker to 6.5.3 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 874cfd2d6..430ea1821 100644 --- a/pom.xml +++ b/pom.xml @@ -81,7 +81,7 @@ 0.7 - 6.2.2 + 6.5.3 2.13.1 1.7.36 UTF-8 @@ -171,7 +171,7 @@ clean verify install true - chore: release + chore: release - From caf193833913c37949d0fc6d1e99e929c6638d0c Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Wed, 16 Feb 2022 13:24:09 +0100 Subject: [PATCH 197/888] chore(deps): Explicitly set commons-io version to 2.11.0 to avoid older transitive dependency version (CVE-2021-29425) --- aws-serverless-java-container-core/pom.xml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 70213cdff..a581c3ee6 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -101,6 +101,16 @@ + + + + commons-io + commons-io + 2.11.0 + + + + From 6fe0e4449dad0c476c0ab0390ae1252d56363ceb Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 4 Mar 2022 21:01:29 +0100 Subject: [PATCH 198/888] chore(deps): Update Log4J version to 2.17.2 --- .../src/main/resources/archetype-resources/build.gradle | 6 +++--- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 6 +++--- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/spring/pet-store/build.gradle | 6 +++--- samples/spring/pet-store/pom.xml | 2 +- samples/struts2/pet-store/build.gradle | 6 +++--- samples/struts2/pet-store/pom.xml | 2 +- 8 files changed, 16 insertions(+), 16 deletions(-) diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index 3edfb6851..2e0e8707f 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -10,9 +10,9 @@ dependencies { 'org.springframework:spring-webmvc:5.3.15', 'org.springframework:spring-context:5.3.15', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[1.0,)', - 'org.apache.logging.log4j:log4j-core:2.17.1', - 'org.apache.logging.log4j:log4j-api:2.17.1', - 'org.apache.logging.log4j:log4j-slf4j-impl:2.17.1', + 'org.apache.logging.log4j:log4j-core:2.17.2', + 'org.apache.logging.log4j:log4j-api:2.17.2', + 'org.apache.logging.log4j:log4j-slf4j-impl:2.17.2', 'com.fasterxml.jackson.core:jackson-databind:2.13.1', 'com.amazonaws:aws-lambda-java-log4j2:1.5.1', ) diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index 0ac770215..c7c87a7e9 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -18,7 +18,7 @@ 1.8 5.3.15 4.13.2 - 2.17.1 + 2.17.2 diff --git a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle index 0c752a407..e4c9bb9bb 100644 --- a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle @@ -35,9 +35,9 @@ dependencies { } implementation ('org.hibernate:hibernate-validator:5.4.3.Final') implementation ('com.fasterxml.jackson.core:jackson-databind:2.13.1') - implementation ('org.apache.logging.log4j:log4j-core:2.17.1') - implementation ('org.apache.logging.log4j:log4j-api:2.17.1') - implementation ('org.apache.logging.log4j:log4j-slf4j-impl:2.17.1') + implementation ('org.apache.logging.log4j:log4j-core:2.17.2') + implementation ('org.apache.logging.log4j:log4j-api:2.17.2') + implementation ('org.apache.logging.log4j:log4j-slf4j-impl:2.17.2') implementation ('com.amazonaws:aws-lambda-java-log4j2:1.5.1') testImplementation('junit:junit:4.13.2') diff --git a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml index e387c47c3..856a666c2 100644 --- a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml @@ -18,7 +18,7 @@ 2.5.29 2.13.1 4.13.2 - 2.17.1 + 2.17.2 diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index 95cc4d902..4c36b8352 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -10,9 +10,9 @@ dependencies { 'org.springframework:spring-webmvc:5.3.15', 'org.springframework:spring-context:5.3.15', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[1.0,)', - 'org.apache.logging.log4j:log4j-core:2.17.1', - 'org.apache.logging.log4j:log4j-api:2.17.1', - 'org.apache.logging.log4j:log4j-slf4j-impl:2.17.1', + 'org.apache.logging.log4j:log4j-core:2.17.2', + 'org.apache.logging.log4j:log4j-api:2.17.2', + 'org.apache.logging.log4j:log4j-slf4j-impl:2.17.2', 'com.fasterxml.jackson.core:jackson-databind:2.13.1', 'com.amazonaws:aws-lambda-java-log4j2:1.5.1', ) diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index 39f3d37af..ce1a3b97a 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -28,7 +28,7 @@ 1.8 5.3.15 4.13.2 - 2.17.1 + 2.17.2 diff --git a/samples/struts2/pet-store/build.gradle b/samples/struts2/pet-store/build.gradle index 51da7fef3..959cb057d 100644 --- a/samples/struts2/pet-store/build.gradle +++ b/samples/struts2/pet-store/build.gradle @@ -21,9 +21,9 @@ dependencies { 'com.jgeppert.struts2:struts2-aws-lambda-support-plugin:1.3.0', 'org.hibernate:hibernate-validator:5.4.3.Final', 'com.fasterxml.jackson.core:jackson-databind:2.13.1', - 'org.apache.logging.log4j:log4j-core:2.17.1', - 'org.apache.logging.log4j:log4j-api:2.17.1', - 'org.apache.logging.log4j:log4j-slf4j-impl:2.17.1', + 'org.apache.logging.log4j:log4j-core:2.17.2', + 'org.apache.logging.log4j:log4j-api:2.17.2', + 'org.apache.logging.log4j:log4j-slf4j-impl:2.17.2', 'com.amazonaws:aws-lambda-java-log4j2:1.5.1', ) } diff --git a/samples/struts2/pet-store/pom.xml b/samples/struts2/pet-store/pom.xml index 2bbdd429a..34908b9bf 100644 --- a/samples/struts2/pet-store/pom.xml +++ b/samples/struts2/pet-store/pom.xml @@ -29,7 +29,7 @@ 2.5.29 2.13.1 4.13.2 - 2.17.1 + 2.17.2 From 41123f359f2753963fe734ddedf2a86707679a4b Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Thu, 24 Mar 2022 10:23:03 +0100 Subject: [PATCH 199/888] chore: Move spotbugs plugin config to parent pom --- aws-serverless-java-container-core/pom.xml | 23 --------------- aws-serverless-java-container-jersey/pom.xml | 22 --------------- aws-serverless-java-container-spark/pom.xml | 23 --------------- aws-serverless-java-container-spring/pom.xml | 23 --------------- .../pom.xml | 23 --------------- aws-serverless-java-container-struts2/pom.xml | 23 --------------- pom.xml | 28 +++++++++++++++++++ 7 files changed, 28 insertions(+), 137 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index a581c3ee6..a8123e582 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -163,29 +163,6 @@ com.github.spotbugs spotbugs-maven-plugin - 4.2.0 - - - Max - - Low - - true - - ${project.build.directory}/spotbugs - - - - com.h3xstream.findsecbugs - findsecbugs-plugin - 1.7.1 - - - - Max - - Low - - true - - ${project.build.directory}/spotbugs - - - - com.h3xstream.findsecbugs - findsecbugs-plugin - 1.7.1 - - - - Max - - Low - - true - - ${project.build.directory}/spotbugs - - - - com.h3xstream.findsecbugs - findsecbugs-plugin - 1.7.1 - - - - Max - - Low - - true - - ${project.build.directory}/spotbugs - - - - com.h3xstream.findsecbugs - findsecbugs-plugin - 1.7.1 - - - - Max - - Low - - true - - ${project.build.directory}/spotbugs - - - - com.h3xstream.findsecbugs - findsecbugs-plugin - 1.7.1 - - - - Max - - Low - - true - - ${project.build.directory}/spotbugs - - - - com.h3xstream.findsecbugs - findsecbugs-plugin - 1.7.1 - - - + Max + + Low + + true + + ${project.build.directory}/spotbugs + + + + com.h3xstream.findsecbugs + findsecbugs-plugin + 1.7.1 + + + + From 074a29535394f5f9bd4abbf400482d1d1250ac66 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Thu, 24 Mar 2022 11:28:30 +0100 Subject: [PATCH 200/888] chore(deps): align versions with Maven POM --- samples/springboot2/pet-store/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/samples/springboot2/pet-store/build.gradle b/samples/springboot2/pet-store/build.gradle index 16a33bcce..bc8508c55 100644 --- a/samples/springboot2/pet-store/build.gradle +++ b/samples/springboot2/pet-store/build.gradle @@ -8,11 +8,11 @@ repositories { dependencies { implementation ( - implementation('org.springframework.boot:spring-boot-starter-web:2.6.2') { + implementation('org.springframework.boot:spring-boot-starter-web:2.6.3') { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat' }, 'com.amazonaws.serverless:aws-serverless-java-container-springboot2:[1.4,)', - 'io.symphonia:lambda-logging:1.0.1' + 'io.symphonia:lambda-logging:1.0.3' ) testImplementation("junit:junit") } From 6d91ac9a108aa448c01933c049dad6ec0cb7925d Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 28 Mar 2022 13:13:52 +0200 Subject: [PATCH 201/888] chore(deps): update Jackson version (CVE-2020-36518) --- aws-serverless-java-container-core/pom.xml | 3 ++- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 4 ++-- pom.xml | 2 +- samples/jersey/pet-store/build.gradle | 2 +- samples/jersey/pet-store/pom.xml | 2 +- samples/spark/pet-store/build.gradle | 2 +- samples/spark/pet-store/pom.xml | 2 +- samples/spring/pet-store/build.gradle | 2 +- samples/struts2/pet-store/build.gradle | 2 +- samples/struts2/pet-store/pom.xml | 4 ++-- 16 files changed, 19 insertions(+), 18 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index a8123e582..bf3e8047a 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -53,7 +53,8 @@ com.fasterxml.jackson.module jackson-module-afterburner - ${jackson.version} + 2.13.2 + com.fasterxml.jackson.core diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle index fab27db50..f1a43b136 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle @@ -9,7 +9,7 @@ dependencies { implementation ( 'com.amazonaws:aws-lambda-java-core:1.2.1', 'com.amazonaws.serverless:aws-serverless-java-container-jersey:[1.0,)', - 'com.fasterxml.jackson.core:jackson-databind:2.13.1', + 'com.fasterxml.jackson.core:jackson-databind:2.13.2.1', 'io.symphonia:lambda-logging:1.0.3' ) diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml index cd2fab40a..b2d73942f 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml @@ -15,7 +15,7 @@ 1.8 1.8 2.35 - 2.13.1 + 2.13.2.1 diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle index 143fd9dd8..df7dabaf4 100644 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle @@ -9,7 +9,7 @@ dependencies { implementation ( 'com.sparkjava:spark-core:2.9.3', 'com.amazonaws.serverless:aws-serverless-java-container-spark:[1.0,)', - 'com.fasterxml.jackson.core:jackson-databind:2.13.1', + 'com.fasterxml.jackson.core:jackson-databind:2.13.2.1', 'io.symphonia:lambda-logging:1.0.3' ) diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml index 3f134aa74..3741f8572 100644 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 1.8 - 2.13.1 + 2.13.2.1 2.9.1 diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index 2e0e8707f..800d7cf02 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -13,7 +13,7 @@ dependencies { 'org.apache.logging.log4j:log4j-core:2.17.2', 'org.apache.logging.log4j:log4j-api:2.17.2', 'org.apache.logging.log4j:log4j-slf4j-impl:2.17.2', - 'com.fasterxml.jackson.core:jackson-databind:2.13.1', + 'com.fasterxml.jackson.core:jackson-databind:2.13.2.1', 'com.amazonaws:aws-lambda-java-log4j2:1.5.1', ) diff --git a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle index e4c9bb9bb..3a14d07b7 100644 --- a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle @@ -34,7 +34,7 @@ dependencies { exclude group: 'org.apache.logging.log4j', module: 'log4j-api' } implementation ('org.hibernate:hibernate-validator:5.4.3.Final') - implementation ('com.fasterxml.jackson.core:jackson-databind:2.13.1') + implementation ('com.fasterxml.jackson.core:jackson-databind:2.13.2.1') implementation ('org.apache.logging.log4j:log4j-core:2.17.2') implementation ('org.apache.logging.log4j:log4j-api:2.17.2') implementation ('org.apache.logging.log4j:log4j-slf4j-impl:2.17.2') diff --git a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml index 856a666c2..c7c8ad3db 100644 --- a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 1.8 2.5.29 - 2.13.1 + 2.13.2 4.13.2 2.17.2 @@ -86,7 +86,7 @@ com.fasterxml.jackson.core jackson-databind - ${jackson.version} + ${jackson.version}.1 diff --git a/pom.xml b/pom.xml index 368d4f9c7..9b9414303 100644 --- a/pom.xml +++ b/pom.xml @@ -82,7 +82,7 @@ 0.7 6.5.3 - 2.13.1 + 2.13.2 1.7.36 UTF-8 diff --git a/samples/jersey/pet-store/build.gradle b/samples/jersey/pet-store/build.gradle index fa04aadc2..0347120b8 100644 --- a/samples/jersey/pet-store/build.gradle +++ b/samples/jersey/pet-store/build.gradle @@ -9,7 +9,7 @@ dependencies { implementation ( 'com.amazonaws:aws-lambda-java-core:1.2.1', 'com.amazonaws.serverless:aws-serverless-java-container-jersey:[1.0,)', - 'com.fasterxml.jackson.core:jackson-databind:2.13.1', + 'com.fasterxml.jackson.core:jackson-databind:2.13.2.1', 'io.symphonia:lambda-logging:1.0.3' ) diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index 71998d8a1..71675f0b9 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -27,7 +27,7 @@ 1.8 1.8 2.35 - 2.13.1 + 2.13.2.1 diff --git a/samples/spark/pet-store/build.gradle b/samples/spark/pet-store/build.gradle index d07a67333..dbe3b8794 100644 --- a/samples/spark/pet-store/build.gradle +++ b/samples/spark/pet-store/build.gradle @@ -9,7 +9,7 @@ dependencies { implementation ( 'com.sparkjava:spark-core:2.9.3', 'com.amazonaws.serverless:aws-serverless-java-container-spark:[1.0,)', - 'com.fasterxml.jackson.core:jackson-databind:2.13.1', + 'com.fasterxml.jackson.core:jackson-databind:2.13.2.1', 'io.symphonia:lambda-logging:1.0.3' ) } diff --git a/samples/spark/pet-store/pom.xml b/samples/spark/pet-store/pom.xml index aa03786a9..53c8a02f7 100644 --- a/samples/spark/pet-store/pom.xml +++ b/samples/spark/pet-store/pom.xml @@ -26,7 +26,7 @@ 1.8 1.8 - 2.13.1 + 2.13.2.1 2.9.1 diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index 4c36b8352..96f61bea7 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -13,7 +13,7 @@ dependencies { 'org.apache.logging.log4j:log4j-core:2.17.2', 'org.apache.logging.log4j:log4j-api:2.17.2', 'org.apache.logging.log4j:log4j-slf4j-impl:2.17.2', - 'com.fasterxml.jackson.core:jackson-databind:2.13.1', + 'com.fasterxml.jackson.core:jackson-databind:2.13.2.1', 'com.amazonaws:aws-lambda-java-log4j2:1.5.1', ) } diff --git a/samples/struts2/pet-store/build.gradle b/samples/struts2/pet-store/build.gradle index 959cb057d..88cd447d5 100644 --- a/samples/struts2/pet-store/build.gradle +++ b/samples/struts2/pet-store/build.gradle @@ -20,7 +20,7 @@ dependencies { 'org.apache.struts:struts2-junit-plugin:2.5.29', 'com.jgeppert.struts2:struts2-aws-lambda-support-plugin:1.3.0', 'org.hibernate:hibernate-validator:5.4.3.Final', - 'com.fasterxml.jackson.core:jackson-databind:2.13.1', + 'com.fasterxml.jackson.core:jackson-databind:2.13.2.1', 'org.apache.logging.log4j:log4j-core:2.17.2', 'org.apache.logging.log4j:log4j-api:2.17.2', 'org.apache.logging.log4j:log4j-slf4j-impl:2.17.2', diff --git a/samples/struts2/pet-store/pom.xml b/samples/struts2/pet-store/pom.xml index 34908b9bf..7d1cb9ab6 100644 --- a/samples/struts2/pet-store/pom.xml +++ b/samples/struts2/pet-store/pom.xml @@ -27,7 +27,7 @@ 1.8 1.8 2.5.29 - 2.13.1 + 2.13.2 4.13.2 2.17.2 @@ -97,7 +97,7 @@ com.fasterxml.jackson.core jackson-databind - ${jackson.version} + ${jackson.version}.1 From 0a5af3211c7068b423f36e0072643357c7ca5d20 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 28 Mar 2022 13:22:29 +0200 Subject: [PATCH 202/888] chore(deps): update Jackson version (CVE-2020-36518) --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 9b9414303..ec2c9bafa 100644 --- a/pom.xml +++ b/pom.xml @@ -82,7 +82,7 @@ 0.7 6.5.3 - 2.13.2 + 2.13.2.1 1.7.36 UTF-8 From 6140f3efddfbfaefe1e75b9a70d172cb3f212fe8 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 28 Mar 2022 13:55:26 +0200 Subject: [PATCH 203/888] fix: ${} versions in archetypes need escaping otherwise they will be replace directly --- .../resources/archetype-resources/pom.xml | 6 ++--- .../resources/archetype-resources/pom.xml | 4 ++-- .../resources/archetype-resources/pom.xml | 14 ++++++------ .../resources/archetype-resources/pom.xml | 22 +++++++++---------- 4 files changed, 23 insertions(+), 23 deletions(-) diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml index b2d73942f..5bce2b69f 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml @@ -28,7 +28,7 @@ org.glassfish.jersey.media jersey-media-json-jackson - ${jersey.version} + \${jersey.version} com.fasterxml.jackson.core @@ -48,13 +48,13 @@ com.fasterxml.jackson.core jackson-databind - ${jackson.version} + \${jackson.version} org.glassfish.jersey.inject jersey-hk2 - ${jersey.version} + \${jersey.version} diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml index 3741f8572..4f183879b 100644 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml @@ -30,13 +30,13 @@ com.sparkjava spark-core - ${spark.version} + \${spark.version} com.fasterxml.jackson.core jackson-databind - ${jackson.version} + \${jackson.version} diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index c7c87a7e9..8acc76faf 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -31,13 +31,13 @@ org.springframework spring-webmvc - ${spring.version} + \${spring.version} org.springframework spring-context - ${spring.version} + \${spring.version} + commons-io + commons-io + 2.11.0 + + + + From a8d4765b710dd0afbd02820f8f472c5d034ca11e Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 28 Mar 2022 14:01:51 +0200 Subject: [PATCH 205/888] chore(deps): Update Spring dependencies (framework to 5.3.17, boot to 2.6.5, security to 5.6.2) --- aws-serverless-java-container-core/pom.xml | 2 +- aws-serverless-java-container-spring/pom.xml | 4 ++-- aws-serverless-java-container-springboot2/pom.xml | 6 +++--- .../src/main/resources/archetype-resources/build.gradle | 4 ++-- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/spring/pet-store/build.gradle | 4 ++-- samples/spring/pet-store/pom.xml | 2 +- samples/springboot2/pet-store/build.gradle | 2 +- samples/springboot2/pet-store/pom.xml | 2 +- 11 files changed, 16 insertions(+), 16 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index bf3e8047a..aa40631ae 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -97,7 +97,7 @@ org.springframework.security spring-security-web - 5.6.1 + 5.6.2 test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index bf2e66d2f..3d715aa5d 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -16,8 +16,8 @@ - 5.3.15 - 5.6.1 + 5.3.17 + 5.6.2 diff --git a/aws-serverless-java-container-springboot2/pom.xml b/aws-serverless-java-container-springboot2/pom.xml index b0692fcce..51eb7604d 100644 --- a/aws-serverless-java-container-springboot2/pom.xml +++ b/aws-serverless-java-container-springboot2/pom.xml @@ -15,9 +15,9 @@ 1.8-SNAPSHOT - 5.3.15 - 2.6.3 - 5.6.1 + 5.3.17 + 2.6.5 + 5.6.2 1.8 1.8 diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index 800d7cf02..ca53251fd 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -7,8 +7,8 @@ repositories { dependencies { implementation ( - 'org.springframework:spring-webmvc:5.3.15', - 'org.springframework:spring-context:5.3.15', + 'org.springframework:spring-webmvc:5.3.17', + 'org.springframework:spring-context:5.3.17', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[1.0,)', 'org.apache.logging.log4j:log4j-core:2.17.2', 'org.apache.logging.log4j:log4j-api:2.17.2', diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index 8acc76faf..757f45820 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 1.8 - 5.3.15 + 5.3.17 4.13.2 2.17.2 diff --git a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle index dde89ac5f..729e76715 100644 --- a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle @@ -8,7 +8,7 @@ repositories { dependencies { implementation ( - 'org.springframework.boot:spring-boot-starter-web:2.6.3', + 'org.springframework.boot:spring-boot-starter-web:2.6.5', 'com.amazonaws.serverless:aws-serverless-java-container-springboot2:[1.0,)', 'io.symphonia:lambda-logging:1.0.3' ) diff --git a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml index c798b2c91..c580345d3 100644 --- a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ org.springframework.boot spring-boot-starter-parent - 2.6.3 + 2.6.5 diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index 96f61bea7..c220a1788 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -7,8 +7,8 @@ repositories { dependencies { implementation ( - 'org.springframework:spring-webmvc:5.3.15', - 'org.springframework:spring-context:5.3.15', + 'org.springframework:spring-webmvc:5.3.17', + 'org.springframework:spring-context:5.3.17', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[1.0,)', 'org.apache.logging.log4j:log4j-core:2.17.2', 'org.apache.logging.log4j:log4j-api:2.17.2', diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index ce1a3b97a..310b7b959 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -26,7 +26,7 @@ 1.8 1.8 - 5.3.15 + 5.3.17 4.13.2 2.17.2 diff --git a/samples/springboot2/pet-store/build.gradle b/samples/springboot2/pet-store/build.gradle index bc8508c55..ede2ea60b 100644 --- a/samples/springboot2/pet-store/build.gradle +++ b/samples/springboot2/pet-store/build.gradle @@ -8,7 +8,7 @@ repositories { dependencies { implementation ( - implementation('org.springframework.boot:spring-boot-starter-web:2.6.3') { + implementation('org.springframework.boot:spring-boot-starter-web:2.6.5') { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat' }, 'com.amazonaws.serverless:aws-serverless-java-container-springboot2:[1.4,)', diff --git a/samples/springboot2/pet-store/pom.xml b/samples/springboot2/pet-store/pom.xml index c81e1e0cf..2c2b2f63b 100644 --- a/samples/springboot2/pet-store/pom.xml +++ b/samples/springboot2/pet-store/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 2.6.3 + 2.6.5 From 94bbd4f25a05fdb9a777f8730e3aa6fe4ae8599e Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 28 Mar 2022 14:23:06 +0200 Subject: [PATCH 206/888] chore(deps): update commons-codec version to 1.15 --- aws-serverless-java-container-jersey/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index f3262ae37..a6c545580 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -58,7 +58,7 @@ commons-codec commons-codec - 1.10 + 1.15 test From 26d049a6d75e5ed2117231c2d42371363108812b Mon Sep 17 00:00:00 2001 From: Arthur Kam Date: Tue, 29 Mar 2022 20:32:56 -0400 Subject: [PATCH 207/888] Add support for HTTP API cookie parameter --- .../AwsHttpApiV2ProxyHttpServletRequest.java | 27 +++++++++++++++++-- .../testutils/AwsProxyRequestBuilder.java | 6 ++++- ...HttpApiV2HttpServletRequestReaderTest.java | 6 +++++ 3 files changed, 36 insertions(+), 3 deletions(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2ProxyHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2ProxyHttpServletRequest.java index dcc481600..aa4f4eb5e 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2ProxyHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2ProxyHttpServletRequest.java @@ -37,6 +37,7 @@ import java.time.ZonedDateTime; import java.time.format.DateTimeParseException; import java.util.*; +import java.util.stream.Stream; public class AwsHttpApiV2ProxyHttpServletRequest extends AwsHttpServletRequest { private static Logger log = LoggerFactory.getLogger(AwsHttpApiV2ProxyHttpServletRequest.class); @@ -75,11 +76,33 @@ public String getAuthType() { @Override public Cookie[] getCookies() { + Cookie[] rhc; if (headers == null || !headers.containsKey(HttpHeaders.COOKIE)) { - return new Cookie[0]; + rhc = new Cookie[0]; + } else { + rhc = parseCookieHeaderValue(headers.getFirst(HttpHeaders.COOKIE)); } - return parseCookieHeaderValue(headers.getFirst(HttpHeaders.COOKIE)); + Cookie[] rc; + if (request.getCookies() == null) { + rc = new Cookie[0]; + } else { + rc = request.getCookies().stream() + .map(c -> { + int i = c.indexOf('='); + if (i == -1) { + return null; + } else { + String k = SecurityUtils.crlf(c.substring(0, i)).trim(); + String v = SecurityUtils.crlf(c.substring(i+1)); + return new Cookie(k, v); + } + }) + .filter(c -> c != null) + .toArray(Cookie[]::new); + } + + return Stream.concat(Arrays.stream(rhc), Arrays.stream(rc)).toArray(Cookie[]::new); } @Override diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/testutils/AwsProxyRequestBuilder.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/testutils/AwsProxyRequestBuilder.java index 11bcd58ef..998bf4748 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/testutils/AwsProxyRequestBuilder.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/testutils/AwsProxyRequestBuilder.java @@ -459,7 +459,11 @@ public HttpApiV2ProxyRequest toHttpApiV2Request() { } req.setHeaders(new TreeMap<>(String.CASE_INSENSITIVE_ORDER)); if (request.getMultiValueHeaders() != null) { - request.getMultiValueHeaders().forEach((key, value) -> req.getHeaders().put(key, value.get(0))); + request.getMultiValueHeaders().forEach((key, value) -> { + if (!HttpHeaders.COOKIE.equals(key)) { + req.getHeaders().put(key, value.get(0)); + } + }); } if (request.getRequestContext() != null && request.getRequestContext().getIdentity() != null) { if (request.getRequestContext().getIdentity().getCaller() != null) { diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2HttpServletRequestReaderTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2HttpServletRequestReaderTest.java index 004d4d489..263c78f53 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2HttpServletRequestReaderTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2HttpServletRequestReaderTest.java @@ -25,6 +25,7 @@ public void baseRequest_read_populatesSuccessfully() { .referer("localhost") .queryString("param1", "value1") .header("custom", "value") + .cookie("cookey", "cooval") .apiId("test").toHttpApiV2Request(); AwsHttpApiV2HttpServletRequestReader reader = new AwsHttpApiV2HttpServletRequestReader(); try { @@ -33,6 +34,11 @@ public void baseRequest_read_populatesSuccessfully() { assertEquals("value1", servletRequest.getParameter("param1")); assertEquals("value", servletRequest.getHeader("CUSTOM")); + assertNotNull(servletRequest.getCookies()); + assertEquals(1, servletRequest.getCookies().length); + assertEquals("cookey", servletRequest.getCookies()[0].getName()); + assertEquals("cooval", servletRequest.getCookies()[0].getValue()); + assertNotNull(servletRequest.getAttribute(AwsHttpApiV2HttpServletRequestReader.HTTP_API_CONTEXT_PROPERTY)); assertEquals("test", ((HttpApiV2ProxyRequestContext)servletRequest.getAttribute(AwsHttpApiV2HttpServletRequestReader.HTTP_API_CONTEXT_PROPERTY)).getApiId()); From a2dd500e684a655b78658060cd2d6fbf6cff8394 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Wed, 30 Mar 2022 09:54:32 +0200 Subject: [PATCH 208/888] fix: AwsHttpApiV2ProxyHttpServletRequest.getParameterMap returns arrays containing null for empty query params (#427) --- .../servlet/AwsHttpApiV2ProxyHttpServletRequest.java | 2 +- .../servlet/AwsProxyHttpServletRequestTest.java | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2ProxyHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2ProxyHttpServletRequest.java index aa4f4eb5e..9b4fa8b8f 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2ProxyHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2ProxyHttpServletRequest.java @@ -514,7 +514,7 @@ private MultiValuedTreeMap parseRawQueryString(String qs) { String[] kv = value.split(QUERY_STRING_KEY_VALUE_SEPARATOR); String key = URLDecoder.decode(kv[0], LambdaContainerHandler.getContainerConfig().getUriEncoding()); - String val = kv.length == 2 ? kv[1] : null; + String val = kv.length == 2 ? kv[1] : ""; qsMap.add(key, val); } catch (UnsupportedEncodingException e) { log.error("Unsupported encoding in query string key: " + SecurityUtils.crlf(value), e); diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestTest.java index 732c3f69b..8ea888a04 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestTest.java @@ -74,6 +74,8 @@ public class AwsProxyHttpServletRequestTest { private static final AwsProxyRequestBuilder REQUEST_QUERY = new AwsProxyRequestBuilder("/hello", "POST") .queryString(FORM_PARAM_NAME, QUERY_STRING_NAME_VALUE); + private static final AwsProxyRequestBuilder REQUEST_QUERY_EMPTY_VALUE = new AwsProxyRequestBuilder("/hello", "POST") + .queryString(FORM_PARAM_NAME, ""); public AwsProxyHttpServletRequestTest(String type) { @@ -239,6 +241,14 @@ public void queryParameters_getParameterMap_nonNull() { assertEquals(QUERY_STRING_NAME_VALUE, request.getParameterMap().get(FORM_PARAM_NAME)[0]); } + @Test + public void queryParameters_getParameterMap_nonNull_EmptyParamValue() { + HttpServletRequest request = getRequest(REQUEST_QUERY_EMPTY_VALUE, null, null); + assertNotNull(request); + assertEquals(1, request.getParameterMap().size()); + assertEquals("", request.getParameterMap().get(FORM_PARAM_NAME)[0]); + } + @Test public void queryParameters_getParameterNames_null() { HttpServletRequest request = getRequest(REQUEST_NULL_QUERY_STRING, null, null); From 48eac33d6ecd25cf6e79611412c6471221a0aacf Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 28 Mar 2022 15:59:51 +0200 Subject: [PATCH 209/888] feat: add environment variables to tune async init without the need to recompile (#450) --- .../serverless/proxy/AsyncInitializationWrapper.java | 10 ++++++---- .../serverless/proxy/model/ContainerConfig.java | 5 ++++- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/AsyncInitializationWrapper.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/AsyncInitializationWrapper.java index 813d8178e..fa4be3035 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/AsyncInitializationWrapper.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/AsyncInitializationWrapper.java @@ -38,11 +38,14 @@ * seconds has already been used up. */ public class AsyncInitializationWrapper extends InitializationWrapper { - private int INIT_GRACE_TIME_MS = 250; + private static final int DEFAULT_INIT_GRACE_TIME_MS = 150; + private static final String INIT_GRACE_TIME_ENVIRONMENT_VARIABLE_NAME = "AWS_SERVERLESS_JAVA_CONTAINER_INIT_GRACE_TIME"; + private static final int INIT_GRACE_TIME_MS = Integer.parseInt(System.getProperty( + INIT_GRACE_TIME_ENVIRONMENT_VARIABLE_NAME, Integer.toString(DEFAULT_INIT_GRACE_TIME_MS))); private static final int LAMBDA_MAX_INIT_TIME_MS = 10_000; private CountDownLatch initializationLatch; - private long actualStartTime; + private final long actualStartTime; private Logger log = LoggerFactory.getLogger(AsyncInitializationWrapper.class); /** @@ -60,7 +63,6 @@ public AsyncInitializationWrapper(long startTime) { */ public AsyncInitializationWrapper() { actualStartTime = ManagementFactory.getRuntimeMXBean().getStartTime(); - INIT_GRACE_TIME_MS = 150; } @Override @@ -71,7 +73,7 @@ public void start(LambdaContainerHandler handler) throws ContainerInitialization initThread.start(); try { long curTime = Instant.now().toEpochMilli(); - // account for the time it took to call the various constructors with the actual start time + a grace of 500ms + // account for the time it took to call the various constructors with the actual start time + a grace time long awaitTime = (actualStartTime + LAMBDA_MAX_INIT_TIME_MS) - curTime - INIT_GRACE_TIME_MS; log.info("Async initialization will wait for " + awaitTime + "ms"); if (!initializationLatch.await(awaitTime, TimeUnit.MILLISECONDS)) { diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/ContainerConfig.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/ContainerConfig.java index 5edeeebbe..d9889cc8c 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/ContainerConfig.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/ContainerConfig.java @@ -26,7 +26,10 @@ public class ContainerConfig { public static final String DEFAULT_URI_ENCODING = "UTF-8"; public static final String DEFAULT_CONTENT_CHARSET = "ISO-8859-1"; private static final List DEFAULT_FILE_PATHS = new ArrayList() {{ add("/tmp"); add("/var/task"); }}; - private static final int MAX_INIT_TIMEOUT_MS = 20_000; + private static final int DEFAULT_MAX_INIT_TIMEOUT_MS = 20_000; + private static final String MAX_INIT_TIMEOUT_ENVIRONMENT_VARIABLE_NAME = "AWS_SERVERLESS_JAVA_CONTAINER_MAX_INIT_TIMEOUT"; + private static final int MAX_INIT_TIMEOUT_MS = Integer.parseInt(System.getProperty( + MAX_INIT_TIMEOUT_ENVIRONMENT_VARIABLE_NAME, Integer.toString(DEFAULT_MAX_INIT_TIMEOUT_MS))); public static ContainerConfig defaultConfig() { ContainerConfig configuration = new ContainerConfig(); From 76521b1d3b4e1172f0bf0bd5e18264f17b899bd0 Mon Sep 17 00:00:00 2001 From: deki Date: Wed, 30 Mar 2022 08:53:17 +0000 Subject: [PATCH 210/888] chore: release -prepare release aws-serverless-java-container-1.8 --- aws-serverless-java-container-core/pom.xml | 4 ++-- aws-serverless-java-container-jersey/pom.xml | 6 +++--- aws-serverless-java-container-spark/pom.xml | 6 +++--- aws-serverless-java-container-spring/pom.xml | 6 +++--- aws-serverless-java-container-springboot2/pom.xml | 6 +++--- aws-serverless-java-container-struts2/pom.xml | 6 +++--- aws-serverless-jersey-archetype/pom.xml | 6 +++--- aws-serverless-spark-archetype/pom.xml | 6 +++--- aws-serverless-spring-archetype/pom.xml | 6 +++--- aws-serverless-springboot2-archetype/pom.xml | 6 +++--- aws-serverless-struts2-archetype/pom.xml | 6 +++--- pom.xml | 4 ++-- 12 files changed, 34 insertions(+), 34 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index aa40631ae..5cdcc3364 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Core Allows Java applications written for a servlet container to run in AWS Lambda https://aws.amazon.com/lambda - 1.8-SNAPSHOT + 1.8 com.amazonaws.serverless aws-serverless-java-container - 1.8-SNAPSHOT + 1.8 .. diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index a6c545580..284bf655c 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Jersey implementation Allows Java applications written for Jersey to run in AWS Lambda https://aws.amazon.com/lambda - 1.8-SNAPSHOT + 1.8 com.amazonaws.serverless aws-serverless-java-container - 1.8-SNAPSHOT + 1.8 .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.8-SNAPSHOT + 1.8 com.fasterxml.jackson.core diff --git a/aws-serverless-java-container-spark/pom.xml b/aws-serverless-java-container-spark/pom.xml index 06281e89e..01d409a0a 100644 --- a/aws-serverless-java-container-spark/pom.xml +++ b/aws-serverless-java-container-spark/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spark implementation Allows Java applications written for Spark to run in AWS Lambda https://aws.amazon.com/lambda - 1.8-SNAPSHOT + 1.8 com.amazonaws.serverless aws-serverless-java-container - 1.8-SNAPSHOT + 1.8 .. @@ -37,7 +37,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.8-SNAPSHOT + 1.8 diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 3d715aa5d..dd6c210c7 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spring implementation Allows Java applications written for the Spring framework to run in AWS Lambda https://aws.amazon.com/lambda - 1.8-SNAPSHOT + 1.8 com.amazonaws.serverless aws-serverless-java-container - 1.8-SNAPSHOT + 1.8 .. @@ -25,7 +25,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.8-SNAPSHOT + 1.8 diff --git a/aws-serverless-java-container-springboot2/pom.xml b/aws-serverless-java-container-springboot2/pom.xml index 51eb7604d..c8ca89935 100644 --- a/aws-serverless-java-container-springboot2/pom.xml +++ b/aws-serverless-java-container-springboot2/pom.xml @@ -3,7 +3,7 @@ aws-serverless-java-container com.amazonaws.serverless - 1.8-SNAPSHOT + 1.8 4.0.0 @@ -12,7 +12,7 @@ AWS Serverless Java container support - SpringBoot 2 implementation Allows Java applications written for SpringBoot 2 to run in AWS Lambda https://aws.amazon.com/lambda - 1.8-SNAPSHOT + 1.8 5.3.17 @@ -27,7 +27,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.8-SNAPSHOT + 1.8 diff --git a/aws-serverless-java-container-struts2/pom.xml b/aws-serverless-java-container-struts2/pom.xml index 95518a429..227bdf507 100644 --- a/aws-serverless-java-container-struts2/pom.xml +++ b/aws-serverless-java-container-struts2/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Struts2 implementation Allows Java applications written for the Struts2 framework to run in AWS Lambda https://aws.amazon.com/lambda - 1.8-SNAPSHOT + 1.8 com.amazonaws.serverless aws-serverless-java-container - 1.8-SNAPSHOT + 1.8 @@ -23,7 +23,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.8-SNAPSHOT + 1.8 diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index fa79a42f9..04339cd8d 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.8-SNAPSHOT + 1.8 com.amazonaws.serverless.archetypes aws-serverless-jersey-archetype - 1.8-SNAPSHOT + 1.8 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.8 diff --git a/aws-serverless-spark-archetype/pom.xml b/aws-serverless-spark-archetype/pom.xml index 86f6aacd5..4e25bd520 100644 --- a/aws-serverless-spark-archetype/pom.xml +++ b/aws-serverless-spark-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.8-SNAPSHOT + 1.8 com.amazonaws.serverless.archetypes aws-serverless-spark-archetype - 1.8-SNAPSHOT + 1.8 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.8 diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index 019c29022..fdc543343 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.8-SNAPSHOT + 1.8 com.amazonaws.serverless.archetypes aws-serverless-spring-archetype - 1.8-SNAPSHOT + 1.8 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.8 diff --git a/aws-serverless-springboot2-archetype/pom.xml b/aws-serverless-springboot2-archetype/pom.xml index 9706c5773..013e9e8ec 100644 --- a/aws-serverless-springboot2-archetype/pom.xml +++ b/aws-serverless-springboot2-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.8-SNAPSHOT + 1.8 com.amazonaws.serverless.archetypes aws-serverless-springboot2-archetype - 1.8-SNAPSHOT + 1.8 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.8 diff --git a/aws-serverless-struts2-archetype/pom.xml b/aws-serverless-struts2-archetype/pom.xml index f72bdc996..196c5d66c 100644 --- a/aws-serverless-struts2-archetype/pom.xml +++ b/aws-serverless-struts2-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.8-SNAPSHOT + 1.8 com.amazonaws.serverless.archetypes aws-serverless-struts2-archetype - 1.8-SNAPSHOT + 1.8 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.8 diff --git a/pom.xml b/pom.xml index ec2c9bafa..6d28c7288 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazonaws.serverless aws-serverless-java-container pom - 1.8-SNAPSHOT + 1.8 AWS Serverless Java container A Java framework to run Spring, Spring Boot, Jersey, Spark, and Struts applications inside AWS Lambda https://github.com/awslabs/aws-serverless-java-container @@ -41,7 +41,7 @@ https://github.com/awslabs/aws-serverless-java-container scm:git:https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.8 From 0bfe469ce5753916b65db70608c27378ac1c4bb1 Mon Sep 17 00:00:00 2001 From: deki Date: Wed, 30 Mar 2022 08:53:19 +0000 Subject: [PATCH 211/888] chore: release -prepare for next development iteration --- aws-serverless-java-container-core/pom.xml | 4 ++-- aws-serverless-java-container-jersey/pom.xml | 6 +++--- aws-serverless-java-container-spark/pom.xml | 6 +++--- aws-serverless-java-container-spring/pom.xml | 6 +++--- aws-serverless-java-container-springboot2/pom.xml | 6 +++--- aws-serverless-java-container-struts2/pom.xml | 6 +++--- aws-serverless-jersey-archetype/pom.xml | 6 +++--- aws-serverless-spark-archetype/pom.xml | 6 +++--- aws-serverless-spring-archetype/pom.xml | 6 +++--- aws-serverless-springboot2-archetype/pom.xml | 6 +++--- aws-serverless-struts2-archetype/pom.xml | 6 +++--- pom.xml | 4 ++-- 12 files changed, 34 insertions(+), 34 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 5cdcc3364..80c736373 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Core Allows Java applications written for a servlet container to run in AWS Lambda https://aws.amazon.com/lambda - 1.8 + 1.9-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.8 + 1.9-SNAPSHOT .. diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index 284bf655c..e1c083474 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Jersey implementation Allows Java applications written for Jersey to run in AWS Lambda https://aws.amazon.com/lambda - 1.8 + 1.9-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.8 + 1.9-SNAPSHOT .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.8 + 1.9-SNAPSHOT com.fasterxml.jackson.core diff --git a/aws-serverless-java-container-spark/pom.xml b/aws-serverless-java-container-spark/pom.xml index 01d409a0a..7a1a914d4 100644 --- a/aws-serverless-java-container-spark/pom.xml +++ b/aws-serverless-java-container-spark/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spark implementation Allows Java applications written for Spark to run in AWS Lambda https://aws.amazon.com/lambda - 1.8 + 1.9-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.8 + 1.9-SNAPSHOT .. @@ -37,7 +37,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.8 + 1.9-SNAPSHOT diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index dd6c210c7..86ab3e3c5 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spring implementation Allows Java applications written for the Spring framework to run in AWS Lambda https://aws.amazon.com/lambda - 1.8 + 1.9-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.8 + 1.9-SNAPSHOT .. @@ -25,7 +25,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.8 + 1.9-SNAPSHOT diff --git a/aws-serverless-java-container-springboot2/pom.xml b/aws-serverless-java-container-springboot2/pom.xml index c8ca89935..7fec891ec 100644 --- a/aws-serverless-java-container-springboot2/pom.xml +++ b/aws-serverless-java-container-springboot2/pom.xml @@ -3,7 +3,7 @@ aws-serverless-java-container com.amazonaws.serverless - 1.8 + 1.9-SNAPSHOT 4.0.0 @@ -12,7 +12,7 @@ AWS Serverless Java container support - SpringBoot 2 implementation Allows Java applications written for SpringBoot 2 to run in AWS Lambda https://aws.amazon.com/lambda - 1.8 + 1.9-SNAPSHOT 5.3.17 @@ -27,7 +27,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.8 + 1.9-SNAPSHOT diff --git a/aws-serverless-java-container-struts2/pom.xml b/aws-serverless-java-container-struts2/pom.xml index 227bdf507..50ee0e0e2 100644 --- a/aws-serverless-java-container-struts2/pom.xml +++ b/aws-serverless-java-container-struts2/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Struts2 implementation Allows Java applications written for the Struts2 framework to run in AWS Lambda https://aws.amazon.com/lambda - 1.8 + 1.9-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.8 + 1.9-SNAPSHOT @@ -23,7 +23,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.8 + 1.9-SNAPSHOT diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index 04339cd8d..8f0a225cd 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.8 + 1.9-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-jersey-archetype - 1.8 + 1.9-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.8 + HEAD diff --git a/aws-serverless-spark-archetype/pom.xml b/aws-serverless-spark-archetype/pom.xml index 4e25bd520..fea28b1f8 100644 --- a/aws-serverless-spark-archetype/pom.xml +++ b/aws-serverless-spark-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.8 + 1.9-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-spark-archetype - 1.8 + 1.9-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.8 + HEAD diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index fdc543343..723de360d 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.8 + 1.9-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-spring-archetype - 1.8 + 1.9-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.8 + HEAD diff --git a/aws-serverless-springboot2-archetype/pom.xml b/aws-serverless-springboot2-archetype/pom.xml index 013e9e8ec..ecf410f52 100644 --- a/aws-serverless-springboot2-archetype/pom.xml +++ b/aws-serverless-springboot2-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.8 + 1.9-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-springboot2-archetype - 1.8 + 1.9-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.8 + HEAD diff --git a/aws-serverless-struts2-archetype/pom.xml b/aws-serverless-struts2-archetype/pom.xml index 196c5d66c..cb96c077b 100644 --- a/aws-serverless-struts2-archetype/pom.xml +++ b/aws-serverless-struts2-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.8 + 1.9-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-struts2-archetype - 1.8 + 1.9-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.8 + HEAD diff --git a/pom.xml b/pom.xml index 6d28c7288..bdea29d9c 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazonaws.serverless aws-serverless-java-container pom - 1.8 + 1.9-SNAPSHOT AWS Serverless Java container A Java framework to run Spring, Spring Boot, Jersey, Spark, and Struts applications inside AWS Lambda https://github.com/awslabs/aws-serverless-java-container @@ -41,7 +41,7 @@ https://github.com/awslabs/aws-serverless-java-container scm:git:https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.8 + HEAD From 5d7b81d36faf20c0eb1ae64f7ad0d698a5f8a1be Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Wed, 30 Mar 2022 11:22:40 +0200 Subject: [PATCH 212/888] docs: add note that Micronaut content is oudated --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e9dad056f..0e83ba97c 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ Follow the quick start guides in [our wiki](https://github.com/awslabs/aws-serve * [Jersey quick start](https://github.com/awslabs/aws-serverless-java-container/wiki/Quick-start---Jersey) * [Spark quick start](https://github.com/awslabs/aws-serverless-java-container/wiki/Quick-start---Spark) -* Micronaut [documentation](https://guides.micronaut.io/micronaut-function-aws-lambda/guide/index.html) and [demo](https://github.com/awslabs/aws-serverless-java-container/tree/master/samples/micronaut/pet-store) +* Micronaut [documentation](https://guides.micronaut.io/micronaut-function-aws-lambda/guide/index.html) and [demo](https://github.com/awslabs/aws-serverless-java-container/tree/master/samples/micronaut/pet-store) (outdated! - needs to be updated to latest Micronaut version) Below is the most basic AWS Lambda handler example that launches a Spring application. You can also take a look at the [samples](https://github.com/awslabs/aws-serverless-java-container/tree/master/samples) in this repository, our main wiki page includes a [step-by-step guide](https://github.com/awslabs/aws-serverless-java-container/wiki#deploying-the-sample-applications) on how to deploy the various sample applications using Maven and [SAM](https://github.com/awslabs/serverless-application-model). From 6d88f503c02988cc947743bad78d965d8aa0b5a2 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 1 Apr 2022 12:10:05 +0200 Subject: [PATCH 213/888] chore(deps): Update Spring dependencies (framework to 5.3.18, boot to 2.6.6) - CVE-2022-22965 --- aws-serverless-java-container-spring/pom.xml | 2 +- aws-serverless-java-container-springboot2/pom.xml | 4 ++-- .../src/main/resources/archetype-resources/build.gradle | 4 ++-- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/spring/pet-store/build.gradle | 4 ++-- samples/spring/pet-store/pom.xml | 2 +- samples/springboot2/pet-store/build.gradle | 2 +- samples/springboot2/pet-store/pom.xml | 2 +- 10 files changed, 13 insertions(+), 13 deletions(-) diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 86ab3e3c5..5851e0bb5 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -16,7 +16,7 @@ - 5.3.17 + 5.3.18 5.6.2 diff --git a/aws-serverless-java-container-springboot2/pom.xml b/aws-serverless-java-container-springboot2/pom.xml index 7fec891ec..19ab85abc 100644 --- a/aws-serverless-java-container-springboot2/pom.xml +++ b/aws-serverless-java-container-springboot2/pom.xml @@ -15,8 +15,8 @@ 1.9-SNAPSHOT - 5.3.17 - 2.6.5 + 5.3.18 + 2.6.6 5.6.2 1.8 1.8 diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index ca53251fd..18d5782cd 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -7,8 +7,8 @@ repositories { dependencies { implementation ( - 'org.springframework:spring-webmvc:5.3.17', - 'org.springframework:spring-context:5.3.17', + 'org.springframework:spring-webmvc:5.3.18', + 'org.springframework:spring-context:5.3.18', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[1.0,)', 'org.apache.logging.log4j:log4j-core:2.17.2', 'org.apache.logging.log4j:log4j-api:2.17.2', diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index 757f45820..bdef3ae06 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 1.8 - 5.3.17 + 5.3.18 4.13.2 2.17.2 diff --git a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle index 729e76715..fca6dee7e 100644 --- a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle @@ -8,7 +8,7 @@ repositories { dependencies { implementation ( - 'org.springframework.boot:spring-boot-starter-web:2.6.5', + 'org.springframework.boot:spring-boot-starter-web:2.6.6', 'com.amazonaws.serverless:aws-serverless-java-container-springboot2:[1.0,)', 'io.symphonia:lambda-logging:1.0.3' ) diff --git a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml index c580345d3..f38cbb417 100644 --- a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ org.springframework.boot spring-boot-starter-parent - 2.6.5 + 2.6.6 diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index c220a1788..76b8c1663 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -7,8 +7,8 @@ repositories { dependencies { implementation ( - 'org.springframework:spring-webmvc:5.3.17', - 'org.springframework:spring-context:5.3.17', + 'org.springframework:spring-webmvc:5.3.18', + 'org.springframework:spring-context:5.3.18', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[1.0,)', 'org.apache.logging.log4j:log4j-core:2.17.2', 'org.apache.logging.log4j:log4j-api:2.17.2', diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index 310b7b959..ad86fe813 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -26,7 +26,7 @@ 1.8 1.8 - 5.3.17 + 5.3.18 4.13.2 2.17.2 diff --git a/samples/springboot2/pet-store/build.gradle b/samples/springboot2/pet-store/build.gradle index ede2ea60b..dd296281c 100644 --- a/samples/springboot2/pet-store/build.gradle +++ b/samples/springboot2/pet-store/build.gradle @@ -8,7 +8,7 @@ repositories { dependencies { implementation ( - implementation('org.springframework.boot:spring-boot-starter-web:2.6.5') { + implementation('org.springframework.boot:spring-boot-starter-web:2.6.6') { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat' }, 'com.amazonaws.serverless:aws-serverless-java-container-springboot2:[1.4,)', diff --git a/samples/springboot2/pet-store/pom.xml b/samples/springboot2/pet-store/pom.xml index 2c2b2f63b..8c5bde733 100644 --- a/samples/springboot2/pet-store/pom.xml +++ b/samples/springboot2/pet-store/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 2.6.5 + 2.6.6 From 1572ee1ccd35e7fe41e799554e92bc4d8d66ea23 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 25 Apr 2022 08:42:14 +0200 Subject: [PATCH 214/888] chore(deps): Update Struts2 version to 2.5.30 --- aws-serverless-java-container-struts2/pom.xml | 2 +- .../main/resources/archetype-resources/build.gradle | 10 +++++----- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/struts2/pet-store/build.gradle | 8 ++++---- samples/struts2/pet-store/pom.xml | 2 +- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/aws-serverless-java-container-struts2/pom.xml b/aws-serverless-java-container-struts2/pom.xml index 50ee0e0e2..c2ec5923e 100644 --- a/aws-serverless-java-container-struts2/pom.xml +++ b/aws-serverless-java-container-struts2/pom.xml @@ -15,7 +15,7 @@ - 2.5.29 + 2.5.30 diff --git a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle index 3a14d07b7..6cbad5d70 100644 --- a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle @@ -18,19 +18,19 @@ dependencies { exclude group: 'org.apache.logging.log4j', module: 'log4j-api' exclude group: 'org.apache.logging.log4j', module: 'log4j-to-slf4j' } - implementation ('org.apache.struts:struts2-convention-plugin:2.5.29') { + implementation ('org.apache.struts:struts2-convention-plugin:2.5.30') { exclude group: 'org.apache.struts', module: 'struts2-core' } - implementation ('org.apache.struts:struts2-rest-plugin:2.5.29') { + implementation ('org.apache.struts:struts2-rest-plugin:2.5.30') { exclude group: 'org.apache.struts', module: 'struts2-core' } - implementation ('org.apache.struts:struts2-bean-validation-plugin:2.5.29') { + implementation ('org.apache.struts:struts2-bean-validation-plugin:2.5.30') { exclude group: 'org.apache.struts', module: 'struts2-core' } implementation ('com.jgeppert.struts2:struts2-aws-lambda-support-plugin:1.3.0') { exclude group: 'org.apache.struts', module: 'struts2-core' } - implementation ('org.apache.struts:struts2-core:2.5.29') { + implementation ('org.apache.struts:struts2-core:2.5.30') { exclude group: 'org.apache.logging.log4j', module: 'log4j-api' } implementation ('org.hibernate:hibernate-validator:5.4.3.Final') @@ -41,7 +41,7 @@ dependencies { implementation ('com.amazonaws:aws-lambda-java-log4j2:1.5.1') testImplementation('junit:junit:4.13.2') - testImplementation('org.apache.struts:struts2-junit-plugin:2.5.29') { + testImplementation('org.apache.struts:struts2-junit-plugin:2.5.30') { exclude group: 'org.apache.struts', module: 'struts2-core' } } diff --git a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml index 1af582c96..50fbae6fa 100644 --- a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml @@ -15,7 +15,7 @@ 1.8 1.8 - 2.5.29 + 2.5.30 2.13.2 4.13.2 2.17.2 diff --git a/samples/struts2/pet-store/build.gradle b/samples/struts2/pet-store/build.gradle index 88cd447d5..0a48d8e37 100644 --- a/samples/struts2/pet-store/build.gradle +++ b/samples/struts2/pet-store/build.gradle @@ -14,10 +14,10 @@ configurations { dependencies { implementation ( 'com.amazonaws.serverless:aws-serverless-java-container-struts2:[1.0,)', - 'org.apache.struts:struts2-convention-plugin:2.5.29', - 'org.apache.struts:struts2-rest-plugin:2.5.29', - 'org.apache.struts:struts2-bean-validation-plugin:2.5.29', - 'org.apache.struts:struts2-junit-plugin:2.5.29', + 'org.apache.struts:struts2-convention-plugin:2.5.30', + 'org.apache.struts:struts2-rest-plugin:2.5.30', + 'org.apache.struts:struts2-bean-validation-plugin:2.5.30', + 'org.apache.struts:struts2-junit-plugin:2.5.30', 'com.jgeppert.struts2:struts2-aws-lambda-support-plugin:1.3.0', 'org.hibernate:hibernate-validator:5.4.3.Final', 'com.fasterxml.jackson.core:jackson-databind:2.13.2.1', diff --git a/samples/struts2/pet-store/pom.xml b/samples/struts2/pet-store/pom.xml index 7d1cb9ab6..0b044c453 100644 --- a/samples/struts2/pet-store/pom.xml +++ b/samples/struts2/pet-store/pom.xml @@ -26,7 +26,7 @@ 1.8 1.8 - 2.5.29 + 2.5.30 2.13.2 4.13.2 2.17.2 From 7fcd01e3e827fdf2d877b5f49f34040134355ebb Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 25 Apr 2022 09:00:39 +0200 Subject: [PATCH 215/888] chore(deps): Update Spring dependencies (framework to 5.3.19, security to 5.6.3, boot to 2.6.7) --- aws-serverless-java-container-core/pom.xml | 2 +- aws-serverless-java-container-spring/pom.xml | 4 ++-- aws-serverless-java-container-springboot2/pom.xml | 6 +++--- .../src/main/resources/archetype-resources/build.gradle | 4 ++-- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/spring/pet-store/build.gradle | 4 ++-- samples/spring/pet-store/pom.xml | 2 +- samples/springboot2/pet-store/build.gradle | 2 +- samples/springboot2/pet-store/pom.xml | 2 +- 11 files changed, 16 insertions(+), 16 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 80c736373..1d42a1457 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -97,7 +97,7 @@ org.springframework.security spring-security-web - 5.6.2 + 5.6.3 test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 5851e0bb5..8b32e991c 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -16,8 +16,8 @@ - 5.3.18 - 5.6.2 + 5.3.19 + 5.6.3 diff --git a/aws-serverless-java-container-springboot2/pom.xml b/aws-serverless-java-container-springboot2/pom.xml index 19ab85abc..3e7e3274b 100644 --- a/aws-serverless-java-container-springboot2/pom.xml +++ b/aws-serverless-java-container-springboot2/pom.xml @@ -15,9 +15,9 @@ 1.9-SNAPSHOT - 5.3.18 - 2.6.6 - 5.6.2 + 5.3.19 + 2.6.7 + 5.6.3 1.8 1.8 diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index 18d5782cd..f50f34066 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -7,8 +7,8 @@ repositories { dependencies { implementation ( - 'org.springframework:spring-webmvc:5.3.18', - 'org.springframework:spring-context:5.3.18', + 'org.springframework:spring-webmvc:5.3.19', + 'org.springframework:spring-context:5.3.19', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[1.0,)', 'org.apache.logging.log4j:log4j-core:2.17.2', 'org.apache.logging.log4j:log4j-api:2.17.2', diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index bdef3ae06..75a1d2a65 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 1.8 - 5.3.18 + 5.3.19 4.13.2 2.17.2 diff --git a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle index fca6dee7e..0d590cc52 100644 --- a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle @@ -8,7 +8,7 @@ repositories { dependencies { implementation ( - 'org.springframework.boot:spring-boot-starter-web:2.6.6', + 'org.springframework.boot:spring-boot-starter-web:2.6.7', 'com.amazonaws.serverless:aws-serverless-java-container-springboot2:[1.0,)', 'io.symphonia:lambda-logging:1.0.3' ) diff --git a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml index f38cbb417..3f01eda30 100644 --- a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ org.springframework.boot spring-boot-starter-parent - 2.6.6 + 2.6.7 diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index 76b8c1663..bb16a7af4 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -7,8 +7,8 @@ repositories { dependencies { implementation ( - 'org.springframework:spring-webmvc:5.3.18', - 'org.springframework:spring-context:5.3.18', + 'org.springframework:spring-webmvc:5.3.19', + 'org.springframework:spring-context:5.3.19', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[1.0,)', 'org.apache.logging.log4j:log4j-core:2.17.2', 'org.apache.logging.log4j:log4j-api:2.17.2', diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index ad86fe813..e635c95a3 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -26,7 +26,7 @@ 1.8 1.8 - 5.3.18 + 5.3.19 4.13.2 2.17.2 diff --git a/samples/springboot2/pet-store/build.gradle b/samples/springboot2/pet-store/build.gradle index dd296281c..60c4c2dec 100644 --- a/samples/springboot2/pet-store/build.gradle +++ b/samples/springboot2/pet-store/build.gradle @@ -8,7 +8,7 @@ repositories { dependencies { implementation ( - implementation('org.springframework.boot:spring-boot-starter-web:2.6.6') { + implementation('org.springframework.boot:spring-boot-starter-web:2.6.7') { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat' }, 'com.amazonaws.serverless:aws-serverless-java-container-springboot2:[1.4,)', diff --git a/samples/springboot2/pet-store/pom.xml b/samples/springboot2/pet-store/pom.xml index 8c5bde733..065af3cf7 100644 --- a/samples/springboot2/pet-store/pom.xml +++ b/samples/springboot2/pet-store/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 2.6.6 + 2.6.7 From 41f2ac88cfb24f404e94c2461a01ba129cc993d4 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 25 Apr 2022 09:16:47 +0200 Subject: [PATCH 216/888] chore: Remove automated build with Spring 4.3 (EOL) --- .github/workflows/continuous-integration-workflow.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/continuous-integration-workflow.yml b/.github/workflows/continuous-integration-workflow.yml index dd7f5050b..3b31e046a 100644 --- a/.github/workflows/continuous-integration-workflow.yml +++ b/.github/workflows/continuous-integration-workflow.yml @@ -52,14 +52,12 @@ jobs: # we reduce the minCoverage for this run because it will skip the SpringBoot 1.5 tests since they are no longer compatible with # Spring core 5.2 and above. SpringBoot 1.5 is deprecated run: ./gha_build.sh spring true true -Djacoco.minCoverage=0.4 - - name: Build Spring 4.3 - run: ./gha_build.sh spring false false -Dspring.version=4.3.30.RELEASE -Dspring-security.version=4.2.20.RELEASE - name: Build Spring 5.0 run: ./gha_build.sh spring false false -Dspring.version=5.0.20.RELEASE -Dspring-security.version=5.0.19.RELEASE - name: Build Spring 5.1 run: ./gha_build.sh spring false false -Dspring.version=5.1.20.RELEASE -Dspring-security.version=5.1.13.RELEASE - name: Build Spring 5.2 - run: ./gha_build.sh spring false false -Dspring.version=5.2.16.RELEASE -Dspring-security.version=5.2.11.RELEASE + run: ./gha_build.sh spring false false -Dspring.version=5.2.21.RELEASE -Dspring-security.version=5.2.15.RELEASE build_springboot2: name: Build and test SpringBoot 2 From fe29825af9755a1b7f0b1f99c2b767eccf3b4b27 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 25 Apr 2022 09:33:45 +0200 Subject: [PATCH 217/888] chore: Skip OWASP dependency check when running automated builds for older Spring versions --- .../workflows/continuous-integration-workflow.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/continuous-integration-workflow.yml b/.github/workflows/continuous-integration-workflow.yml index 3b31e046a..f3e270130 100644 --- a/.github/workflows/continuous-integration-workflow.yml +++ b/.github/workflows/continuous-integration-workflow.yml @@ -53,11 +53,11 @@ jobs: # Spring core 5.2 and above. SpringBoot 1.5 is deprecated run: ./gha_build.sh spring true true -Djacoco.minCoverage=0.4 - name: Build Spring 5.0 - run: ./gha_build.sh spring false false -Dspring.version=5.0.20.RELEASE -Dspring-security.version=5.0.19.RELEASE + run: ./gha_build.sh spring false false -Dspring.version=5.0.20.RELEASE -Dspring-security.version=5.0.19.RELEASE -Ddependency-check.skip=true - name: Build Spring 5.1 - run: ./gha_build.sh spring false false -Dspring.version=5.1.20.RELEASE -Dspring-security.version=5.1.13.RELEASE + run: ./gha_build.sh spring false false -Dspring.version=5.1.20.RELEASE -Dspring-security.version=5.1.13.RELEASE -Ddependency-check.skip=true - name: Build Spring 5.2 - run: ./gha_build.sh spring false false -Dspring.version=5.2.21.RELEASE -Dspring-security.version=5.2.15.RELEASE + run: ./gha_build.sh spring false false -Dspring.version=5.2.21.RELEASE -Dspring-security.version=5.2.15.RELEASE -Ddependency-check.skip=true build_springboot2: name: Build and test SpringBoot 2 @@ -68,13 +68,13 @@ jobs: run: ./gha_build.sh springboot2 true true # https://github.com/spring-projects/spring-boot/wiki/Supported-Versions - name: Build Spring Boot 2.2 - run: ./gha_build.sh springboot2 false false -Dspringboot.version=2.2.13.RELEASE -Dspring.version=5.2.15.RELEASE -Dspringsecurity.version=5.2.8.RELEASE + run: ./gha_build.sh springboot2 false false -Dspringboot.version=2.2.13.RELEASE -Dspring.version=5.2.15.RELEASE -Dspringsecurity.version=5.2.8.RELEASE -Ddependency-check.skip=true - name: Build Spring Boot 2.3 - run: ./gha_build.sh springboot2 false false -Dspringboot.version=2.3.12.RELEASE -Dspring.version=5.2.15.RELEASE -Dspringsecurity.version=5.3.9.RELEASE + run: ./gha_build.sh springboot2 false false -Dspringboot.version=2.3.12.RELEASE -Dspring.version=5.2.15.RELEASE -Dspringsecurity.version=5.3.9.RELEASE -Ddependency-check.skip=true - name: Build Spring Boot 2.4 - run: ./gha_build.sh springboot2 false false -Dspringboot.version=2.4.13 -Dspring.version=5.3.13 -Dspringsecurity.version=5.4.9 + run: ./gha_build.sh springboot2 false false -Dspringboot.version=2.4.13 -Dspring.version=5.3.13 -Dspringsecurity.version=5.4.9 -Ddependency-check.skip=true - name: Build Spring Boot 2.5 - run: ./gha_build.sh springboot2 false false -Dspringboot.version=2.5.8 -Dspring.version=5.3.14 -Dspringsecurity.version=5.5.4 + run: ./gha_build.sh springboot2 false false -Dspringboot.version=2.5.13 -Dspring.version=5.3.19 -Dspringsecurity.version=5.5.6 -Ddependency-check.skip=true build_struts2: name: Build and test Struts 2 From b192b2d52ca6eda94ded5c2636bba468370c7ee9 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Wed, 27 Apr 2022 16:57:23 +0200 Subject: [PATCH 218/888] fix: add @JsonIgnoreProperties to HttpApiV2ProxyRequestContext to avoid UnrecognizedPropertyException for Lambda Function URLs with IAM auth (#460) --- .../serverless/proxy/model/HttpApiV2ProxyRequestContext.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/HttpApiV2ProxyRequestContext.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/HttpApiV2ProxyRequestContext.java index 55bbe1f8f..738f692f6 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/HttpApiV2ProxyRequestContext.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/HttpApiV2ProxyRequestContext.java @@ -12,6 +12,9 @@ */ package com.amazonaws.serverless.proxy.model; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +@JsonIgnoreProperties(ignoreUnknown = true) public class HttpApiV2ProxyRequestContext { private String accountId; private String apiId; From 78a35ceb3b3de93311edd0fc46f525c32e1dfb71 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Wed, 27 Apr 2022 22:04:50 +0200 Subject: [PATCH 219/888] fix: use environment variables to tune async init - and not system properties (#450) --- .../serverless/proxy/AsyncInitializationWrapper.java | 5 +++-- .../amazonaws/serverless/proxy/model/ContainerConfig.java | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/AsyncInitializationWrapper.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/AsyncInitializationWrapper.java index fa4be3035..d1e97909e 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/AsyncInitializationWrapper.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/AsyncInitializationWrapper.java @@ -40,7 +40,7 @@ public class AsyncInitializationWrapper extends InitializationWrapper { private static final int DEFAULT_INIT_GRACE_TIME_MS = 150; private static final String INIT_GRACE_TIME_ENVIRONMENT_VARIABLE_NAME = "AWS_SERVERLESS_JAVA_CONTAINER_INIT_GRACE_TIME"; - private static final int INIT_GRACE_TIME_MS = Integer.parseInt(System.getProperty( + private static final int INIT_GRACE_TIME_MS = Integer.parseInt(System.getenv().getOrDefault( INIT_GRACE_TIME_ENVIRONMENT_VARIABLE_NAME, Integer.toString(DEFAULT_INIT_GRACE_TIME_MS))); private static final int LAMBDA_MAX_INIT_TIME_MS = 10_000; @@ -75,7 +75,8 @@ public void start(LambdaContainerHandler handler) throws ContainerInitialization long curTime = Instant.now().toEpochMilli(); // account for the time it took to call the various constructors with the actual start time + a grace time long awaitTime = (actualStartTime + LAMBDA_MAX_INIT_TIME_MS) - curTime - INIT_GRACE_TIME_MS; - log.info("Async initialization will wait for " + awaitTime + "ms"); + log.info("Async initialization will wait for {}ms (init grace time is configured to {})", + awaitTime, INIT_GRACE_TIME_MS); if (!initializationLatch.await(awaitTime, TimeUnit.MILLISECONDS)) { log.info("Initialization took longer than " + LAMBDA_MAX_INIT_TIME_MS + ", setting new CountDownLatch and " + "continuing in event handler"); diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/ContainerConfig.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/ContainerConfig.java index d9889cc8c..941109b75 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/ContainerConfig.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/ContainerConfig.java @@ -28,7 +28,7 @@ public class ContainerConfig { private static final List DEFAULT_FILE_PATHS = new ArrayList() {{ add("/tmp"); add("/var/task"); }}; private static final int DEFAULT_MAX_INIT_TIMEOUT_MS = 20_000; private static final String MAX_INIT_TIMEOUT_ENVIRONMENT_VARIABLE_NAME = "AWS_SERVERLESS_JAVA_CONTAINER_MAX_INIT_TIMEOUT"; - private static final int MAX_INIT_TIMEOUT_MS = Integer.parseInt(System.getProperty( + private static final int MAX_INIT_TIMEOUT_MS = Integer.parseInt(System.getenv().getOrDefault( MAX_INIT_TIMEOUT_ENVIRONMENT_VARIABLE_NAME, Integer.toString(DEFAULT_MAX_INIT_TIMEOUT_MS))); public static ContainerConfig defaultConfig() { From 820e3f35d213ff2668f3f960eee92fa5d63c4d35 Mon Sep 17 00:00:00 2001 From: deki Date: Wed, 27 Apr 2022 20:14:19 +0000 Subject: [PATCH 220/888] chore: release -prepare release aws-serverless-java-container-1.8.1 --- aws-serverless-java-container-core/pom.xml | 4 ++-- aws-serverless-java-container-jersey/pom.xml | 6 +++--- aws-serverless-java-container-spark/pom.xml | 6 +++--- aws-serverless-java-container-spring/pom.xml | 6 +++--- aws-serverless-java-container-springboot2/pom.xml | 6 +++--- aws-serverless-java-container-struts2/pom.xml | 6 +++--- aws-serverless-jersey-archetype/pom.xml | 6 +++--- aws-serverless-spark-archetype/pom.xml | 6 +++--- aws-serverless-spring-archetype/pom.xml | 6 +++--- aws-serverless-springboot2-archetype/pom.xml | 6 +++--- aws-serverless-struts2-archetype/pom.xml | 6 +++--- pom.xml | 4 ++-- 12 files changed, 34 insertions(+), 34 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 1d42a1457..964c2c10b 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Core Allows Java applications written for a servlet container to run in AWS Lambda https://aws.amazon.com/lambda - 1.9-SNAPSHOT + 1.8.1 com.amazonaws.serverless aws-serverless-java-container - 1.9-SNAPSHOT + 1.8.1 .. diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index e1c083474..3022c0416 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Jersey implementation Allows Java applications written for Jersey to run in AWS Lambda https://aws.amazon.com/lambda - 1.9-SNAPSHOT + 1.8.1 com.amazonaws.serverless aws-serverless-java-container - 1.9-SNAPSHOT + 1.8.1 .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.9-SNAPSHOT + 1.8.1 com.fasterxml.jackson.core diff --git a/aws-serverless-java-container-spark/pom.xml b/aws-serverless-java-container-spark/pom.xml index 7a1a914d4..ddc9e7dbb 100644 --- a/aws-serverless-java-container-spark/pom.xml +++ b/aws-serverless-java-container-spark/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spark implementation Allows Java applications written for Spark to run in AWS Lambda https://aws.amazon.com/lambda - 1.9-SNAPSHOT + 1.8.1 com.amazonaws.serverless aws-serverless-java-container - 1.9-SNAPSHOT + 1.8.1 .. @@ -37,7 +37,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.9-SNAPSHOT + 1.8.1 diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 8b32e991c..88beeadd1 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spring implementation Allows Java applications written for the Spring framework to run in AWS Lambda https://aws.amazon.com/lambda - 1.9-SNAPSHOT + 1.8.1 com.amazonaws.serverless aws-serverless-java-container - 1.9-SNAPSHOT + 1.8.1 .. @@ -25,7 +25,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.9-SNAPSHOT + 1.8.1 diff --git a/aws-serverless-java-container-springboot2/pom.xml b/aws-serverless-java-container-springboot2/pom.xml index 3e7e3274b..185b0498e 100644 --- a/aws-serverless-java-container-springboot2/pom.xml +++ b/aws-serverless-java-container-springboot2/pom.xml @@ -3,7 +3,7 @@ aws-serverless-java-container com.amazonaws.serverless - 1.9-SNAPSHOT + 1.8.1 4.0.0 @@ -12,7 +12,7 @@ AWS Serverless Java container support - SpringBoot 2 implementation Allows Java applications written for SpringBoot 2 to run in AWS Lambda https://aws.amazon.com/lambda - 1.9-SNAPSHOT + 1.8.1 5.3.19 @@ -27,7 +27,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.9-SNAPSHOT + 1.8.1 diff --git a/aws-serverless-java-container-struts2/pom.xml b/aws-serverless-java-container-struts2/pom.xml index c2ec5923e..69509d7b5 100644 --- a/aws-serverless-java-container-struts2/pom.xml +++ b/aws-serverless-java-container-struts2/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Struts2 implementation Allows Java applications written for the Struts2 framework to run in AWS Lambda https://aws.amazon.com/lambda - 1.9-SNAPSHOT + 1.8.1 com.amazonaws.serverless aws-serverless-java-container - 1.9-SNAPSHOT + 1.8.1 @@ -23,7 +23,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.9-SNAPSHOT + 1.8.1 diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index 8f0a225cd..52efcd346 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.9-SNAPSHOT + 1.8.1 com.amazonaws.serverless.archetypes aws-serverless-jersey-archetype - 1.9-SNAPSHOT + 1.8.1 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.8.1 diff --git a/aws-serverless-spark-archetype/pom.xml b/aws-serverless-spark-archetype/pom.xml index fea28b1f8..e7a7bc59b 100644 --- a/aws-serverless-spark-archetype/pom.xml +++ b/aws-serverless-spark-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.9-SNAPSHOT + 1.8.1 com.amazonaws.serverless.archetypes aws-serverless-spark-archetype - 1.9-SNAPSHOT + 1.8.1 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.8.1 diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index 723de360d..6250b927d 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.9-SNAPSHOT + 1.8.1 com.amazonaws.serverless.archetypes aws-serverless-spring-archetype - 1.9-SNAPSHOT + 1.8.1 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.8.1 diff --git a/aws-serverless-springboot2-archetype/pom.xml b/aws-serverless-springboot2-archetype/pom.xml index ecf410f52..d7cf61f34 100644 --- a/aws-serverless-springboot2-archetype/pom.xml +++ b/aws-serverless-springboot2-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.9-SNAPSHOT + 1.8.1 com.amazonaws.serverless.archetypes aws-serverless-springboot2-archetype - 1.9-SNAPSHOT + 1.8.1 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.8.1 diff --git a/aws-serverless-struts2-archetype/pom.xml b/aws-serverless-struts2-archetype/pom.xml index cb96c077b..d775d6744 100644 --- a/aws-serverless-struts2-archetype/pom.xml +++ b/aws-serverless-struts2-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.9-SNAPSHOT + 1.8.1 com.amazonaws.serverless.archetypes aws-serverless-struts2-archetype - 1.9-SNAPSHOT + 1.8.1 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.8.1 diff --git a/pom.xml b/pom.xml index bdea29d9c..d930519e3 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazonaws.serverless aws-serverless-java-container pom - 1.9-SNAPSHOT + 1.8.1 AWS Serverless Java container A Java framework to run Spring, Spring Boot, Jersey, Spark, and Struts applications inside AWS Lambda https://github.com/awslabs/aws-serverless-java-container @@ -41,7 +41,7 @@ https://github.com/awslabs/aws-serverless-java-container scm:git:https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.8.1 From f6d3a4488e96162d552ad7a319e83ae033ea6e67 Mon Sep 17 00:00:00 2001 From: deki Date: Wed, 27 Apr 2022 20:14:21 +0000 Subject: [PATCH 221/888] chore: release -prepare for next development iteration --- aws-serverless-java-container-core/pom.xml | 4 ++-- aws-serverless-java-container-jersey/pom.xml | 6 +++--- aws-serverless-java-container-spark/pom.xml | 6 +++--- aws-serverless-java-container-spring/pom.xml | 6 +++--- aws-serverless-java-container-springboot2/pom.xml | 6 +++--- aws-serverless-java-container-struts2/pom.xml | 6 +++--- aws-serverless-jersey-archetype/pom.xml | 6 +++--- aws-serverless-spark-archetype/pom.xml | 6 +++--- aws-serverless-spring-archetype/pom.xml | 6 +++--- aws-serverless-springboot2-archetype/pom.xml | 6 +++--- aws-serverless-struts2-archetype/pom.xml | 6 +++--- pom.xml | 4 ++-- 12 files changed, 34 insertions(+), 34 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 964c2c10b..1d42a1457 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Core Allows Java applications written for a servlet container to run in AWS Lambda https://aws.amazon.com/lambda - 1.8.1 + 1.9-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.8.1 + 1.9-SNAPSHOT .. diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index 3022c0416..e1c083474 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Jersey implementation Allows Java applications written for Jersey to run in AWS Lambda https://aws.amazon.com/lambda - 1.8.1 + 1.9-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.8.1 + 1.9-SNAPSHOT .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.8.1 + 1.9-SNAPSHOT com.fasterxml.jackson.core diff --git a/aws-serverless-java-container-spark/pom.xml b/aws-serverless-java-container-spark/pom.xml index ddc9e7dbb..7a1a914d4 100644 --- a/aws-serverless-java-container-spark/pom.xml +++ b/aws-serverless-java-container-spark/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spark implementation Allows Java applications written for Spark to run in AWS Lambda https://aws.amazon.com/lambda - 1.8.1 + 1.9-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.8.1 + 1.9-SNAPSHOT .. @@ -37,7 +37,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.8.1 + 1.9-SNAPSHOT diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 88beeadd1..8b32e991c 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spring implementation Allows Java applications written for the Spring framework to run in AWS Lambda https://aws.amazon.com/lambda - 1.8.1 + 1.9-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.8.1 + 1.9-SNAPSHOT .. @@ -25,7 +25,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.8.1 + 1.9-SNAPSHOT diff --git a/aws-serverless-java-container-springboot2/pom.xml b/aws-serverless-java-container-springboot2/pom.xml index 185b0498e..3e7e3274b 100644 --- a/aws-serverless-java-container-springboot2/pom.xml +++ b/aws-serverless-java-container-springboot2/pom.xml @@ -3,7 +3,7 @@ aws-serverless-java-container com.amazonaws.serverless - 1.8.1 + 1.9-SNAPSHOT 4.0.0 @@ -12,7 +12,7 @@ AWS Serverless Java container support - SpringBoot 2 implementation Allows Java applications written for SpringBoot 2 to run in AWS Lambda https://aws.amazon.com/lambda - 1.8.1 + 1.9-SNAPSHOT 5.3.19 @@ -27,7 +27,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.8.1 + 1.9-SNAPSHOT diff --git a/aws-serverless-java-container-struts2/pom.xml b/aws-serverless-java-container-struts2/pom.xml index 69509d7b5..c2ec5923e 100644 --- a/aws-serverless-java-container-struts2/pom.xml +++ b/aws-serverless-java-container-struts2/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Struts2 implementation Allows Java applications written for the Struts2 framework to run in AWS Lambda https://aws.amazon.com/lambda - 1.8.1 + 1.9-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.8.1 + 1.9-SNAPSHOT @@ -23,7 +23,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.8.1 + 1.9-SNAPSHOT diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index 52efcd346..8f0a225cd 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.8.1 + 1.9-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-jersey-archetype - 1.8.1 + 1.9-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.8.1 + HEAD diff --git a/aws-serverless-spark-archetype/pom.xml b/aws-serverless-spark-archetype/pom.xml index e7a7bc59b..fea28b1f8 100644 --- a/aws-serverless-spark-archetype/pom.xml +++ b/aws-serverless-spark-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.8.1 + 1.9-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-spark-archetype - 1.8.1 + 1.9-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.8.1 + HEAD diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index 6250b927d..723de360d 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.8.1 + 1.9-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-spring-archetype - 1.8.1 + 1.9-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.8.1 + HEAD diff --git a/aws-serverless-springboot2-archetype/pom.xml b/aws-serverless-springboot2-archetype/pom.xml index d7cf61f34..ecf410f52 100644 --- a/aws-serverless-springboot2-archetype/pom.xml +++ b/aws-serverless-springboot2-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.8.1 + 1.9-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-springboot2-archetype - 1.8.1 + 1.9-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.8.1 + HEAD diff --git a/aws-serverless-struts2-archetype/pom.xml b/aws-serverless-struts2-archetype/pom.xml index d775d6744..cb96c077b 100644 --- a/aws-serverless-struts2-archetype/pom.xml +++ b/aws-serverless-struts2-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.8.1 + 1.9-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-struts2-archetype - 1.8.1 + 1.9-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.8.1 + HEAD diff --git a/pom.xml b/pom.xml index d930519e3..bdea29d9c 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazonaws.serverless aws-serverless-java-container pom - 1.8.1 + 1.9-SNAPSHOT AWS Serverless Java container A Java framework to run Spring, Spring Boot, Jersey, Spark, and Struts applications inside AWS Lambda https://github.com/awslabs/aws-serverless-java-container @@ -41,7 +41,7 @@ https://github.com/awslabs/aws-serverless-java-container scm:git:https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.8.1 + HEAD From dbf072d15eb87d2c8710cac1393bd8da646ba100 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Wed, 25 May 2022 10:42:44 +0200 Subject: [PATCH 222/888] chore(deps): Update Spring dependencies (framework to 5.3.20, security to 5.6.5, boot to 2.6.8) --- .github/workflows/continuous-integration-workflow.yml | 2 +- aws-serverless-java-container-core/pom.xml | 2 +- aws-serverless-java-container-spring/pom.xml | 4 ++-- aws-serverless-java-container-springboot2/pom.xml | 6 +++--- .../src/main/resources/archetype-resources/build.gradle | 4 ++-- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/spring/pet-store/build.gradle | 4 ++-- samples/spring/pet-store/pom.xml | 2 +- samples/springboot2/pet-store/pom.xml | 2 +- 11 files changed, 16 insertions(+), 16 deletions(-) diff --git a/.github/workflows/continuous-integration-workflow.yml b/.github/workflows/continuous-integration-workflow.yml index f3e270130..6edfe855b 100644 --- a/.github/workflows/continuous-integration-workflow.yml +++ b/.github/workflows/continuous-integration-workflow.yml @@ -74,7 +74,7 @@ jobs: - name: Build Spring Boot 2.4 run: ./gha_build.sh springboot2 false false -Dspringboot.version=2.4.13 -Dspring.version=5.3.13 -Dspringsecurity.version=5.4.9 -Ddependency-check.skip=true - name: Build Spring Boot 2.5 - run: ./gha_build.sh springboot2 false false -Dspringboot.version=2.5.13 -Dspring.version=5.3.19 -Dspringsecurity.version=5.5.6 -Ddependency-check.skip=true + run: ./gha_build.sh springboot2 false false -Dspringboot.version=2.5.14 -Dspring.version=5.3.20 -Dspringsecurity.version=5.5.8 -Ddependency-check.skip=true build_struts2: name: Build and test Struts 2 diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 1d42a1457..2f5752e9e 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -97,7 +97,7 @@ org.springframework.security spring-security-web - 5.6.3 + 5.6.5 test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 8b32e991c..8e7e2915e 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -16,8 +16,8 @@ - 5.3.19 - 5.6.3 + 5.3.20 + 5.6.5 diff --git a/aws-serverless-java-container-springboot2/pom.xml b/aws-serverless-java-container-springboot2/pom.xml index 3e7e3274b..ff485aa9a 100644 --- a/aws-serverless-java-container-springboot2/pom.xml +++ b/aws-serverless-java-container-springboot2/pom.xml @@ -15,9 +15,9 @@ 1.9-SNAPSHOT - 5.3.19 - 2.6.7 - 5.6.3 + 5.3.20 + 2.6.8 + 5.6.5 1.8 1.8 diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index f50f34066..10d9f2df3 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -7,8 +7,8 @@ repositories { dependencies { implementation ( - 'org.springframework:spring-webmvc:5.3.19', - 'org.springframework:spring-context:5.3.19', + 'org.springframework:spring-webmvc:5.3.20', + 'org.springframework:spring-context:5.3.20', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[1.0,)', 'org.apache.logging.log4j:log4j-core:2.17.2', 'org.apache.logging.log4j:log4j-api:2.17.2', diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index 75a1d2a65..6a8f393cb 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 1.8 - 5.3.19 + 5.3.20 4.13.2 2.17.2 diff --git a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle index 0d590cc52..5c8467548 100644 --- a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle @@ -8,7 +8,7 @@ repositories { dependencies { implementation ( - 'org.springframework.boot:spring-boot-starter-web:2.6.7', + 'org.springframework.boot:spring-boot-starter-web:2.6.8', 'com.amazonaws.serverless:aws-serverless-java-container-springboot2:[1.0,)', 'io.symphonia:lambda-logging:1.0.3' ) diff --git a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml index 3f01eda30..12bc00dfa 100644 --- a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ org.springframework.boot spring-boot-starter-parent - 2.6.7 + 2.6.8 diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index bb16a7af4..89b2804b2 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -7,8 +7,8 @@ repositories { dependencies { implementation ( - 'org.springframework:spring-webmvc:5.3.19', - 'org.springframework:spring-context:5.3.19', + 'org.springframework:spring-webmvc:5.3.20', + 'org.springframework:spring-context:5.3.20', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[1.0,)', 'org.apache.logging.log4j:log4j-core:2.17.2', 'org.apache.logging.log4j:log4j-api:2.17.2', diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index e635c95a3..b802e99e5 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -26,7 +26,7 @@ 1.8 1.8 - 5.3.19 + 5.3.20 4.13.2 2.17.2 diff --git a/samples/springboot2/pet-store/pom.xml b/samples/springboot2/pet-store/pom.xml index 065af3cf7..fccf7bd4b 100644 --- a/samples/springboot2/pet-store/pom.xml +++ b/samples/springboot2/pet-store/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 2.6.7 + 2.6.8 From 216deb7bee199b5b44d662b6969b59c71b5baba6 Mon Sep 17 00:00:00 2001 From: Benjamin Qader Date: Mon, 30 May 2022 21:20:15 +0100 Subject: [PATCH 223/888] fix: AwsHttpApiV2ProxyHttpServletRequest.headersMapToMultiValue truncates the user-agent (#464) --- .../internal/servlet/AwsHttpApiV2ProxyHttpServletRequest.java | 1 + .../servlet/AwsHttpApiV2HttpServletRequestReaderTest.java | 3 +++ .../proxy/internal/servlet/AwsProxyHttpServletRequestTest.java | 2 +- 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2ProxyHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2ProxyHttpServletRequest.java index 9b4fa8b8f..09a5e8846 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2ProxyHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2ProxyHttpServletRequest.java @@ -533,6 +533,7 @@ private Headers headersMapToMultiValue(Map headers) { // Exceptions for known header values that contain commas if (hkv.getKey().equalsIgnoreCase(HttpHeaders.DATE) || hkv.getKey().equalsIgnoreCase(HttpHeaders.IF_MODIFIED_SINCE) || + hkv.getKey().equalsIgnoreCase(HttpHeaders.USER_AGENT) || hkv.getKey().toLowerCase(Locale.getDefault()).startsWith("accept-")) { h.add(hkv.getKey(), hkv.getValue()); continue; diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2HttpServletRequestReaderTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2HttpServletRequestReaderTest.java index 263c78f53..37ba30598 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2HttpServletRequestReaderTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2HttpServletRequestReaderTest.java @@ -8,6 +8,7 @@ import org.junit.Test; import javax.servlet.http.HttpServletRequest; +import javax.ws.rs.core.HttpHeaders; import static org.junit.Assert.*; @@ -23,6 +24,7 @@ public void reflection_getRequestClass_returnsCorrectType() { public void baseRequest_read_populatesSuccessfully() { HttpApiV2ProxyRequest req = new AwsProxyRequestBuilder("/hello", "GET") .referer("localhost") + .userAgent("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.61 Safari/537.36") .queryString("param1", "value1") .header("custom", "value") .cookie("cookey", "cooval") @@ -33,6 +35,7 @@ public void baseRequest_read_populatesSuccessfully() { assertEquals("/hello", servletRequest.getPathInfo()); assertEquals("value1", servletRequest.getParameter("param1")); assertEquals("value", servletRequest.getHeader("CUSTOM")); + assertEquals("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.61 Safari/537.36", servletRequest.getHeader(HttpHeaders.USER_AGENT)); assertNotNull(servletRequest.getCookies()); assertEquals(1, servletRequest.getCookies().length); diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestTest.java index 8ea888a04..de23d855c 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestTest.java @@ -36,7 +36,7 @@ public class AwsProxyHttpServletRequestTest { private static final String FORM_PARAM_TEST = "test_cookie_param"; private static final String QUERY_STRING_NAME_VALUE = "Bob"; private static final String REQUEST_SCHEME_HTTP = "http"; - private static final String USER_AGENT = "Mozilla/5.0 (Android 4.4; Mobile; rv:41.0) Gecko/41.0 Firefox/41.0"; + private static final String USER_AGENT = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.61 Safari/537.36"; private static final String REFERER = "https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent/Firefox"; private static ZonedDateTime REQUEST_DATE = ZonedDateTime.now(); From 09f07471b47807298b072eec8b446552c62ef8a0 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 3 Jun 2022 11:51:23 +0200 Subject: [PATCH 224/888] chore(deps): update Jackson version to 2.13.3 --- aws-serverless-java-container-core/pom.xml | 9 +-------- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 4 ++-- pom.xml | 2 +- samples/jersey/pet-store/build.gradle | 2 +- samples/jersey/pet-store/pom.xml | 2 +- samples/spark/pet-store/build.gradle | 2 +- samples/spark/pet-store/pom.xml | 2 +- samples/spring/pet-store/build.gradle | 2 +- samples/struts2/pet-store/build.gradle | 2 +- samples/struts2/pet-store/pom.xml | 4 ++-- 16 files changed, 18 insertions(+), 25 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 2f5752e9e..274c70e95 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -53,14 +53,7 @@ com.fasterxml.jackson.module jackson-module-afterburner - 2.13.2 - - - - com.fasterxml.jackson.core - jackson-databind - - + ${jackson.version} diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle index f1a43b136..9f4e934e6 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle @@ -9,7 +9,7 @@ dependencies { implementation ( 'com.amazonaws:aws-lambda-java-core:1.2.1', 'com.amazonaws.serverless:aws-serverless-java-container-jersey:[1.0,)', - 'com.fasterxml.jackson.core:jackson-databind:2.13.2.1', + 'com.fasterxml.jackson.core:jackson-databind:2.13.3', 'io.symphonia:lambda-logging:1.0.3' ) diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml index 5bce2b69f..d1fc42e06 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml @@ -15,7 +15,7 @@ 1.8 1.8 2.35 - 2.13.2.1 + 2.13.3 diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle index df7dabaf4..a1261c3d1 100644 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle @@ -9,7 +9,7 @@ dependencies { implementation ( 'com.sparkjava:spark-core:2.9.3', 'com.amazonaws.serverless:aws-serverless-java-container-spark:[1.0,)', - 'com.fasterxml.jackson.core:jackson-databind:2.13.2.1', + 'com.fasterxml.jackson.core:jackson-databind:2.13.3', 'io.symphonia:lambda-logging:1.0.3' ) diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml index 4f183879b..678d2cf1c 100644 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 1.8 - 2.13.2.1 + 2.13.3 2.9.1 diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index 10d9f2df3..21e3815b4 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -13,7 +13,7 @@ dependencies { 'org.apache.logging.log4j:log4j-core:2.17.2', 'org.apache.logging.log4j:log4j-api:2.17.2', 'org.apache.logging.log4j:log4j-slf4j-impl:2.17.2', - 'com.fasterxml.jackson.core:jackson-databind:2.13.2.1', + 'com.fasterxml.jackson.core:jackson-databind:2.13.3', 'com.amazonaws:aws-lambda-java-log4j2:1.5.1', ) diff --git a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle index 6cbad5d70..a2cb228b8 100644 --- a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle @@ -34,7 +34,7 @@ dependencies { exclude group: 'org.apache.logging.log4j', module: 'log4j-api' } implementation ('org.hibernate:hibernate-validator:5.4.3.Final') - implementation ('com.fasterxml.jackson.core:jackson-databind:2.13.2.1') + implementation ('com.fasterxml.jackson.core:jackson-databind:2.13.3') implementation ('org.apache.logging.log4j:log4j-core:2.17.2') implementation ('org.apache.logging.log4j:log4j-api:2.17.2') implementation ('org.apache.logging.log4j:log4j-slf4j-impl:2.17.2') diff --git a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml index 50fbae6fa..19204eac7 100644 --- a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 1.8 2.5.30 - 2.13.2 + 2.13.3 4.13.2 2.17.2 @@ -86,7 +86,7 @@ com.fasterxml.jackson.core jackson-databind - \${jackson.version}.1 + \${jackson.version} diff --git a/pom.xml b/pom.xml index bdea29d9c..beca7016c 100644 --- a/pom.xml +++ b/pom.xml @@ -82,7 +82,7 @@ 0.7 6.5.3 - 2.13.2.1 + 2.13.3 1.7.36 UTF-8 diff --git a/samples/jersey/pet-store/build.gradle b/samples/jersey/pet-store/build.gradle index 0347120b8..3f8842b89 100644 --- a/samples/jersey/pet-store/build.gradle +++ b/samples/jersey/pet-store/build.gradle @@ -9,7 +9,7 @@ dependencies { implementation ( 'com.amazonaws:aws-lambda-java-core:1.2.1', 'com.amazonaws.serverless:aws-serverless-java-container-jersey:[1.0,)', - 'com.fasterxml.jackson.core:jackson-databind:2.13.2.1', + 'com.fasterxml.jackson.core:jackson-databind:2.13.3', 'io.symphonia:lambda-logging:1.0.3' ) diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index 71675f0b9..27b46328b 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -27,7 +27,7 @@ 1.8 1.8 2.35 - 2.13.2.1 + 2.13.3 diff --git a/samples/spark/pet-store/build.gradle b/samples/spark/pet-store/build.gradle index dbe3b8794..132f2d6cb 100644 --- a/samples/spark/pet-store/build.gradle +++ b/samples/spark/pet-store/build.gradle @@ -9,7 +9,7 @@ dependencies { implementation ( 'com.sparkjava:spark-core:2.9.3', 'com.amazonaws.serverless:aws-serverless-java-container-spark:[1.0,)', - 'com.fasterxml.jackson.core:jackson-databind:2.13.2.1', + 'com.fasterxml.jackson.core:jackson-databind:2.13.3', 'io.symphonia:lambda-logging:1.0.3' ) } diff --git a/samples/spark/pet-store/pom.xml b/samples/spark/pet-store/pom.xml index 53c8a02f7..e46eff949 100644 --- a/samples/spark/pet-store/pom.xml +++ b/samples/spark/pet-store/pom.xml @@ -26,7 +26,7 @@ 1.8 1.8 - 2.13.2.1 + 2.13.3 2.9.1 diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index 89b2804b2..58423266e 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -13,7 +13,7 @@ dependencies { 'org.apache.logging.log4j:log4j-core:2.17.2', 'org.apache.logging.log4j:log4j-api:2.17.2', 'org.apache.logging.log4j:log4j-slf4j-impl:2.17.2', - 'com.fasterxml.jackson.core:jackson-databind:2.13.2.1', + 'com.fasterxml.jackson.core:jackson-databind:2.13.3', 'com.amazonaws:aws-lambda-java-log4j2:1.5.1', ) } diff --git a/samples/struts2/pet-store/build.gradle b/samples/struts2/pet-store/build.gradle index 0a48d8e37..1d734194c 100644 --- a/samples/struts2/pet-store/build.gradle +++ b/samples/struts2/pet-store/build.gradle @@ -20,7 +20,7 @@ dependencies { 'org.apache.struts:struts2-junit-plugin:2.5.30', 'com.jgeppert.struts2:struts2-aws-lambda-support-plugin:1.3.0', 'org.hibernate:hibernate-validator:5.4.3.Final', - 'com.fasterxml.jackson.core:jackson-databind:2.13.2.1', + 'com.fasterxml.jackson.core:jackson-databind:2.13.3', 'org.apache.logging.log4j:log4j-core:2.17.2', 'org.apache.logging.log4j:log4j-api:2.17.2', 'org.apache.logging.log4j:log4j-slf4j-impl:2.17.2', diff --git a/samples/struts2/pet-store/pom.xml b/samples/struts2/pet-store/pom.xml index 0b044c453..562c8fb8f 100644 --- a/samples/struts2/pet-store/pom.xml +++ b/samples/struts2/pet-store/pom.xml @@ -27,7 +27,7 @@ 1.8 1.8 2.5.30 - 2.13.2 + 2.13.3 4.13.2 2.17.2 @@ -97,7 +97,7 @@ com.fasterxml.jackson.core jackson-databind - ${jackson.version}.1 + ${jackson.version} From 67b11b62d47fd11cae7a28b77ac38e61f30cff34 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 3 Jun 2022 12:24:56 +0200 Subject: [PATCH 225/888] chore: suppress CVE-2016-1000027 OWASP detection in Spring libs (see spring-projects/spring-framework#24434) --- owasp-suppression.xml | 7 ++++++- pom.xml | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/owasp-suppression.xml b/owasp-suppression.xml index 0997df5c3..83fde5815 100644 --- a/owasp-suppression.xml +++ b/owasp-suppression.xml @@ -17,7 +17,7 @@ ~ specific language governing permissions and limitations ~ under the License. --> - + @@ -27,4 +27,9 @@ cpe:/a:restful_web_services_project:restful_web_services:7.x-2.1::~~~drupal~~ + + + ^pkg:maven/org\.springframework/spring.*$ + CVE-2016-1000027 + \ No newline at end of file diff --git a/pom.xml b/pom.xml index beca7016c..87128512a 100644 --- a/pom.xml +++ b/pom.xml @@ -81,7 +81,7 @@ 0.7 - 6.5.3 + 7.1.0 2.13.3 1.7.36 UTF-8 From 8264eebfed44074fdbd05a8737cac4dc011e6677 Mon Sep 17 00:00:00 2001 From: deki Date: Fri, 10 Jun 2022 12:04:10 +0000 Subject: [PATCH 226/888] chore: release -prepare release aws-serverless-java-container-1.8.2 --- aws-serverless-java-container-core/pom.xml | 4 ++-- aws-serverless-java-container-jersey/pom.xml | 6 +++--- aws-serverless-java-container-spark/pom.xml | 6 +++--- aws-serverless-java-container-spring/pom.xml | 6 +++--- aws-serverless-java-container-springboot2/pom.xml | 6 +++--- aws-serverless-java-container-struts2/pom.xml | 6 +++--- aws-serverless-jersey-archetype/pom.xml | 6 +++--- aws-serverless-spark-archetype/pom.xml | 6 +++--- aws-serverless-spring-archetype/pom.xml | 6 +++--- aws-serverless-springboot2-archetype/pom.xml | 6 +++--- aws-serverless-struts2-archetype/pom.xml | 6 +++--- pom.xml | 4 ++-- 12 files changed, 34 insertions(+), 34 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 274c70e95..7cf23b61c 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Core Allows Java applications written for a servlet container to run in AWS Lambda https://aws.amazon.com/lambda - 1.9-SNAPSHOT + 1.8.2 com.amazonaws.serverless aws-serverless-java-container - 1.9-SNAPSHOT + 1.8.2 .. diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index e1c083474..46af80b12 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Jersey implementation Allows Java applications written for Jersey to run in AWS Lambda https://aws.amazon.com/lambda - 1.9-SNAPSHOT + 1.8.2 com.amazonaws.serverless aws-serverless-java-container - 1.9-SNAPSHOT + 1.8.2 .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.9-SNAPSHOT + 1.8.2 com.fasterxml.jackson.core diff --git a/aws-serverless-java-container-spark/pom.xml b/aws-serverless-java-container-spark/pom.xml index 7a1a914d4..7438ff5c9 100644 --- a/aws-serverless-java-container-spark/pom.xml +++ b/aws-serverless-java-container-spark/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spark implementation Allows Java applications written for Spark to run in AWS Lambda https://aws.amazon.com/lambda - 1.9-SNAPSHOT + 1.8.2 com.amazonaws.serverless aws-serverless-java-container - 1.9-SNAPSHOT + 1.8.2 .. @@ -37,7 +37,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.9-SNAPSHOT + 1.8.2 diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 8e7e2915e..fc8681c7e 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spring implementation Allows Java applications written for the Spring framework to run in AWS Lambda https://aws.amazon.com/lambda - 1.9-SNAPSHOT + 1.8.2 com.amazonaws.serverless aws-serverless-java-container - 1.9-SNAPSHOT + 1.8.2 .. @@ -25,7 +25,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.9-SNAPSHOT + 1.8.2 diff --git a/aws-serverless-java-container-springboot2/pom.xml b/aws-serverless-java-container-springboot2/pom.xml index ff485aa9a..6425c1840 100644 --- a/aws-serverless-java-container-springboot2/pom.xml +++ b/aws-serverless-java-container-springboot2/pom.xml @@ -3,7 +3,7 @@ aws-serverless-java-container com.amazonaws.serverless - 1.9-SNAPSHOT + 1.8.2 4.0.0 @@ -12,7 +12,7 @@ AWS Serverless Java container support - SpringBoot 2 implementation Allows Java applications written for SpringBoot 2 to run in AWS Lambda https://aws.amazon.com/lambda - 1.9-SNAPSHOT + 1.8.2 5.3.20 @@ -27,7 +27,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.9-SNAPSHOT + 1.8.2 diff --git a/aws-serverless-java-container-struts2/pom.xml b/aws-serverless-java-container-struts2/pom.xml index c2ec5923e..101e79b16 100644 --- a/aws-serverless-java-container-struts2/pom.xml +++ b/aws-serverless-java-container-struts2/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Struts2 implementation Allows Java applications written for the Struts2 framework to run in AWS Lambda https://aws.amazon.com/lambda - 1.9-SNAPSHOT + 1.8.2 com.amazonaws.serverless aws-serverless-java-container - 1.9-SNAPSHOT + 1.8.2 @@ -23,7 +23,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.9-SNAPSHOT + 1.8.2 diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index 8f0a225cd..0492d4f20 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.9-SNAPSHOT + 1.8.2 com.amazonaws.serverless.archetypes aws-serverless-jersey-archetype - 1.9-SNAPSHOT + 1.8.2 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.8.2 diff --git a/aws-serverless-spark-archetype/pom.xml b/aws-serverless-spark-archetype/pom.xml index fea28b1f8..1ab51869f 100644 --- a/aws-serverless-spark-archetype/pom.xml +++ b/aws-serverless-spark-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.9-SNAPSHOT + 1.8.2 com.amazonaws.serverless.archetypes aws-serverless-spark-archetype - 1.9-SNAPSHOT + 1.8.2 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.8.2 diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index 723de360d..c4149c5a2 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.9-SNAPSHOT + 1.8.2 com.amazonaws.serverless.archetypes aws-serverless-spring-archetype - 1.9-SNAPSHOT + 1.8.2 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.8.2 diff --git a/aws-serverless-springboot2-archetype/pom.xml b/aws-serverless-springboot2-archetype/pom.xml index ecf410f52..6ed2453d7 100644 --- a/aws-serverless-springboot2-archetype/pom.xml +++ b/aws-serverless-springboot2-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.9-SNAPSHOT + 1.8.2 com.amazonaws.serverless.archetypes aws-serverless-springboot2-archetype - 1.9-SNAPSHOT + 1.8.2 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.8.2 diff --git a/aws-serverless-struts2-archetype/pom.xml b/aws-serverless-struts2-archetype/pom.xml index cb96c077b..01a5a0ab2 100644 --- a/aws-serverless-struts2-archetype/pom.xml +++ b/aws-serverless-struts2-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.9-SNAPSHOT + 1.8.2 com.amazonaws.serverless.archetypes aws-serverless-struts2-archetype - 1.9-SNAPSHOT + 1.8.2 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.8.2 diff --git a/pom.xml b/pom.xml index 87128512a..5e354009a 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazonaws.serverless aws-serverless-java-container pom - 1.9-SNAPSHOT + 1.8.2 AWS Serverless Java container A Java framework to run Spring, Spring Boot, Jersey, Spark, and Struts applications inside AWS Lambda https://github.com/awslabs/aws-serverless-java-container @@ -41,7 +41,7 @@ https://github.com/awslabs/aws-serverless-java-container scm:git:https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.8.2 From e0a0d907b3bc0fd4ec31579853104aaf84921f1b Mon Sep 17 00:00:00 2001 From: deki Date: Fri, 10 Jun 2022 12:04:11 +0000 Subject: [PATCH 227/888] chore: release -prepare for next development iteration --- aws-serverless-java-container-core/pom.xml | 4 ++-- aws-serverless-java-container-jersey/pom.xml | 6 +++--- aws-serverless-java-container-spark/pom.xml | 6 +++--- aws-serverless-java-container-spring/pom.xml | 6 +++--- aws-serverless-java-container-springboot2/pom.xml | 6 +++--- aws-serverless-java-container-struts2/pom.xml | 6 +++--- aws-serverless-jersey-archetype/pom.xml | 6 +++--- aws-serverless-spark-archetype/pom.xml | 6 +++--- aws-serverless-spring-archetype/pom.xml | 6 +++--- aws-serverless-springboot2-archetype/pom.xml | 6 +++--- aws-serverless-struts2-archetype/pom.xml | 6 +++--- pom.xml | 4 ++-- 12 files changed, 34 insertions(+), 34 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 7cf23b61c..274c70e95 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Core Allows Java applications written for a servlet container to run in AWS Lambda https://aws.amazon.com/lambda - 1.8.2 + 1.9-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.8.2 + 1.9-SNAPSHOT .. diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index 46af80b12..e1c083474 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Jersey implementation Allows Java applications written for Jersey to run in AWS Lambda https://aws.amazon.com/lambda - 1.8.2 + 1.9-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.8.2 + 1.9-SNAPSHOT .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.8.2 + 1.9-SNAPSHOT com.fasterxml.jackson.core diff --git a/aws-serverless-java-container-spark/pom.xml b/aws-serverless-java-container-spark/pom.xml index 7438ff5c9..7a1a914d4 100644 --- a/aws-serverless-java-container-spark/pom.xml +++ b/aws-serverless-java-container-spark/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spark implementation Allows Java applications written for Spark to run in AWS Lambda https://aws.amazon.com/lambda - 1.8.2 + 1.9-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.8.2 + 1.9-SNAPSHOT .. @@ -37,7 +37,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.8.2 + 1.9-SNAPSHOT diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index fc8681c7e..8e7e2915e 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spring implementation Allows Java applications written for the Spring framework to run in AWS Lambda https://aws.amazon.com/lambda - 1.8.2 + 1.9-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.8.2 + 1.9-SNAPSHOT .. @@ -25,7 +25,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.8.2 + 1.9-SNAPSHOT diff --git a/aws-serverless-java-container-springboot2/pom.xml b/aws-serverless-java-container-springboot2/pom.xml index 6425c1840..ff485aa9a 100644 --- a/aws-serverless-java-container-springboot2/pom.xml +++ b/aws-serverless-java-container-springboot2/pom.xml @@ -3,7 +3,7 @@ aws-serverless-java-container com.amazonaws.serverless - 1.8.2 + 1.9-SNAPSHOT 4.0.0 @@ -12,7 +12,7 @@ AWS Serverless Java container support - SpringBoot 2 implementation Allows Java applications written for SpringBoot 2 to run in AWS Lambda https://aws.amazon.com/lambda - 1.8.2 + 1.9-SNAPSHOT 5.3.20 @@ -27,7 +27,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.8.2 + 1.9-SNAPSHOT diff --git a/aws-serverless-java-container-struts2/pom.xml b/aws-serverless-java-container-struts2/pom.xml index 101e79b16..c2ec5923e 100644 --- a/aws-serverless-java-container-struts2/pom.xml +++ b/aws-serverless-java-container-struts2/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Struts2 implementation Allows Java applications written for the Struts2 framework to run in AWS Lambda https://aws.amazon.com/lambda - 1.8.2 + 1.9-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.8.2 + 1.9-SNAPSHOT @@ -23,7 +23,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.8.2 + 1.9-SNAPSHOT diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index 0492d4f20..8f0a225cd 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.8.2 + 1.9-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-jersey-archetype - 1.8.2 + 1.9-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.8.2 + HEAD diff --git a/aws-serverless-spark-archetype/pom.xml b/aws-serverless-spark-archetype/pom.xml index 1ab51869f..fea28b1f8 100644 --- a/aws-serverless-spark-archetype/pom.xml +++ b/aws-serverless-spark-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.8.2 + 1.9-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-spark-archetype - 1.8.2 + 1.9-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.8.2 + HEAD diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index c4149c5a2..723de360d 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.8.2 + 1.9-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-spring-archetype - 1.8.2 + 1.9-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.8.2 + HEAD diff --git a/aws-serverless-springboot2-archetype/pom.xml b/aws-serverless-springboot2-archetype/pom.xml index 6ed2453d7..ecf410f52 100644 --- a/aws-serverless-springboot2-archetype/pom.xml +++ b/aws-serverless-springboot2-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.8.2 + 1.9-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-springboot2-archetype - 1.8.2 + 1.9-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.8.2 + HEAD diff --git a/aws-serverless-struts2-archetype/pom.xml b/aws-serverless-struts2-archetype/pom.xml index 01a5a0ab2..cb96c077b 100644 --- a/aws-serverless-struts2-archetype/pom.xml +++ b/aws-serverless-struts2-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.8.2 + 1.9-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-struts2-archetype - 1.8.2 + 1.9-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.8.2 + HEAD diff --git a/pom.xml b/pom.xml index 5e354009a..87128512a 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazonaws.serverless aws-serverless-java-container pom - 1.8.2 + 1.9-SNAPSHOT AWS Serverless Java container A Java framework to run Spring, Spring Boot, Jersey, Spark, and Struts applications inside AWS Lambda https://github.com/awslabs/aws-serverless-java-container @@ -41,7 +41,7 @@ https://github.com/awslabs/aws-serverless-java-container scm:git:https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.8.2 + HEAD From 3627c6641db5480041043cdd7ba53d563d1391b5 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Wed, 27 Jul 2022 15:30:14 +0200 Subject: [PATCH 228/888] chore(deps): Update Spring dependencies (framework to 5.3.22, security to 5.7.2, boot to 2.7.2) --- aws-serverless-java-container-core/pom.xml | 2 +- aws-serverless-java-container-spring/pom.xml | 4 ++-- aws-serverless-java-container-springboot2/pom.xml | 6 +++--- .../src/main/resources/archetype-resources/build.gradle | 4 ++-- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/spring/pet-store/build.gradle | 4 ++-- samples/spring/pet-store/pom.xml | 2 +- samples/springboot2/pet-store/pom.xml | 2 +- 10 files changed, 15 insertions(+), 15 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 274c70e95..ecd905f1e 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -90,7 +90,7 @@ org.springframework.security spring-security-web - 5.6.5 + 5.7.2 test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 8e7e2915e..25df73251 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -16,8 +16,8 @@ - 5.3.20 - 5.6.5 + 5.3.22 + 5.7.2 diff --git a/aws-serverless-java-container-springboot2/pom.xml b/aws-serverless-java-container-springboot2/pom.xml index ff485aa9a..65b1ed228 100644 --- a/aws-serverless-java-container-springboot2/pom.xml +++ b/aws-serverless-java-container-springboot2/pom.xml @@ -15,9 +15,9 @@ 1.9-SNAPSHOT - 5.3.20 - 2.6.8 - 5.6.5 + 5.3.22 + 2.7.2 + 5.7.2 1.8 1.8 diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index 21e3815b4..4497f8c8d 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -7,8 +7,8 @@ repositories { dependencies { implementation ( - 'org.springframework:spring-webmvc:5.3.20', - 'org.springframework:spring-context:5.3.20', + 'org.springframework:spring-webmvc:5.3.22', + 'org.springframework:spring-context:5.3.22', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[1.0,)', 'org.apache.logging.log4j:log4j-core:2.17.2', 'org.apache.logging.log4j:log4j-api:2.17.2', diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index 6a8f393cb..b3597de53 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 1.8 - 5.3.20 + 5.3.22 4.13.2 2.17.2 diff --git a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle index 5c8467548..30221b518 100644 --- a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle @@ -8,7 +8,7 @@ repositories { dependencies { implementation ( - 'org.springframework.boot:spring-boot-starter-web:2.6.8', + 'org.springframework.boot:spring-boot-starter-web:2.7.2', 'com.amazonaws.serverless:aws-serverless-java-container-springboot2:[1.0,)', 'io.symphonia:lambda-logging:1.0.3' ) diff --git a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml index 12bc00dfa..8efb4efcf 100644 --- a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ org.springframework.boot spring-boot-starter-parent - 2.6.8 + 2.7.2 diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index 58423266e..d25e400ef 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -7,8 +7,8 @@ repositories { dependencies { implementation ( - 'org.springframework:spring-webmvc:5.3.20', - 'org.springframework:spring-context:5.3.20', + 'org.springframework:spring-webmvc:5.3.22', + 'org.springframework:spring-context:5.3.22', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[1.0,)', 'org.apache.logging.log4j:log4j-core:2.17.2', 'org.apache.logging.log4j:log4j-api:2.17.2', diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index b802e99e5..ea06bddfc 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -26,7 +26,7 @@ 1.8 1.8 - 5.3.20 + 5.3.22 4.13.2 2.17.2 diff --git a/samples/springboot2/pet-store/pom.xml b/samples/springboot2/pet-store/pom.xml index fccf7bd4b..10910661a 100644 --- a/samples/springboot2/pet-store/pom.xml +++ b/samples/springboot2/pet-store/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 2.6.8 + 2.7.2 From df3e0558152ce6be1941ef02929b625c7834dbf4 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Wed, 27 Jul 2022 15:37:51 +0200 Subject: [PATCH 229/888] chore(deps): Update Jetty dependency to 9.4.48.v20220622 --- aws-serverless-java-container-spark/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws-serverless-java-container-spark/pom.xml b/aws-serverless-java-container-spark/pom.xml index 7a1a914d4..92700f2d3 100644 --- a/aws-serverless-java-container-spark/pom.xml +++ b/aws-serverless-java-container-spark/pom.xml @@ -25,7 +25,7 @@ org.eclipse.jetty jetty-bom - 9.4.45.v20220203 + 9.4.48.v20220622 pom import From 0c821a968606cb7406ccd1a6243c47c5ddab67e9 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Wed, 10 Aug 2022 16:36:47 +0200 Subject: [PATCH 230/888] chore(deps): Update Jersey dependencies to 2.36 --- aws-serverless-java-container-jersey/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 4 ++-- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/jersey/pet-store/build.gradle | 4 ++-- samples/jersey/pet-store/pom.xml | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index e1c083474..d52234584 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -16,7 +16,7 @@ - 2.35 + 2.36 diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle index 9f4e934e6..08c10203d 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle @@ -13,13 +13,13 @@ dependencies { 'io.symphonia:lambda-logging:1.0.3' ) - implementation("org.glassfish.jersey.media:jersey-media-json-jackson:2.35") { + implementation("org.glassfish.jersey.media:jersey-media-json-jackson:2.36") { exclude group: 'com.fasterxml.jackson.core', module: "jackson-annotations" exclude group: 'com.fasterxml.jackson.core', module: "jackson-databind" exclude group: 'com.fasterxml.jackson.core', module: "jackson-core" } - implementation("org.glassfish.jersey.inject:jersey-hk2:2.35") { + implementation("org.glassfish.jersey.inject:jersey-hk2:2.36") { exclude group: 'javax.inject', module: "javax.inject" } diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml index d1fc42e06..93dccc594 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml @@ -14,7 +14,7 @@ 1.8 1.8 - 2.35 + 2.36 2.13.3 diff --git a/samples/jersey/pet-store/build.gradle b/samples/jersey/pet-store/build.gradle index 3f8842b89..e01cde9fb 100644 --- a/samples/jersey/pet-store/build.gradle +++ b/samples/jersey/pet-store/build.gradle @@ -13,13 +13,13 @@ dependencies { 'io.symphonia:lambda-logging:1.0.3' ) - implementation("org.glassfish.jersey.media:jersey-media-json-jackson:2.35") { + implementation("org.glassfish.jersey.media:jersey-media-json-jackson:2.36") { exclude group: 'com.fasterxml.jackson.core', module: "jackson-annotations" exclude group: 'com.fasterxml.jackson.core', module: "jackson-databind" exclude group: 'com.fasterxml.jackson.core', module: "jackson-core" } - implementation("org.glassfish.jersey.inject:jersey-hk2:2.35") { + implementation("org.glassfish.jersey.inject:jersey-hk2:2.36") { exclude group: 'javax.inject', module: "javax.inject" } } diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index 27b46328b..ffdc2db8a 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -26,7 +26,7 @@ 1.8 1.8 - 2.35 + 2.36 2.13.3 From c84af04bf9f658df3b91b4c5011a91338041f2fa Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Wed, 10 Aug 2022 17:01:08 +0200 Subject: [PATCH 231/888] chore(deps): Update Spark dependency to 2.9.4 --- aws-serverless-java-container-spark/pom.xml | 22 +------------------ .../embeddedserver/LambdaEmbeddedServer.java | 2 +- .../LambdaEmbeddedServerTest.java | 2 +- .../archetype-resources/build.gradle | 2 +- samples/spark/pet-store/build.gradle | 2 +- 5 files changed, 5 insertions(+), 25 deletions(-) diff --git a/aws-serverless-java-container-spark/pom.xml b/aws-serverless-java-container-spark/pom.xml index 92700f2d3..036903284 100644 --- a/aws-serverless-java-container-spark/pom.xml +++ b/aws-serverless-java-container-spark/pom.xml @@ -16,22 +16,9 @@ - 2.9.3 + 2.9.4 - - - - - org.eclipse.jetty - jetty-bom - 9.4.48.v20220622 - pom - import - - - - @@ -45,13 +32,6 @@ com.sparkjava spark-core ${spark.version} - - - - org.slf4j - slf4j-api - - diff --git a/aws-serverless-java-container-spark/src/main/java/com/amazonaws/serverless/proxy/spark/embeddedserver/LambdaEmbeddedServer.java b/aws-serverless-java-container-spark/src/main/java/com/amazonaws/serverless/proxy/spark/embeddedserver/LambdaEmbeddedServer.java index 4be5d8565..fadca4941 100644 --- a/aws-serverless-java-container-spark/src/main/java/com/amazonaws/serverless/proxy/spark/embeddedserver/LambdaEmbeddedServer.java +++ b/aws-serverless-java-container-spark/src/main/java/com/amazonaws/serverless/proxy/spark/embeddedserver/LambdaEmbeddedServer.java @@ -80,7 +80,7 @@ public int ignite(String host, int port, SslStores sslStores, int maxThreads, in public void configureWebSockets(Map webSocketHandlers, - Optional webSocketIdleTimeoutMillis) { + Optional webSocketIdleTimeoutMillis) { // Swallowing this exception to prevent Spark from getting stuck // throw new UnsupportedOperationException(); log.info("Spark called configureWebSockets. However, web sockets are not supported"); diff --git a/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/embeddedserver/LambdaEmbeddedServerTest.java b/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/embeddedserver/LambdaEmbeddedServerTest.java index 8a0e1f4eb..968b2b47b 100644 --- a/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/embeddedserver/LambdaEmbeddedServerTest.java +++ b/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/embeddedserver/LambdaEmbeddedServerTest.java @@ -14,7 +14,7 @@ public class LambdaEmbeddedServerTest { @Test public void webSocket_configureWebSocket_noException() { try { - server.configureWebSockets(null, Optional.of(0)); + server.configureWebSockets(null, Optional.of(0L)); } catch (Exception e) { e.printStackTrace(); fail(); diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle index a1261c3d1..4fe672415 100644 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle @@ -7,7 +7,7 @@ repositories { dependencies { implementation ( - 'com.sparkjava:spark-core:2.9.3', + 'com.sparkjava:spark-core:2.9.4', 'com.amazonaws.serverless:aws-serverless-java-container-spark:[1.0,)', 'com.fasterxml.jackson.core:jackson-databind:2.13.3', 'io.symphonia:lambda-logging:1.0.3' diff --git a/samples/spark/pet-store/build.gradle b/samples/spark/pet-store/build.gradle index 132f2d6cb..dc6a63dbf 100644 --- a/samples/spark/pet-store/build.gradle +++ b/samples/spark/pet-store/build.gradle @@ -7,7 +7,7 @@ repositories { dependencies { implementation ( - 'com.sparkjava:spark-core:2.9.3', + 'com.sparkjava:spark-core:2.9.4', 'com.amazonaws.serverless:aws-serverless-java-container-spark:[1.0,)', 'com.fasterxml.jackson.core:jackson-databind:2.13.3', 'io.symphonia:lambda-logging:1.0.3' From 8962d53f638faaba4cf0d0765bf1aa7743d81fee Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Wed, 10 Aug 2022 17:19:38 +0200 Subject: [PATCH 232/888] chore(deps): Update Spark dependency to 2.9.4 - running 2.8.0 is no longer supported --- .github/workflows/continuous-integration-workflow.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/continuous-integration-workflow.yml b/.github/workflows/continuous-integration-workflow.yml index 6edfe855b..5c55e7b70 100644 --- a/.github/workflows/continuous-integration-workflow.yml +++ b/.github/workflows/continuous-integration-workflow.yml @@ -40,8 +40,6 @@ jobs: - uses: actions/checkout@v2 - name: Build latest run: ./gha_build.sh spark true true - - name: Build Spark 2.8.0 - run: ./gha_build.sh spark false false -Dspark.version=2.8.0 build_spring: name: Build and test Spring & SpringBoot From 0b92c8ec9c6d8955ee6e311e668282a754d80d7d Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Wed, 10 Aug 2022 17:35:14 +0200 Subject: [PATCH 233/888] move samples/ archetypes to java11 runtime --- .../resources/archetype-resources/README.md | 2 +- .../archetype-resources/template.yml | 2 +- .../resources/archetype-resources/README.md | 2 +- .../archetype-resources/template.yml | 2 +- .../resources/archetype-resources/README.md | 2 +- .../archetype-resources/template.yml | 2 +- .../resources/archetype-resources/README.md | 2 +- .../archetype-resources/template.yml | 2 +- .../resources/archetype-resources/README.md | 2 +- .../archetype-resources/template.yml | 2 +- samples/jersey/pet-store/template.yml | 2 +- samples/spark/pet-store/template.yml | 2 +- samples/spring/pet-store/template.yml | 2 +- samples/springboot2/pet-store/template.yml | 28 ++++++++++--------- samples/struts2/pet-store/template.yml | 2 +- 15 files changed, 29 insertions(+), 27 deletions(-) diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/README.md b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/README.md index 1dc39a0a2..1017a83ad 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/README.md +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/README.md @@ -56,7 +56,7 @@ From the project root folder - where the `template.yml` file is located - start $ sam local start-api ... -Mounting ${groupId}.StreamLambdaHandler::handleRequest (java8) at http://127.0.0.1:3000/{proxy+} [OPTIONS GET HEAD POST PUT DELETE PATCH] +Mounting ${groupId}.StreamLambdaHandler::handleRequest (java11) at http://127.0.0.1:3000/{proxy+} [OPTIONS GET HEAD POST PUT DELETE PATCH] ... ``` diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/template.yml b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/template.yml index db6ecbaff..e6e7e59b3 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/template.yml +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/template.yml @@ -32,7 +32,7 @@ Resources: Type: AWS::Serverless::Function Properties: Handler: ${groupId}.StreamLambdaHandler::handleRequest - Runtime: java8 + Runtime: java11 CodeUri: . MemorySize: 512 Policies: AWSLambdaBasicExecutionRole diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/README.md b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/README.md index 1dc39a0a2..1017a83ad 100644 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/README.md +++ b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/README.md @@ -56,7 +56,7 @@ From the project root folder - where the `template.yml` file is located - start $ sam local start-api ... -Mounting ${groupId}.StreamLambdaHandler::handleRequest (java8) at http://127.0.0.1:3000/{proxy+} [OPTIONS GET HEAD POST PUT DELETE PATCH] +Mounting ${groupId}.StreamLambdaHandler::handleRequest (java11) at http://127.0.0.1:3000/{proxy+} [OPTIONS GET HEAD POST PUT DELETE PATCH] ... ``` diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/template.yml b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/template.yml index d9e83ceba..d45c9923b 100644 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/template.yml +++ b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/template.yml @@ -32,7 +32,7 @@ Resources: Type: AWS::Serverless::Function Properties: Handler: ${groupId}.StreamLambdaHandler::handleRequest - Runtime: java8 + Runtime: java11 CodeUri: . MemorySize: 512 Policies: AWSLambdaBasicExecutionRole diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/README.md b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/README.md index 1dc39a0a2..1017a83ad 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/README.md +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/README.md @@ -56,7 +56,7 @@ From the project root folder - where the `template.yml` file is located - start $ sam local start-api ... -Mounting ${groupId}.StreamLambdaHandler::handleRequest (java8) at http://127.0.0.1:3000/{proxy+} [OPTIONS GET HEAD POST PUT DELETE PATCH] +Mounting ${groupId}.StreamLambdaHandler::handleRequest (java11) at http://127.0.0.1:3000/{proxy+} [OPTIONS GET HEAD POST PUT DELETE PATCH] ... ``` diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/template.yml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/template.yml index 292d87a9c..1c919d023 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/template.yml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/template.yml @@ -32,7 +32,7 @@ Resources: Type: AWS::Serverless::Function Properties: Handler: ${groupId}.StreamLambdaHandler::handleRequest - Runtime: java8 + Runtime: java11 CodeUri: . MemorySize: 512 Policies: AWSLambdaBasicExecutionRole diff --git a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/README.md b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/README.md index 1dc39a0a2..1017a83ad 100644 --- a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/README.md +++ b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/README.md @@ -56,7 +56,7 @@ From the project root folder - where the `template.yml` file is located - start $ sam local start-api ... -Mounting ${groupId}.StreamLambdaHandler::handleRequest (java8) at http://127.0.0.1:3000/{proxy+} [OPTIONS GET HEAD POST PUT DELETE PATCH] +Mounting ${groupId}.StreamLambdaHandler::handleRequest (java11) at http://127.0.0.1:3000/{proxy+} [OPTIONS GET HEAD POST PUT DELETE PATCH] ... ``` diff --git a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/template.yml b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/template.yml index ae2adf28c..8d8e0946a 100644 --- a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/template.yml +++ b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/template.yml @@ -32,7 +32,7 @@ Resources: Type: AWS::Serverless::Function Properties: Handler: ${groupId}.StreamLambdaHandler::handleRequest - Runtime: java8 + Runtime: java11 CodeUri: . MemorySize: 512 Policies: AWSLambdaBasicExecutionRole diff --git a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/README.md b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/README.md index 1dc39a0a2..1017a83ad 100644 --- a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/README.md +++ b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/README.md @@ -56,7 +56,7 @@ From the project root folder - where the `template.yml` file is located - start $ sam local start-api ... -Mounting ${groupId}.StreamLambdaHandler::handleRequest (java8) at http://127.0.0.1:3000/{proxy+} [OPTIONS GET HEAD POST PUT DELETE PATCH] +Mounting ${groupId}.StreamLambdaHandler::handleRequest (java11) at http://127.0.0.1:3000/{proxy+} [OPTIONS GET HEAD POST PUT DELETE PATCH] ... ``` diff --git a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/template.yml b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/template.yml index 11e06d07c..2025da620 100644 --- a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/template.yml +++ b/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/template.yml @@ -32,7 +32,7 @@ Resources: Type: AWS::Serverless::Function Properties: Handler: com.amazonaws.serverless.proxy.struts2.Struts2LambdaHandler::handleRequest - Runtime: java8 + Runtime: java11 CodeUri: . MemorySize: 512 Policies: AWSLambdaBasicExecutionRole diff --git a/samples/jersey/pet-store/template.yml b/samples/jersey/pet-store/template.yml index ababb78a8..f715064c4 100644 --- a/samples/jersey/pet-store/template.yml +++ b/samples/jersey/pet-store/template.yml @@ -12,7 +12,7 @@ Resources: Type: AWS::Serverless::Function Properties: Handler: com.amazonaws.serverless.sample.jersey.StreamLambdaHandler::handleRequest - Runtime: java8 + Runtime: java11 CodeUri: . MemorySize: 512 Policies: AWSLambdaBasicExecutionRole diff --git a/samples/spark/pet-store/template.yml b/samples/spark/pet-store/template.yml index 26e0a6535..535e684f9 100644 --- a/samples/spark/pet-store/template.yml +++ b/samples/spark/pet-store/template.yml @@ -12,7 +12,7 @@ Resources: Type: AWS::Serverless::Function Properties: Handler: com.amazonaws.serverless.sample.spark.StreamLambdaHandler::handleRequest - Runtime: java8 + Runtime: java11 CodeUri: . MemorySize: 512 Policies: AWSLambdaBasicExecutionRole diff --git a/samples/spring/pet-store/template.yml b/samples/spring/pet-store/template.yml index 8c3dec021..c485cf4c6 100644 --- a/samples/spring/pet-store/template.yml +++ b/samples/spring/pet-store/template.yml @@ -12,7 +12,7 @@ Resources: Type: AWS::Serverless::Function Properties: Handler: com.amazonaws.serverless.sample.spring.StreamLambdaHandler::handleRequest - Runtime: java8 + Runtime: java11 CodeUri: . MemorySize: 512 Policies: AWSLambdaBasicExecutionRole diff --git a/samples/springboot2/pet-store/template.yml b/samples/springboot2/pet-store/template.yml index a82974790..6e8ee6534 100644 --- a/samples/springboot2/pet-store/template.yml +++ b/samples/springboot2/pet-store/template.yml @@ -12,21 +12,23 @@ Resources: Type: AWS::Serverless::Function Properties: Handler: com.amazonaws.serverless.sample.springboot2.StreamLambdaHandler::handleRequest - Runtime: java8 + Runtime: java11 CodeUri: . MemorySize: 1512 Policies: AWSLambdaBasicExecutionRole Timeout: 60 - Events: - HttpApiEvent: - Type: HttpApi - Properties: - TimeoutInMillis: 20000 - PayloadFormatVersion: '1.0' + FunctionUrlConfig: + AuthType: NONE +# Events: +# HttpApiEvent: +# Type: HttpApi +# Properties: +# TimeoutInMillis: 20000 +# PayloadFormatVersion: '1.0' -Outputs: - SpringBootPetStoreApi: - Description: URL for application - Value: !Sub 'https://${ServerlessHttpApi}.execute-api.${AWS::Region}.amazonaws.com/pets' - Export: - Name: SpringBootPetStoreApi +#Outputs: +# SpringBootPetStoreApi: +# Description: URL for application +# Value: !Sub 'https://${ServerlessHttpApi}.execute-api.${AWS::Region}.amazonaws.com/pets' +# Export: +# Name: SpringBootPetStoreApi diff --git a/samples/struts2/pet-store/template.yml b/samples/struts2/pet-store/template.yml index 243b07a20..a3e794e9c 100644 --- a/samples/struts2/pet-store/template.yml +++ b/samples/struts2/pet-store/template.yml @@ -12,7 +12,7 @@ Resources: Type: AWS::Serverless::Function Properties: Handler: com.amazonaws.serverless.proxy.struts2.Struts2LambdaHandler::handleRequest - Runtime: java8 + Runtime: java11 CodeUri: . MemorySize: 256 Policies: AWSLambdaBasicExecutionRole From 768732a7874f72cb9d6e4deff9c364c7d39960f5 Mon Sep 17 00:00:00 2001 From: sapessi Date: Thu, 18 Aug 2022 08:53:53 -0700 Subject: [PATCH 234/888] docs: Documenting use of suppress warnings for path traversal in security utils --- .../serverless/proxy/internal/SecurityUtils.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/SecurityUtils.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/SecurityUtils.java index 3395b56c6..d553d17a7 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/SecurityUtils.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/SecurityUtils.java @@ -12,6 +12,7 @@ */ package com.amazonaws.serverless.proxy.internal; +import com.amazonaws.serverless.proxy.model.ContainerConfig; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -174,6 +175,14 @@ public static String getValidFilePath(String inputPath) { /** * Returns an absolute file path given an input path and validates that it is not trying * to write/read from a directory other than /tmp. + * + * We suppress the path traversal warnings because this method is used to validate paths passed + * to the servlet implementation methods such as {@link com.amazonaws.serverless.proxy.internal.servlet.AwsProxyRequestPart#write(String)}. + * Using relative paths is a valid use-case for developers implementing a servlet-based API. We + * mitigate the potential partial path traversal by checking the resulting absolute path against + * the list of allowed paths specified in {@link ContainerConfig#getValidFilePaths()}. We also + * block the /var/task directory regardless. + * * @param inputPath The input path * @return The absolute path to the file * @throws IllegalArgumentException If the given path is not valid or outside of /tmp From 98482d485dadaf7212141f162e7e35f4ea6c7b6f Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Sun, 21 Aug 2022 21:24:37 +0200 Subject: [PATCH 235/888] chore(deps): Update Spring dependencies (security to 5.7.3, boot to 2.7.3) --- aws-serverless-java-container-core/pom.xml | 2 +- aws-serverless-java-container-spring/pom.xml | 2 +- aws-serverless-java-container-springboot2/pom.xml | 4 ++-- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/springboot2/pet-store/pom.xml | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index ecd905f1e..f87eb1194 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -90,7 +90,7 @@ org.springframework.security spring-security-web - 5.7.2 + 5.7.3 test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 25df73251..ed42b2400 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -17,7 +17,7 @@ 5.3.22 - 5.7.2 + 5.7.3 diff --git a/aws-serverless-java-container-springboot2/pom.xml b/aws-serverless-java-container-springboot2/pom.xml index 65b1ed228..0779abd2c 100644 --- a/aws-serverless-java-container-springboot2/pom.xml +++ b/aws-serverless-java-container-springboot2/pom.xml @@ -16,8 +16,8 @@ 5.3.22 - 2.7.2 - 5.7.2 + 2.7.3 + 5.7.3 1.8 1.8 diff --git a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle index 30221b518..4a7199c81 100644 --- a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle @@ -8,7 +8,7 @@ repositories { dependencies { implementation ( - 'org.springframework.boot:spring-boot-starter-web:2.7.2', + 'org.springframework.boot:spring-boot-starter-web:2.7.3', 'com.amazonaws.serverless:aws-serverless-java-container-springboot2:[1.0,)', 'io.symphonia:lambda-logging:1.0.3' ) diff --git a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml index 8efb4efcf..27cfc10c1 100644 --- a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ org.springframework.boot spring-boot-starter-parent - 2.7.2 + 2.7.3 diff --git a/samples/springboot2/pet-store/pom.xml b/samples/springboot2/pet-store/pom.xml index 10910661a..b0e6720dc 100644 --- a/samples/springboot2/pet-store/pom.xml +++ b/samples/springboot2/pet-store/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 2.7.2 + 2.7.3 From 8cc839a41d90f6038ff201034051f94aac8d1e20 Mon Sep 17 00:00:00 2001 From: Johannes Geppert Date: Wed, 17 Aug 2022 11:53:00 +0200 Subject: [PATCH 236/888] Add missing Struts Quick start reference https://github.com/awslabs/aws-serverless-java-container/issues/471 --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 0e83ba97c..4c0a4c99d 100644 --- a/README.md +++ b/README.md @@ -9,14 +9,16 @@ Follow the quick start guides in [our wiki](https://github.com/awslabs/aws-serve * [Apache Struts quick start](https://github.com/awslabs/aws-serverless-java-container/wiki/Quick-start---Struts) * [Jersey quick start](https://github.com/awslabs/aws-serverless-java-container/wiki/Quick-start---Jersey) * [Spark quick start](https://github.com/awslabs/aws-serverless-java-container/wiki/Quick-start---Spark) +* [Struts quick start](https://github.com/awslabs/aws-serverless-java-container/wiki/Quick-start---Struts) * Micronaut [documentation](https://guides.micronaut.io/micronaut-function-aws-lambda/guide/index.html) and [demo](https://github.com/awslabs/aws-serverless-java-container/tree/master/samples/micronaut/pet-store) (outdated! - needs to be updated to latest Micronaut version) -Below is the most basic AWS Lambda handler example that launches a Spring application. You can also take a look at the [samples](https://github.com/awslabs/aws-serverless-java-container/tree/master/samples) in this repository, our main wiki page includes a [step-by-step guide](https://github.com/awslabs/aws-serverless-java-container/wiki#deploying-the-sample-applications) on how to deploy the various sample applications using Maven and [SAM](https://github.com/awslabs/serverless-application-model). +Below is the most basic AWS Lambda handler example that launches a Spring application. You can also take a look at the [samples](https://github.com/awslabs/aws-serverless-java-container/tree/master/samples) in this repository, our main wiki page includes a [step-by-step guide](https://github.com/awslabs/aws-serverless-java-container/wiki#deploying-the-sample-applications) on how to deploy the various sample applications using Maven and [SAM](https://github.com/awslabs/serverless-application-model). ```java public class StreamLambdaHandler implements RequestStreamHandler { - private static SpringLambdaContainerHandler handler; + private static final SpringLambdaContainerHandler handler; + static { try { handler = SpringLambdaContainerHandler.getAwsProxyHandler(PetStoreSpringAppConfig.class); From e0074a9c8464185f106ffeb2b1ba8fd6f81b682e Mon Sep 17 00:00:00 2001 From: Johannes Geppert Date: Wed, 17 Aug 2022 11:55:12 +0200 Subject: [PATCH 237/888] Rename maven modules for Struts implementation without version number https://github.com/awslabs/aws-serverless-java-container/issues/471 --- .../pom.xml | 6 +++--- .../proxy/struts2/Struts2LambdaContainerHandler.java | 0 .../serverless/proxy/struts2/Struts2LambdaHandler.java | 0 .../serverless/proxy/struts2/Struts2AwsProxyTest.java | 0 .../serverless/proxy/struts2/echoapp/EchoAction.java | 0 .../proxy/struts2/echoapp/EchoRequestInfoAction.java | 0 .../src/test/resources/struts.xml | 0 .../pom.xml | 2 +- .../main/resources/META-INF/maven/archetype-metadata.xml | 0 .../src/main/resources/archetype-resources/README.md | 0 .../src/main/resources/archetype-resources/build.gradle | 0 .../src/main/resources/archetype-resources/pom.xml | 0 .../archetype-resources/src/main/assembly/dist.xml | 0 .../src/main/java/actions/PingController.java | 0 .../src/main/resources/application.properties | 0 .../archetype-resources/src/main/resources/log4j2.xml | 0 .../archetype-resources/src/main/resources/struts.xml | 0 .../src/test/java/StreamLambdaHandlerTest.java | 0 .../src/main/resources/archetype-resources/template.yml | 0 .../src/test/resources/projects/base/archetype.properties | 0 .../src/test/resources/projects/base/goal.txt | 0 pom.xml | 4 ++-- 22 files changed, 6 insertions(+), 6 deletions(-) rename {aws-serverless-java-container-struts2 => aws-serverless-java-container-struts}/pom.xml (97%) rename {aws-serverless-java-container-struts2 => aws-serverless-java-container-struts}/src/main/java/com/amazonaws/serverless/proxy/struts2/Struts2LambdaContainerHandler.java (100%) rename {aws-serverless-java-container-struts2 => aws-serverless-java-container-struts}/src/main/java/com/amazonaws/serverless/proxy/struts2/Struts2LambdaHandler.java (100%) rename {aws-serverless-java-container-struts2 => aws-serverless-java-container-struts}/src/test/java/com/amazonaws/serverless/proxy/struts2/Struts2AwsProxyTest.java (100%) rename {aws-serverless-java-container-struts2 => aws-serverless-java-container-struts}/src/test/java/com/amazonaws/serverless/proxy/struts2/echoapp/EchoAction.java (100%) rename {aws-serverless-java-container-struts2 => aws-serverless-java-container-struts}/src/test/java/com/amazonaws/serverless/proxy/struts2/echoapp/EchoRequestInfoAction.java (100%) rename {aws-serverless-java-container-struts2 => aws-serverless-java-container-struts}/src/test/resources/struts.xml (100%) rename {aws-serverless-struts2-archetype => aws-serverless-struts-archetype}/pom.xml (97%) rename {aws-serverless-struts2-archetype => aws-serverless-struts-archetype}/src/main/resources/META-INF/maven/archetype-metadata.xml (100%) rename {aws-serverless-struts2-archetype => aws-serverless-struts-archetype}/src/main/resources/archetype-resources/README.md (100%) rename {aws-serverless-struts2-archetype => aws-serverless-struts-archetype}/src/main/resources/archetype-resources/build.gradle (100%) rename {aws-serverless-struts2-archetype => aws-serverless-struts-archetype}/src/main/resources/archetype-resources/pom.xml (100%) rename {aws-serverless-struts2-archetype => aws-serverless-struts-archetype}/src/main/resources/archetype-resources/src/main/assembly/dist.xml (100%) rename {aws-serverless-struts2-archetype => aws-serverless-struts-archetype}/src/main/resources/archetype-resources/src/main/java/actions/PingController.java (100%) rename {aws-serverless-struts2-archetype => aws-serverless-struts-archetype}/src/main/resources/archetype-resources/src/main/resources/application.properties (100%) rename {aws-serverless-struts2-archetype => aws-serverless-struts-archetype}/src/main/resources/archetype-resources/src/main/resources/log4j2.xml (100%) rename {aws-serverless-struts2-archetype => aws-serverless-struts-archetype}/src/main/resources/archetype-resources/src/main/resources/struts.xml (100%) rename {aws-serverless-struts2-archetype => aws-serverless-struts-archetype}/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java (100%) rename {aws-serverless-struts2-archetype => aws-serverless-struts-archetype}/src/main/resources/archetype-resources/template.yml (100%) rename {aws-serverless-struts2-archetype => aws-serverless-struts-archetype}/src/test/resources/projects/base/archetype.properties (100%) rename {aws-serverless-struts2-archetype => aws-serverless-struts-archetype}/src/test/resources/projects/base/goal.txt (100%) diff --git a/aws-serverless-java-container-struts2/pom.xml b/aws-serverless-java-container-struts/pom.xml similarity index 97% rename from aws-serverless-java-container-struts2/pom.xml rename to aws-serverless-java-container-struts/pom.xml index c2ec5923e..943887234 100644 --- a/aws-serverless-java-container-struts2/pom.xml +++ b/aws-serverless-java-container-struts/pom.xml @@ -2,9 +2,9 @@ 4.0.0 - aws-serverless-java-container-struts2 - AWS Serverless Java container support - Struts2 implementation - Allows Java applications written for the Struts2 framework to run in AWS Lambda + aws-serverless-java-container-struts + AWS Serverless Java container support - Struts implementation + Allows Java applications written for the Struts framework to run in AWS Lambda https://aws.amazon.com/lambda 1.9-SNAPSHOT diff --git a/aws-serverless-java-container-struts2/src/main/java/com/amazonaws/serverless/proxy/struts2/Struts2LambdaContainerHandler.java b/aws-serverless-java-container-struts/src/main/java/com/amazonaws/serverless/proxy/struts2/Struts2LambdaContainerHandler.java similarity index 100% rename from aws-serverless-java-container-struts2/src/main/java/com/amazonaws/serverless/proxy/struts2/Struts2LambdaContainerHandler.java rename to aws-serverless-java-container-struts/src/main/java/com/amazonaws/serverless/proxy/struts2/Struts2LambdaContainerHandler.java diff --git a/aws-serverless-java-container-struts2/src/main/java/com/amazonaws/serverless/proxy/struts2/Struts2LambdaHandler.java b/aws-serverless-java-container-struts/src/main/java/com/amazonaws/serverless/proxy/struts2/Struts2LambdaHandler.java similarity index 100% rename from aws-serverless-java-container-struts2/src/main/java/com/amazonaws/serverless/proxy/struts2/Struts2LambdaHandler.java rename to aws-serverless-java-container-struts/src/main/java/com/amazonaws/serverless/proxy/struts2/Struts2LambdaHandler.java diff --git a/aws-serverless-java-container-struts2/src/test/java/com/amazonaws/serverless/proxy/struts2/Struts2AwsProxyTest.java b/aws-serverless-java-container-struts/src/test/java/com/amazonaws/serverless/proxy/struts2/Struts2AwsProxyTest.java similarity index 100% rename from aws-serverless-java-container-struts2/src/test/java/com/amazonaws/serverless/proxy/struts2/Struts2AwsProxyTest.java rename to aws-serverless-java-container-struts/src/test/java/com/amazonaws/serverless/proxy/struts2/Struts2AwsProxyTest.java diff --git a/aws-serverless-java-container-struts2/src/test/java/com/amazonaws/serverless/proxy/struts2/echoapp/EchoAction.java b/aws-serverless-java-container-struts/src/test/java/com/amazonaws/serverless/proxy/struts2/echoapp/EchoAction.java similarity index 100% rename from aws-serverless-java-container-struts2/src/test/java/com/amazonaws/serverless/proxy/struts2/echoapp/EchoAction.java rename to aws-serverless-java-container-struts/src/test/java/com/amazonaws/serverless/proxy/struts2/echoapp/EchoAction.java diff --git a/aws-serverless-java-container-struts2/src/test/java/com/amazonaws/serverless/proxy/struts2/echoapp/EchoRequestInfoAction.java b/aws-serverless-java-container-struts/src/test/java/com/amazonaws/serverless/proxy/struts2/echoapp/EchoRequestInfoAction.java similarity index 100% rename from aws-serverless-java-container-struts2/src/test/java/com/amazonaws/serverless/proxy/struts2/echoapp/EchoRequestInfoAction.java rename to aws-serverless-java-container-struts/src/test/java/com/amazonaws/serverless/proxy/struts2/echoapp/EchoRequestInfoAction.java diff --git a/aws-serverless-java-container-struts2/src/test/resources/struts.xml b/aws-serverless-java-container-struts/src/test/resources/struts.xml similarity index 100% rename from aws-serverless-java-container-struts2/src/test/resources/struts.xml rename to aws-serverless-java-container-struts/src/test/resources/struts.xml diff --git a/aws-serverless-struts2-archetype/pom.xml b/aws-serverless-struts-archetype/pom.xml similarity index 97% rename from aws-serverless-struts2-archetype/pom.xml rename to aws-serverless-struts-archetype/pom.xml index cb96c077b..9eed00809 100644 --- a/aws-serverless-struts2-archetype/pom.xml +++ b/aws-serverless-struts-archetype/pom.xml @@ -8,7 +8,7 @@ com.amazonaws.serverless.archetypes - aws-serverless-struts2-archetype + aws-serverless-struts-archetype 1.9-SNAPSHOT maven-archetype diff --git a/aws-serverless-struts2-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml b/aws-serverless-struts-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml similarity index 100% rename from aws-serverless-struts2-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml rename to aws-serverless-struts-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml diff --git a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/README.md b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/README.md similarity index 100% rename from aws-serverless-struts2-archetype/src/main/resources/archetype-resources/README.md rename to aws-serverless-struts-archetype/src/main/resources/archetype-resources/README.md diff --git a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle similarity index 100% rename from aws-serverless-struts2-archetype/src/main/resources/archetype-resources/build.gradle rename to aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle diff --git a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml similarity index 100% rename from aws-serverless-struts2-archetype/src/main/resources/archetype-resources/pom.xml rename to aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml diff --git a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/src/main/assembly/dist.xml b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/src/main/assembly/dist.xml similarity index 100% rename from aws-serverless-struts2-archetype/src/main/resources/archetype-resources/src/main/assembly/dist.xml rename to aws-serverless-struts-archetype/src/main/resources/archetype-resources/src/main/assembly/dist.xml diff --git a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/src/main/java/actions/PingController.java b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/src/main/java/actions/PingController.java similarity index 100% rename from aws-serverless-struts2-archetype/src/main/resources/archetype-resources/src/main/java/actions/PingController.java rename to aws-serverless-struts-archetype/src/main/resources/archetype-resources/src/main/java/actions/PingController.java diff --git a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/src/main/resources/application.properties b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/src/main/resources/application.properties similarity index 100% rename from aws-serverless-struts2-archetype/src/main/resources/archetype-resources/src/main/resources/application.properties rename to aws-serverless-struts-archetype/src/main/resources/archetype-resources/src/main/resources/application.properties diff --git a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/src/main/resources/log4j2.xml b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/src/main/resources/log4j2.xml similarity index 100% rename from aws-serverless-struts2-archetype/src/main/resources/archetype-resources/src/main/resources/log4j2.xml rename to aws-serverless-struts-archetype/src/main/resources/archetype-resources/src/main/resources/log4j2.xml diff --git a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/src/main/resources/struts.xml b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/src/main/resources/struts.xml similarity index 100% rename from aws-serverless-struts2-archetype/src/main/resources/archetype-resources/src/main/resources/struts.xml rename to aws-serverless-struts-archetype/src/main/resources/archetype-resources/src/main/resources/struts.xml diff --git a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java similarity index 100% rename from aws-serverless-struts2-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java rename to aws-serverless-struts-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java diff --git a/aws-serverless-struts2-archetype/src/main/resources/archetype-resources/template.yml b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/template.yml similarity index 100% rename from aws-serverless-struts2-archetype/src/main/resources/archetype-resources/template.yml rename to aws-serverless-struts-archetype/src/main/resources/archetype-resources/template.yml diff --git a/aws-serverless-struts2-archetype/src/test/resources/projects/base/archetype.properties b/aws-serverless-struts-archetype/src/test/resources/projects/base/archetype.properties similarity index 100% rename from aws-serverless-struts2-archetype/src/test/resources/projects/base/archetype.properties rename to aws-serverless-struts-archetype/src/test/resources/projects/base/archetype.properties diff --git a/aws-serverless-struts2-archetype/src/test/resources/projects/base/goal.txt b/aws-serverless-struts-archetype/src/test/resources/projects/base/goal.txt similarity index 100% rename from aws-serverless-struts2-archetype/src/test/resources/projects/base/goal.txt rename to aws-serverless-struts-archetype/src/test/resources/projects/base/goal.txt diff --git a/pom.xml b/pom.xml index 87128512a..b752bb127 100644 --- a/pom.xml +++ b/pom.xml @@ -29,9 +29,9 @@ aws-serverless-java-container-jersey aws-serverless-java-container-spark aws-serverless-java-container-spring - aws-serverless-java-container-struts2 + aws-serverless-java-container-struts aws-serverless-java-container-springboot2 - aws-serverless-struts2-archetype + aws-serverless-struts-archetype aws-serverless-jersey-archetype aws-serverless-spark-archetype aws-serverless-spring-archetype From 72b0fd67e54b9d73f30d70c29486b9929c2627b8 Mon Sep 17 00:00:00 2001 From: Johannes Geppert Date: Wed, 17 Aug 2022 12:54:37 +0200 Subject: [PATCH 238/888] Rename class file names for Struts implementation without version number https://github.com/awslabs/aws-serverless-java-container/issues/471 --- .../continuous-integration-workflow.yml | 4 +- .../StrutsLambdaContainerHandler.java} | 67 +++++++++++-------- .../StrutsLambdaHandler.java} | 8 +-- .../StrutsAwsProxyTest.java} | 18 +++-- .../echoapp/EchoAction.java | 2 +- .../echoapp/EchoRequestInfoAction.java | 2 +- .../src/test/resources/struts.xml | 4 +- .../archetype-resources/build.gradle | 2 +- .../resources/archetype-resources/pom.xml | 10 +-- .../test/java/StreamLambdaHandlerTest.java | 6 +- .../archetype-resources/template.yml | 4 +- .../projects/base/archetype.properties | 2 +- .../{struts2 => struts}/pet-store/README.md | 6 +- .../pet-store/build.gradle | 0 samples/{struts2 => struts}/pet-store/pom.xml | 2 +- .../pet-store/src/main/assembly/dist.xml | 0 .../sample/struts/actions/PetsController.java | 0 .../serverless/sample/struts/model/Pet.java | 0 .../sample/struts/model/PetData.java | 0 .../pet-store/src/main/resources/log4j2.xml | 0 .../pet-store/src/main/resources/struts.xml | 0 .../pet-store/template.yml | 6 +- 22 files changed, 76 insertions(+), 67 deletions(-) rename aws-serverless-java-container-struts/src/main/java/com/amazonaws/serverless/proxy/{struts2/Struts2LambdaContainerHandler.java => struts/StrutsLambdaContainerHandler.java} (59%) rename aws-serverless-java-container-struts/src/main/java/com/amazonaws/serverless/proxy/{struts2/Struts2LambdaHandler.java => struts/StrutsLambdaHandler.java} (79%) rename aws-serverless-java-container-struts/src/test/java/com/amazonaws/serverless/proxy/{struts2/Struts2AwsProxyTest.java => struts/StrutsAwsProxyTest.java} (95%) rename aws-serverless-java-container-struts/src/test/java/com/amazonaws/serverless/proxy/{struts2 => struts}/echoapp/EchoAction.java (96%) rename aws-serverless-java-container-struts/src/test/java/com/amazonaws/serverless/proxy/{struts2 => struts}/echoapp/EchoRequestInfoAction.java (98%) rename samples/{struts2 => struts}/pet-store/README.md (91%) rename samples/{struts2 => struts}/pet-store/build.gradle (100%) rename samples/{struts2 => struts}/pet-store/pom.xml (98%) rename samples/{struts2 => struts}/pet-store/src/main/assembly/dist.xml (100%) rename samples/{struts2 => struts}/pet-store/src/main/java/com/amazonaws/serverless/sample/struts/actions/PetsController.java (100%) rename samples/{struts2 => struts}/pet-store/src/main/java/com/amazonaws/serverless/sample/struts/model/Pet.java (100%) rename samples/{struts2 => struts}/pet-store/src/main/java/com/amazonaws/serverless/sample/struts/model/PetData.java (100%) rename samples/{struts2 => struts}/pet-store/src/main/resources/log4j2.xml (100%) rename samples/{struts2 => struts}/pet-store/src/main/resources/struts.xml (100%) rename samples/{struts2 => struts}/pet-store/template.yml (84%) diff --git a/.github/workflows/continuous-integration-workflow.yml b/.github/workflows/continuous-integration-workflow.yml index 5c55e7b70..e1ae0e00b 100644 --- a/.github/workflows/continuous-integration-workflow.yml +++ b/.github/workflows/continuous-integration-workflow.yml @@ -75,9 +75,9 @@ jobs: run: ./gha_build.sh springboot2 false false -Dspringboot.version=2.5.14 -Dspring.version=5.3.20 -Dspringsecurity.version=5.5.8 -Ddependency-check.skip=true build_struts2: - name: Build and test Struts 2 + name: Build and test Struts runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Build latest - run: ./gha_build.sh struts2 true true + run: ./gha_build.sh struts true true diff --git a/aws-serverless-java-container-struts/src/main/java/com/amazonaws/serverless/proxy/struts2/Struts2LambdaContainerHandler.java b/aws-serverless-java-container-struts/src/main/java/com/amazonaws/serverless/proxy/struts/StrutsLambdaContainerHandler.java similarity index 59% rename from aws-serverless-java-container-struts/src/main/java/com/amazonaws/serverless/proxy/struts2/Struts2LambdaContainerHandler.java rename to aws-serverless-java-container-struts/src/main/java/com/amazonaws/serverless/proxy/struts/StrutsLambdaContainerHandler.java index 99c89c449..42ff0aee8 100644 --- a/aws-serverless-java-container-struts/src/main/java/com/amazonaws/serverless/proxy/struts2/Struts2LambdaContainerHandler.java +++ b/aws-serverless-java-container-struts/src/main/java/com/amazonaws/serverless/proxy/struts/StrutsLambdaContainerHandler.java @@ -10,11 +10,22 @@ * OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions * and limitations under the License. */ -package com.amazonaws.serverless.proxy.struts2; +package com.amazonaws.serverless.proxy.struts; import com.amazonaws.serverless.exceptions.ContainerInitializationException; -import com.amazonaws.serverless.proxy.*; -import com.amazonaws.serverless.proxy.internal.servlet.*; +import com.amazonaws.serverless.proxy.AwsHttpApiV2SecurityContextWriter; +import com.amazonaws.serverless.proxy.AwsProxyExceptionHandler; +import com.amazonaws.serverless.proxy.AwsProxySecurityContextWriter; +import com.amazonaws.serverless.proxy.ExceptionHandler; +import com.amazonaws.serverless.proxy.RequestReader; +import com.amazonaws.serverless.proxy.ResponseWriter; +import com.amazonaws.serverless.proxy.SecurityContextWriter; +import com.amazonaws.serverless.proxy.internal.servlet.AwsHttpApiV2HttpServletRequestReader; +import com.amazonaws.serverless.proxy.internal.servlet.AwsHttpServletRequest; +import com.amazonaws.serverless.proxy.internal.servlet.AwsHttpServletResponse; +import com.amazonaws.serverless.proxy.internal.servlet.AwsLambdaServletContainerHandler; +import com.amazonaws.serverless.proxy.internal.servlet.AwsProxyHttpServletRequestReader; +import com.amazonaws.serverless.proxy.internal.servlet.AwsProxyHttpServletResponseWriter; import com.amazonaws.serverless.proxy.internal.testutils.Timer; import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.serverless.proxy.model.AwsProxyResponse; @@ -32,26 +43,26 @@ import java.util.concurrent.CountDownLatch; /** - * A Lambda handler to initialize the Struts2 filter and proxy the requests. + * A Lambda handler to initialize the Struts filter and proxy the requests. * * @param request type * @param response type */ -public class Struts2LambdaContainerHandler extends AwsLambdaServletContainerHandler { +public class StrutsLambdaContainerHandler extends AwsLambdaServletContainerHandler { - private static final Logger log = LoggerFactory.getLogger(Struts2LambdaContainerHandler.class); + private static final Logger log = LoggerFactory.getLogger(StrutsLambdaContainerHandler.class); public static final String HEADER_STRUTS_STATUS_CODE = "X-Struts-StatusCode"; - private static final String TIMER_STRUTS_2_CONTAINER_CONSTRUCTOR = "STRUTS2_CONTAINER_CONSTRUCTOR"; - private static final String TIMER_STRUTS_2_HANDLE_REQUEST = "STRUTS2_HANDLE_REQUEST"; - private static final String TIMER_STRUTS_2_COLD_START_INIT = "STRUTS2_COLD_START_INIT"; - private static final String STRUTS_FILTER_NAME = "Struts2Filter"; + private static final String TIMER_STRUTS_CONTAINER_CONSTRUCTOR = "STRUTS_CONTAINER_CONSTRUCTOR"; + private static final String TIMER_STRUTS_HANDLE_REQUEST = "STRUTS_HANDLE_REQUEST"; + private static final String TIMER_STRUTS_COLD_START_INIT = "STRUTS_COLD_START_INIT"; + private static final String STRUTS_FILTER_NAME = "StrutsFilter"; private boolean initialized; - public static Struts2LambdaContainerHandler getAwsProxyHandler() { - return new Struts2LambdaContainerHandler( + public static StrutsLambdaContainerHandler getAwsProxyHandler() { + return new StrutsLambdaContainerHandler( AwsProxyRequest.class, AwsProxyResponse.class, new AwsProxyHttpServletRequestReader(), @@ -60,8 +71,8 @@ public static Struts2LambdaContainerHandler g new AwsProxyExceptionHandler()); } - public static Struts2LambdaContainerHandler getHttpApiV2ProxyHandler() { - return new Struts2LambdaContainerHandler( + public static StrutsLambdaContainerHandler getHttpApiV2ProxyHandler() { + return new StrutsLambdaContainerHandler( HttpApiV2ProxyRequest.class, AwsProxyResponse.class, new AwsHttpApiV2HttpServletRequestReader(), @@ -70,17 +81,17 @@ public static Struts2LambdaContainerHandler requestTypeClass, - Class responseTypeClass, - RequestReader requestReader, - ResponseWriter responseWriter, - SecurityContextWriter securityContextWriter, - ExceptionHandler exceptionHandler) { + public StrutsLambdaContainerHandler(Class requestTypeClass, + Class responseTypeClass, + RequestReader requestReader, + ResponseWriter responseWriter, + SecurityContextWriter securityContextWriter, + ExceptionHandler exceptionHandler) { super(requestTypeClass, responseTypeClass, requestReader, responseWriter, securityContextWriter, exceptionHandler); - Timer.start(TIMER_STRUTS_2_CONTAINER_CONSTRUCTOR); + Timer.start(TIMER_STRUTS_CONTAINER_CONSTRUCTOR); this.initialized = false; - Timer.stop(TIMER_STRUTS_2_CONTAINER_CONSTRUCTOR); + Timer.stop(TIMER_STRUTS_CONTAINER_CONSTRUCTOR); } @Override @@ -92,7 +103,7 @@ protected AwsHttpServletResponse getContainerResponse(HttpServletRequest request protected void handleRequest(HttpServletRequest httpServletRequest, AwsHttpServletResponse httpServletResponse, Context lambdaContext) throws Exception { - Timer.start(TIMER_STRUTS_2_HANDLE_REQUEST); + Timer.start(TIMER_STRUTS_HANDLE_REQUEST); if (!this.initialized) { initialize(); } @@ -105,13 +116,13 @@ protected void handleRequest(HttpServletRequest httpServletRequest, if (responseStatusCode != null) { httpServletResponse.setStatus(Integer.parseInt(responseStatusCode)); } - Timer.stop(TIMER_STRUTS_2_HANDLE_REQUEST); + Timer.stop(TIMER_STRUTS_HANDLE_REQUEST); } @Override public void initialize() throws ContainerInitializationException { log.info("Initialize Struts2 Lambda Application ..."); - Timer.start(TIMER_STRUTS_2_COLD_START_INIT); + Timer.start(TIMER_STRUTS_COLD_START_INIT); try { if (this.startupHandler != null) { this.startupHandler.onStartup(this.getServletContext()); @@ -123,12 +134,12 @@ public void initialize() throws ContainerInitializationException { EnumSet.of(DispatcherType.REQUEST, DispatcherType.ASYNC, DispatcherType.INCLUDE, DispatcherType.FORWARD), true, "/*"); } catch (Exception e) { - throw new ContainerInitializationException("Could not initialize Struts2", e); + throw new ContainerInitializationException("Could not initialize Struts container", e); } this.initialized = true; - Timer.stop(TIMER_STRUTS_2_COLD_START_INIT); - log.info("... initialize of Struts2 Lambda Application completed!"); + Timer.stop(TIMER_STRUTS_COLD_START_INIT); + log.info("... initialize of Struts Lambda Application completed!"); } public Servlet getServlet() { diff --git a/aws-serverless-java-container-struts/src/main/java/com/amazonaws/serverless/proxy/struts2/Struts2LambdaHandler.java b/aws-serverless-java-container-struts/src/main/java/com/amazonaws/serverless/proxy/struts/StrutsLambdaHandler.java similarity index 79% rename from aws-serverless-java-container-struts/src/main/java/com/amazonaws/serverless/proxy/struts2/Struts2LambdaHandler.java rename to aws-serverless-java-container-struts/src/main/java/com/amazonaws/serverless/proxy/struts/StrutsLambdaHandler.java index b4aee76c9..0e1ccfa17 100644 --- a/aws-serverless-java-container-struts/src/main/java/com/amazonaws/serverless/proxy/struts2/Struts2LambdaHandler.java +++ b/aws-serverless-java-container-struts/src/main/java/com/amazonaws/serverless/proxy/struts/StrutsLambdaHandler.java @@ -10,7 +10,7 @@ * OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions * and limitations under the License. */ -package com.amazonaws.serverless.proxy.struts2; +package com.amazonaws.serverless.proxy.struts; import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.serverless.proxy.model.AwsProxyResponse; @@ -25,12 +25,12 @@ * The lambda handler to handle the requests. *

* - * com.amazonaws.serverless.proxy.struts2.Struts2LambdaHandler::handleRequest + * com.amazonaws.serverless.proxy.struts.StrutsLambdaHandler::handleRequest * */ -public class Struts2LambdaHandler implements RequestStreamHandler { +public class StrutsLambdaHandler implements RequestStreamHandler { - private final Struts2LambdaContainerHandler handler = Struts2LambdaContainerHandler + private final StrutsLambdaContainerHandler handler = StrutsLambdaContainerHandler .getAwsProxyHandler(); @Override diff --git a/aws-serverless-java-container-struts/src/test/java/com/amazonaws/serverless/proxy/struts2/Struts2AwsProxyTest.java b/aws-serverless-java-container-struts/src/test/java/com/amazonaws/serverless/proxy/struts/StrutsAwsProxyTest.java similarity index 95% rename from aws-serverless-java-container-struts/src/test/java/com/amazonaws/serverless/proxy/struts2/Struts2AwsProxyTest.java rename to aws-serverless-java-container-struts/src/test/java/com/amazonaws/serverless/proxy/struts/StrutsAwsProxyTest.java index 60666f4af..b4f9ecf95 100644 --- a/aws-serverless-java-container-struts/src/test/java/com/amazonaws/serverless/proxy/struts2/Struts2AwsProxyTest.java +++ b/aws-serverless-java-container-struts/src/test/java/com/amazonaws/serverless/proxy/struts/StrutsAwsProxyTest.java @@ -10,7 +10,7 @@ * OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions * and limitations under the License. */ -package com.amazonaws.serverless.proxy.struts2; +package com.amazonaws.serverless.proxy.struts; import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; @@ -18,7 +18,7 @@ import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.serverless.proxy.model.AwsProxyResponse; import com.amazonaws.serverless.proxy.model.HttpApiV2ProxyRequest; -import com.amazonaws.serverless.proxy.struts2.echoapp.EchoAction; +import com.amazonaws.serverless.proxy.struts.echoapp.EchoAction; import com.amazonaws.services.lambda.runtime.Context; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; @@ -33,7 +33,11 @@ import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; -import java.util.*; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @@ -45,7 +49,7 @@ * Unit test class for the Struts2 AWS_PROXY default implementation */ @RunWith(Parameterized.class) -public class Struts2AwsProxyTest extends StrutsJUnit4TestCase { +public class StrutsAwsProxyTest extends StrutsJUnit4TestCase { private static final String CUSTOM_HEADER_KEY = "x-custom-header"; private static final String CUSTOM_HEADER_VALUE = "my-custom-value"; private static final String AUTHORIZER_PRINCIPAL_ID = "test-principal-" + UUID.randomUUID().toString(); @@ -56,15 +60,15 @@ public class Struts2AwsProxyTest extends StrutsJUnit4TestCase { private static ObjectMapper objectMapper = new ObjectMapper(); - private final Struts2LambdaContainerHandler handler = Struts2LambdaContainerHandler + private final StrutsLambdaContainerHandler handler = StrutsLambdaContainerHandler .getAwsProxyHandler(); - private final Struts2LambdaContainerHandler httpApiHandler = Struts2LambdaContainerHandler + private final StrutsLambdaContainerHandler httpApiHandler = StrutsLambdaContainerHandler .getHttpApiV2ProxyHandler(); private static Context lambdaContext = new MockLambdaContext(); private String type; - public Struts2AwsProxyTest(String reqType) { + public StrutsAwsProxyTest(String reqType) { type = reqType; } diff --git a/aws-serverless-java-container-struts/src/test/java/com/amazonaws/serverless/proxy/struts2/echoapp/EchoAction.java b/aws-serverless-java-container-struts/src/test/java/com/amazonaws/serverless/proxy/struts/echoapp/EchoAction.java similarity index 96% rename from aws-serverless-java-container-struts/src/test/java/com/amazonaws/serverless/proxy/struts2/echoapp/EchoAction.java rename to aws-serverless-java-container-struts/src/test/java/com/amazonaws/serverless/proxy/struts/echoapp/EchoAction.java index bfaa0a69f..d64a54eca 100644 --- a/aws-serverless-java-container-struts/src/test/java/com/amazonaws/serverless/proxy/struts2/echoapp/EchoAction.java +++ b/aws-serverless-java-container-struts/src/test/java/com/amazonaws/serverless/proxy/struts/echoapp/EchoAction.java @@ -1,4 +1,4 @@ -package com.amazonaws.serverless.proxy.struts2.echoapp; +package com.amazonaws.serverless.proxy.struts.echoapp; import com.opensymphony.xwork2.ActionSupport; import org.apache.commons.io.IOUtils; diff --git a/aws-serverless-java-container-struts/src/test/java/com/amazonaws/serverless/proxy/struts2/echoapp/EchoRequestInfoAction.java b/aws-serverless-java-container-struts/src/test/java/com/amazonaws/serverless/proxy/struts/echoapp/EchoRequestInfoAction.java similarity index 98% rename from aws-serverless-java-container-struts/src/test/java/com/amazonaws/serverless/proxy/struts2/echoapp/EchoRequestInfoAction.java rename to aws-serverless-java-container-struts/src/test/java/com/amazonaws/serverless/proxy/struts/echoapp/EchoRequestInfoAction.java index 1d9c1697e..554156e9d 100644 --- a/aws-serverless-java-container-struts/src/test/java/com/amazonaws/serverless/proxy/struts2/echoapp/EchoRequestInfoAction.java +++ b/aws-serverless-java-container-struts/src/test/java/com/amazonaws/serverless/proxy/struts/echoapp/EchoRequestInfoAction.java @@ -1,4 +1,4 @@ -package com.amazonaws.serverless.proxy.struts2.echoapp; +package com.amazonaws.serverless.proxy.struts.echoapp; import com.amazonaws.serverless.proxy.RequestReader; import com.amazonaws.serverless.proxy.model.AwsProxyRequestContext; diff --git a/aws-serverless-java-container-struts/src/test/resources/struts.xml b/aws-serverless-java-container-struts/src/test/resources/struts.xml index 0c5dd8328..92070be83 100644 --- a/aws-serverless-java-container-struts/src/test/resources/struts.xml +++ b/aws-serverless-java-container-struts/src/test/resources/struts.xml @@ -7,7 +7,7 @@ - + message @@ -15,7 +15,7 @@ - diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle index a2cb228b8..240979c70 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle @@ -13,7 +13,7 @@ configurations { dependencies { - implementation ('com.amazonaws.serverless:aws-serverless-java-container-struts2:[1.0,)') { + implementation ('com.amazonaws.serverless:aws-serverless-java-container-struts:[1.0,)') { exclude group: 'org.apache.struts', module: 'struts2-core' exclude group: 'org.apache.logging.log4j', module: 'log4j-api' exclude group: 'org.apache.logging.log4j', module: 'log4j-to-slf4j' diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml index 19204eac7..e2957a69e 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml @@ -9,7 +9,7 @@ \${version} jar - Serverless Struts2 API + Serverless Struts API https://github.com/awslabs/aws-serverless-java-container @@ -24,7 +24,7 @@ com.amazonaws.serverless - aws-serverless-java-container-struts2 + aws-serverless-java-container-struts ${project.version} @@ -101,12 +101,6 @@ \${log4j.version} - - org.apache.logging.log4j - log4j-slf4j-impl - \${log4j.version} - - com.amazonaws aws-lambda-java-log4j2 diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java index f429ce66b..12fc9fc07 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java @@ -7,7 +7,7 @@ import com.amazonaws.serverless.proxy.model.AwsProxyResponse; import com.amazonaws.services.lambda.runtime.Context; -import com.amazonaws.serverless.proxy.struts2.Struts2LambdaHandler; +import com.amazonaws.serverless.proxy.struts.StrutsLambdaHandler; import org.junit.BeforeClass; import org.junit.Test; @@ -26,12 +26,12 @@ public class StreamLambdaHandlerTest { - private static Struts2LambdaHandler handler; + private static StrutsLambdaHandler handler; private static Context lambdaContext; @BeforeClass public static void setUp() { - handler = new Struts2LambdaHandler(); + handler = new StrutsLambdaHandler(); lambdaContext = new MockLambdaContext(); } diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/template.yml b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/template.yml index 2025da620..fe446dedd 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/template.yml +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/template.yml @@ -22,7 +22,7 @@ #set($awsRegion = $awsRegion.replaceAll("\n", "").trim()) AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 -Description: AWS Serverless Apache Struts2 API - ${groupId}::${artifactId} +Description: AWS Serverless Apache Struts API - ${groupId}::${artifactId} Globals: Api: EndpointConfiguration: REGIONAL @@ -31,7 +31,7 @@ Resources: ${resourceName}Function: Type: AWS::Serverless::Function Properties: - Handler: com.amazonaws.serverless.proxy.struts2.Struts2LambdaHandler::handleRequest + Handler: com.amazonaws.serverless.proxy.struts.StrutsLambdaHandler::handleRequest Runtime: java11 CodeUri: . MemorySize: 512 diff --git a/aws-serverless-struts-archetype/src/test/resources/projects/base/archetype.properties b/aws-serverless-struts-archetype/src/test/resources/projects/base/archetype.properties index d731ebe81..80acd0f43 100644 --- a/aws-serverless-struts-archetype/src/test/resources/projects/base/archetype.properties +++ b/aws-serverless-struts-archetype/src/test/resources/projects/base/archetype.properties @@ -1,3 +1,3 @@ groupId=test.service -artifactId=struts2-archetype-test +artifactId=struts-archetype-test version=1.0-SNAPSHOT diff --git a/samples/struts2/pet-store/README.md b/samples/struts/pet-store/README.md similarity index 91% rename from samples/struts2/pet-store/README.md rename to samples/struts/pet-store/README.md index 80ad76b6c..e421ac4e2 100644 --- a/samples/struts2/pet-store/README.md +++ b/samples/struts/pet-store/README.md @@ -1,5 +1,5 @@ -# Serverless Struts2 example -A basic pet store written with the [Apache Struts framework](https://struts.apache.org). The `Struts2LambdaHandler` object provided by the `aws-serverless-java-container-struts2` is the main entry point for Lambda. +# Serverless Struts example +A basic pet store written with the [Apache Struts framework](https://struts.apache.org). The `StrutsLambdaHandler` object provided by the `aws-serverless-java-container-struts` 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 @@ -29,7 +29,7 @@ Once the deployment is completed, the SAM CLI will print out the stack's outputs ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ Outputs ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ -Key Struts2PetStoreApi +Key StrutsPetStoreApi Description URL for application Value https://n60c1ycwa2.execute-api.eu-central-1.amazonaws.com/pets ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ diff --git a/samples/struts2/pet-store/build.gradle b/samples/struts/pet-store/build.gradle similarity index 100% rename from samples/struts2/pet-store/build.gradle rename to samples/struts/pet-store/build.gradle diff --git a/samples/struts2/pet-store/pom.xml b/samples/struts/pet-store/pom.xml similarity index 98% rename from samples/struts2/pet-store/pom.xml rename to samples/struts/pet-store/pom.xml index 562c8fb8f..4f0a1e8d5 100644 --- a/samples/struts2/pet-store/pom.xml +++ b/samples/struts/pet-store/pom.xml @@ -7,7 +7,7 @@ com.amazonaws.serverless.sample serverless-struts-example 1.0-SNAPSHOT - Struts2 example for the aws-serverless-java-container library + Struts example for the aws-serverless-java-container library Simple pet store written with the Apache Struts framework https://aws.amazon.com/lambda/ diff --git a/samples/struts2/pet-store/src/main/assembly/dist.xml b/samples/struts/pet-store/src/main/assembly/dist.xml similarity index 100% rename from samples/struts2/pet-store/src/main/assembly/dist.xml rename to samples/struts/pet-store/src/main/assembly/dist.xml diff --git a/samples/struts2/pet-store/src/main/java/com/amazonaws/serverless/sample/struts/actions/PetsController.java b/samples/struts/pet-store/src/main/java/com/amazonaws/serverless/sample/struts/actions/PetsController.java similarity index 100% rename from samples/struts2/pet-store/src/main/java/com/amazonaws/serverless/sample/struts/actions/PetsController.java rename to samples/struts/pet-store/src/main/java/com/amazonaws/serverless/sample/struts/actions/PetsController.java diff --git a/samples/struts2/pet-store/src/main/java/com/amazonaws/serverless/sample/struts/model/Pet.java b/samples/struts/pet-store/src/main/java/com/amazonaws/serverless/sample/struts/model/Pet.java similarity index 100% rename from samples/struts2/pet-store/src/main/java/com/amazonaws/serverless/sample/struts/model/Pet.java rename to samples/struts/pet-store/src/main/java/com/amazonaws/serverless/sample/struts/model/Pet.java diff --git a/samples/struts2/pet-store/src/main/java/com/amazonaws/serverless/sample/struts/model/PetData.java b/samples/struts/pet-store/src/main/java/com/amazonaws/serverless/sample/struts/model/PetData.java similarity index 100% rename from samples/struts2/pet-store/src/main/java/com/amazonaws/serverless/sample/struts/model/PetData.java rename to samples/struts/pet-store/src/main/java/com/amazonaws/serverless/sample/struts/model/PetData.java diff --git a/samples/struts2/pet-store/src/main/resources/log4j2.xml b/samples/struts/pet-store/src/main/resources/log4j2.xml similarity index 100% rename from samples/struts2/pet-store/src/main/resources/log4j2.xml rename to samples/struts/pet-store/src/main/resources/log4j2.xml diff --git a/samples/struts2/pet-store/src/main/resources/struts.xml b/samples/struts/pet-store/src/main/resources/struts.xml similarity index 100% rename from samples/struts2/pet-store/src/main/resources/struts.xml rename to samples/struts/pet-store/src/main/resources/struts.xml diff --git a/samples/struts2/pet-store/template.yml b/samples/struts/pet-store/template.yml similarity index 84% rename from samples/struts2/pet-store/template.yml rename to samples/struts/pet-store/template.yml index a3e794e9c..94902ac9f 100644 --- a/samples/struts2/pet-store/template.yml +++ b/samples/struts/pet-store/template.yml @@ -11,7 +11,7 @@ Resources: PetStoreFunction: Type: AWS::Serverless::Function Properties: - Handler: com.amazonaws.serverless.proxy.struts2.Struts2LambdaHandler::handleRequest + Handler: com.amazonaws.serverless.proxy.struts.StrutsLambdaHandler::handleRequest Runtime: java11 CodeUri: . MemorySize: 256 @@ -25,8 +25,8 @@ Resources: PayloadFormatVersion: '1.0' Outputs: - Struts2PetStoreApi: + StrutsPetStoreApi: Description: URL for application Value: !Sub 'https://${ServerlessHttpApi}.execute-api.${AWS::Region}.amazonaws.com/pets' Export: - Name: Struts2PetStoreApi + Name: StrutsPetStoreApi From cd60e6d537a46ec71999d2a0833866238b7651ee Mon Sep 17 00:00:00 2001 From: Johannes Geppert Date: Wed, 17 Aug 2022 13:04:09 +0200 Subject: [PATCH 239/888] Rename maven struts version property for Struts implementation without version number https://github.com/awslabs/aws-serverless-java-container/issues/471 --- aws-serverless-java-container-struts/pom.xml | 8 ++++---- .../src/main/resources/archetype-resources/pom.xml | 10 +++++----- samples/struts/pet-store/pom.xml | 10 +++++----- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/aws-serverless-java-container-struts/pom.xml b/aws-serverless-java-container-struts/pom.xml index 943887234..a30571ca2 100644 --- a/aws-serverless-java-container-struts/pom.xml +++ b/aws-serverless-java-container-struts/pom.xml @@ -15,7 +15,7 @@ - 2.5.30 + 2.5.30 @@ -29,7 +29,7 @@ org.apache.struts struts2-core - ${struts2.version} + ${struts.version} commons-io @@ -40,14 +40,14 @@ org.apache.struts struts2-json-plugin - ${struts2.version} + ${struts.version} test org.apache.struts struts2-junit-plugin - ${struts2.version} + ${struts.version} test diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml index e2957a69e..05685d6d3 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml @@ -15,7 +15,7 @@ 1.8 1.8 - 2.5.30 + 2.5.30 2.13.3 4.13.2 2.17.2 @@ -37,25 +37,25 @@ org.apache.struts struts2-convention-plugin - \${struts2.version} + \${struts.version} org.apache.struts struts2-rest-plugin - \${struts2.version} + \${struts.version} org.apache.struts struts2-bean-validation-plugin - \${struts2.version} + \${struts.version} org.apache.struts struts2-junit-plugin - \${struts2.version} + \${struts.version} test diff --git a/samples/struts/pet-store/pom.xml b/samples/struts/pet-store/pom.xml index 4f0a1e8d5..751fa1a57 100644 --- a/samples/struts/pet-store/pom.xml +++ b/samples/struts/pet-store/pom.xml @@ -26,7 +26,7 @@ 1.8 1.8 - 2.5.30 + 2.5.30 2.13.3 4.13.2 2.17.2 @@ -48,25 +48,25 @@ org.apache.struts struts2-convention-plugin - ${struts2.version} + ${struts.version} org.apache.struts struts2-rest-plugin - ${struts2.version} + ${struts.version} org.apache.struts struts2-bean-validation-plugin - ${struts2.version} + ${struts.version} org.apache.struts struts2-junit-plugin - ${struts2.version} + ${struts.version} test From c6a9a462db7f983d10e3c173a0fb708c69d09223 Mon Sep 17 00:00:00 2001 From: Johannes Geppert Date: Fri, 16 Sep 2022 22:46:13 +0200 Subject: [PATCH 240/888] Use latest available Apache Struts2 GA version 6.0.3 https://github.com/awslabs/aws-serverless-java-container/issues/471 --- aws-serverless-java-container-struts/pom.xml | 2 +- .../struts/StrutsLambdaContainerHandler.java | 2 +- .../proxy/struts/StrutsAwsProxyTest.java | 65 ++++++++++--------- .../src/test/resources/log4j2.xml | 17 +++++ .../archetype-resources/build.gradle | 14 ++-- .../resources/archetype-resources/pom.xml | 20 ++++-- .../src/main/resources/struts.xml | 2 +- samples/struts/pet-store/build.gradle | 12 ++-- samples/struts/pet-store/pom.xml | 6 +- 9 files changed, 85 insertions(+), 55 deletions(-) create mode 100644 aws-serverless-java-container-struts/src/test/resources/log4j2.xml diff --git a/aws-serverless-java-container-struts/pom.xml b/aws-serverless-java-container-struts/pom.xml index a30571ca2..c39bf516d 100644 --- a/aws-serverless-java-container-struts/pom.xml +++ b/aws-serverless-java-container-struts/pom.xml @@ -15,7 +15,7 @@ - 2.5.30 + 6.0.3 diff --git a/aws-serverless-java-container-struts/src/main/java/com/amazonaws/serverless/proxy/struts/StrutsLambdaContainerHandler.java b/aws-serverless-java-container-struts/src/main/java/com/amazonaws/serverless/proxy/struts/StrutsLambdaContainerHandler.java index 42ff0aee8..09c460cfa 100644 --- a/aws-serverless-java-container-struts/src/main/java/com/amazonaws/serverless/proxy/struts/StrutsLambdaContainerHandler.java +++ b/aws-serverless-java-container-struts/src/main/java/com/amazonaws/serverless/proxy/struts/StrutsLambdaContainerHandler.java @@ -121,7 +121,7 @@ protected void handleRequest(HttpServletRequest httpServletRequest, @Override public void initialize() throws ContainerInitializationException { - log.info("Initialize Struts2 Lambda Application ..."); + log.info("Initialize Struts Lambda Application ..."); Timer.start(TIMER_STRUTS_COLD_START_INIT); try { if (this.startupHandler != null) { diff --git a/aws-serverless-java-container-struts/src/test/java/com/amazonaws/serverless/proxy/struts/StrutsAwsProxyTest.java b/aws-serverless-java-container-struts/src/test/java/com/amazonaws/serverless/proxy/struts/StrutsAwsProxyTest.java index b4f9ecf95..eb890cf5b 100644 --- a/aws-serverless-java-container-struts/src/test/java/com/amazonaws/serverless/proxy/struts/StrutsAwsProxyTest.java +++ b/aws-serverless-java-container-struts/src/test/java/com/amazonaws/serverless/proxy/struts/StrutsAwsProxyTest.java @@ -24,7 +24,7 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.commons.codec.binary.Base64; -import org.apache.struts2.StrutsJUnit4TestCase; +import org.apache.struts2.StrutsRestTestCase; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; @@ -49,24 +49,25 @@ * Unit test class for the Struts2 AWS_PROXY default implementation */ @RunWith(Parameterized.class) -public class StrutsAwsProxyTest extends StrutsJUnit4TestCase { +public class StrutsAwsProxyTest extends StrutsRestTestCase { private static final String CUSTOM_HEADER_KEY = "x-custom-header"; private static final String CUSTOM_HEADER_VALUE = "my-custom-value"; private static final String AUTHORIZER_PRINCIPAL_ID = "test-principal-" + UUID.randomUUID().toString(); + private static final String HTTP_METHOD_GET = "GET"; + private static final String QUERY_STRING_MODE = "mode"; private static final String QUERY_STRING_KEY = "message"; private static final String QUERY_STRING_ENCODED_VALUE = "Hello Struts2"; private static final String USER_PRINCIPAL = "user1"; private static final String CONTENT_TYPE_APPLICATION_JSON = "application/json; charset=UTF-8"; - private static ObjectMapper objectMapper = new ObjectMapper(); + private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); private final StrutsLambdaContainerHandler handler = StrutsLambdaContainerHandler .getAwsProxyHandler(); private final StrutsLambdaContainerHandler httpApiHandler = StrutsLambdaContainerHandler .getHttpApiV2ProxyHandler(); - private static Context lambdaContext = new MockLambdaContext(); - - private String type; + private final Context lambdaContext = new MockLambdaContext(); + private final String type; public StrutsAwsProxyTest(String reqType) { type = reqType; @@ -92,8 +93,8 @@ private AwsProxyResponse executeRequest(AwsProxyRequestBuilder requestBuilder, C @Test public void headers_getHeaders_echo() { - AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo-request-info", "GET") - .queryString("mode", "headers") + AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo-request-info", HTTP_METHOD_GET) + .queryString(QUERY_STRING_MODE, "headers") .header(CUSTOM_HEADER_KEY, CUSTOM_HEADER_VALUE) .json(); @@ -106,7 +107,7 @@ public void headers_getHeaders_echo() { @Test public void context_servletResponse_setCustomHeader() { - AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo", "GET") + AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo", HTTP_METHOD_GET) .queryString("customHeader", "true") .json(); @@ -118,7 +119,7 @@ public void context_servletResponse_setCustomHeader() { @Test public void context_serverInfo_correctContext() { assumeTrue("API_GW".equals(type)); - AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo", "GET") + AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo", HTTP_METHOD_GET) .queryString(QUERY_STRING_KEY, "Hello Struts2") .header("Content-Type", "application/json") .queryString("contentType", "true"); @@ -131,8 +132,8 @@ public void context_serverInfo_correctContext() { @Test public void queryString_uriInfo_echo() { - AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo-request-info", "GET") - .queryString("mode", "query-string") + AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo-request-info", HTTP_METHOD_GET) + .queryString(QUERY_STRING_MODE, "query-string") .queryString(CUSTOM_HEADER_KEY, CUSTOM_HEADER_VALUE) .json(); @@ -146,8 +147,8 @@ public void queryString_uriInfo_echo() { @Test public void requestScheme_valid_expectHttps() { - AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo-request-info", "GET") - .queryString("mode", "scheme") + AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo-request-info", HTTP_METHOD_GET) + .queryString(QUERY_STRING_MODE, "scheme") .queryString(QUERY_STRING_KEY, QUERY_STRING_ENCODED_VALUE) .json(); @@ -161,8 +162,8 @@ public void requestScheme_valid_expectHttps() { @Test public void authorizer_securityContext_customPrincipalSuccess() { assumeTrue("API_GW".equals(type)); - AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo-request-info", "GET") - .queryString("mode", "principal") + AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo-request-info", HTTP_METHOD_GET) + .queryString(QUERY_STRING_MODE, "principal") .json() .authorizerPrincipal(AUTHORIZER_PRINCIPAL_ID); @@ -175,7 +176,7 @@ public void authorizer_securityContext_customPrincipalSuccess() { @Test public void errors_unknownRoute_expect404() { - AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/unknown", "GET"); + AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/unknown", HTTP_METHOD_GET); AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(404, output.getStatusCode()); @@ -184,7 +185,7 @@ public void errors_unknownRoute_expect404() { @Test public void error_contentType_invalidContentType() { AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo-request-info", "POST") - .queryString("mode", "content-type") + .queryString(QUERY_STRING_MODE, "content-type") .header("Content-Type", "application/octet-stream") .body("asdasdasd"); @@ -195,7 +196,7 @@ public void error_contentType_invalidContentType() { @Test public void error_statusCode_methodNotAllowed() { AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo-request-info", "POST") - .queryString("mode", "not-allowed") + .queryString(QUERY_STRING_MODE, "not-allowed") .json(); AwsProxyResponse output = executeRequest(request, lambdaContext); @@ -209,7 +210,7 @@ public void responseBody_responseWriter_validBody() throws JsonProcessingExcepti value.put(QUERY_STRING_KEY, CUSTOM_HEADER_VALUE); AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo", "POST") .json() - .body(objectMapper.writeValueAsString(value)); + .body(OBJECT_MAPPER.writeValueAsString(value)); AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(200, output.getStatusCode()); @@ -220,8 +221,8 @@ public void responseBody_responseWriter_validBody() throws JsonProcessingExcepti @Test public void statusCode_responseStatusCode_customStatusCode() { - AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo-request-info", "GET") - .queryString("mode", "custom-status-code") + AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo-request-info", HTTP_METHOD_GET) + .queryString(QUERY_STRING_MODE, "custom-status-code") .queryString("status", "201") .json(); @@ -231,7 +232,7 @@ public void statusCode_responseStatusCode_customStatusCode() { @Test public void base64_binaryResponse_base64Encoding() { - AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo", "GET"); + AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo", HTTP_METHOD_GET); AwsProxyResponse response = executeRequest(request, lambdaContext); assertNotNull(response.getBody()); @@ -241,7 +242,7 @@ public void base64_binaryResponse_base64Encoding() { @Test public void exception_mapException_mapToNotImplemented() { AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo-request-info", "POST") - .queryString("mode", "not-implemented"); + .queryString(QUERY_STRING_MODE, "not-implemented"); AwsProxyResponse response = executeRequest(request, lambdaContext); assertNotNull(response.getBody()); @@ -251,7 +252,7 @@ public void exception_mapException_mapToNotImplemented() { @Test public void stripBasePath_route_shouldRouteCorrectly() { - AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/custompath/echo", "GET") + AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/custompath/echo", HTTP_METHOD_GET) .json() .queryString(QUERY_STRING_KEY, "stripped"); handler.stripBasePath("/custompath"); @@ -263,7 +264,7 @@ public void stripBasePath_route_shouldRouteCorrectly() { @Test public void stripBasePath_route_shouldReturn404() { - AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/custompath/echo/status-code", "GET") + AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/custompath/echo/status-code", HTTP_METHOD_GET) .json() .queryString("status", "201"); handler.stripBasePath("/custom"); @@ -275,8 +276,8 @@ public void stripBasePath_route_shouldReturn404() { @Test public void securityContext_injectPrincipal_expectPrincipalName() { assumeTrue("API_GW".equals(type)); - AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo-request-info", "GET") - .queryString("mode", "principal") + AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo-request-info", HTTP_METHOD_GET) + .queryString(QUERY_STRING_MODE, "principal") .authorizerPrincipal(USER_PRINCIPAL); AwsProxyResponse resp = executeRequest(request, lambdaContext); @@ -295,7 +296,7 @@ public void queryParam_encoding_expectUnencodedParam() { e.printStackTrace(); fail("Could not decode parameter"); } - AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo", "GET").queryString(QUERY_STRING_KEY, decodedParam); + AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo", HTTP_METHOD_GET).queryString(QUERY_STRING_KEY, decodedParam); AwsProxyResponse resp = executeRequest(request, lambdaContext); assertEquals(200, resp.getStatusCode()); @@ -306,7 +307,7 @@ public void queryParam_encoding_expectUnencodedParam() { public void queryParam_encoding_expectEncodedParam() { assumeTrue("API_GW".equals(type)); String paramValue = "p%2Fz%2B3"; - AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo", "GET").queryString(QUERY_STRING_KEY, paramValue); + AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo", HTTP_METHOD_GET).queryString(QUERY_STRING_KEY, paramValue); AwsProxyResponse resp = executeRequest(request, lambdaContext); assertEquals(200, resp.getStatusCode()); @@ -323,7 +324,7 @@ private void validateMapResponseModel(AwsProxyResponse output, String key, Strin TypeReference> typeRef = new TypeReference>() { }; - HashMap response = objectMapper.readValue(output.getBody(), typeRef); + HashMap response = OBJECT_MAPPER.readValue(output.getBody(), typeRef); assertNotNull(response.get(key)); assertEquals(value, response.get(key)); } catch (IOException e) { @@ -335,7 +336,7 @@ private void validateMapResponseModel(AwsProxyResponse output, String key, Strin private void validateSingleValueModel(AwsProxyResponse output, String value) { try { assertNotNull(output.getBody()); - assertEquals(value, objectMapper.readerFor(String.class).readValue(output.getBody())); + assertEquals(value, OBJECT_MAPPER.readerFor(String.class).readValue(output.getBody())); } catch (Exception e) { e.printStackTrace(); fail("Exception while parsing response body: " + e.getMessage()); diff --git a/aws-serverless-java-container-struts/src/test/resources/log4j2.xml b/aws-serverless-java-container-struts/src/test/resources/log4j2.xml new file mode 100644 index 000000000..55ed0d21c --- /dev/null +++ b/aws-serverless-java-container-struts/src/test/resources/log4j2.xml @@ -0,0 +1,17 @@ + + + + + + %d{yyyy-MM-dd HH:mm:ss} %X{AWSRequestId} %-5p %c{1}:%L - %m%n + + + + + + + + + + + \ No newline at end of file diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle index 240979c70..b44a7dfa8 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle @@ -18,22 +18,22 @@ dependencies { exclude group: 'org.apache.logging.log4j', module: 'log4j-api' exclude group: 'org.apache.logging.log4j', module: 'log4j-to-slf4j' } - implementation ('org.apache.struts:struts2-convention-plugin:2.5.30') { + implementation ('org.apache.struts:struts2-convention-plugin:6.0.3') { exclude group: 'org.apache.struts', module: 'struts2-core' } - implementation ('org.apache.struts:struts2-rest-plugin:2.5.30') { + implementation ('org.apache.struts:struts2-rest-plugin:6.0.3') { exclude group: 'org.apache.struts', module: 'struts2-core' } - implementation ('org.apache.struts:struts2-bean-validation-plugin:2.5.30') { + implementation ('org.apache.struts:struts2-bean-validation-plugin:6.0.3') { exclude group: 'org.apache.struts', module: 'struts2-core' } - implementation ('com.jgeppert.struts2:struts2-aws-lambda-support-plugin:1.3.0') { + implementation ('com.jgeppert.struts2:struts2-aws-lambda-support-plugin:1.4.0') { exclude group: 'org.apache.struts', module: 'struts2-core' } - implementation ('org.apache.struts:struts2-core:2.5.30') { + implementation ('org.apache.struts:struts2-core:6.0.3') { exclude group: 'org.apache.logging.log4j', module: 'log4j-api' } - implementation ('org.hibernate:hibernate-validator:5.4.3.Final') + implementation ('org.hibernate:hibernate-validator:6.1.7.Final') implementation ('com.fasterxml.jackson.core:jackson-databind:2.13.3') implementation ('org.apache.logging.log4j:log4j-core:2.17.2') implementation ('org.apache.logging.log4j:log4j-api:2.17.2') @@ -41,7 +41,7 @@ dependencies { implementation ('com.amazonaws:aws-lambda-java-log4j2:1.5.1') testImplementation('junit:junit:4.13.2') - testImplementation('org.apache.struts:struts2-junit-plugin:2.5.30') { + testImplementation('org.apache.struts:struts2-junit-plugin:6.0.3') { exclude group: 'org.apache.struts', module: 'struts2-core' } } diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml index 05685d6d3..e9d3b8b40 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml @@ -15,12 +15,19 @@ 1.8 1.8 - 2.5.30 + 6.0.3 2.13.3 4.13.2 - 2.17.2 + 2.18.0 + + + struts-staging + https://repository.apache.org/content/repositories/staging/ + + + com.amazonaws.serverless @@ -63,14 +70,14 @@ com.jgeppert.struts2 struts2-aws-lambda-support-plugin - 1.3.0 + 1.4.0 org.hibernate hibernate-validator - 5.4.3.Final + 6.1.7.Final @@ -88,6 +95,11 @@ jackson-databind \${jackson.version} + + com.fasterxml.jackson.dataformat + jackson-dataformat-xml + \${jackson.version} + org.apache.logging.log4j diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/src/main/resources/struts.xml b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/src/main/resources/struts.xml index 5b86eb974..f6975ffd0 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/src/main/resources/struts.xml +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/src/main/resources/struts.xml @@ -24,7 +24,7 @@ + class="org.apache.struts2.rest.handler.JacksonJsonHandler"/> diff --git a/samples/struts/pet-store/build.gradle b/samples/struts/pet-store/build.gradle index 1d734194c..a28ffc6c3 100644 --- a/samples/struts/pet-store/build.gradle +++ b/samples/struts/pet-store/build.gradle @@ -14,12 +14,12 @@ configurations { dependencies { implementation ( 'com.amazonaws.serverless:aws-serverless-java-container-struts2:[1.0,)', - 'org.apache.struts:struts2-convention-plugin:2.5.30', - 'org.apache.struts:struts2-rest-plugin:2.5.30', - 'org.apache.struts:struts2-bean-validation-plugin:2.5.30', - 'org.apache.struts:struts2-junit-plugin:2.5.30', - 'com.jgeppert.struts2:struts2-aws-lambda-support-plugin:1.3.0', - 'org.hibernate:hibernate-validator:5.4.3.Final', + 'org.apache.struts:struts2-convention-plugin:6.0.3', + 'org.apache.struts:struts2-rest-plugin:6.0.3', + 'org.apache.struts:struts2-bean-validation-plugin:6.0.3', + 'org.apache.struts:struts2-junit-plugin:6.0.3', + 'com.jgeppert.struts2:struts2-aws-lambda-support-plugin:1.4.0', + 'org.hibernate:hibernate-validator:6.1.7.Final', 'com.fasterxml.jackson.core:jackson-databind:2.13.3', 'org.apache.logging.log4j:log4j-core:2.17.2', 'org.apache.logging.log4j:log4j-api:2.17.2', diff --git a/samples/struts/pet-store/pom.xml b/samples/struts/pet-store/pom.xml index 751fa1a57..bb307b015 100644 --- a/samples/struts/pet-store/pom.xml +++ b/samples/struts/pet-store/pom.xml @@ -26,7 +26,7 @@ 1.8 1.8 - 2.5.30 + 6.0.3 2.13.3 4.13.2 2.17.2 @@ -74,14 +74,14 @@ com.jgeppert.struts2 struts2-aws-lambda-support-plugin - 1.3.0 + 1.4.0 org.hibernate hibernate-validator - 5.4.3.Final + 6.1.7.Final From 4daafe8c96fac19c3f91256a8e8e5b8af0ba9cae Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Sat, 17 Sep 2022 14:47:00 +0200 Subject: [PATCH 241/888] chore(deps): add missing jackson-dataformat-xml dependency (#471) --- .../src/main/resources/archetype-resources/build.gradle | 1 + 1 file changed, 1 insertion(+) diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle index b44a7dfa8..c40547bb6 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle @@ -35,6 +35,7 @@ dependencies { } implementation ('org.hibernate:hibernate-validator:6.1.7.Final') implementation ('com.fasterxml.jackson.core:jackson-databind:2.13.3') + implementation ('com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.13.3') implementation ('org.apache.logging.log4j:log4j-core:2.17.2') implementation ('org.apache.logging.log4j:log4j-api:2.17.2') implementation ('org.apache.logging.log4j:log4j-slf4j-impl:2.17.2') From c7fb0d1c1746239c639db58a1f563429a39f03df Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Wed, 21 Sep 2022 15:54:32 +0200 Subject: [PATCH 242/888] chore(deps): Update Spring boot dependency for Gradle sample aws well --- samples/springboot2/pet-store/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/springboot2/pet-store/build.gradle b/samples/springboot2/pet-store/build.gradle index 60c4c2dec..8a68214f1 100644 --- a/samples/springboot2/pet-store/build.gradle +++ b/samples/springboot2/pet-store/build.gradle @@ -8,7 +8,7 @@ repositories { dependencies { implementation ( - implementation('org.springframework.boot:spring-boot-starter-web:2.6.7') { + implementation('org.springframework.boot:spring-boot-starter-web:2.7.3') { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat' }, 'com.amazonaws.serverless:aws-serverless-java-container-springboot2:[1.4,)', From effeade645f07df184f9800e1627f7c289acc374 Mon Sep 17 00:00:00 2001 From: Andy Boothe Date: Thu, 28 Jul 2022 23:16:41 -0500 Subject: [PATCH 243/888] feat: add single value headers and query string params (#315) --- .../proxy/model/AwsProxyRequest.java | 25 ++++- .../proxy/model/SingleValueHeaders.java | 24 ++++ .../proxy/model/AwsProxyRequestTest.java | 103 +++++++----------- 3 files changed, 83 insertions(+), 69 deletions(-) create mode 100644 aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/SingleValueHeaders.java diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/AwsProxyRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/AwsProxyRequest.java index d361d6741..440421a71 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/AwsProxyRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/AwsProxyRequest.java @@ -12,13 +12,12 @@ */ package com.amazonaws.serverless.proxy.model; +import java.util.HashMap; +import java.util.Map; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; -import java.util.HashMap; -import java.util.Map; - /** * Default implementation of the request object from an API Gateway AWS_PROXY integration */ @@ -33,7 +32,9 @@ public class AwsProxyRequest { private String resource; private AwsProxyRequestContext requestContext; private MultiValuedTreeMap multiValueQueryStringParameters; + private Map queryStringParameters; private Headers multiValueHeaders; + private SingleValueHeaders headers; private Map pathParameters; private String httpMethod; private Map stageVariables; @@ -113,21 +114,35 @@ public MultiValuedTreeMap getMultiValueQueryStringParameters() { return multiValueQueryStringParameters; } - public void setMultiValueQueryStringParameters( MultiValuedTreeMap multiValueQueryStringParameters) { this.multiValueQueryStringParameters = multiValueQueryStringParameters; } + public Map getQueryStringParameters() { + return queryStringParameters; + } + + public void setQueryStringParameters(Map queryStringParameters) { + this.queryStringParameters = queryStringParameters; + } + public Headers getMultiValueHeaders() { return multiValueHeaders; } - public void setMultiValueHeaders(Headers multiValueHeaders) { this.multiValueHeaders = multiValueHeaders; } + public SingleValueHeaders getHeaders() { + return headers; + } + + public void setHeaders(SingleValueHeaders headers) { + this.headers = headers; + } + public Map getPathParameters() { return pathParameters; diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/SingleValueHeaders.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/SingleValueHeaders.java new file mode 100644 index 000000000..6dbf03936 --- /dev/null +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/SingleValueHeaders.java @@ -0,0 +1,24 @@ +/* + * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance + * with the License. A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.proxy.model; + +import java.util.TreeMap; + +public class SingleValueHeaders extends TreeMap { + + private static final long serialVersionUID = 42L; + + public SingleValueHeaders() { + super(String.CASE_INSENSITIVE_ORDER); + } +} diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/model/AwsProxyRequestTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/model/AwsProxyRequestTest.java index 50f5cf054..b06e04cf6 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/model/AwsProxyRequestTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/model/AwsProxyRequestTest.java @@ -1,75 +1,19 @@ package com.amazonaws.serverless.proxy.model; +import static junit.framework.TestCase.assertTrue; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import java.io.IOException; +import org.junit.Test; import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; import com.fasterxml.jackson.databind.ObjectMapper; -import org.junit.Test; - -import java.io.IOException; - -import static junit.framework.TestCase.assertTrue; -import static org.junit.Assert.*; public class AwsProxyRequestTest { private static final String CUSTOM_HEADER_KEY_LOWER_CASE = "custom-header"; private static final String CUSTOM_HEADER_VALUE = "123456"; - public static final String REQUEST_JSON = "{\n" + - " \"resource\": \"/api/{proxy+}\",\n" + - " \"path\": \"/api/endpoint\",\n" + - " \"httpMethod\": \"OPTIONS\",\n" + - " \"headers\": {\n" + - " \"Accept\": \"*/*\",\n" + - " \"User-Agent\": \"PostmanRuntime/7.1.1\",\n" + - " \"" + CUSTOM_HEADER_KEY_LOWER_CASE +"\":" + "\"" + CUSTOM_HEADER_VALUE + "\"\n" + - " },\n" + - " \"multiValueHeaders\": {\n" + - " \"Accept\": [\n" + - " \"*/*\"\n" + - " ],\n" + - " \"User-Agent\": [\n" + - " \"PostmanRuntime/7.1.1\"\n" + - " ],\n" + - " \"" + CUSTOM_HEADER_KEY_LOWER_CASE + "\": [\n" + - " \"" + CUSTOM_HEADER_VALUE + "\"\n" + - " ]\n" + - " },\n" + - " \"queryStringParameters\": null,\n" + - " \"multiValueQueryStringParameters\": null,\n" + - " \"pathParameters\": {\n" + - " \"proxy\": \"endpoint\"\n" + - " },\n" + - " \"stageVariables\": null,\n" + - " \"requestContext\": {\n" + - " \"resourceId\": null,\n" + - " \"resourcePath\": \"/api/{proxy+}\",\n" + - " \"httpMethod\": \"OPTIONS\",\n" + - " \"extendedRequestId\": null,\n" + - " \"requestTime\": \"15/Dec/2018:20:37:47 +0000\",\n" + - " \"path\": \"/api/endpoint\",\n" + - " \"accountId\": null,\n" + - " \"protocol\": \"HTTP/1.1\",\n" + - " \"stage\": \"stage_name\",\n" + - " \"domainPrefix\": null,\n" + - " \"requestTimeEpoch\": 1544906267828,\n" + - " \"requestId\": null,\n" + - " \"identity\": {\n" + - " \"cognitoIdentityPoolId\": null,\n" + - " \"accountId\": null,\n" + - " \"cognitoIdentityId\": null,\n" + - " \"caller\": null,\n" + - " \"sourceIp\": \"54.240.196.171\",\n" + - " \"accessKey\": null,\n" + - " \"cognitoAuthenticationType\": null,\n" + - " \"cognitoAuthenticationProvider\": null,\n" + - " \"userArn\": null,\n" + - " \"userAgent\": \"PostmanRuntime/7.1.1\",\n" + - " \"user\": null\n" + - " },\n" + - " \"domainName\": \"https://apiId.execute-api.eu-central-1.amazonaws.com/\",\n" + - " \"apiId\": \"apiId\"\n" + - " },\n" + - " \"body\": null,\n" + - " \"isBase64Encoded\": true\n" + - "}"; @Test public void deserialize_multiValuedHeaders_caseInsensitive() throws IOException { @@ -160,4 +104,35 @@ private String getRequestJson(boolean base64Encoded, String headerKey, String he " \"isBase64Encoded\": " + (base64Encoded?"true":"false") + "\n" + "}"; } + + @Test + public void deserialize_singleValuedHeaders() throws IOException { + AwsProxyRequest req = + new AwsProxyRequestBuilder().fromJsonString(getSingleValueRequestJson()).build(); + + assertThat(req.getHeaders().get("accept"), is("*")); + } + + /** + * Captured from a live request to an ALB with a Lambda integration with + * lambda.multi_value_headers.enabled=false. + */ + private String getSingleValueRequestJson() { + return "{\n" + " \"requestContext\": {\n" + " \"elb\": {\n" + + " \"targetGroupArn\": \"arn:aws:elasticloadbalancing:us-east-2:123456789012:targetgroup/prod-example-function/e77803ebb6d2c24\"\n" + + " }\n" + " },\n" + " \"httpMethod\": \"PUT\",\n" + + " \"path\": \"/path/to/resource\",\n" + " \"queryStringParameters\": {},\n" + + " \"headers\": {\n" + " \"accept\": \"*\",\n" + + " \"content-length\": \"17\",\n" + + " \"content-type\": \"application/json\",\n" + + " \"host\": \"stackoverflow.name\",\n" + + " \"user-agent\": \"curl/7.77.0\",\n" + + " \"x-amzn-trace-id\": \"Root=1-62e22402-3a5f246225e45edd7735c182\",\n" + + " \"x-forwarded-for\": \"24.14.13.186\",\n" + + " \"x-forwarded-port\": \"443\",\n" + + " \"x-forwarded-proto\": \"https\",\n" + + " \"x-jersey-tracing-accept\": \"true\"\n" + " },\n" + + " \"body\": \"{\\\"alpha\\\":\\\"bravo\\\"}\",\n" + + " \"isBase64Encoded\": false\n" + "} \n"; + } } From aab7e36337417329f92a357d2417925fed52391e Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Wed, 21 Sep 2022 16:46:05 +0200 Subject: [PATCH 244/888] chore(deps): update Jackson version to 2.13.4 --- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/build.gradle | 4 ++-- .../src/main/resources/archetype-resources/pom.xml | 2 +- pom.xml | 2 +- samples/jersey/pet-store/build.gradle | 2 +- samples/jersey/pet-store/pom.xml | 2 +- samples/spark/pet-store/build.gradle | 2 +- samples/spark/pet-store/pom.xml | 2 +- samples/spring/pet-store/build.gradle | 2 +- samples/struts/pet-store/build.gradle | 2 +- samples/struts/pet-store/pom.xml | 2 +- 15 files changed, 16 insertions(+), 16 deletions(-) diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle index 08c10203d..641e11943 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle @@ -9,7 +9,7 @@ dependencies { implementation ( 'com.amazonaws:aws-lambda-java-core:1.2.1', 'com.amazonaws.serverless:aws-serverless-java-container-jersey:[1.0,)', - 'com.fasterxml.jackson.core:jackson-databind:2.13.3', + 'com.fasterxml.jackson.core:jackson-databind:2.13.4', 'io.symphonia:lambda-logging:1.0.3' ) diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml index 93dccc594..fb51be101 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml @@ -15,7 +15,7 @@ 1.8 1.8 2.36 - 2.13.3 + 2.13.4 diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle index 4fe672415..62864d91c 100644 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle @@ -9,7 +9,7 @@ dependencies { implementation ( 'com.sparkjava:spark-core:2.9.4', 'com.amazonaws.serverless:aws-serverless-java-container-spark:[1.0,)', - 'com.fasterxml.jackson.core:jackson-databind:2.13.3', + 'com.fasterxml.jackson.core:jackson-databind:2.13.4', 'io.symphonia:lambda-logging:1.0.3' ) diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml index 678d2cf1c..4e5993bb3 100644 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 1.8 - 2.13.3 + 2.13.4 2.9.1 diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index 4497f8c8d..bafa639b4 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -13,7 +13,7 @@ dependencies { 'org.apache.logging.log4j:log4j-core:2.17.2', 'org.apache.logging.log4j:log4j-api:2.17.2', 'org.apache.logging.log4j:log4j-slf4j-impl:2.17.2', - 'com.fasterxml.jackson.core:jackson-databind:2.13.3', + 'com.fasterxml.jackson.core:jackson-databind:2.13.4', 'com.amazonaws:aws-lambda-java-log4j2:1.5.1', ) diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle index c40547bb6..8d2fb8586 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle @@ -34,8 +34,8 @@ dependencies { exclude group: 'org.apache.logging.log4j', module: 'log4j-api' } implementation ('org.hibernate:hibernate-validator:6.1.7.Final') - implementation ('com.fasterxml.jackson.core:jackson-databind:2.13.3') - implementation ('com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.13.3') + implementation ('com.fasterxml.jackson.core:jackson-databind:2.13.4') + implementation ('com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.13.4') implementation ('org.apache.logging.log4j:log4j-core:2.17.2') implementation ('org.apache.logging.log4j:log4j-api:2.17.2') implementation ('org.apache.logging.log4j:log4j-slf4j-impl:2.17.2') diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml index e9d3b8b40..cdfdaf662 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 1.8 6.0.3 - 2.13.3 + 2.13.4 4.13.2 2.18.0 diff --git a/pom.xml b/pom.xml index b752bb127..167d5e7a7 100644 --- a/pom.xml +++ b/pom.xml @@ -82,7 +82,7 @@ 0.7 7.1.0 - 2.13.3 + 2.13.4 1.7.36 UTF-8 diff --git a/samples/jersey/pet-store/build.gradle b/samples/jersey/pet-store/build.gradle index e01cde9fb..1083441f4 100644 --- a/samples/jersey/pet-store/build.gradle +++ b/samples/jersey/pet-store/build.gradle @@ -9,7 +9,7 @@ dependencies { implementation ( 'com.amazonaws:aws-lambda-java-core:1.2.1', 'com.amazonaws.serverless:aws-serverless-java-container-jersey:[1.0,)', - 'com.fasterxml.jackson.core:jackson-databind:2.13.3', + 'com.fasterxml.jackson.core:jackson-databind:2.13.4', 'io.symphonia:lambda-logging:1.0.3' ) diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index ffdc2db8a..926d79c7d 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -27,7 +27,7 @@ 1.8 1.8 2.36 - 2.13.3 + 2.13.4 diff --git a/samples/spark/pet-store/build.gradle b/samples/spark/pet-store/build.gradle index dc6a63dbf..186397104 100644 --- a/samples/spark/pet-store/build.gradle +++ b/samples/spark/pet-store/build.gradle @@ -9,7 +9,7 @@ dependencies { implementation ( 'com.sparkjava:spark-core:2.9.4', 'com.amazonaws.serverless:aws-serverless-java-container-spark:[1.0,)', - 'com.fasterxml.jackson.core:jackson-databind:2.13.3', + 'com.fasterxml.jackson.core:jackson-databind:2.13.4', 'io.symphonia:lambda-logging:1.0.3' ) } diff --git a/samples/spark/pet-store/pom.xml b/samples/spark/pet-store/pom.xml index e46eff949..d064704d0 100644 --- a/samples/spark/pet-store/pom.xml +++ b/samples/spark/pet-store/pom.xml @@ -26,7 +26,7 @@ 1.8 1.8 - 2.13.3 + 2.13.4 2.9.1 diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index d25e400ef..aea0b9fe0 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -13,7 +13,7 @@ dependencies { 'org.apache.logging.log4j:log4j-core:2.17.2', 'org.apache.logging.log4j:log4j-api:2.17.2', 'org.apache.logging.log4j:log4j-slf4j-impl:2.17.2', - 'com.fasterxml.jackson.core:jackson-databind:2.13.3', + 'com.fasterxml.jackson.core:jackson-databind:2.13.4', 'com.amazonaws:aws-lambda-java-log4j2:1.5.1', ) } diff --git a/samples/struts/pet-store/build.gradle b/samples/struts/pet-store/build.gradle index a28ffc6c3..f5b58c1a2 100644 --- a/samples/struts/pet-store/build.gradle +++ b/samples/struts/pet-store/build.gradle @@ -20,7 +20,7 @@ dependencies { 'org.apache.struts:struts2-junit-plugin:6.0.3', 'com.jgeppert.struts2:struts2-aws-lambda-support-plugin:1.4.0', 'org.hibernate:hibernate-validator:6.1.7.Final', - 'com.fasterxml.jackson.core:jackson-databind:2.13.3', + 'com.fasterxml.jackson.core:jackson-databind:2.13.4', 'org.apache.logging.log4j:log4j-core:2.17.2', 'org.apache.logging.log4j:log4j-api:2.17.2', 'org.apache.logging.log4j:log4j-slf4j-impl:2.17.2', diff --git a/samples/struts/pet-store/pom.xml b/samples/struts/pet-store/pom.xml index bb307b015..4d457ec19 100644 --- a/samples/struts/pet-store/pom.xml +++ b/samples/struts/pet-store/pom.xml @@ -27,7 +27,7 @@ 1.8 1.8 6.0.3 - 2.13.3 + 2.13.4 4.13.2 2.17.2 From afe6b97e315bc948a01e14de822c043b38113866 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Wed, 21 Sep 2022 17:34:03 +0200 Subject: [PATCH 245/888] chore(deps): update SLF4J to 2.0.2 and Log4J to 2.19.0 --- .../src/main/resources/archetype-resources/build.gradle | 6 +++--- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 6 +++--- .../src/main/resources/archetype-resources/pom.xml | 2 +- pom.xml | 2 +- samples/spring/pet-store/build.gradle | 6 +++--- samples/spring/pet-store/pom.xml | 2 +- samples/struts/pet-store/build.gradle | 6 +++--- samples/struts/pet-store/pom.xml | 2 +- 9 files changed, 17 insertions(+), 17 deletions(-) diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index bafa639b4..8a7394cfe 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -10,9 +10,9 @@ dependencies { 'org.springframework:spring-webmvc:5.3.22', 'org.springframework:spring-context:5.3.22', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[1.0,)', - 'org.apache.logging.log4j:log4j-core:2.17.2', - 'org.apache.logging.log4j:log4j-api:2.17.2', - 'org.apache.logging.log4j:log4j-slf4j-impl:2.17.2', + 'org.apache.logging.log4j:log4j-core:2.19.0', + 'org.apache.logging.log4j:log4j-api:2.19.0', + 'org.apache.logging.log4j:log4j-slf4j-impl:2.19.0', 'com.fasterxml.jackson.core:jackson-databind:2.13.4', 'com.amazonaws:aws-lambda-java-log4j2:1.5.1', ) diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index b3597de53..77334f2d1 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -18,7 +18,7 @@ 1.8 5.3.22 4.13.2 - 2.17.2 + 2.19.0 diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle index 8d2fb8586..01368d93f 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle @@ -36,9 +36,9 @@ dependencies { implementation ('org.hibernate:hibernate-validator:6.1.7.Final') implementation ('com.fasterxml.jackson.core:jackson-databind:2.13.4') implementation ('com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.13.4') - implementation ('org.apache.logging.log4j:log4j-core:2.17.2') - implementation ('org.apache.logging.log4j:log4j-api:2.17.2') - implementation ('org.apache.logging.log4j:log4j-slf4j-impl:2.17.2') + implementation ('org.apache.logging.log4j:log4j-core:2.19.0') + implementation ('org.apache.logging.log4j:log4j-api:2.19.0') + implementation ('org.apache.logging.log4j:log4j-slf4j-impl:2.19.0') implementation ('com.amazonaws:aws-lambda-java-log4j2:1.5.1') testImplementation('junit:junit:4.13.2') diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml index cdfdaf662..7ced173a4 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml @@ -18,7 +18,7 @@ 6.0.3 2.13.4 4.13.2 - 2.18.0 + 2.19.0 diff --git a/pom.xml b/pom.xml index 167d5e7a7..99563d4d8 100644 --- a/pom.xml +++ b/pom.xml @@ -83,7 +83,7 @@ 0.7 7.1.0 2.13.4 - 1.7.36 + 2.0.2 UTF-8 diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index aea0b9fe0..05c79cc68 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -10,9 +10,9 @@ dependencies { 'org.springframework:spring-webmvc:5.3.22', 'org.springframework:spring-context:5.3.22', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[1.0,)', - 'org.apache.logging.log4j:log4j-core:2.17.2', - 'org.apache.logging.log4j:log4j-api:2.17.2', - 'org.apache.logging.log4j:log4j-slf4j-impl:2.17.2', + 'org.apache.logging.log4j:log4j-core:2.19.0', + 'org.apache.logging.log4j:log4j-api:2.19.0', + 'org.apache.logging.log4j:log4j-slf4j-impl:2.19.0', 'com.fasterxml.jackson.core:jackson-databind:2.13.4', 'com.amazonaws:aws-lambda-java-log4j2:1.5.1', ) diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index ea06bddfc..645982b6f 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -28,7 +28,7 @@ 1.8 5.3.22 4.13.2 - 2.17.2 + 2.19.0 diff --git a/samples/struts/pet-store/build.gradle b/samples/struts/pet-store/build.gradle index f5b58c1a2..67eb31db8 100644 --- a/samples/struts/pet-store/build.gradle +++ b/samples/struts/pet-store/build.gradle @@ -21,9 +21,9 @@ dependencies { 'com.jgeppert.struts2:struts2-aws-lambda-support-plugin:1.4.0', 'org.hibernate:hibernate-validator:6.1.7.Final', 'com.fasterxml.jackson.core:jackson-databind:2.13.4', - 'org.apache.logging.log4j:log4j-core:2.17.2', - 'org.apache.logging.log4j:log4j-api:2.17.2', - 'org.apache.logging.log4j:log4j-slf4j-impl:2.17.2', + 'org.apache.logging.log4j:log4j-core:2.19.0', + 'org.apache.logging.log4j:log4j-api:2.19.0', + 'org.apache.logging.log4j:log4j-slf4j-impl:2.19.0', 'com.amazonaws:aws-lambda-java-log4j2:1.5.1', ) } diff --git a/samples/struts/pet-store/pom.xml b/samples/struts/pet-store/pom.xml index 4d457ec19..178223d6d 100644 --- a/samples/struts/pet-store/pom.xml +++ b/samples/struts/pet-store/pom.xml @@ -29,7 +29,7 @@ 6.0.3 2.13.4 4.13.2 - 2.17.2 + 2.19.0 From a1f3156a207420d15c8bab56452f68da29e3ca95 Mon Sep 17 00:00:00 2001 From: deki Date: Wed, 21 Sep 2022 18:53:18 +0000 Subject: [PATCH 246/888] chore: release -prepare release aws-serverless-java-container-1.9 --- aws-serverless-java-container-core/pom.xml | 4 ++-- aws-serverless-java-container-jersey/pom.xml | 6 +++--- aws-serverless-java-container-spark/pom.xml | 6 +++--- aws-serverless-java-container-spring/pom.xml | 6 +++--- aws-serverless-java-container-springboot2/pom.xml | 6 +++--- aws-serverless-java-container-struts/pom.xml | 6 +++--- aws-serverless-jersey-archetype/pom.xml | 6 +++--- aws-serverless-spark-archetype/pom.xml | 6 +++--- aws-serverless-spring-archetype/pom.xml | 6 +++--- aws-serverless-springboot2-archetype/pom.xml | 6 +++--- aws-serverless-struts-archetype/pom.xml | 6 +++--- pom.xml | 4 ++-- 12 files changed, 34 insertions(+), 34 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index f87eb1194..d562841cf 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Core Allows Java applications written for a servlet container to run in AWS Lambda https://aws.amazon.com/lambda - 1.9-SNAPSHOT + 1.9 com.amazonaws.serverless aws-serverless-java-container - 1.9-SNAPSHOT + 1.9 .. diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index d52234584..939c70b64 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Jersey implementation Allows Java applications written for Jersey to run in AWS Lambda https://aws.amazon.com/lambda - 1.9-SNAPSHOT + 1.9 com.amazonaws.serverless aws-serverless-java-container - 1.9-SNAPSHOT + 1.9 .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.9-SNAPSHOT + 1.9 com.fasterxml.jackson.core diff --git a/aws-serverless-java-container-spark/pom.xml b/aws-serverless-java-container-spark/pom.xml index 036903284..07d7a0fd8 100644 --- a/aws-serverless-java-container-spark/pom.xml +++ b/aws-serverless-java-container-spark/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spark implementation Allows Java applications written for Spark to run in AWS Lambda https://aws.amazon.com/lambda - 1.9-SNAPSHOT + 1.9 com.amazonaws.serverless aws-serverless-java-container - 1.9-SNAPSHOT + 1.9 .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.9-SNAPSHOT + 1.9 diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index ed42b2400..efc30c67b 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spring implementation Allows Java applications written for the Spring framework to run in AWS Lambda https://aws.amazon.com/lambda - 1.9-SNAPSHOT + 1.9 com.amazonaws.serverless aws-serverless-java-container - 1.9-SNAPSHOT + 1.9 .. @@ -25,7 +25,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.9-SNAPSHOT + 1.9 diff --git a/aws-serverless-java-container-springboot2/pom.xml b/aws-serverless-java-container-springboot2/pom.xml index 0779abd2c..9902d27f5 100644 --- a/aws-serverless-java-container-springboot2/pom.xml +++ b/aws-serverless-java-container-springboot2/pom.xml @@ -3,7 +3,7 @@ aws-serverless-java-container com.amazonaws.serverless - 1.9-SNAPSHOT + 1.9 4.0.0 @@ -12,7 +12,7 @@ AWS Serverless Java container support - SpringBoot 2 implementation Allows Java applications written for SpringBoot 2 to run in AWS Lambda https://aws.amazon.com/lambda - 1.9-SNAPSHOT + 1.9 5.3.22 @@ -27,7 +27,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.9-SNAPSHOT + 1.9 diff --git a/aws-serverless-java-container-struts/pom.xml b/aws-serverless-java-container-struts/pom.xml index c39bf516d..79f60fc12 100644 --- a/aws-serverless-java-container-struts/pom.xml +++ b/aws-serverless-java-container-struts/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Struts implementation Allows Java applications written for the Struts framework to run in AWS Lambda https://aws.amazon.com/lambda - 1.9-SNAPSHOT + 1.9 com.amazonaws.serverless aws-serverless-java-container - 1.9-SNAPSHOT + 1.9 @@ -23,7 +23,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.9-SNAPSHOT + 1.9 diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index 8f0a225cd..4226da7a4 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.9-SNAPSHOT + 1.9 com.amazonaws.serverless.archetypes aws-serverless-jersey-archetype - 1.9-SNAPSHOT + 1.9 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.9 diff --git a/aws-serverless-spark-archetype/pom.xml b/aws-serverless-spark-archetype/pom.xml index fea28b1f8..c55b66d74 100644 --- a/aws-serverless-spark-archetype/pom.xml +++ b/aws-serverless-spark-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.9-SNAPSHOT + 1.9 com.amazonaws.serverless.archetypes aws-serverless-spark-archetype - 1.9-SNAPSHOT + 1.9 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.9 diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index 723de360d..3ca1019b6 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.9-SNAPSHOT + 1.9 com.amazonaws.serverless.archetypes aws-serverless-spring-archetype - 1.9-SNAPSHOT + 1.9 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.9 diff --git a/aws-serverless-springboot2-archetype/pom.xml b/aws-serverless-springboot2-archetype/pom.xml index ecf410f52..4a09c1b4b 100644 --- a/aws-serverless-springboot2-archetype/pom.xml +++ b/aws-serverless-springboot2-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.9-SNAPSHOT + 1.9 com.amazonaws.serverless.archetypes aws-serverless-springboot2-archetype - 1.9-SNAPSHOT + 1.9 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.9 diff --git a/aws-serverless-struts-archetype/pom.xml b/aws-serverless-struts-archetype/pom.xml index 9eed00809..d261ef8d6 100644 --- a/aws-serverless-struts-archetype/pom.xml +++ b/aws-serverless-struts-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.9-SNAPSHOT + 1.9 com.amazonaws.serverless.archetypes aws-serverless-struts-archetype - 1.9-SNAPSHOT + 1.9 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.9 diff --git a/pom.xml b/pom.xml index 99563d4d8..be5a8bc9f 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazonaws.serverless aws-serverless-java-container pom - 1.9-SNAPSHOT + 1.9 AWS Serverless Java container A Java framework to run Spring, Spring Boot, Jersey, Spark, and Struts applications inside AWS Lambda https://github.com/awslabs/aws-serverless-java-container @@ -41,7 +41,7 @@ https://github.com/awslabs/aws-serverless-java-container scm:git:https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.9 From 8b01a81f990ac1d06760fddaf8abbe66b0d9d14e Mon Sep 17 00:00:00 2001 From: deki Date: Wed, 21 Sep 2022 18:53:20 +0000 Subject: [PATCH 247/888] chore: release -prepare for next development iteration --- aws-serverless-java-container-core/pom.xml | 4 ++-- aws-serverless-java-container-jersey/pom.xml | 6 +++--- aws-serverless-java-container-spark/pom.xml | 6 +++--- aws-serverless-java-container-spring/pom.xml | 6 +++--- aws-serverless-java-container-springboot2/pom.xml | 6 +++--- aws-serverless-java-container-struts/pom.xml | 6 +++--- aws-serverless-jersey-archetype/pom.xml | 6 +++--- aws-serverless-spark-archetype/pom.xml | 6 +++--- aws-serverless-spring-archetype/pom.xml | 6 +++--- aws-serverless-springboot2-archetype/pom.xml | 6 +++--- aws-serverless-struts-archetype/pom.xml | 6 +++--- pom.xml | 4 ++-- 12 files changed, 34 insertions(+), 34 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index d562841cf..927fdc9c5 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Core Allows Java applications written for a servlet container to run in AWS Lambda https://aws.amazon.com/lambda - 1.9 + 1.10-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.9 + 1.10-SNAPSHOT .. diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index 939c70b64..da9f5795a 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Jersey implementation Allows Java applications written for Jersey to run in AWS Lambda https://aws.amazon.com/lambda - 1.9 + 1.10-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.9 + 1.10-SNAPSHOT .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.9 + 1.10-SNAPSHOT com.fasterxml.jackson.core diff --git a/aws-serverless-java-container-spark/pom.xml b/aws-serverless-java-container-spark/pom.xml index 07d7a0fd8..371140597 100644 --- a/aws-serverless-java-container-spark/pom.xml +++ b/aws-serverless-java-container-spark/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spark implementation Allows Java applications written for Spark to run in AWS Lambda https://aws.amazon.com/lambda - 1.9 + 1.10-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.9 + 1.10-SNAPSHOT .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.9 + 1.10-SNAPSHOT diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index efc30c67b..3a8130f77 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spring implementation Allows Java applications written for the Spring framework to run in AWS Lambda https://aws.amazon.com/lambda - 1.9 + 1.10-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.9 + 1.10-SNAPSHOT .. @@ -25,7 +25,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.9 + 1.10-SNAPSHOT diff --git a/aws-serverless-java-container-springboot2/pom.xml b/aws-serverless-java-container-springboot2/pom.xml index 9902d27f5..2f0ec121b 100644 --- a/aws-serverless-java-container-springboot2/pom.xml +++ b/aws-serverless-java-container-springboot2/pom.xml @@ -3,7 +3,7 @@ aws-serverless-java-container com.amazonaws.serverless - 1.9 + 1.10-SNAPSHOT 4.0.0 @@ -12,7 +12,7 @@ AWS Serverless Java container support - SpringBoot 2 implementation Allows Java applications written for SpringBoot 2 to run in AWS Lambda https://aws.amazon.com/lambda - 1.9 + 1.10-SNAPSHOT 5.3.22 @@ -27,7 +27,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.9 + 1.10-SNAPSHOT diff --git a/aws-serverless-java-container-struts/pom.xml b/aws-serverless-java-container-struts/pom.xml index 79f60fc12..e251dac8c 100644 --- a/aws-serverless-java-container-struts/pom.xml +++ b/aws-serverless-java-container-struts/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Struts implementation Allows Java applications written for the Struts framework to run in AWS Lambda https://aws.amazon.com/lambda - 1.9 + 1.10-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.9 + 1.10-SNAPSHOT @@ -23,7 +23,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.9 + 1.10-SNAPSHOT diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index 4226da7a4..c13c05869 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.9 + 1.10-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-jersey-archetype - 1.9 + 1.10-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.9 + HEAD diff --git a/aws-serverless-spark-archetype/pom.xml b/aws-serverless-spark-archetype/pom.xml index c55b66d74..ca3ad3952 100644 --- a/aws-serverless-spark-archetype/pom.xml +++ b/aws-serverless-spark-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.9 + 1.10-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-spark-archetype - 1.9 + 1.10-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.9 + HEAD diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index 3ca1019b6..83dc79743 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.9 + 1.10-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-spring-archetype - 1.9 + 1.10-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.9 + HEAD diff --git a/aws-serverless-springboot2-archetype/pom.xml b/aws-serverless-springboot2-archetype/pom.xml index 4a09c1b4b..1e7279dbf 100644 --- a/aws-serverless-springboot2-archetype/pom.xml +++ b/aws-serverless-springboot2-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.9 + 1.10-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-springboot2-archetype - 1.9 + 1.10-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.9 + HEAD diff --git a/aws-serverless-struts-archetype/pom.xml b/aws-serverless-struts-archetype/pom.xml index d261ef8d6..b91cfa4bd 100644 --- a/aws-serverless-struts-archetype/pom.xml +++ b/aws-serverless-struts-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.9 + 1.10-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-struts-archetype - 1.9 + 1.10-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.9 + HEAD diff --git a/pom.xml b/pom.xml index be5a8bc9f..07c22c825 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazonaws.serverless aws-serverless-java-container pom - 1.9 + 1.10-SNAPSHOT AWS Serverless Java container A Java framework to run Spring, Spring Boot, Jersey, Spark, and Struts applications inside AWS Lambda https://github.com/awslabs/aws-serverless-java-container @@ -41,7 +41,7 @@ https://github.com/awslabs/aws-serverless-java-container scm:git:https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.9 + HEAD From 120c458b8e89971e3d910188f18e5a8f002fc38f Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Wed, 21 Sep 2022 20:19:48 +0200 Subject: [PATCH 248/888] chore(deps): Update Jersey dependencies to 2.37 --- aws-serverless-java-container-jersey/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 4 ++-- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/jersey/pet-store/build.gradle | 4 ++-- samples/jersey/pet-store/pom.xml | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index da9f5795a..7c177c34d 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -16,7 +16,7 @@ - 2.36 + 2.37 diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle index 641e11943..f7af0b4f5 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle @@ -13,13 +13,13 @@ dependencies { 'io.symphonia:lambda-logging:1.0.3' ) - implementation("org.glassfish.jersey.media:jersey-media-json-jackson:2.36") { + implementation("org.glassfish.jersey.media:jersey-media-json-jackson:2.37") { exclude group: 'com.fasterxml.jackson.core', module: "jackson-annotations" exclude group: 'com.fasterxml.jackson.core', module: "jackson-databind" exclude group: 'com.fasterxml.jackson.core', module: "jackson-core" } - implementation("org.glassfish.jersey.inject:jersey-hk2:2.36") { + implementation("org.glassfish.jersey.inject:jersey-hk2:2.37") { exclude group: 'javax.inject', module: "javax.inject" } diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml index fb51be101..99a75e720 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml @@ -14,7 +14,7 @@ 1.8 1.8 - 2.36 + 2.37 2.13.4 diff --git a/samples/jersey/pet-store/build.gradle b/samples/jersey/pet-store/build.gradle index 1083441f4..8392a2afe 100644 --- a/samples/jersey/pet-store/build.gradle +++ b/samples/jersey/pet-store/build.gradle @@ -13,13 +13,13 @@ dependencies { 'io.symphonia:lambda-logging:1.0.3' ) - implementation("org.glassfish.jersey.media:jersey-media-json-jackson:2.36") { + implementation("org.glassfish.jersey.media:jersey-media-json-jackson:2.37") { exclude group: 'com.fasterxml.jackson.core', module: "jackson-annotations" exclude group: 'com.fasterxml.jackson.core', module: "jackson-databind" exclude group: 'com.fasterxml.jackson.core', module: "jackson-core" } - implementation("org.glassfish.jersey.inject:jersey-hk2:2.36") { + implementation("org.glassfish.jersey.inject:jersey-hk2:2.37") { exclude group: 'javax.inject', module: "javax.inject" } } diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index 926d79c7d..44efd8ab5 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -26,7 +26,7 @@ 1.8 1.8 - 2.36 + 2.37 2.13.4 From 68a94486a02f0c1e804d0db4a743bad18e03c124 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Wed, 21 Sep 2022 21:39:20 +0200 Subject: [PATCH 249/888] docs: Remove duplicate link to Struts quick start --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 4c0a4c99d..ad3461691 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,6 @@ Follow the quick start guides in [our wiki](https://github.com/awslabs/aws-serve * [Apache Struts quick start](https://github.com/awslabs/aws-serverless-java-container/wiki/Quick-start---Struts) * [Jersey quick start](https://github.com/awslabs/aws-serverless-java-container/wiki/Quick-start---Jersey) * [Spark quick start](https://github.com/awslabs/aws-serverless-java-container/wiki/Quick-start---Spark) -* [Struts quick start](https://github.com/awslabs/aws-serverless-java-container/wiki/Quick-start---Struts) * Micronaut [documentation](https://guides.micronaut.io/micronaut-function-aws-lambda/guide/index.html) and [demo](https://github.com/awslabs/aws-serverless-java-container/tree/master/samples/micronaut/pet-store) (outdated! - needs to be updated to latest Micronaut version) From 1ac487ce50b15caa9db0ea8ce9409fef7d037d9d Mon Sep 17 00:00:00 2001 From: Johannes Geppert Date: Sun, 9 Oct 2022 21:02:32 +0200 Subject: [PATCH 250/888] Fix broken struts pet-store sample project https://github.com/awslabs/aws-serverless-java-container/issues/479 --- .../archetype-resources/build.gradle | 4 +- .../resources/archetype-resources/pom.xml | 4 +- samples/struts/pet-store/README.md | 17 ++- samples/struts/pet-store/build.gradle | 12 +- samples/struts/pet-store/pom.xml | 31 +++-- .../pet-store/src/main/resources/struts.xml | 2 +- samples/struts/pet-store/template.yml | 2 +- samples/struts/pet-store/test-event.json | 123 ++++++++++++++++++ 8 files changed, 169 insertions(+), 26 deletions(-) create mode 100644 samples/struts/pet-store/test-event.json diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle index 01368d93f..595282f8a 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle @@ -27,13 +27,13 @@ dependencies { implementation ('org.apache.struts:struts2-bean-validation-plugin:6.0.3') { exclude group: 'org.apache.struts', module: 'struts2-core' } - implementation ('com.jgeppert.struts2:struts2-aws-lambda-support-plugin:1.4.0') { + implementation ('com.jgeppert.struts2:struts2-aws-lambda-support-plugin:1.4.2') { exclude group: 'org.apache.struts', module: 'struts2-core' } implementation ('org.apache.struts:struts2-core:6.0.3') { exclude group: 'org.apache.logging.log4j', module: 'log4j-api' } - implementation ('org.hibernate:hibernate-validator:6.1.7.Final') + implementation ('org.hibernate.validator:hibernate-validator:6.1.7.Final') implementation ('com.fasterxml.jackson.core:jackson-databind:2.13.4') implementation ('com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.13.4') implementation ('org.apache.logging.log4j:log4j-core:2.19.0') diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml index 7ced173a4..d4c321b15 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml @@ -70,12 +70,12 @@ com.jgeppert.struts2 struts2-aws-lambda-support-plugin - 1.4.0 + 1.4.2 - org.hibernate + org.hibernate.validator hibernate-validator 6.1.7.Final diff --git a/samples/struts/pet-store/README.md b/samples/struts/pet-store/README.md index e421ac4e2..bc5c047ae 100644 --- a/samples/struts/pet-store/README.md +++ b/samples/struts/pet-store/README.md @@ -8,12 +8,21 @@ The application can be deployed in an AWS account using the [Serverless Applicat * [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 +$ mvn package && sam build +``` + +### Test Local + +``` +$ sam local invoke -e test-event.json ``` +### Deploy Sample Application + 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 @@ -31,17 +40,17 @@ Outputs ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ Key StrutsPetStoreApi Description URL for application -Value https://n60c1ycwa2.execute-api.eu-central-1.amazonaws.com/pets +Value https://xxxxxxxxxx.execute-api..amazonaws.com/pets ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ``` ## Test ### JSON Request: ``` -$ curl https://xxxxxxxxxx.execute-api.us-west-2.amazonaws.com/pets.json +$ curl https://xxxxxxxxxx.execute-api..amazonaws.com/pets.json ``` ### XML Request ``` -$ curl https://xxxxxxxxxx.execute-api.us-west-2.amazonaws.com/pets.xml +$ curl https://xxxxxxxxxx.execute-api..amazonaws.com/pets.xml ``` \ No newline at end of file diff --git a/samples/struts/pet-store/build.gradle b/samples/struts/pet-store/build.gradle index 67eb31db8..d204a2113 100644 --- a/samples/struts/pet-store/build.gradle +++ b/samples/struts/pet-store/build.gradle @@ -13,17 +13,19 @@ configurations { dependencies { implementation ( - 'com.amazonaws.serverless:aws-serverless-java-container-struts2:[1.0,)', + 'com.amazonaws.serverless:aws-serverless-java-container-struts:[1.9,)', 'org.apache.struts:struts2-convention-plugin:6.0.3', 'org.apache.struts:struts2-rest-plugin:6.0.3', 'org.apache.struts:struts2-bean-validation-plugin:6.0.3', 'org.apache.struts:struts2-junit-plugin:6.0.3', - 'com.jgeppert.struts2:struts2-aws-lambda-support-plugin:1.4.0', - 'org.hibernate:hibernate-validator:6.1.7.Final', - 'com.fasterxml.jackson.core:jackson-databind:2.13.4', + 'com.jgeppert.struts2:struts2-aws-lambda-support-plugin:1.4.2', + 'org.hibernate.validator:hibernate-validator:6.1.7.Final', + 'org.glassfish:javax.el:3.0.0', + 'javax.el:javax.el-api:3.0.0', + 'com.fasterxml.jackson.core:jackson-databind:2.13.3', + 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.13.3', 'org.apache.logging.log4j:log4j-core:2.19.0', 'org.apache.logging.log4j:log4j-api:2.19.0', - 'org.apache.logging.log4j:log4j-slf4j-impl:2.19.0', 'com.amazonaws:aws-lambda-java-log4j2:1.5.1', ) } diff --git a/samples/struts/pet-store/pom.xml b/samples/struts/pet-store/pom.xml index 178223d6d..91cbfd77f 100644 --- a/samples/struts/pet-store/pom.xml +++ b/samples/struts/pet-store/pom.xml @@ -27,7 +27,7 @@ 1.8 1.8 6.0.3 - 2.13.4 + 2.13.3 4.13.2 2.19.0 @@ -35,8 +35,8 @@ com.amazonaws.serverless - aws-serverless-java-container-struts2 - [1.6,) + aws-serverless-java-container-struts + [1.9,) @@ -74,15 +74,25 @@ com.jgeppert.struts2 struts2-aws-lambda-support-plugin - 1.4.0 + 1.4.2 - org.hibernate + org.hibernate.validator hibernate-validator 6.1.7.Final + + org.glassfish + javax.el + 3.0.0 + + + javax.el + javax.el-api + 3.0.0 + com.fasterxml.jackson.core @@ -99,22 +109,21 @@ jackson-databind ${jackson.version} - - org.apache.logging.log4j - log4j-core - ${log4j.version} + com.fasterxml.jackson.dataformat + jackson-dataformat-xml + ${jackson.version} org.apache.logging.log4j - log4j-api + log4j-core ${log4j.version} org.apache.logging.log4j - log4j-slf4j-impl + log4j-api ${log4j.version} diff --git a/samples/struts/pet-store/src/main/resources/struts.xml b/samples/struts/pet-store/src/main/resources/struts.xml index 038370d3d..3f6724e50 100644 --- a/samples/struts/pet-store/src/main/resources/struts.xml +++ b/samples/struts/pet-store/src/main/resources/struts.xml @@ -23,7 +23,7 @@ + class="org.apache.struts2.rest.handler.JacksonJsonHandler"/> diff --git a/samples/struts/pet-store/template.yml b/samples/struts/pet-store/template.yml index 94902ac9f..85870c6bd 100644 --- a/samples/struts/pet-store/template.yml +++ b/samples/struts/pet-store/template.yml @@ -14,7 +14,7 @@ Resources: Handler: com.amazonaws.serverless.proxy.struts.StrutsLambdaHandler::handleRequest Runtime: java11 CodeUri: . - MemorySize: 256 + MemorySize: 512 Policies: AWSLambdaBasicExecutionRole Timeout: 30 Events: diff --git a/samples/struts/pet-store/test-event.json b/samples/struts/pet-store/test-event.json new file mode 100644 index 000000000..5860f3e86 --- /dev/null +++ b/samples/struts/pet-store/test-event.json @@ -0,0 +1,123 @@ +{ + "body": "eyJ0ZXN0IjoiYm9keSJ9", + "resource": "/{proxy+}", + "path": "/pets.json", + "httpMethod": "GET", + "isBase64Encoded": true, + "queryStringParameters": { + "foo": "bar" + }, + "multiValueQueryStringParameters": { + "foo": [ + "bar" + ] + }, + "pathParameters": { + "proxy": "/path/to/resource" + }, + "stageVariables": { + "baz": "qux" + }, + "headers": { + "Accept": "application/json", + "Accept-Encoding": "gzip, deflate, sdch", + "Accept-Language": "en-US,en;q=0.8", + "Cache-Control": "max-age=0", + "CloudFront-Forwarded-Proto": "https", + "CloudFront-Is-Desktop-Viewer": "true", + "CloudFront-Is-Mobile-Viewer": "false", + "CloudFront-Is-SmartTV-Viewer": "false", + "CloudFront-Is-Tablet-Viewer": "false", + "CloudFront-Viewer-Country": "US", + "Host": "1234567890.execute-api.us-east-1.amazonaws.com", + "Upgrade-Insecure-Requests": "1", + "User-Agent": "Custom User Agent String", + "Via": "1.1 08f323deadbeefa7af34d5feb414ce27.cloudfront.net (CloudFront)", + "X-Amz-Cf-Id": "cDehVQoZnx43VYQb9j2-nvCh-9z396Uhbp027Y2JvkCPNLmGJHqlaA==", + "X-Forwarded-For": "127.0.0.1, 127.0.0.2", + "X-Forwarded-Port": "443", + "X-Forwarded-Proto": "https" + }, + "multiValueHeaders": { + "Accept": [ + "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8" + ], + "Accept-Encoding": [ + "gzip, deflate, sdch" + ], + "Accept-Language": [ + "en-US,en;q=0.8" + ], + "Cache-Control": [ + "max-age=0" + ], + "CloudFront-Forwarded-Proto": [ + "https" + ], + "CloudFront-Is-Desktop-Viewer": [ + "true" + ], + "CloudFront-Is-Mobile-Viewer": [ + "false" + ], + "CloudFront-Is-SmartTV-Viewer": [ + "false" + ], + "CloudFront-Is-Tablet-Viewer": [ + "false" + ], + "CloudFront-Viewer-Country": [ + "US" + ], + "Host": [ + "0123456789.execute-api.us-east-1.amazonaws.com" + ], + "Upgrade-Insecure-Requests": [ + "1" + ], + "User-Agent": [ + "Custom User Agent String" + ], + "Via": [ + "1.1 08f323deadbeefa7af34d5feb414ce27.cloudfront.net (CloudFront)" + ], + "X-Amz-Cf-Id": [ + "cDehVQoZnx43VYQb9j2-nvCh-9z396Uhbp027Y2JvkCPNLmGJHqlaA==" + ], + "X-Forwarded-For": [ + "127.0.0.1, 127.0.0.2" + ], + "X-Forwarded-Port": [ + "443" + ], + "X-Forwarded-Proto": [ + "https" + ] + }, + "requestContext": { + "accountId": "123456789012", + "resourceId": "123456", + "stage": "prod", + "requestId": "c6af9ac6-7b61-11e6-9a41-93e8deadbeef", + "requestTime": "09/Apr/2015:12:34:56 +0000", + "requestTimeEpoch": 1428582896000, + "identity": { + "cognitoIdentityPoolId": null, + "accountId": null, + "cognitoIdentityId": null, + "caller": null, + "accessKey": null, + "sourceIp": "127.0.0.1", + "cognitoAuthenticationType": null, + "cognitoAuthenticationProvider": null, + "userArn": null, + "userAgent": "Custom User Agent String", + "user": null + }, + "path": "/pets.json", + "resourcePath": "/{proxy+}", + "httpMethod": "GET", + "apiId": "1234567890", + "protocol": "HTTP/1.1" + } +} \ No newline at end of file From f661147e6ec7bde419aa15e44d894045de3da551 Mon Sep 17 00:00:00 2001 From: Johannes Geppert Date: Mon, 10 Oct 2022 17:55:08 +0200 Subject: [PATCH 251/888] Revert downgrade of jackson lib https://github.com/awslabs/aws-serverless-java-container/issues/479 --- samples/struts/pet-store/build.gradle | 2 +- samples/struts/pet-store/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/samples/struts/pet-store/build.gradle b/samples/struts/pet-store/build.gradle index d204a2113..dd26cf2a4 100644 --- a/samples/struts/pet-store/build.gradle +++ b/samples/struts/pet-store/build.gradle @@ -23,7 +23,7 @@ dependencies { 'org.glassfish:javax.el:3.0.0', 'javax.el:javax.el-api:3.0.0', 'com.fasterxml.jackson.core:jackson-databind:2.13.3', - 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.13.3', + 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.13.4', 'org.apache.logging.log4j:log4j-core:2.19.0', 'org.apache.logging.log4j:log4j-api:2.19.0', 'com.amazonaws:aws-lambda-java-log4j2:1.5.1', diff --git a/samples/struts/pet-store/pom.xml b/samples/struts/pet-store/pom.xml index 91cbfd77f..b4259b056 100644 --- a/samples/struts/pet-store/pom.xml +++ b/samples/struts/pet-store/pom.xml @@ -27,7 +27,7 @@ 1.8 1.8 6.0.3 - 2.13.3 + 2.13.4 4.13.2 2.19.0 From b370c4a4ed53283b73e66ef729556c2791ef3e71 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 24 Oct 2022 08:57:23 +0200 Subject: [PATCH 252/888] chore(deps): CVE-2022-42003 update Jackson databind version to 2.13.4.2 --- aws-serverless-java-container-core/pom.xml | 2 +- aws-serverless-java-container-jersey/pom.xml | 2 +- aws-serverless-java-container-spring/pom.xml | 2 +- aws-serverless-java-container-struts/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- samples/jersey/pet-store/build.gradle | 2 +- samples/jersey/pet-store/pom.xml | 2 +- samples/spark/pet-store/build.gradle | 2 +- samples/spark/pet-store/pom.xml | 2 +- samples/spring/pet-store/build.gradle | 2 +- samples/struts/pet-store/build.gradle | 2 +- samples/struts/pet-store/pom.xml | 2 +- 15 files changed, 15 insertions(+), 15 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 927fdc9c5..d69814a38 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -46,7 +46,7 @@ com.fasterxml.jackson.core jackson-databind - ${jackson.version} + ${jackson.version}.2 diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index 7c177c34d..d7346753f 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -66,7 +66,7 @@ com.fasterxml.jackson.core jackson-databind - ${jackson.version} + ${jackson.version}.2 true test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 3a8130f77..a8cb9e911 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -55,7 +55,7 @@ com.fasterxml.jackson.core jackson-databind - ${jackson.version} + ${jackson.version}.2 test diff --git a/aws-serverless-java-container-struts/pom.xml b/aws-serverless-java-container-struts/pom.xml index e251dac8c..83dacfda6 100644 --- a/aws-serverless-java-container-struts/pom.xml +++ b/aws-serverless-java-container-struts/pom.xml @@ -62,7 +62,7 @@ com.fasterxml.jackson.core jackson-databind - ${jackson.version} + ${jackson.version}.2 diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle index f7af0b4f5..94533105d 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle @@ -9,7 +9,7 @@ dependencies { implementation ( 'com.amazonaws:aws-lambda-java-core:1.2.1', 'com.amazonaws.serverless:aws-serverless-java-container-jersey:[1.0,)', - 'com.fasterxml.jackson.core:jackson-databind:2.13.4', + 'com.fasterxml.jackson.core:jackson-databind:2.13.4.2', 'io.symphonia:lambda-logging:1.0.3' ) diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle index 62864d91c..2f3bcae2f 100644 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle @@ -9,7 +9,7 @@ dependencies { implementation ( 'com.sparkjava:spark-core:2.9.4', 'com.amazonaws.serverless:aws-serverless-java-container-spark:[1.0,)', - 'com.fasterxml.jackson.core:jackson-databind:2.13.4', + 'com.fasterxml.jackson.core:jackson-databind:2.13.4.2', 'io.symphonia:lambda-logging:1.0.3' ) diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index 8a7394cfe..93a6e9b66 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -13,7 +13,7 @@ dependencies { 'org.apache.logging.log4j:log4j-core:2.19.0', 'org.apache.logging.log4j:log4j-api:2.19.0', 'org.apache.logging.log4j:log4j-slf4j-impl:2.19.0', - 'com.fasterxml.jackson.core:jackson-databind:2.13.4', + 'com.fasterxml.jackson.core:jackson-databind:2.13.4.2', 'com.amazonaws:aws-lambda-java-log4j2:1.5.1', ) diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle index 595282f8a..4b20eb871 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle @@ -34,7 +34,7 @@ dependencies { exclude group: 'org.apache.logging.log4j', module: 'log4j-api' } implementation ('org.hibernate.validator:hibernate-validator:6.1.7.Final') - implementation ('com.fasterxml.jackson.core:jackson-databind:2.13.4') + implementation ('com.fasterxml.jackson.core:jackson-databind:2.13.4.2') implementation ('com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.13.4') implementation ('org.apache.logging.log4j:log4j-core:2.19.0') implementation ('org.apache.logging.log4j:log4j-api:2.19.0') diff --git a/samples/jersey/pet-store/build.gradle b/samples/jersey/pet-store/build.gradle index 8392a2afe..a16021eed 100644 --- a/samples/jersey/pet-store/build.gradle +++ b/samples/jersey/pet-store/build.gradle @@ -9,7 +9,7 @@ dependencies { implementation ( 'com.amazonaws:aws-lambda-java-core:1.2.1', 'com.amazonaws.serverless:aws-serverless-java-container-jersey:[1.0,)', - 'com.fasterxml.jackson.core:jackson-databind:2.13.4', + 'com.fasterxml.jackson.core:jackson-databind:2.13.4.2', 'io.symphonia:lambda-logging:1.0.3' ) diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index 44efd8ab5..04f7456bf 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -78,7 +78,7 @@ com.fasterxml.jackson.core jackson-databind - ${jackson.version} + ${jackson.version}.2 diff --git a/samples/spark/pet-store/build.gradle b/samples/spark/pet-store/build.gradle index 186397104..ff586e42b 100644 --- a/samples/spark/pet-store/build.gradle +++ b/samples/spark/pet-store/build.gradle @@ -9,7 +9,7 @@ dependencies { implementation ( 'com.sparkjava:spark-core:2.9.4', 'com.amazonaws.serverless:aws-serverless-java-container-spark:[1.0,)', - 'com.fasterxml.jackson.core:jackson-databind:2.13.4', + 'com.fasterxml.jackson.core:jackson-databind:2.13.4.2', 'io.symphonia:lambda-logging:1.0.3' ) } diff --git a/samples/spark/pet-store/pom.xml b/samples/spark/pet-store/pom.xml index d064704d0..49c85683b 100644 --- a/samples/spark/pet-store/pom.xml +++ b/samples/spark/pet-store/pom.xml @@ -48,7 +48,7 @@ com.fasterxml.jackson.core jackson-databind - ${jackson.version} + ${jackson.version}.2 diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index 05c79cc68..06b4d3f8b 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -13,7 +13,7 @@ dependencies { 'org.apache.logging.log4j:log4j-core:2.19.0', 'org.apache.logging.log4j:log4j-api:2.19.0', 'org.apache.logging.log4j:log4j-slf4j-impl:2.19.0', - 'com.fasterxml.jackson.core:jackson-databind:2.13.4', + 'com.fasterxml.jackson.core:jackson-databind:2.13.4.2', 'com.amazonaws:aws-lambda-java-log4j2:1.5.1', ) } diff --git a/samples/struts/pet-store/build.gradle b/samples/struts/pet-store/build.gradle index dd26cf2a4..66bbec740 100644 --- a/samples/struts/pet-store/build.gradle +++ b/samples/struts/pet-store/build.gradle @@ -22,7 +22,7 @@ dependencies { 'org.hibernate.validator:hibernate-validator:6.1.7.Final', 'org.glassfish:javax.el:3.0.0', 'javax.el:javax.el-api:3.0.0', - 'com.fasterxml.jackson.core:jackson-databind:2.13.3', + 'com.fasterxml.jackson.core:jackson-databind:2.13.4.2', 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.13.4', 'org.apache.logging.log4j:log4j-core:2.19.0', 'org.apache.logging.log4j:log4j-api:2.19.0', diff --git a/samples/struts/pet-store/pom.xml b/samples/struts/pet-store/pom.xml index b4259b056..a807c10f3 100644 --- a/samples/struts/pet-store/pom.xml +++ b/samples/struts/pet-store/pom.xml @@ -107,7 +107,7 @@ com.fasterxml.jackson.core jackson-databind - ${jackson.version} + ${jackson.version}.2 com.fasterxml.jackson.dataformat From 9320edddfb0432dbf8845605df07d8d0d8661ba5 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 24 Oct 2022 08:58:10 +0200 Subject: [PATCH 253/888] chore(deps): CVE-2022-42889 explicitly set version for transitive commons-text dependency --- aws-serverless-java-container-struts/pom.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/aws-serverless-java-container-struts/pom.xml b/aws-serverless-java-container-struts/pom.xml index 83dacfda6..d7730d938 100644 --- a/aws-serverless-java-container-struts/pom.xml +++ b/aws-serverless-java-container-struts/pom.xml @@ -94,6 +94,11 @@ commons-io 2.11.0 + + org.apache.commons + commons-text + 1.10.0 + From 1996b822ca0f486313c99314ed7559dcfc98a5d0 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Thu, 10 Nov 2022 18:47:44 +0100 Subject: [PATCH 254/888] fix: Spring Boot 2 sample template, partially reverts commit 0b92c8ec9c6d8955ee6e311e668282a754d80d7d (#484) --- samples/springboot2/pet-store/template.yml | 26 ++++++++++------------ 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/samples/springboot2/pet-store/template.yml b/samples/springboot2/pet-store/template.yml index 6e8ee6534..c7a17276f 100644 --- a/samples/springboot2/pet-store/template.yml +++ b/samples/springboot2/pet-store/template.yml @@ -17,18 +17,16 @@ Resources: MemorySize: 1512 Policies: AWSLambdaBasicExecutionRole Timeout: 60 - FunctionUrlConfig: - AuthType: NONE -# Events: -# HttpApiEvent: -# Type: HttpApi -# Properties: -# TimeoutInMillis: 20000 -# PayloadFormatVersion: '1.0' + Events: + HttpApiEvent: + Type: HttpApi + Properties: + TimeoutInMillis: 20000 + PayloadFormatVersion: '1.0' -#Outputs: -# SpringBootPetStoreApi: -# Description: URL for application -# Value: !Sub 'https://${ServerlessHttpApi}.execute-api.${AWS::Region}.amazonaws.com/pets' -# Export: -# Name: SpringBootPetStoreApi +Outputs: + SpringBootPetStoreApi: + Description: URL for application + Value: !Sub 'https://${ServerlessHttpApi}.execute-api.${AWS::Region}.amazonaws.com/pets' + Export: + Name: SpringBootPetStoreApi From 61ca5658f9712121a4e0f99433e3082dffeeeac0 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Thu, 10 Nov 2022 21:09:25 +0100 Subject: [PATCH 255/888] chore: update some Maven plugins to allow build with JDK17 --- aws-serverless-java-container-core/pom.xml | 1 - aws-serverless-java-container-jersey/pom.xml | 2 -- aws-serverless-java-container-spark/pom.xml | 1 - aws-serverless-java-container-spring/pom.xml | 1 - .../pom.xml | 1 - aws-serverless-java-container-struts/pom.xml | 1 - pom.xml | 15 +++++++--- spotbugs-excludeFilter.xml | 28 +++++++++++++++++++ 8 files changed, 39 insertions(+), 11 deletions(-) create mode 100644 spotbugs-excludeFilter.xml diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index d69814a38..ccf943a33 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -110,7 +110,6 @@ org.jacoco jacoco-maven-plugin - 0.8.6 ${basedir}/target/coverage-reports/jacoco-unit.exec ${basedir}/target/coverage-reports/jacoco-unit.exec diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index d7346753f..6600c1117 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -107,7 +107,6 @@ org.jacoco jacoco-maven-plugin - 0.8.6 ${basedir}/target/coverage-reports/jacoco-unit.exec ${basedir}/target/coverage-reports/jacoco-unit.exec @@ -160,7 +159,6 @@ com.github.spotbugs spotbugs-maven-plugin - 4.2.0 Low + + High true ${project.build.directory}/spotbugs - + ${session.executionRootDirectory}/spotbugs-excludeFilter.xml com.h3xstream.findsecbugs findsecbugs-plugin - 1.7.1 + 1.12.0 + + org.jacoco + jacoco-maven-plugin + 0.8.8 + diff --git a/spotbugs-excludeFilter.xml b/spotbugs-excludeFilter.xml new file mode 100644 index 000000000..b26b1ad24 --- /dev/null +++ b/spotbugs-excludeFilter.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + \ No newline at end of file From f92b42aa60811800aafc19fc105c13e95bd1ac2d Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 11 Nov 2022 10:58:20 +0100 Subject: [PATCH 256/888] chore(deps): update Jackson version to 2.14.0 --- aws-serverless-java-container-core/pom.xml | 2 +- aws-serverless-java-container-jersey/pom.xml | 2 +- aws-serverless-java-container-spring/pom.xml | 2 +- aws-serverless-java-container-struts/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- pom.xml | 2 +- samples/jersey/pet-store/build.gradle | 2 +- samples/jersey/pet-store/pom.xml | 2 +- samples/spark/pet-store/build.gradle | 2 +- samples/spark/pet-store/pom.xml | 2 +- samples/spring/pet-store/build.gradle | 2 +- samples/struts/pet-store/build.gradle | 2 +- samples/struts/pet-store/pom.xml | 2 +- 16 files changed, 16 insertions(+), 16 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index ccf943a33..7047e9a58 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -46,7 +46,7 @@ com.fasterxml.jackson.core jackson-databind - ${jackson.version}.2 + ${jackson.version} diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index 6600c1117..11c9ee9ca 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -66,7 +66,7 @@ com.fasterxml.jackson.core jackson-databind - ${jackson.version}.2 + ${jackson.version} true test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 3dc52fb66..0d672153c 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -55,7 +55,7 @@ com.fasterxml.jackson.core jackson-databind - ${jackson.version}.2 + ${jackson.version} test diff --git a/aws-serverless-java-container-struts/pom.xml b/aws-serverless-java-container-struts/pom.xml index fa9c98421..9ba433706 100644 --- a/aws-serverless-java-container-struts/pom.xml +++ b/aws-serverless-java-container-struts/pom.xml @@ -62,7 +62,7 @@ com.fasterxml.jackson.core jackson-databind - ${jackson.version}.2 + ${jackson.version} diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle index 94533105d..381bc42e6 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle @@ -9,7 +9,7 @@ dependencies { implementation ( 'com.amazonaws:aws-lambda-java-core:1.2.1', 'com.amazonaws.serverless:aws-serverless-java-container-jersey:[1.0,)', - 'com.fasterxml.jackson.core:jackson-databind:2.13.4.2', + 'com.fasterxml.jackson.core:jackson-databind:2.14.0', 'io.symphonia:lambda-logging:1.0.3' ) diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle index 2f3bcae2f..95cf50f90 100644 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle @@ -9,7 +9,7 @@ dependencies { implementation ( 'com.sparkjava:spark-core:2.9.4', 'com.amazonaws.serverless:aws-serverless-java-container-spark:[1.0,)', - 'com.fasterxml.jackson.core:jackson-databind:2.13.4.2', + 'com.fasterxml.jackson.core:jackson-databind:2.14.0', 'io.symphonia:lambda-logging:1.0.3' ) diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index 93a6e9b66..457feec60 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -13,7 +13,7 @@ dependencies { 'org.apache.logging.log4j:log4j-core:2.19.0', 'org.apache.logging.log4j:log4j-api:2.19.0', 'org.apache.logging.log4j:log4j-slf4j-impl:2.19.0', - 'com.fasterxml.jackson.core:jackson-databind:2.13.4.2', + 'com.fasterxml.jackson.core:jackson-databind:2.14.0', 'com.amazonaws:aws-lambda-java-log4j2:1.5.1', ) diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle index 4b20eb871..f2f7598c8 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle @@ -34,7 +34,7 @@ dependencies { exclude group: 'org.apache.logging.log4j', module: 'log4j-api' } implementation ('org.hibernate.validator:hibernate-validator:6.1.7.Final') - implementation ('com.fasterxml.jackson.core:jackson-databind:2.13.4.2') + implementation ('com.fasterxml.jackson.core:jackson-databind:2.14.0') implementation ('com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.13.4') implementation ('org.apache.logging.log4j:log4j-core:2.19.0') implementation ('org.apache.logging.log4j:log4j-api:2.19.0') diff --git a/pom.xml b/pom.xml index 9b1487e84..09af4a99a 100644 --- a/pom.xml +++ b/pom.xml @@ -82,7 +82,7 @@ 0.7 7.3.0 - 2.13.4 + 2.14.0 2.0.2 UTF-8 diff --git a/samples/jersey/pet-store/build.gradle b/samples/jersey/pet-store/build.gradle index a16021eed..10af02e06 100644 --- a/samples/jersey/pet-store/build.gradle +++ b/samples/jersey/pet-store/build.gradle @@ -9,7 +9,7 @@ dependencies { implementation ( 'com.amazonaws:aws-lambda-java-core:1.2.1', 'com.amazonaws.serverless:aws-serverless-java-container-jersey:[1.0,)', - 'com.fasterxml.jackson.core:jackson-databind:2.13.4.2', + 'com.fasterxml.jackson.core:jackson-databind:2.14.0', 'io.symphonia:lambda-logging:1.0.3' ) diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index 04f7456bf..44efd8ab5 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -78,7 +78,7 @@ com.fasterxml.jackson.core jackson-databind - ${jackson.version}.2 + ${jackson.version} diff --git a/samples/spark/pet-store/build.gradle b/samples/spark/pet-store/build.gradle index ff586e42b..053d46ecd 100644 --- a/samples/spark/pet-store/build.gradle +++ b/samples/spark/pet-store/build.gradle @@ -9,7 +9,7 @@ dependencies { implementation ( 'com.sparkjava:spark-core:2.9.4', 'com.amazonaws.serverless:aws-serverless-java-container-spark:[1.0,)', - 'com.fasterxml.jackson.core:jackson-databind:2.13.4.2', + 'com.fasterxml.jackson.core:jackson-databind:2.14.0', 'io.symphonia:lambda-logging:1.0.3' ) } diff --git a/samples/spark/pet-store/pom.xml b/samples/spark/pet-store/pom.xml index 49c85683b..d064704d0 100644 --- a/samples/spark/pet-store/pom.xml +++ b/samples/spark/pet-store/pom.xml @@ -48,7 +48,7 @@ com.fasterxml.jackson.core jackson-databind - ${jackson.version}.2 + ${jackson.version} diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index 06b4d3f8b..aa50ac94e 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -13,7 +13,7 @@ dependencies { 'org.apache.logging.log4j:log4j-core:2.19.0', 'org.apache.logging.log4j:log4j-api:2.19.0', 'org.apache.logging.log4j:log4j-slf4j-impl:2.19.0', - 'com.fasterxml.jackson.core:jackson-databind:2.13.4.2', + 'com.fasterxml.jackson.core:jackson-databind:2.14.0', 'com.amazonaws:aws-lambda-java-log4j2:1.5.1', ) } diff --git a/samples/struts/pet-store/build.gradle b/samples/struts/pet-store/build.gradle index 66bbec740..57b7e49f4 100644 --- a/samples/struts/pet-store/build.gradle +++ b/samples/struts/pet-store/build.gradle @@ -22,7 +22,7 @@ dependencies { 'org.hibernate.validator:hibernate-validator:6.1.7.Final', 'org.glassfish:javax.el:3.0.0', 'javax.el:javax.el-api:3.0.0', - 'com.fasterxml.jackson.core:jackson-databind:2.13.4.2', + 'com.fasterxml.jackson.core:jackson-databind:2.14.0', 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.13.4', 'org.apache.logging.log4j:log4j-core:2.19.0', 'org.apache.logging.log4j:log4j-api:2.19.0', diff --git a/samples/struts/pet-store/pom.xml b/samples/struts/pet-store/pom.xml index a807c10f3..b4259b056 100644 --- a/samples/struts/pet-store/pom.xml +++ b/samples/struts/pet-store/pom.xml @@ -107,7 +107,7 @@ com.fasterxml.jackson.core jackson-databind - ${jackson.version}.2 + ${jackson.version} com.fasterxml.jackson.dataformat From 329be189d868920b2d9d872bef570ea8da80929c Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 11 Nov 2022 11:14:44 +0100 Subject: [PATCH 257/888] chore: replace ${session.executionRootDirectory} with ${project.parent.basedir} to fix CI build --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 09af4a99a..741579cf2 100644 --- a/pom.xml +++ b/pom.xml @@ -194,7 +194,7 @@ true ${project.build.directory}/spotbugs - ${session.executionRootDirectory}/spotbugs-excludeFilter.xml + ${project.parent.basedir}/spotbugs-excludeFilter.xml com.h3xstream.findsecbugs From f980a1b1073711c152683eecda8796b2f87ca571 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 11 Nov 2022 11:18:05 +0100 Subject: [PATCH 258/888] chore(deps): update Jackson version to 2.14.0 --- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/jersey/pet-store/pom.xml | 2 +- samples/spark/pet-store/pom.xml | 2 +- samples/struts/pet-store/build.gradle | 2 +- samples/struts/pet-store/pom.xml | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml index 99a75e720..2ae636fa1 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml @@ -15,7 +15,7 @@ 1.8 1.8 2.37 - 2.13.4 + 2.14.0 diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml index 4e5993bb3..0381379f0 100644 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 1.8 - 2.13.4 + 2.14.0 2.9.1 diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle index f2f7598c8..d37db592f 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle @@ -35,7 +35,7 @@ dependencies { } implementation ('org.hibernate.validator:hibernate-validator:6.1.7.Final') implementation ('com.fasterxml.jackson.core:jackson-databind:2.14.0') - implementation ('com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.13.4') + implementation ('com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.14.0') implementation ('org.apache.logging.log4j:log4j-core:2.19.0') implementation ('org.apache.logging.log4j:log4j-api:2.19.0') implementation ('org.apache.logging.log4j:log4j-slf4j-impl:2.19.0') diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml index d4c321b15..ef32c9b28 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 1.8 6.0.3 - 2.13.4 + 2.14.0 4.13.2 2.19.0 diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index 44efd8ab5..e24ad8223 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -27,7 +27,7 @@ 1.8 1.8 2.37 - 2.13.4 + 2.14.0 diff --git a/samples/spark/pet-store/pom.xml b/samples/spark/pet-store/pom.xml index d064704d0..e25f0f9e4 100644 --- a/samples/spark/pet-store/pom.xml +++ b/samples/spark/pet-store/pom.xml @@ -26,7 +26,7 @@ 1.8 1.8 - 2.13.4 + 2.14.0 2.9.1 diff --git a/samples/struts/pet-store/build.gradle b/samples/struts/pet-store/build.gradle index 57b7e49f4..f7d6af5e8 100644 --- a/samples/struts/pet-store/build.gradle +++ b/samples/struts/pet-store/build.gradle @@ -23,7 +23,7 @@ dependencies { 'org.glassfish:javax.el:3.0.0', 'javax.el:javax.el-api:3.0.0', 'com.fasterxml.jackson.core:jackson-databind:2.14.0', - 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.13.4', + 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.14.0', 'org.apache.logging.log4j:log4j-core:2.19.0', 'org.apache.logging.log4j:log4j-api:2.19.0', 'com.amazonaws:aws-lambda-java-log4j2:1.5.1', diff --git a/samples/struts/pet-store/pom.xml b/samples/struts/pet-store/pom.xml index b4259b056..3f6b1d7b8 100644 --- a/samples/struts/pet-store/pom.xml +++ b/samples/struts/pet-store/pom.xml @@ -27,7 +27,7 @@ 1.8 1.8 6.0.3 - 2.13.4 + 2.14.0 4.13.2 2.19.0 From 7ae7217f2332a35677ce6e9cb13e6105995dafa6 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Tue, 15 Nov 2022 12:02:14 +0100 Subject: [PATCH 259/888] chore(deps): Update Spring dependencies (framework to 5.2.23, security to 5.7.4, boot to 2.7.5) --- aws-serverless-java-container-core/pom.xml | 2 +- aws-serverless-java-container-spring/pom.xml | 4 ++-- aws-serverless-java-container-springboot2/pom.xml | 6 +++--- .../src/main/resources/archetype-resources/build.gradle | 4 ++-- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/spring/pet-store/build.gradle | 4 ++-- samples/spring/pet-store/pom.xml | 2 +- samples/springboot2/pet-store/build.gradle | 2 +- samples/springboot2/pet-store/pom.xml | 2 +- 11 files changed, 16 insertions(+), 16 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 7047e9a58..f5bae2f56 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -90,7 +90,7 @@ org.springframework.security spring-security-web - 5.7.3 + 5.7.4 test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 0d672153c..b238a0d55 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -16,8 +16,8 @@ - 5.3.22 - 5.7.3 + 5.3.23 + 5.7.4 diff --git a/aws-serverless-java-container-springboot2/pom.xml b/aws-serverless-java-container-springboot2/pom.xml index 069543dc8..8768c373c 100644 --- a/aws-serverless-java-container-springboot2/pom.xml +++ b/aws-serverless-java-container-springboot2/pom.xml @@ -15,9 +15,9 @@ 1.10-SNAPSHOT - 5.3.22 - 2.7.3 - 5.7.3 + 5.3.23 + 2.7.5 + 5.7.4 1.8 1.8 diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index 457feec60..3e53cd649 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -7,8 +7,8 @@ repositories { dependencies { implementation ( - 'org.springframework:spring-webmvc:5.3.22', - 'org.springframework:spring-context:5.3.22', + 'org.springframework:spring-webmvc:5.3.23', + 'org.springframework:spring-context:5.3.23', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[1.0,)', 'org.apache.logging.log4j:log4j-core:2.19.0', 'org.apache.logging.log4j:log4j-api:2.19.0', diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index 77334f2d1..5491fbb62 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 1.8 - 5.3.22 + 5.3.23 4.13.2 2.19.0 diff --git a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle index 4a7199c81..73c0bdb60 100644 --- a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle @@ -8,7 +8,7 @@ repositories { dependencies { implementation ( - 'org.springframework.boot:spring-boot-starter-web:2.7.3', + 'org.springframework.boot:spring-boot-starter-web:2.7.5', 'com.amazonaws.serverless:aws-serverless-java-container-springboot2:[1.0,)', 'io.symphonia:lambda-logging:1.0.3' ) diff --git a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml index 27cfc10c1..9a0b4123a 100644 --- a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ org.springframework.boot spring-boot-starter-parent - 2.7.3 + 2.7.5 diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index aa50ac94e..838afd6ab 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -7,8 +7,8 @@ repositories { dependencies { implementation ( - 'org.springframework:spring-webmvc:5.3.22', - 'org.springframework:spring-context:5.3.22', + 'org.springframework:spring-webmvc:5.3.23', + 'org.springframework:spring-context:5.3.23', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[1.0,)', 'org.apache.logging.log4j:log4j-core:2.19.0', 'org.apache.logging.log4j:log4j-api:2.19.0', diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index 645982b6f..2d1a472f3 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -26,7 +26,7 @@ 1.8 1.8 - 5.3.22 + 5.3.23 4.13.2 2.19.0 diff --git a/samples/springboot2/pet-store/build.gradle b/samples/springboot2/pet-store/build.gradle index 8a68214f1..22989c9e9 100644 --- a/samples/springboot2/pet-store/build.gradle +++ b/samples/springboot2/pet-store/build.gradle @@ -8,7 +8,7 @@ repositories { dependencies { implementation ( - implementation('org.springframework.boot:spring-boot-starter-web:2.7.3') { + implementation('org.springframework.boot:spring-boot-starter-web:2.7.5') { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat' }, 'com.amazonaws.serverless:aws-serverless-java-container-springboot2:[1.4,)', diff --git a/samples/springboot2/pet-store/pom.xml b/samples/springboot2/pet-store/pom.xml index b0e6720dc..8f7150db7 100644 --- a/samples/springboot2/pet-store/pom.xml +++ b/samples/springboot2/pet-store/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 2.7.3 + 2.7.5 From b3f4e830dfda45f296dd6913960ca4867c20fd66 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Tue, 15 Nov 2022 12:32:50 +0100 Subject: [PATCH 260/888] chore(build): update GitHub actions https://github.blog/changelog/2022-09-22-github-actions-all-actions-will-begin-running-on-node16-instead-of-node12/ --- .../workflows/continuous-integration-workflow.yml | 15 ++++++++------- .github/workflows/release.yml | 2 +- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/.github/workflows/continuous-integration-workflow.yml b/.github/workflows/continuous-integration-workflow.yml index e1ae0e00b..9b54c6157 100644 --- a/.github/workflows/continuous-integration-workflow.yml +++ b/.github/workflows/continuous-integration-workflow.yml @@ -10,7 +10,7 @@ jobs: name: Build and test core runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Build latest run: mvn -q clean install working-directory: ./aws-serverless-java-container-core @@ -19,12 +19,13 @@ jobs: name: Build and test Jersey runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Build latest run: ./gha_build.sh jersey true true - name: Set up JDK 8 - uses: actions/setup-java@v1 + uses: actions/setup-java@v2 with: + distribution: corretto java-version: 8 - name: Build Jersey 2.27 run: ./gha_build.sh jersey false false -Djersey.version=2.27 @@ -37,7 +38,7 @@ jobs: name: Build and test Spark runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Build latest run: ./gha_build.sh spark true true @@ -45,7 +46,7 @@ jobs: name: Build and test Spring & SpringBoot runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Build latest # we reduce the minCoverage for this run because it will skip the SpringBoot 1.5 tests since they are no longer compatible with # Spring core 5.2 and above. SpringBoot 1.5 is deprecated @@ -61,7 +62,7 @@ jobs: name: Build and test SpringBoot 2 runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Build latest run: ./gha_build.sh springboot2 true true # https://github.com/spring-projects/spring-boot/wiki/Supported-Versions @@ -78,6 +79,6 @@ jobs: name: Build and test Struts runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Build latest run: ./gha_build.sh struts true true diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 57fd9681f..0e90ca336 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -14,7 +14,7 @@ jobs: release: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Configure Git User # may be removed after https://github.com/actions/checkout/issues/13 is resolved run: | git config user.email "${{ github.actor }}@users.noreply.github.com" From db5570a415466d225639e9a52db28b4e07f92cfa Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Tue, 15 Nov 2022 14:49:50 +0100 Subject: [PATCH 261/888] chore(build): update GitHub actions https://github.blog/changelog/2022-09-22-github-actions-all-actions-will-begin-running-on-node16-instead-of-node12/ --- .github/workflows/continuous-integration-workflow.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/continuous-integration-workflow.yml b/.github/workflows/continuous-integration-workflow.yml index 9b54c6157..033e4d552 100644 --- a/.github/workflows/continuous-integration-workflow.yml +++ b/.github/workflows/continuous-integration-workflow.yml @@ -25,7 +25,7 @@ jobs: - name: Set up JDK 8 uses: actions/setup-java@v2 with: - distribution: corretto + distribution: 'corretto' java-version: 8 - name: Build Jersey 2.27 run: ./gha_build.sh jersey false false -Djersey.version=2.27 From 7844bc405e6493e46492f63de67dbb3816c5837d Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Tue, 15 Nov 2022 14:56:41 +0100 Subject: [PATCH 262/888] chore(build): update GitHub actions https://github.blog/changelog/2022-09-22-github-actions-all-actions-will-begin-running-on-node16-instead-of-node12/ --- .github/workflows/continuous-integration-workflow.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/continuous-integration-workflow.yml b/.github/workflows/continuous-integration-workflow.yml index 033e4d552..2d88a1973 100644 --- a/.github/workflows/continuous-integration-workflow.yml +++ b/.github/workflows/continuous-integration-workflow.yml @@ -25,7 +25,7 @@ jobs: - name: Set up JDK 8 uses: actions/setup-java@v2 with: - distribution: 'corretto' + distribution: 'temurin' # Corretto doesn't work right now https://github.com/actions/setup-java/issues/68 java-version: 8 - name: Build Jersey 2.27 run: ./gha_build.sh jersey false false -Djersey.version=2.27 From 789778302a7a70aa120261f17f5b910f457e00e6 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Tue, 15 Nov 2022 14:58:36 +0100 Subject: [PATCH 263/888] chore(build): use Corretto instead of Temurin for building --- .github/workflows/continuous-integration-workflow.yml | 4 ++-- .github/workflows/release.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/continuous-integration-workflow.yml b/.github/workflows/continuous-integration-workflow.yml index 2d88a1973..0047dd19e 100644 --- a/.github/workflows/continuous-integration-workflow.yml +++ b/.github/workflows/continuous-integration-workflow.yml @@ -23,9 +23,9 @@ jobs: - name: Build latest run: ./gha_build.sh jersey true true - name: Set up JDK 8 - uses: actions/setup-java@v2 + uses: actions/setup-java@v3 with: - distribution: 'temurin' # Corretto doesn't work right now https://github.com/actions/setup-java/issues/68 + distribution: 'corretto' java-version: 8 - name: Build Jersey 2.27 run: ./gha_build.sh jersey false false -Djersey.version=2.27 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 0e90ca336..64ec8e2d5 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -20,9 +20,9 @@ jobs: git config user.email "${{ github.actor }}@users.noreply.github.com" git config user.name "${{ github.actor }}" - name: Set up Maven - uses: actions/setup-java@v2 + uses: actions/setup-java@v3 with: - distribution: 'temurin' # Corretto isn't supported right now https://github.com/actions/setup-java/issues/68 + distribution: 'corretto' java-version: 8 server-id: sonatype-nexus-staging server-username: MAVEN_USERNAME From e5af738661f9dd7f40c75a8302dac8c3d30c461f Mon Sep 17 00:00:00 2001 From: James Eastham Date: Tue, 15 Nov 2022 14:17:42 +0000 Subject: [PATCH 264/888] Add link to Spring on Lambda YT playlist --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index ad3461691..cb98d749f 100644 --- a/README.md +++ b/README.md @@ -35,3 +35,9 @@ public class StreamLambdaHandler implements RequestStreamHandler { } } ``` + +## Public Examples + +### Videos + +- [Spring on AWS Lambda](https://www.youtube.com/watch?v=A1rYiHTy9Lg&list=PLCOG9xkUD90IDm9tcY-5nMK6X6g8SD-Sz) YouTube Playlist from [@plantpowerjames](https://twitter.com/plantpowerjames) From 76fe0ec1e0ad20435aec9c96133a5674416fb4d0 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Wed, 16 Nov 2022 07:53:49 +0100 Subject: [PATCH 265/888] chore(deps): update SLF4J to 2.0.3 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 741579cf2..d5ff104b2 100644 --- a/pom.xml +++ b/pom.xml @@ -83,7 +83,7 @@ 0.7 7.3.0 2.14.0 - 2.0.2 + 2.0.3 UTF-8 From 24cd7cc32eeb5b6ce86dd06c4a23fb3eef5d739a Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 5 Dec 2022 15:55:17 +0100 Subject: [PATCH 266/888] chore(build): fix continuous integration (master branch got renamed to main a while ago) --- .github/workflows/continuous-integration-workflow.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/continuous-integration-workflow.yml b/.github/workflows/continuous-integration-workflow.yml index 0047dd19e..6a8d438a6 100644 --- a/.github/workflows/continuous-integration-workflow.yml +++ b/.github/workflows/continuous-integration-workflow.yml @@ -3,7 +3,7 @@ on: push: pull_request: branches: - - master + - main jobs: build_core: From 3928dce67b54241206251775ab9d8b51a6098cca Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 5 Dec 2022 16:00:31 +0100 Subject: [PATCH 267/888] chore(build): allow to trigger continuous integration manually (add workflow_dispatch event) --- .github/workflows/continuous-integration-workflow.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/continuous-integration-workflow.yml b/.github/workflows/continuous-integration-workflow.yml index 6a8d438a6..2aaf17617 100644 --- a/.github/workflows/continuous-integration-workflow.yml +++ b/.github/workflows/continuous-integration-workflow.yml @@ -4,6 +4,7 @@ on: pull_request: branches: - main + workflow_dispatch: jobs: build_core: From 680b6f154c9d361c3ff316db746a09045fa39921 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 5 Dec 2022 17:10:07 +0100 Subject: [PATCH 268/888] docs: add link to Java on AWS Lambda workshop --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index cb98d749f..d4c836e28 100644 --- a/README.md +++ b/README.md @@ -38,6 +38,10 @@ public class StreamLambdaHandler implements RequestStreamHandler { ## Public Examples +### Workshops + +- [Java on AWS Lambda](https://catalog.workshops.aws/java-on-aws-lambda) From Serverful to Serverless Java with AWS Lambda in 2 hours + ### Videos - [Spring on AWS Lambda](https://www.youtube.com/watch?v=A1rYiHTy9Lg&list=PLCOG9xkUD90IDm9tcY-5nMK6X6g8SD-Sz) YouTube Playlist from [@plantpowerjames](https://twitter.com/plantpowerjames) From 4bf3876dbc25a683fb35ea1f57b9ebf3be22836f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lu=C3=ADs=20Duarte?= Date: Mon, 5 Dec 2022 09:10:08 +0000 Subject: [PATCH 269/888] Add ALB Context to API GW Payload V2 --- .../jaxrs/AwsProxySecurityContext.java | 4 +--- .../servlet/AwsProxyHttpServletRequest.java | 6 +++--- .../AwsProxyHttpServletResponseWriter.java | 3 ++- .../testutils/AwsProxyRequestBuilder.java | 8 ++++---- .../proxy/model/AwsProxyRequest.java | 5 ----- .../proxy/model/HttpApiV2ProxyRequest.java | 11 +++++++++++ .../model/HttpApiV2ProxyRequestContext.java | 10 ++++++++++ .../serverless/proxy/model/RequestSource.java | 18 ++++++++++++++++++ .../proxy/model/HttpApiV2ProxyRequestTest.java | 2 ++ 9 files changed, 51 insertions(+), 16 deletions(-) create mode 100644 aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/RequestSource.java diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/jaxrs/AwsProxySecurityContext.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/jaxrs/AwsProxySecurityContext.java index 025dceacc..b05822971 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/jaxrs/AwsProxySecurityContext.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/jaxrs/AwsProxySecurityContext.java @@ -14,15 +14,13 @@ import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.serverless.proxy.model.CognitoAuthorizerClaims; +import com.amazonaws.serverless.proxy.model.RequestSource; import com.amazonaws.services.lambda.runtime.Context; import javax.ws.rs.core.SecurityContext; import java.security.Principal; -import static com.amazonaws.serverless.proxy.model.AwsProxyRequest.RequestSource.API_GATEWAY; - - /** * default implementation of the SecurityContext object. This class supports 3 API Gateway's authorization methods: * AWS_IAM, CUSTOM_AUTHORIZER, and COGNITO_USER_POOL (oidc). The Principal returned by the object depends on the authorization diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java index eecda99cb..61486bc74 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java @@ -18,6 +18,7 @@ import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.serverless.proxy.model.ContainerConfig; import com.amazonaws.serverless.proxy.model.Headers; +import com.amazonaws.serverless.proxy.model.RequestSource; import com.amazonaws.services.lambda.runtime.Context; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; @@ -49,7 +50,6 @@ import java.util.stream.Collectors; import java.util.stream.Stream; - /** * Implementation of the HttpServletRequest interface that supports AwsProxyRequest object. * This object is initialized with an AwsProxyRequest event and a SecurityContext generated @@ -204,7 +204,7 @@ public String getQueryString() { return this.generateQueryString( request.getMultiValueQueryStringParameters(), // ALB does not automatically decode parameters, so we don't want to re-encode them - request.getRequestSource() != AwsProxyRequest.RequestSource.ALB, + request.getRequestSource() != RequestSource.ALB, config.getUriEncoding()); } catch (ServletException e) { log.error("Could not generate query string", e); @@ -580,7 +580,7 @@ private List getHeaderValues(String key) { // special cases for referer and user agent headers List values = new ArrayList<>(); - if (request.getRequestSource() == AwsProxyRequest.RequestSource.API_GATEWAY) { + if (request.getRequestSource() == RequestSource.API_GATEWAY) { if ("referer".equals(key.toLowerCase(Locale.ENGLISH))) { values.add(request.getRequestContext().getIdentity().getCaller()); return values; diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletResponseWriter.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletResponseWriter.java index de84b5c2d..524a36f96 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletResponseWriter.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletResponseWriter.java @@ -20,6 +20,7 @@ import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.serverless.proxy.model.AwsProxyResponse; import com.amazonaws.serverless.proxy.model.Headers; +import com.amazonaws.serverless.proxy.model.RequestSource; import com.amazonaws.services.lambda.runtime.Context; import javax.ws.rs.core.Response; @@ -73,7 +74,7 @@ public AwsProxyResponse writeResponse(AwsHttpServletResponse containerResponse, awsProxyResponse.setStatusCode(containerResponse.getStatus()); - if (containerResponse.getAwsProxyRequest() != null && containerResponse.getAwsProxyRequest().getRequestSource() == AwsProxyRequest.RequestSource.ALB) { + if (containerResponse.getAwsProxyRequest() != null && containerResponse.getAwsProxyRequest().getRequestSource() == RequestSource.ALB) { awsProxyResponse.setStatusDescription(containerResponse.getStatus() + " " + Response.Status.fromStatusCode(containerResponse.getStatus()).getReasonPhrase()); } diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/testutils/AwsProxyRequestBuilder.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/testutils/AwsProxyRequestBuilder.java index 998bf4748..6fae6db78 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/testutils/AwsProxyRequestBuilder.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/testutils/AwsProxyRequestBuilder.java @@ -224,11 +224,11 @@ public AwsProxyRequestBuilder queryString(String key, String value) { this.request.setMultiValueQueryStringParameters(new MultiValuedTreeMap<>()); } - if (request.getRequestSource() == AwsProxyRequest.RequestSource.API_GATEWAY) { + if (request.getRequestSource() == RequestSource.API_GATEWAY) { this.request.getMultiValueQueryStringParameters().add(key, value); } // ALB does not decode parameters automatically like API Gateway. - if (request.getRequestSource() == AwsProxyRequest.RequestSource.ALB) { + if (request.getRequestSource() == RequestSource.ALB) { try { //if (URLDecoder.decode(value, ContainerConfig.DEFAULT_CONTENT_CHARSET).equals(value)) { // TODO: Assume we are always given an unencoded value, smarter check here to encode @@ -285,7 +285,7 @@ public AwsProxyRequestBuilder binaryBody(InputStream is) public AwsProxyRequestBuilder authorizerPrincipal(String principal) { - if (this.request.getRequestSource() == AwsProxyRequest.RequestSource.API_GATEWAY) { + if (this.request.getRequestSource() == RequestSource.API_GATEWAY) { if (this.request.getRequestContext().getAuthorizer() == null) { this.request.getRequestContext().setAuthorizer(new ApiGatewayAuthorizerContext()); } @@ -295,7 +295,7 @@ public AwsProxyRequestBuilder authorizerPrincipal(String principal) { } this.request.getRequestContext().getAuthorizer().getClaims().setSubject(principal); } - if (this.request.getRequestSource() == AwsProxyRequest.RequestSource.ALB) { + if (this.request.getRequestSource() == RequestSource.ALB) { header("x-amzn-oidc-identity", principal); try { header( diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/AwsProxyRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/AwsProxyRequest.java index 440421a71..075db0ac3 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/AwsProxyRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/AwsProxyRequest.java @@ -192,9 +192,4 @@ public boolean isBase64Encoded() { public void setIsBase64Encoded(boolean base64Encoded) { isBase64Encoded = base64Encoded; } - - public static enum RequestSource { - ALB, - API_GATEWAY - } } diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/HttpApiV2ProxyRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/HttpApiV2ProxyRequest.java index c50298eea..023236cc7 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/HttpApiV2ProxyRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/HttpApiV2ProxyRequest.java @@ -13,9 +13,12 @@ package com.amazonaws.serverless.proxy.model; import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonIgnore; import java.util.List; import java.util.Map; +import java.util.Objects; +import java.util.Optional; public class HttpApiV2ProxyRequest { private String version; @@ -127,4 +130,12 @@ public HttpApiV2ProxyRequestContext getRequestContext() { public void setRequestContext(HttpApiV2ProxyRequestContext requestContext) { this.requestContext = requestContext; } + + @JsonIgnore + public RequestSource getRequestSource() { + return Optional.ofNullable(getRequestContext()) + .map(HttpApiV2ProxyRequestContext::getElb) + .map(albContext -> RequestSource.ALB) + .orElse(RequestSource.API_GATEWAY); + } } diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/HttpApiV2ProxyRequestContext.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/HttpApiV2ProxyRequestContext.java index 738f692f6..e5a5b9d2d 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/HttpApiV2ProxyRequestContext.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/HttpApiV2ProxyRequestContext.java @@ -25,6 +25,7 @@ public class HttpApiV2ProxyRequestContext { private String stage; private String time; private long timeEpoch; + private AlbContext elb; private HttpApiV2HttpContext http; private HttpApiV2AuthorizerMap authorizer; @@ -117,4 +118,13 @@ public void setAuthorizer(HttpApiV2AuthorizerMap authorizer) { this.authorizer = authorizer; } + public AlbContext getElb() { + return this.elb; + } + + public void setElb(AlbContext context) { + this.elb = context; + } + + } diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/RequestSource.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/RequestSource.java new file mode 100644 index 000000000..c819fdcc0 --- /dev/null +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/RequestSource.java @@ -0,0 +1,18 @@ +/* + * Copyright 2022 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance + * with the License. A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.proxy.model; + +public enum RequestSource { + ALB, + API_GATEWAY +} \ No newline at end of file diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/model/HttpApiV2ProxyRequestTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/model/HttpApiV2ProxyRequestTest.java index c673a59e1..6e9aaecb8 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/model/HttpApiV2ProxyRequestTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/model/HttpApiV2ProxyRequestTest.java @@ -136,6 +136,7 @@ public void deserialize_fromJsonString_authorizerPopulatedCorrectly() { HttpApiV2ProxyRequest req = LambdaContainerHandler.getObjectMapper().readValue(BASE_PROXY_REQUEST, HttpApiV2ProxyRequest.class); assertTrue(req.getRequestContext().getAuthorizer().getJwtAuthorizer().getClaims().containsKey("claim1")); assertEquals(2, req.getRequestContext().getAuthorizer().getJwtAuthorizer().getScopes().size()); + assertEquals(RequestSource.API_GATEWAY, req.getRequestSource()); } catch (JsonProcessingException e) { e.printStackTrace(); fail("Exception while parsing request" + e.getMessage()); @@ -177,6 +178,7 @@ public void deserialize_fromJsonString_isBase64EncodedPopulates() { assertFalse(req.isBase64Encoded()); req = LambdaContainerHandler.getObjectMapper().readValue(NO_AUTH_PROXY, HttpApiV2ProxyRequest.class); assertTrue(req.isBase64Encoded()); + assertEquals(RequestSource.API_GATEWAY, req.getRequestSource()); } catch (JsonProcessingException e) { e.printStackTrace(); fail("Exception while parsing request" + e.getMessage()); From ed30fd11b64c55fadb2c78206c540728d27898c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lu=C3=ADs=20Duarte?= Date: Tue, 6 Dec 2022 18:23:14 +0000 Subject: [PATCH 270/888] Migrate to JUnit 5 --- aws-serverless-java-container-core/pom.xml | 23 ++ .../proxy/AsyncInitializationWrapperTest.java | 8 +- .../proxy/AwsProxyExceptionHandlerTest.java | 50 +-- .../AwsProxySecurityContextWriterTest.java | 12 +- .../serverless/proxy/RequestReaderTest.java | 12 +- .../serverless/proxy/ResponseWriterTest.java | 9 +- .../internal/LambdaContainerHandlerTest.java | 10 +- .../proxy/internal/SecurityUtilsTest.java | 8 +- .../jaxrs/AwsProxySecurityContextTest.java | 18 +- .../jaxrs/HttpApiV2SecurityContextTest.java | 10 +- ...ApacheCombinedServletLogFormatterTest.java | 64 ++-- .../internal/servlet/AwsAsyncContextTest.java | 12 +- .../servlet/AwsFilterChainManagerTest.java | 46 +-- ...HttpApiV2HttpServletRequestReaderTest.java | 8 +- .../servlet/AwsHttpServletRequestTest.java | 37 +-- .../servlet/AwsHttpServletResponseTest.java | 46 +-- .../internal/servlet/AwsHttpSessionTest.java | 20 +- .../AwsProxyHttpServletRequestFormTest.java | 49 ++- .../AwsProxyHttpServletRequestReaderTest.java | 24 +- .../AwsProxyHttpServletRequestTest.java | 284 +++++++++++------- .../AwsProxyRequestDispatcherTest.java | 36 ++- .../servlet/AwsServletContextTest.java | 47 +-- .../servlet/AwsServletRegistrationTest.java | 12 +- .../internal/servlet/FilterHolderTest.java | 6 +- ...vletLambdaContainerHandlerBuilderTest.java | 14 +- .../servlet/filters/UrlPathValidatorTest.java | 16 +- .../ApiGatewayAuthorizerContextTest.java | 6 +- .../proxy/model/AwsProxyRequestTest.java | 18 +- .../model/CognitoAuthorizerClaimsTest.java | 8 +- .../model/HttpApiV2ProxyRequestTest.java | 16 +- .../proxy/model/MultiValuedTreeMapTest.java | 12 +- aws-serverless-java-container-jersey/pom.xml | 7 +- .../proxy/jersey/JerseyAwsProxyTest.java | 271 ++++++++++------- .../proxy/jersey/JerseyInjectionTest.java | 9 +- .../proxy/jersey/JerseyParamEncodingTest.java | 173 ++++++----- aws-serverless-java-container-spark/pom.xml | 7 +- .../spark/HelloWorldSparkStreamTest.java | 31 +- .../proxy/spark/HelloWorldSparkTest.java | 51 ++-- .../proxy/spark/InitExceptionHandlerTest.java | 20 +- .../SparkLambdaContainerHandlerTest.java | 16 +- .../LambdaEmbeddedServerTest.java | 6 +- aws-serverless-java-container-spring/pom.xml | 7 +- .../serverless/proxy/spring/SlowAppTest.java | 10 +- .../proxy/spring/SpringAwsProxyTest.java | 229 ++++++++------ .../spring/SpringServletContextTest.java | 32 +- .../proxy/spring/StaticAppProxyTest.java | 7 +- .../extensibility/CustomServletTest.java | 10 +- .../spring/profile/SpringProfileTest.java | 18 +- .../pom.xml | 7 +- .../proxy/spring/SecurityAppTest.java | 8 +- .../proxy/spring/ServletAppTest.java | 86 +++--- .../serverless/proxy/spring/SlowAppTest.java | 11 +- .../proxy/spring/WebFluxAppTest.java | 36 +-- ...rlessServletEmbeddedServerFactoryTest.java | 6 +- aws-serverless-java-container-struts/pom.xml | 10 +- .../proxy/struts/StrutsAwsProxyTest.java | 133 +++++--- pom.xml | 41 ++- 57 files changed, 1246 insertions(+), 937 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index f5bae2f56..0e777b78a 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -79,6 +79,21 @@ 4.5.13 test + + org.junit.jupiter + junit-jupiter-api + test + + + org.junit.jupiter + junit-jupiter-engine + test + + + org.junit.jupiter + junit-jupiter-params + test + org.apache.httpcomponents httpcore @@ -107,6 +122,14 @@ + + org.apache.maven.plugins + maven-surefire-plugin + 2.22.2 + + always + + org.jacoco jacoco-maven-plugin diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/AsyncInitializationWrapperTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/AsyncInitializationWrapperTest.java index 3b8a7306c..74a6b8038 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/AsyncInitializationWrapperTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/AsyncInitializationWrapperTest.java @@ -1,24 +1,24 @@ package com.amazonaws.serverless.proxy; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.lang.management.ManagementFactory; import java.time.Clock; import java.time.Instant; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; public class AsyncInitializationWrapperTest { @Test - public void initCreate_noStartTime_setsCurrentTime() { + void initCreate_noStartTime_setsCurrentTime() { AsyncInitializationWrapper init = new AsyncInitializationWrapper(); long initTime = ManagementFactory.getRuntimeMXBean().getStartTime(); assertEquals(initTime, init.getActualStartTimeMs()); } @Test - public void initCreate_withStartTime_storesCustomStartTime() throws InterruptedException { + void initCreate_withStartTime_storesCustomStartTime() throws InterruptedException { long initTime = Instant.now().toEpochMilli(); Thread.sleep(500); AsyncInitializationWrapper init = new AsyncInitializationWrapper(initTime); diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/AwsProxyExceptionHandlerTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/AwsProxyExceptionHandlerTest.java index cf86c57a6..dd3417db4 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/AwsProxyExceptionHandlerTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/AwsProxyExceptionHandlerTest.java @@ -8,13 +8,13 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; -import static org.junit.Assert.*; -import static org.mockito.Matchers.any; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import org.mockito.Mockito; import javax.ws.rs.InternalServerErrorException; @@ -31,14 +31,14 @@ public class AwsProxyExceptionHandlerTest { private ObjectMapper objectMapper; - @Before + @BeforeEach public void setUp() { exceptionHandler = new AwsProxyExceptionHandler(); objectMapper = new ObjectMapper(); } @Test - public void typedHandle_InvalidRequestEventException_500State() { + void typedHandle_InvalidRequestEventException_500State() { AwsProxyResponse resp = exceptionHandler.handle(new InvalidRequestEventException(INVALID_REQUEST_MESSAGE, null)); assertNotNull(resp); @@ -46,7 +46,7 @@ public void typedHandle_InvalidRequestEventException_500State() { } @Test - public void typedHandle_InvalidRequestEventException_responseString() + void typedHandle_InvalidRequestEventException_responseString() throws JsonProcessingException { AwsProxyResponse resp = exceptionHandler.handle(new InvalidRequestEventException(INVALID_REQUEST_MESSAGE, null)); @@ -56,7 +56,7 @@ public void typedHandle_InvalidRequestEventException_responseString() } @Test - public void typedHandle_InvalidRequestEventException_jsonContentTypeHeader() { + void typedHandle_InvalidRequestEventException_jsonContentTypeHeader() { AwsProxyResponse resp = exceptionHandler.handle(new InvalidRequestEventException(INVALID_REQUEST_MESSAGE, null)); assertNotNull(resp); @@ -65,7 +65,7 @@ public void typedHandle_InvalidRequestEventException_jsonContentTypeHeader() { } @Test - public void typedHandle_InvalidResponseObjectException_502State() { + void typedHandle_InvalidResponseObjectException_502State() { AwsProxyResponse resp = exceptionHandler.handle(new InvalidResponseObjectException(INVALID_RESPONSE_MESSAGE, null)); assertNotNull(resp); @@ -73,7 +73,7 @@ public void typedHandle_InvalidResponseObjectException_502State() { } @Test - public void typedHandle_InvalidResponseObjectException_responseString() + void typedHandle_InvalidResponseObjectException_responseString() throws JsonProcessingException { AwsProxyResponse resp = exceptionHandler.handle(new InvalidResponseObjectException(INVALID_RESPONSE_MESSAGE, null)); @@ -83,7 +83,7 @@ public void typedHandle_InvalidResponseObjectException_responseString() } @Test - public void typedHandle_InvalidResponseObjectException_jsonContentTypeHeader() { + void typedHandle_InvalidResponseObjectException_jsonContentTypeHeader() { AwsProxyResponse resp = exceptionHandler.handle(new InvalidResponseObjectException(INVALID_RESPONSE_MESSAGE, null)); assertNotNull(resp); @@ -92,7 +92,7 @@ public void typedHandle_InvalidResponseObjectException_jsonContentTypeHeader() { } @Test - public void typedHandle_InternalServerErrorException_500State() { + void typedHandle_InternalServerErrorException_500State() { // Needed to mock InternalServerErrorException because it leverages RuntimeDelegate to set an internal // response object. InternalServerErrorException mockInternalServerErrorException = Mockito.mock(InternalServerErrorException.class); @@ -105,7 +105,7 @@ public void typedHandle_InternalServerErrorException_500State() { } @Test - public void typedHandle_InternalServerErrorException_responseString() + void typedHandle_InternalServerErrorException_responseString() throws JsonProcessingException { InternalServerErrorException mockInternalServerErrorException = Mockito.mock(InternalServerErrorException.class); Mockito.when(mockInternalServerErrorException.getMessage()).thenReturn(INTERNAL_SERVER_ERROR_MESSAGE); @@ -118,7 +118,7 @@ public void typedHandle_InternalServerErrorException_responseString() } @Test - public void typedHandle_InternalServerErrorException_jsonContentTypeHeader() { + void typedHandle_InternalServerErrorException_jsonContentTypeHeader() { InternalServerErrorException mockInternalServerErrorException = Mockito.mock(InternalServerErrorException.class); Mockito.when(mockInternalServerErrorException.getMessage()).thenReturn(INTERNAL_SERVER_ERROR_MESSAGE); @@ -130,7 +130,7 @@ public void typedHandle_InternalServerErrorException_jsonContentTypeHeader() { } @Test - public void typedHandle_NullPointerException_responseObject() + void typedHandle_NullPointerException_responseObject() throws JsonProcessingException { AwsProxyResponse resp = exceptionHandler.handle(new NullPointerException()); @@ -143,7 +143,7 @@ public void typedHandle_NullPointerException_responseObject() } @Test - public void streamHandle_InvalidRequestEventException_500State() + void streamHandle_InvalidRequestEventException_500State() throws IOException { ByteArrayOutputStream respStream = new ByteArrayOutputStream(); exceptionHandler.handle(new InvalidRequestEventException(INVALID_REQUEST_MESSAGE, null), respStream); @@ -156,7 +156,7 @@ public void streamHandle_InvalidRequestEventException_500State() } @Test - public void streamHandle_InvalidRequestEventException_responseString() + void streamHandle_InvalidRequestEventException_responseString() throws IOException { ByteArrayOutputStream respStream = new ByteArrayOutputStream(); exceptionHandler.handle(new InvalidRequestEventException(INVALID_REQUEST_MESSAGE, null), respStream); @@ -170,7 +170,7 @@ public void streamHandle_InvalidRequestEventException_responseString() } @Test - public void streamHandle_InvalidRequestEventException_jsonContentTypeHeader() + void streamHandle_InvalidRequestEventException_jsonContentTypeHeader() throws IOException { ByteArrayOutputStream respStream = new ByteArrayOutputStream(); exceptionHandler.handle(new InvalidRequestEventException(INVALID_REQUEST_MESSAGE, null), respStream); @@ -184,7 +184,7 @@ public void streamHandle_InvalidRequestEventException_jsonContentTypeHeader() } @Test - public void streamHandle_InvalidResponseObjectException_502State() + void streamHandle_InvalidResponseObjectException_502State() throws IOException { ByteArrayOutputStream respStream = new ByteArrayOutputStream(); exceptionHandler.handle(new InvalidResponseObjectException(INVALID_RESPONSE_MESSAGE, null), respStream); @@ -197,7 +197,7 @@ public void streamHandle_InvalidResponseObjectException_502State() } @Test - public void streamHandle_InvalidResponseObjectException_responseString() + void streamHandle_InvalidResponseObjectException_responseString() throws IOException { ByteArrayOutputStream respStream = new ByteArrayOutputStream(); exceptionHandler.handle(new InvalidResponseObjectException(INVALID_RESPONSE_MESSAGE, null), respStream); @@ -211,7 +211,7 @@ public void streamHandle_InvalidResponseObjectException_responseString() } @Test - public void streamHandle_InvalidResponseObjectException_jsonContentTypeHeader() + void streamHandle_InvalidResponseObjectException_jsonContentTypeHeader() throws IOException { ByteArrayOutputStream respStream = new ByteArrayOutputStream(); exceptionHandler.handle(new InvalidResponseObjectException(INVALID_RESPONSE_MESSAGE, null), respStream); @@ -225,17 +225,17 @@ public void streamHandle_InvalidResponseObjectException_jsonContentTypeHeader() } @Test - public void errorMessage_InternalServerError_staticString() { + void errorMessage_InternalServerError_staticString() { assertEquals("Internal Server Error", AwsProxyExceptionHandler.INTERNAL_SERVER_ERROR); } @Test - public void errorMessage_GatewayTimeout_staticString() { + void errorMessage_GatewayTimeout_staticString() { assertEquals("Gateway timeout", AwsProxyExceptionHandler.GATEWAY_TIMEOUT_ERROR); } @Test - public void getErrorJson_ErrorModel_validJson() + void getErrorJson_ErrorModel_validJson() throws IOException { String output = exceptionHandler.getErrorJson(INVALID_RESPONSE_MESSAGE); assertNotNull(output); @@ -245,7 +245,7 @@ public void getErrorJson_ErrorModel_validJson() } @Test - public void getErrorJson_JsonParsinException_validJson() + void getErrorJson_JsonParsinException_validJson() throws IOException { ObjectMapper mockMapper = mock(ObjectMapper.class); JsonProcessingException exception = mock(JsonProcessingException.class); diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/AwsProxySecurityContextWriterTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/AwsProxySecurityContextWriterTest.java index 6255344a9..34af09df7 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/AwsProxySecurityContextWriterTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/AwsProxySecurityContextWriterTest.java @@ -4,32 +4,32 @@ import com.amazonaws.serverless.proxy.AwsProxySecurityContextWriter; import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; import com.amazonaws.services.lambda.runtime.Context; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import javax.ws.rs.core.SecurityContext; import java.lang.reflect.Method; -import static org.junit.Assert.*; +import static org.junit.jupiter.api.Assertions.*; public class AwsProxySecurityContextWriterTest { private AwsProxySecurityContextWriter writer; - @Before + @BeforeEach public void setUp() { writer = new AwsProxySecurityContextWriter(); } @Test - public void write_returnClass_securityContext() + void write_returnClass_securityContext() throws NoSuchMethodException { Method writeMethod = writer.getClass().getMethod("writeSecurityContext", AwsProxyRequest.class, Context.class); assertEquals(SecurityContext.class, writeMethod.getReturnType()); } @Test - public void write_noAuth_emptySecurityContext() { + void write_noAuth_emptySecurityContext() { AwsProxyRequest request = new AwsProxyRequestBuilder("/test").build(); SecurityContext context = writer.writeSecurityContext(request, null); diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/RequestReaderTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/RequestReaderTest.java index fb0d25f41..3afe72f94 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/RequestReaderTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/RequestReaderTest.java @@ -4,9 +4,9 @@ import com.amazonaws.serverless.proxy.model.ContainerConfig; import com.amazonaws.serverless.proxy.internal.servlet.AwsProxyHttpServletRequestReader; -import org.junit.Test; +import org.junit.jupiter.api.Test; -import static org.junit.Assert.*; +import static org.junit.jupiter.api.Assertions.*; public class RequestReaderTest { @@ -17,14 +17,14 @@ public class RequestReaderTest { private static final AwsProxyHttpServletRequestReader requestReader = new AwsProxyHttpServletRequestReader(); @Test - public void defaultConfig_doNotStripBasePath() { + void defaultConfig_doNotStripBasePath() { ContainerConfig config = ContainerConfig.defaultConfig(); assertFalse(config.isStripBasePath()); assertNull(config.getServiceBasePath()); } @Test - public void setServiceBasePath_addSlashes() { + void setServiceBasePath_addSlashes() { ContainerConfig config = new ContainerConfig(); config.setServiceBasePath(BASE_PATH_MAPPING); @@ -35,7 +35,7 @@ public void setServiceBasePath_addSlashes() { } @Test - public void requestReader_stripBasePath() { + void requestReader_stripBasePath() { ContainerConfig config = ContainerConfig.defaultConfig(); String requestPath = "/" + BASE_PATH_MAPPING + ORDERS_URL; @@ -55,7 +55,7 @@ public void requestReader_stripBasePath() { } @Test - public void requestReader_doubleBasePath() { + void requestReader_doubleBasePath() { ContainerConfig config = ContainerConfig.defaultConfig(); config.setStripBasePath(true); config.setServiceBasePath(BASE_PATH_MAPPING); diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/ResponseWriterTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/ResponseWriterTest.java index 863ea583f..48c544629 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/ResponseWriterTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/ResponseWriterTest.java @@ -1,16 +1,15 @@ package com.amazonaws.serverless.proxy; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + import com.amazonaws.serverless.exceptions.InvalidResponseObjectException; import com.amazonaws.serverless.proxy.internal.servlet.AwsProxyHttpServletRequest; import com.amazonaws.services.lambda.runtime.Context; -import org.junit.Test; +import org.junit.jupiter.api.Test; import javax.servlet.http.HttpServletRequest; -import java.nio.ByteBuffer; - -import static junit.framework.TestCase.assertTrue; -import static org.junit.Assert.assertFalse; public class ResponseWriterTest { private static int[][] NAUGHTY_STRINGS = { diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/LambdaContainerHandlerTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/LambdaContainerHandlerTest.java index 8b10520c3..31a2c575b 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/LambdaContainerHandlerTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/LambdaContainerHandlerTest.java @@ -11,12 +11,12 @@ import com.amazonaws.serverless.proxy.model.AwsProxyResponse; import com.amazonaws.services.lambda.runtime.Context; import org.apache.http.impl.execchain.RequestAbortedException; -import org.junit.Test; +import org.junit.jupiter.api.Test; import javax.servlet.http.HttpServletRequest; import java.util.concurrent.CountDownLatch; -import static org.junit.Assert.*; +import static org.junit.jupiter.api.Assertions.*; public class LambdaContainerHandlerTest { private boolean isRuntimeException = false; @@ -29,7 +29,7 @@ public class LambdaContainerHandlerTest { ); @Test - public void throwRuntime_returnsUnwrappedException() { + void throwRuntime_returnsUnwrappedException() { try { isRuntimeException = true; throwException = true; @@ -44,7 +44,7 @@ public void throwRuntime_returnsUnwrappedException() { } @Test - public void throwNonRuntime_returnsWrappedException() { + void throwNonRuntime_returnsWrappedException() { try { isRuntimeException = false; throwException = true; @@ -61,7 +61,7 @@ public void throwNonRuntime_returnsWrappedException() { } @Test - public void noException_returnsResponse() { + void noException_returnsResponse() { throwException = false; LambdaContainerHandler.getContainerConfig().setDisableExceptionMapper(false); AwsProxyResponse resp = handler.proxy(new AwsProxyRequestBuilder("/test", "GET").build(), new MockLambdaContext()); diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/SecurityUtilsTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/SecurityUtilsTest.java index 2e8fb5c27..acf48d9c1 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/SecurityUtilsTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/SecurityUtilsTest.java @@ -1,13 +1,11 @@ package com.amazonaws.serverless.proxy.internal; -import org.junit.Test; - import java.util.HashMap; import java.util.Map; -import static junit.framework.TestCase.fail; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; public class SecurityUtilsTest { diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/jaxrs/AwsProxySecurityContextTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/jaxrs/AwsProxySecurityContextTest.java index db1b9c106..ed89bf86c 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/jaxrs/AwsProxySecurityContextTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/jaxrs/AwsProxySecurityContextTest.java @@ -2,7 +2,7 @@ import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.security.Principal; @@ -10,7 +10,7 @@ import static com.amazonaws.serverless.proxy.internal.jaxrs.AwsProxySecurityContext.ALB_IDENTITY_HEADER; import static com.amazonaws.serverless.proxy.internal.jaxrs.AwsProxySecurityContext.AUTH_SCHEME_COGNITO_POOL; import static com.amazonaws.serverless.proxy.internal.jaxrs.AwsProxySecurityContext.AUTH_SCHEME_CUSTOM; -import static org.junit.Assert.*; +import static org.junit.jupiter.api.Assertions.*; public class AwsProxySecurityContextTest { private static final String CLAIM_KEY = "custom:claim"; @@ -27,21 +27,21 @@ public class AwsProxySecurityContextTest { .build(); @Test - public void localVars_constructor_nullValues() { + void localVars_constructor_nullValues() { AwsProxySecurityContext context = new AwsProxySecurityContext(null, null); assertNull(context.getEvent()); assertNull(context.getLambdaContext()); } @Test - public void localVars_constructor_ValidRequest() { + void localVars_constructor_ValidRequest() { AwsProxySecurityContext context = new AwsProxySecurityContext(null, REQUEST_NO_AUTH); assertEquals(REQUEST_NO_AUTH, context.getEvent()); assertNull(context.getLambdaContext()); } @Test - public void alb_noAuth_expectEmptyScheme() { + void alb_noAuth_expectEmptyScheme() { AwsProxySecurityContext context = new AwsProxySecurityContext(null, ALB_REQUEST_NO_AUTH); assertEquals(ALB_REQUEST_NO_AUTH, context.getEvent()); assertNull(context.getLambdaContext()); @@ -50,21 +50,21 @@ public void alb_noAuth_expectEmptyScheme() { } @Test - public void authScheme_getAuthenticationScheme_userPool() { + void authScheme_getAuthenticationScheme_userPool() { AwsProxySecurityContext context = new AwsProxySecurityContext(null, REQUEST_COGNITO_USER_POOL); assertNotNull(context.getAuthenticationScheme()); assertEquals(AUTH_SCHEME_COGNITO_POOL, context.getAuthenticationScheme()); } @Test - public void authScheme_getPrincipal_userPool() { + void authScheme_getPrincipal_userPool() { AwsProxySecurityContext context = new AwsProxySecurityContext(null, REQUEST_COGNITO_USER_POOL); assertEquals(AUTH_SCHEME_COGNITO_POOL, context.getAuthenticationScheme()); assertEquals(COGNITO_IDENTITY_ID, context.getUserPrincipal().getName()); } @Test - public void alb_cognitoAuth_expectCustomSchemeAndCorrectPrincipal() { + void alb_cognitoAuth_expectCustomSchemeAndCorrectPrincipal() { AwsProxySecurityContext context = new AwsProxySecurityContext(null, ALB_REQUEST_COGNITO_USER_POOL); assertTrue(context.isSecure()); assertEquals(AUTH_SCHEME_CUSTOM, context.getAuthenticationScheme()); @@ -72,7 +72,7 @@ public void alb_cognitoAuth_expectCustomSchemeAndCorrectPrincipal() { } @Test - public void userPool_getClaims_retrieveCustomClaim() { + void userPool_getClaims_retrieveCustomClaim() { AwsProxySecurityContext context = new AwsProxySecurityContext(null, REQUEST_COGNITO_USER_POOL); Principal userPrincipal = context.getUserPrincipal(); assertNotNull(userPrincipal.getName()); diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/jaxrs/HttpApiV2SecurityContextTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/jaxrs/HttpApiV2SecurityContextTest.java index ae2dcdb53..0fda7b975 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/jaxrs/HttpApiV2SecurityContextTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/jaxrs/HttpApiV2SecurityContextTest.java @@ -3,12 +3,12 @@ import com.amazonaws.serverless.proxy.AwsHttpApiV2SecurityContextWriter; import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; import com.amazonaws.serverless.proxy.model.HttpApiV2ProxyRequest; -import org.junit.Test; +import org.junit.jupiter.api.Test; import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.SecurityContext; -import static org.junit.Assert.*; +import static org.junit.jupiter.api.Assertions.*; public class HttpApiV2SecurityContextTest { private static final String JWT_SUB_VALUE = "1234567890"; @@ -24,7 +24,7 @@ public class HttpApiV2SecurityContextTest { AwsHttpApiV2SecurityContextWriter contextWriter = new AwsHttpApiV2SecurityContextWriter(); @Test - public void getAuthenticationScheme_nullAuth_nullSchema() { + void getAuthenticationScheme_nullAuth_nullSchema() { SecurityContext ctx = contextWriter.writeSecurityContext(EMPTY_AUTH, null); assertNull(ctx.getAuthenticationScheme()); assertNull(ctx.getUserPrincipal()); @@ -32,7 +32,7 @@ public void getAuthenticationScheme_nullAuth_nullSchema() { } @Test - public void getAuthenticationScheme_jwtAuth_correctSchema() { + void getAuthenticationScheme_jwtAuth_correctSchema() { SecurityContext ctx = contextWriter.writeSecurityContext(BASIC_AUTH, null); assertEquals(AwsHttpApiV2SecurityContext.AUTH_SCHEME_JWT, ctx.getAuthenticationScheme()); assertTrue(ctx.isSecure()); @@ -40,7 +40,7 @@ public void getAuthenticationScheme_jwtAuth_correctSchema() { } @Test - public void getPrincipal_parseJwt_returnsSub() { + void getPrincipal_parseJwt_returnsSub() { SecurityContext ctx = contextWriter.writeSecurityContext(JWT_AUTH, null); assertEquals(AwsHttpApiV2SecurityContext.AUTH_SCHEME_JWT, ctx.getAuthenticationScheme()); assertTrue(ctx.isSecure()); diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/ApacheCombinedServletLogFormatterTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/ApacheCombinedServletLogFormatterTest.java index 0d12a5116..e07932680 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/ApacheCombinedServletLogFormatterTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/ApacheCombinedServletLogFormatterTest.java @@ -4,8 +4,8 @@ import com.amazonaws.serverless.proxy.model.ApiGatewayRequestIdentity; import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.serverless.proxy.model.AwsProxyRequestContext; -import org.junit.Before; -import org.junit.Test; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -17,8 +17,8 @@ import static com.amazonaws.serverless.proxy.RequestReader.API_GATEWAY_CONTEXT_PROPERTY; import static com.amazonaws.serverless.proxy.RequestReader.API_GATEWAY_EVENT_PROPERTY; import static org.hamcrest.CoreMatchers.containsString; -import static org.junit.Assert.assertThat; -import static org.mockito.Matchers.eq; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -31,7 +31,7 @@ public class ApacheCombinedServletLogFormatterTest { private AwsProxyRequest proxyRequest; private AwsProxyRequestContext context; - @Before + @BeforeEach public void setup() { proxyRequest = new AwsProxyRequest(); Clock fixedClock = Clock.fixed(Instant.ofEpochSecond(665888523L), ZoneId.of("UTC")); @@ -48,40 +48,40 @@ public void setup() { sut = new ApacheCombinedServletLogFormatter(fixedClock); } - @Test - public void logsCurrentTimeWhenContextNull() { - // given - proxyRequest.setRequestContext(null); + @Test + void logsCurrentTimeWhenContextNull() { + // given + proxyRequest.setRequestContext(null); - // when - String actual = sut.format(mockServletRequest, mockServletResponse, null); + // when + String actual = sut.format(mockServletRequest, mockServletResponse, null); - // then - assertThat(actual, containsString("[07/02/1991:01:02:03Z]")); - } + // then + assertThat(actual, containsString("[07/02/1991:01:02:03Z]")); + } - @Test - public void logsCurrentTimeWhenRequestTimeZero() { - // given - context.setRequestTimeEpoch(0); + @Test + void logsCurrentTimeWhenRequestTimeZero() { + // given + context.setRequestTimeEpoch(0); - // when - String actual = sut.format(mockServletRequest, mockServletResponse, null); + // when + String actual = sut.format(mockServletRequest, mockServletResponse, null); - // then - assertThat(actual, containsString("[07/02/1991:01:02:03Z]")); - } + // then + assertThat(actual, containsString("[07/02/1991:01:02:03Z]")); + } - @Test - public void logsRequestTimeWhenRequestTimeEpochGreaterThanZero() { - // given - context.setRequestTimeEpoch(1563023494000L); + @Test + void logsRequestTimeWhenRequestTimeEpochGreaterThanZero() { + // given + context.setRequestTimeEpoch(1563023494000L); - // when - String actual = sut.format(mockServletRequest, mockServletResponse, null); + // when + String actual = sut.format(mockServletRequest, mockServletResponse, null); - // then - assertThat(actual, containsString("[13/07/2019:13:11:34Z]")); - } + // then + assertThat(actual, containsString("[13/07/2019:13:11:34Z]")); + } } diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContextTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContextTest.java index f379ff32a..b5b79bba1 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContextTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContextTest.java @@ -10,7 +10,7 @@ import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.serverless.proxy.model.AwsProxyResponse; import com.amazonaws.services.lambda.runtime.Context; -import org.junit.Test; +import org.junit.jupiter.api.Test; import javax.servlet.AsyncContext; import javax.servlet.Servlet; @@ -21,8 +21,8 @@ import java.io.IOException; import java.util.concurrent.CountDownLatch; -import static junit.framework.TestCase.assertNotNull; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; public class AwsAsyncContextTest { private MockLambdaContext lambdaCtx = new MockLambdaContext(); @@ -33,7 +33,7 @@ public class AwsAsyncContextTest { private AwsServletContext ctx = getCtx(); @Test - public void dispatch_sendsToCorrectServlet() { + void dispatch_sendsToCorrectServlet() { AwsProxyHttpServletRequest req = new AwsProxyHttpServletRequest(new AwsProxyRequestBuilder("/srv1/hello", "GET").build(), lambdaCtx, null); req.setResponse(handler.getContainerResponse(req, new CountDownLatch(1))); req.setServletContext(ctx); @@ -59,8 +59,8 @@ public void dispatch_sendsToCorrectServlet() { } @Test - public void dispatchNewPath_sendsToCorrectServlet() throws InvalidRequestEventException { - AwsProxyHttpServletRequest req = (AwsProxyHttpServletRequest) reader.readRequest(new AwsProxyRequestBuilder("/srv1/hello", "GET").build(), null, lambdaCtx, LambdaContainerHandler.getContainerConfig()); + void dispatchNewPath_sendsToCorrectServlet() throws InvalidRequestEventException { + AwsProxyHttpServletRequest req = (AwsProxyHttpServletRequest)reader.readRequest(new AwsProxyRequestBuilder("/srv1/hello", "GET").build(), null, lambdaCtx, LambdaContainerHandler.getContainerConfig()); req.setResponse(handler.getContainerResponse(req, new CountDownLatch(1))); req.setServletContext(ctx); req.setContainerHandler(handler); diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsFilterChainManagerTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsFilterChainManagerTest.java index 8bc753540..882aa085c 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsFilterChainManagerTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsFilterChainManagerTest.java @@ -3,8 +3,8 @@ import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; import com.amazonaws.serverless.proxy.internal.testutils.MockLambdaContext; import com.amazonaws.services.lambda.runtime.Context; -import org.junit.BeforeClass; -import org.junit.Test; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -14,7 +14,7 @@ import java.util.EnumSet; import java.util.concurrent.CountDownLatch; -import static org.junit.Assert.*; +import static org.junit.jupiter.api.Assertions.*; public class AwsFilterChainManagerTest { private static final String REQUEST_CUSTOM_ATTRIBUTE_NAME = "X-Custom-Attribute"; @@ -26,7 +26,7 @@ public class AwsFilterChainManagerTest { private Logger log = LoggerFactory.getLogger(AwsFilterChainManagerTest.class); - @BeforeClass + @BeforeAll public static void setUp() { servletContext = new AwsServletContext( null);//AwsServletContext.getInstance(lambdaContext, null); @@ -41,7 +41,7 @@ public static void setUp() { } @Test - public void paths_pathMatches_validPaths() { + void paths_pathMatches_validPaths() { assertTrue(chainManager.pathMatches("/users/123123123", "/users/*")); assertTrue(chainManager.pathMatches("/apis/123/methods", "/apis/*")); assertTrue(chainManager.pathMatches("/very/long/path/with/sub/resources", "/*")); @@ -52,7 +52,7 @@ public void paths_pathMatches_validPaths() { } @Test - public void paths_pathMatches_invalidPaths() { + void paths_pathMatches_invalidPaths() { // I expect we'd want to run filters on these requests, especially the ones that look invalid assertTrue(chainManager.pathMatches("_%Garbled%20Path_%", "/*")); assertTrue(chainManager.pathMatches("", "/*")); @@ -61,7 +61,7 @@ public void paths_pathMatches_invalidPaths() { } @Test - public void cacheKey_compare_samePath() { + void cacheKey_compare_samePath() { FilterChainManager.TargetCacheKey cacheKey = new FilterChainManager.TargetCacheKey(); cacheKey.setDispatcherType(DispatcherType.REQUEST); cacheKey.setTargetPath("/first/path"); @@ -71,11 +71,11 @@ public void cacheKey_compare_samePath() { secondCacheKey.setTargetPath("/first/path"); assertEquals(cacheKey.hashCode(), secondCacheKey.hashCode()); - assertTrue(cacheKey.equals(secondCacheKey)); + assertEquals(cacheKey, secondCacheKey); } @Test - public void cacheKey_compare_differentDispatcher() { + void cacheKey_compare_differentDispatcher() { FilterChainManager.TargetCacheKey cacheKey = new FilterChainManager.TargetCacheKey(); cacheKey.setDispatcherType(DispatcherType.REQUEST); cacheKey.setTargetPath("/first/path"); @@ -85,11 +85,11 @@ public void cacheKey_compare_differentDispatcher() { secondCacheKey.setTargetPath("/first/path"); assertNotEquals(cacheKey.hashCode(), secondCacheKey.hashCode()); - assertFalse(cacheKey.equals(secondCacheKey)); + assertNotEquals(cacheKey, secondCacheKey); } @Test - public void cacheKey_compare_additionalChars() { + void cacheKey_compare_additionalChars() { FilterChainManager.TargetCacheKey cacheKey = new FilterChainManager.TargetCacheKey(); cacheKey.setDispatcherType(DispatcherType.REQUEST); cacheKey.setTargetPath("/first/path"); @@ -98,21 +98,21 @@ public void cacheKey_compare_additionalChars() { secondCacheKey.setDispatcherType(DispatcherType.REQUEST); secondCacheKey.setTargetPath("/first/path/"); assertEquals(cacheKey.hashCode(), secondCacheKey.hashCode()); - assertTrue(cacheKey.equals(secondCacheKey)); + assertEquals(cacheKey, secondCacheKey); secondCacheKey.setTargetPath(" /first/path"); assertEquals(cacheKey.hashCode(), secondCacheKey.hashCode()); - assertTrue(cacheKey.equals(secondCacheKey)); + assertEquals(cacheKey, secondCacheKey); secondCacheKey.setTargetPath("first/path/"); assertEquals(cacheKey.hashCode(), secondCacheKey.hashCode()); - assertTrue(cacheKey.equals(secondCacheKey)); + assertEquals(cacheKey, secondCacheKey); } @Test - public void filterChain_getFilterChain_subsetOfFilters() { + void filterChain_getFilterChain_subsetOfFilters() { AwsProxyHttpServletRequest req = new AwsProxyHttpServletRequest( - new AwsProxyRequestBuilder("/first/second", "GET").build(), lambdaContext, null + new AwsProxyRequestBuilder("/first/second", "GET").build(), lambdaContext, null ); req.setServletContext(servletContext); FilterChainHolder fcHolder = chainManager.getFilterChain(req, null); @@ -135,9 +135,9 @@ public void filterChain_getFilterChain_subsetOfFilters() { } @Test - public void filterChain_matchMultipleTimes_expectSameMatch() { + void filterChain_matchMultipleTimes_expectSameMatch() { AwsProxyHttpServletRequest req = new AwsProxyHttpServletRequest( - new AwsProxyRequestBuilder("/first/second", "GET").build(), lambdaContext, null + new AwsProxyRequestBuilder("/first/second", "GET").build(), lambdaContext, null ); req.setServletContext(servletContext); FilterChainHolder fcHolder = chainManager.getFilterChain(req, null); @@ -145,7 +145,7 @@ public void filterChain_matchMultipleTimes_expectSameMatch() { assertEquals("Filter1", fcHolder.getFilter(0).getFilterName()); AwsProxyHttpServletRequest req2 = new AwsProxyHttpServletRequest( - new AwsProxyRequestBuilder("/first/second", "GET").build(), lambdaContext, null + new AwsProxyRequestBuilder("/first/second", "GET").build(), lambdaContext, null ); req.setServletContext(servletContext); FilterChainHolder fcHolder2 = chainManager.getFilterChain(req2, null); @@ -154,9 +154,9 @@ public void filterChain_matchMultipleTimes_expectSameMatch() { } @Test - public void filerChain_executeMultipleFilters_expectRunEachTime() { + void filerChain_executeMultipleFilters_expectRunEachTime() { AwsProxyHttpServletRequest req = new AwsProxyHttpServletRequest( - new AwsProxyRequestBuilder("/first/second", "GET").build(), lambdaContext, null + new AwsProxyRequestBuilder("/first/second", "GET").build(), lambdaContext, null ); req.setServletContext(servletContext); FilterChainHolder fcHolder = chainManager.getFilterChain(req, null); @@ -180,7 +180,7 @@ public void filerChain_executeMultipleFilters_expectRunEachTime() { log.debug("Starting second request"); AwsProxyHttpServletRequest req2 = new AwsProxyHttpServletRequest( - new AwsProxyRequestBuilder("/first/second", "GET").build(), lambdaContext, null + new AwsProxyRequestBuilder("/first/second", "GET").build(), lambdaContext, null ); req2.setServletContext(servletContext); FilterChainHolder fcHolder2 = chainManager.getFilterChain(req2, null); @@ -205,7 +205,7 @@ public void filerChain_executeMultipleFilters_expectRunEachTime() { } @Test - public void filterChain_getFilterChain_multipleFilters() { + void filterChain_getFilterChain_multipleFilters() { AwsProxyHttpServletRequest req = new AwsProxyHttpServletRequest( new AwsProxyRequestBuilder("/second/important", "GET").build(), lambdaContext, null ); diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2HttpServletRequestReaderTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2HttpServletRequestReaderTest.java index 37ba30598..e35fedb7d 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2HttpServletRequestReaderTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2HttpServletRequestReaderTest.java @@ -5,23 +5,23 @@ import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; import com.amazonaws.serverless.proxy.model.HttpApiV2ProxyRequest; import com.amazonaws.serverless.proxy.model.HttpApiV2ProxyRequestContext; -import org.junit.Test; +import org.junit.jupiter.api.Test; import javax.servlet.http.HttpServletRequest; import javax.ws.rs.core.HttpHeaders; -import static org.junit.Assert.*; +import static org.junit.jupiter.api.Assertions.*; public class AwsHttpApiV2HttpServletRequestReaderTest { private AwsHttpApiV2HttpServletRequestReader reader = new AwsHttpApiV2HttpServletRequestReader(); @Test - public void reflection_getRequestClass_returnsCorrectType() { + void reflection_getRequestClass_returnsCorrectType() { assertSame(HttpApiV2ProxyRequest.class, reader.getRequestClass()); } @Test - public void baseRequest_read_populatesSuccessfully() { + void baseRequest_read_populatesSuccessfully() { HttpApiV2ProxyRequest req = new AwsProxyRequestBuilder("/hello", "GET") .referer("localhost") .userAgent("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.61 Safari/537.36") diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestTest.java index 5372dfa95..35903333b 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestTest.java @@ -7,13 +7,13 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; -import org.junit.Test; +import org.junit.jupiter.api.Test; import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.ws.rs.core.HttpHeaders; -import static org.junit.Assert.*; +import static org.junit.jupiter.api.Assertions.*; import java.util.Base64; import java.util.List; @@ -41,7 +41,7 @@ public class AwsHttpServletRequestTest { private static ContainerConfig config = ContainerConfig.defaultConfig(); @Test - public void headers_parseHeaderValue_multiValue() { + void headers_parseHeaderValue_multiValue() { AwsProxyHttpServletRequest request = new AwsProxyHttpServletRequest(contentTypeRequest, mockContext, null, config); // I'm also using this to double-check that I can get a header ignoring case List values = request.parseHeaderValue(request.getHeader("content-type")); @@ -55,7 +55,7 @@ public void headers_parseHeaderValue_multiValue() { } @Test - public void headers_parseHeaderValue_validMultipleCookie() { + void headers_parseHeaderValue_validMultipleCookie() { AwsProxyHttpServletRequest request = new AwsProxyHttpServletRequest(validCookieRequest, mockContext, null, config); List values = request.parseHeaderValue(request.getHeader(HttpHeaders.COOKIE), ";", ","); @@ -67,7 +67,7 @@ public void headers_parseHeaderValue_validMultipleCookie() { } @Test - public void headers_parseHeaderValue_complexAccept() { + void headers_parseHeaderValue_complexAccept() { AwsProxyHttpServletRequest request = new AwsProxyHttpServletRequest(complexAcceptHeader, mockContext, null, config); List values = request.parseHeaderValue(request.getHeader(HttpHeaders.ACCEPT), ",", ";"); @@ -75,8 +75,8 @@ public void headers_parseHeaderValue_complexAccept() { } @Test - public void headers_parseHeaderValue_encodedContentWithEquals() { - AwsHttpServletRequest context = new AwsProxyHttpServletRequest(null,null,null); + void headers_parseHeaderValue_encodedContentWithEquals() { + AwsHttpServletRequest context = new AwsProxyHttpServletRequest(null, null, null); String value = Base64.getUrlEncoder().encodeToString("a".getBytes()); @@ -86,11 +86,11 @@ public void headers_parseHeaderValue_encodedContentWithEquals() { } @Test - public void headers_parseHeaderValue_base64EncodedCookieValue() { + void headers_parseHeaderValue_base64EncodedCookieValue() { String value = Base64.getUrlEncoder().encodeToString("a".getBytes()); String cookieValue = "jwt=" + value + "; secondValue=second"; AwsProxyRequest req = new AwsProxyRequestBuilder("/test", "GET").header(HttpHeaders.COOKIE, cookieValue).build(); - AwsHttpServletRequest context = new AwsProxyHttpServletRequest(req,null,null); + AwsHttpServletRequest context = new AwsProxyHttpServletRequest(req, null, null); Cookie[] cookies = context.getCookies(); @@ -100,10 +100,10 @@ public void headers_parseHeaderValue_base64EncodedCookieValue() { } @Test - public void headers_parseHeaderValue_cookieWithSeparatorInValue() { + void headers_parseHeaderValue_cookieWithSeparatorInValue() { String cookieValue = "jwt==test; secondValue=second"; AwsProxyRequest req = new AwsProxyRequestBuilder("/test", "GET").header(HttpHeaders.COOKIE, cookieValue).build(); - AwsHttpServletRequest context = new AwsProxyHttpServletRequest(req,null,null); + AwsHttpServletRequest context = new AwsProxyHttpServletRequest(req, null, null); Cookie[] cookies = context.getCookies(); @@ -113,8 +113,8 @@ public void headers_parseHeaderValue_cookieWithSeparatorInValue() { } @Test - public void headers_parseHeaderValue_headerWithPaddingButNotBase64Encoded() { - AwsHttpServletRequest context = new AwsProxyHttpServletRequest(null,null,null); + void headers_parseHeaderValue_headerWithPaddingButNotBase64Encoded() { + AwsHttpServletRequest context = new AwsProxyHttpServletRequest(null, null, null); List result = context.parseHeaderValue("hello="); assertTrue(result.size() > 0); @@ -123,7 +123,7 @@ public void headers_parseHeaderValue_headerWithPaddingButNotBase64Encoded() { } @Test - public void queryString_generateQueryString_validQuery() { + void queryString_generateQueryString_validQuery() { AwsProxyHttpServletRequest request = new AwsProxyHttpServletRequest(queryString, mockContext, null, config); String parsedString = null; @@ -139,8 +139,9 @@ public void queryString_generateQueryString_validQuery() { } @Test - public void queryString_generateQueryString_nullParameterIsEmpty() { - AwsProxyHttpServletRequest request = new AwsProxyHttpServletRequest(queryStringNullValue, mockContext, null, config);String parsedString = null; + void queryString_generateQueryString_nullParameterIsEmpty() { + AwsProxyHttpServletRequest request = new AwsProxyHttpServletRequest(queryStringNullValue, mockContext, null, config); + String parsedString = null; try { parsedString = request.generateQueryString(request.getAwsProxyRequest().getMultiValueQueryStringParameters(), true, config.getUriEncoding()); } catch (ServletException e) { @@ -152,7 +153,7 @@ public void queryString_generateQueryString_nullParameterIsEmpty() { } @Test - public void queryStringWithEncodedParams_generateQueryString_validQuery() { + void queryStringWithEncodedParams_generateQueryString_validQuery() { AwsProxyHttpServletRequest request = new AwsProxyHttpServletRequest(encodedQueryString, mockContext, null, config); String parsedString = null; @@ -168,7 +169,7 @@ public void queryStringWithEncodedParams_generateQueryString_validQuery() { } @Test - public void queryStringWithMultipleValues_generateQueryString_validQuery() { + void queryStringWithMultipleValues_generateQueryString_validQuery() { AwsProxyHttpServletRequest request = new AwsProxyHttpServletRequest(multipleParams, mockContext, null, config); String parsedString = null; diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponseTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponseTest.java index 4731a0359..8a1d8f1e6 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponseTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponseTest.java @@ -4,7 +4,7 @@ import com.amazonaws.serverless.proxy.model.ContainerConfig; import com.amazonaws.serverless.proxy.model.Headers; -import org.junit.Test; +import org.junit.jupiter.api.Test; import javax.servlet.http.Cookie; import javax.ws.rs.core.HttpHeaders; @@ -21,7 +21,7 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; -import static org.junit.Assert.*; +import static org.junit.jupiter.api.Assertions.*; public class AwsHttpServletResponseTest { @@ -40,7 +40,7 @@ public class AwsHttpServletResponseTest { private static final String CONTENT_TYPE_WITH_CHARSET = "application/json; charset=UTF-8"; @Test - public void cookie_addCookie_verifyPath() { + void cookie_addCookie_verifyPath() { AwsHttpServletResponse resp = new AwsHttpServletResponse(null, null); Cookie pathCookie = new Cookie(COOKIE_NAME, COOKIE_VALUE); pathCookie.setPath(COOKIE_PATH); @@ -53,7 +53,7 @@ public void cookie_addCookie_verifyPath() { } @Test - public void cookie_addCookie_verifySecure() { + void cookie_addCookie_verifySecure() { AwsHttpServletResponse resp = new AwsHttpServletResponse(null, null); Cookie secureCookie = new Cookie(COOKIE_NAME, COOKIE_VALUE); secureCookie.setSecure(true); @@ -66,7 +66,7 @@ public void cookie_addCookie_verifySecure() { } @Test - public void cookie_addCookie_verifyDomain() { + void cookie_addCookie_verifyDomain() { AwsHttpServletResponse resp = new AwsHttpServletResponse(null, null); Cookie domainCookie = new Cookie(COOKIE_NAME, COOKIE_VALUE); domainCookie.setDomain(COOKIE_DOMAIN); @@ -79,7 +79,7 @@ public void cookie_addCookie_verifyDomain() { } @Test - public void cookie_addCookie_defaultMaxAgeIsNegative() { + void cookie_addCookie_defaultMaxAgeIsNegative() { AwsHttpServletResponse resp = new AwsHttpServletResponse(null, null); Cookie maxAgeCookie = new Cookie(COOKIE_NAME, COOKIE_VALUE); maxAgeCookie.setDomain(COOKIE_DOMAIN); @@ -92,7 +92,7 @@ public void cookie_addCookie_defaultMaxAgeIsNegative() { } @Test - public void cookie_addCookie_positiveMaxAgeIsPresent() { + void cookie_addCookie_positiveMaxAgeIsPresent() { AwsHttpServletResponse resp = new AwsHttpServletResponse(null, null); Cookie maxAgeCookie = new Cookie(COOKIE_NAME, COOKIE_VALUE); maxAgeCookie.setMaxAge(MAX_AGE_VALUE); @@ -108,7 +108,7 @@ public void cookie_addCookie_positiveMaxAgeIsPresent() { } @Test - public void cookie_addCookie_positiveMaxAgeExpiresDate() { + void cookie_addCookie_positiveMaxAgeExpiresDate() { AwsHttpServletResponse resp = new AwsHttpServletResponse(null, null); Cookie maxAgeCookie = new Cookie(COOKIE_NAME, COOKIE_VALUE); maxAgeCookie.setMaxAge(MAX_AGE_VALUE); @@ -132,7 +132,7 @@ public void cookie_addCookie_positiveMaxAgeExpiresDate() { } @Test - public void cookie_addCookieWithoutMaxAge_expectNoExpires() { + void cookie_addCookieWithoutMaxAge_expectNoExpires() { AwsHttpServletResponse resp = new AwsHttpServletResponse(null, null); Cookie simpleCookie = new Cookie(COOKIE_NAME, COOKIE_VALUE); resp.addCookie(simpleCookie); @@ -143,7 +143,7 @@ public void cookie_addCookieWithoutMaxAge_expectNoExpires() { } @Test - public void responseHeaders_getAwsResponseHeaders_expectLatestHeader() { + void responseHeaders_getAwsResponseHeaders_expectLatestHeader() { AwsHttpServletResponse resp = new AwsHttpServletResponse(null, null); resp.addHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON); resp.addHeader("content-type", "application/xml"); @@ -154,7 +154,7 @@ public void responseHeaders_getAwsResponseHeaders_expectLatestHeader() { } @Test - public void responseHeaders_getAwsResponseHeaders_expectedMultpleCookieHeaders() { + void responseHeaders_getAwsResponseHeaders_expectedMultpleCookieHeaders() { AwsHttpServletResponse resp = new AwsHttpServletResponse(null, null); resp.addCookie(new Cookie(COOKIE_NAME, COOKIE_VALUE)); resp.addCookie(new Cookie("Second", "test")); @@ -165,7 +165,7 @@ public void responseHeaders_getAwsResponseHeaders_expectedMultpleCookieHeaders() } @Test - public void releaseLatch_flushBuffer_expectFlushToWriteAndRelease() { + void releaseLatch_flushBuffer_expectFlushToWriteAndRelease() { CountDownLatch respLatch = new CountDownLatch(1); AwsHttpServletResponse resp = new AwsHttpServletResponse(null, respLatch); String respBody = "Test resp"; @@ -200,7 +200,7 @@ public void releaseLatch_flushBuffer_expectFlushToWriteAndRelease() { } @Test - public void dateHeader_addDateHeader_expectMultipleHeaders() { + void dateHeader_addDateHeader_expectMultipleHeaders() { AwsHttpServletResponse resp = new AwsHttpServletResponse(null, null); resp.addDateHeader("Date", Instant.now().toEpochMilli()); resp.addDateHeader("Date", Instant.now().toEpochMilli() - 1000); @@ -209,7 +209,7 @@ public void dateHeader_addDateHeader_expectMultipleHeaders() { } @Test - public void dateHeader_setDateHeader_expectSingleHeader() { + void dateHeader_setDateHeader_expectSingleHeader() { AwsHttpServletResponse resp = new AwsHttpServletResponse(null, null); resp.setDateHeader("Date", Instant.now().toEpochMilli()); resp.setDateHeader("Date", Instant.now().toEpochMilli() - 1000); @@ -218,7 +218,7 @@ public void dateHeader_setDateHeader_expectSingleHeader() { } @Test - public void response_reset_expectEmptyHeadersAndBody() { + void response_reset_expectEmptyHeadersAndBody() { CountDownLatch respLatch = new CountDownLatch(1); AwsHttpServletResponse resp = new AwsHttpServletResponse(null, respLatch); String body = "My Body"; @@ -240,7 +240,7 @@ public void response_reset_expectEmptyHeadersAndBody() { } @Test - public void headers_setIntHeader_expectSingleHeaderValue() { + void headers_setIntHeader_expectSingleHeaderValue() { AwsHttpServletResponse resp = new AwsHttpServletResponse(null, null); resp.setIntHeader("Test", 15); resp.setIntHeader("Test", 34); @@ -251,7 +251,7 @@ public void headers_setIntHeader_expectSingleHeaderValue() { } @Test - public void headers_addIntHeader_expectMultipleHeaderValues() { + void headers_addIntHeader_expectMultipleHeaderValues() { AwsHttpServletResponse resp = new AwsHttpServletResponse(null, null); resp.addIntHeader("Test", 15); resp.addIntHeader("Test", 34); @@ -262,7 +262,7 @@ public void headers_addIntHeader_expectMultipleHeaderValues() { } @Test - public void characterEncoding_setCharacterEncoding() { + void characterEncoding_setCharacterEncoding() { AwsHttpServletResponse resp = new AwsHttpServletResponse(null, null); resp.setContentType("application/json"); resp.setCharacterEncoding("UTF-8"); @@ -272,7 +272,7 @@ public void characterEncoding_setCharacterEncoding() { } @Test - public void characterEncoding_setContentType() { + void characterEncoding_setContentType() { AwsHttpServletResponse resp = new AwsHttpServletResponse(null, null); resp.setContentType("application/json; charset=utf-8"); resp.setCharacterEncoding("UTF-8"); @@ -283,7 +283,7 @@ public void characterEncoding_setContentType() { } @Test - public void characterEncoding_setContentTypeAndsetCharacterEncoding() { + void characterEncoding_setContentTypeAndsetCharacterEncoding() { AwsHttpServletResponse resp = new AwsHttpServletResponse(null, null); resp.setContentType("application/json"); resp.setCharacterEncoding("UTF-8"); @@ -294,7 +294,7 @@ public void characterEncoding_setContentTypeAndsetCharacterEncoding() { } @Test - public void characterEncoding_setCharacterEncodingAndsetContentType() { + void characterEncoding_setCharacterEncodingAndsetContentType() { AwsHttpServletResponse resp = new AwsHttpServletResponse(null, null); resp.setCharacterEncoding("UTF-8"); resp.setContentType("application/json"); @@ -305,7 +305,7 @@ public void characterEncoding_setCharacterEncodingAndsetContentType() { } @Test - public void characterEncoding_setCharacterEncodingInContentType_characterEncodingPopulatedCorrectly() { + void characterEncoding_setCharacterEncodingInContentType_characterEncodingPopulatedCorrectly() { AwsHttpServletResponse resp = new AwsHttpServletResponse(null, null); resp.setContentType(CONTENT_TYPE_WITH_CHARSET); @@ -315,7 +315,7 @@ public void characterEncoding_setCharacterEncodingInContentType_characterEncodin } @Test - public void characterEncoding_setCharacterEncodingInContentType_overridesDefault() { + void characterEncoding_setCharacterEncodingInContentType_overridesDefault() { AwsHttpServletResponse resp = new AwsHttpServletResponse(null, null); resp.setCharacterEncoding(ContainerConfig.DEFAULT_CONTENT_CHARSET); resp.setContentType(CONTENT_TYPE_WITH_CHARSET); diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpSessionTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpSessionTest.java index bb9e0d476..77dd4bd32 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpSessionTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpSessionTest.java @@ -1,18 +1,16 @@ package com.amazonaws.serverless.proxy.internal.servlet; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.time.Instant; import java.util.Enumeration; -import static junit.framework.TestCase.assertTrue; -import static junit.framework.TestCase.fail; -import static org.junit.Assert.*; +import static org.junit.jupiter.api.Assertions.*; public class AwsHttpSessionTest { @Test - public void new_withNullId_throwsException() { + void new_withNullId_throwsException() { try { AwsHttpSession session = new AwsHttpSession(null); } catch (RuntimeException e) { @@ -23,13 +21,13 @@ public void new_withNullId_throwsException() { } @Test - public void new_withValidId_setsIdCorrectly() { + void new_withValidId_setsIdCorrectly() { AwsHttpSession session = new AwsHttpSession("id"); assertEquals("id", session.getId()); } @Test - public void new_creationTimePopulatedCorrectly() { + void new_creationTimePopulatedCorrectly() { AwsHttpSession session = new AwsHttpSession("id"); assertTrue(session.getCreationTime() > Instant.now().getEpochSecond() - 1); assertEquals(AwsHttpSession.SESSION_DURATION_SEC, session.getMaxInactiveInterval()); @@ -37,7 +35,7 @@ public void new_creationTimePopulatedCorrectly() { } @Test - public void values_throwsUnsupportedOperationException() { + void values_throwsUnsupportedOperationException() { int exCount = 0; AwsHttpSession sess = new AwsHttpSession("id"); @@ -65,7 +63,7 @@ public void values_throwsUnsupportedOperationException() { } @Test - public void attributes_dataStoredCorrectly() throws InterruptedException { + void attributes_dataStoredCorrectly() throws InterruptedException { AwsHttpSession sess = new AwsHttpSession("id"); sess.setAttribute("test", "test"); sess.setAttribute("test2", "test2"); @@ -76,7 +74,7 @@ public void attributes_dataStoredCorrectly() throws InterruptedException { attrsCnt++; } assertEquals(2, attrsCnt); - assertEquals(sess.getAttribute("test"), "test"); + assertEquals("test", sess.getAttribute("test")); sess.removeAttribute("test2"); attrs = sess.getAttributeNames(); attrsCnt = 0; @@ -94,7 +92,7 @@ public void attributes_dataStoredCorrectly() throws InterruptedException { } @Test - public void validSession_expectCorrectValidationOrInvalidation() throws InterruptedException { + void validSession_expectCorrectValidationOrInvalidation() throws InterruptedException { AwsHttpSession sess = new AwsHttpSession("id"); assertTrue(sess.isValid()); assertTrue(sess.isNew()); diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestFormTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestFormTest.java index 838ea6607..a185a1f8a 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestFormTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestFormTest.java @@ -8,7 +8,7 @@ import org.apache.http.HttpEntity; import org.apache.http.entity.ContentType; import org.apache.http.entity.mime.MultipartEntityBuilder; -import org.junit.Test; +import org.junit.jupiter.api.Test; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; @@ -22,10 +22,7 @@ import java.util.Map; import java.util.Random; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; +import static org.junit.jupiter.api.Assertions.*; public class AwsProxyHttpServletRequestFormTest { @@ -55,12 +52,12 @@ public class AwsProxyHttpServletRequestFormTest { private static final String ENCODED_FORM_ENTITY = PART_KEY_1 + "=" + ENCODED_VALUE + "&" + PART_KEY_2 + "=" + PART_VALUE_2; @Test - public void postForm_getParam_getEncodedFullValue() { + void postForm_getParam_getEncodedFullValue() { try { AwsProxyRequest proxyRequest = new AwsProxyRequestBuilder("/form", "POST") - .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_FORM_URLENCODED) - .body(ENCODED_FORM_ENTITY) - .build(); + .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_FORM_URLENCODED) + .body(ENCODED_FORM_ENTITY) + .build(); HttpServletRequest request = new AwsProxyHttpServletRequest(proxyRequest, null, null); assertNotNull(request.getParts()); @@ -71,32 +68,32 @@ public void postForm_getParam_getEncodedFullValue() { } @Test - public void postForm_getParts_parsing() { + void postForm_getParts_parsing() { try { AwsProxyRequest proxyRequest = new AwsProxyRequestBuilder("/form", "POST") - .header(MULTIPART_FORM_DATA.getContentType().getName(), MULTIPART_FORM_DATA.getContentType().getValue()) - //.header(formData.getContentEncoding().getName(), formData.getContentEncoding().getValue()) - .body(IOUtils.toString(MULTIPART_FORM_DATA.getContent())) - .build(); + .header(MULTIPART_FORM_DATA.getContentType().getName(), MULTIPART_FORM_DATA.getContentType().getValue()) + //.header(formData.getContentEncoding().getName(), formData.getContentEncoding().getValue()) + .body(IOUtils.toString(MULTIPART_FORM_DATA.getContent(), Charset.defaultCharset())) + .build(); HttpServletRequest request = new AwsProxyHttpServletRequest(proxyRequest, null, null); assertNotNull(request.getParts()); assertEquals(2, request.getParts().size()); - assertEquals(PART_VALUE_1, IOUtils.toString(request.getPart(PART_KEY_1).getInputStream())); - assertEquals(PART_VALUE_2, IOUtils.toString(request.getPart(PART_KEY_2).getInputStream())); + assertEquals(PART_VALUE_1, IOUtils.toString(request.getPart(PART_KEY_1).getInputStream(), Charset.defaultCharset())); + assertEquals(PART_VALUE_2, IOUtils.toString(request.getPart(PART_KEY_2).getInputStream(), Charset.defaultCharset())); } catch (IOException | ServletException e) { fail(e.getMessage()); } } @Test - public void multipart_getParts_binary() { + void multipart_getParts_binary() { try { AwsProxyRequest proxyRequest = new AwsProxyRequestBuilder("/form", "POST") - .header(MULTIPART_BINARY_DATA.getContentType().getName(), MULTIPART_BINARY_DATA.getContentType().getValue()) - .header(HttpHeaders.CONTENT_LENGTH, MULTIPART_BINARY_DATA.getContentLength() + "") - .binaryBody(MULTIPART_BINARY_DATA.getContent()) - .build(); + .header(MULTIPART_BINARY_DATA.getContentType().getName(), MULTIPART_BINARY_DATA.getContentType().getValue()) + .header(HttpHeaders.CONTENT_LENGTH, MULTIPART_BINARY_DATA.getContentLength() + "") + .binaryBody(MULTIPART_BINARY_DATA.getContent()) + .build(); HttpServletRequest request = new AwsProxyHttpServletRequest(proxyRequest, null, null); assertNotNull(request.getParts()); @@ -105,17 +102,17 @@ public void multipart_getParts_binary() { assertEquals(FILE_SIZE, request.getPart(FILE_KEY).getSize()); assertEquals(FILE_KEY, request.getPart(FILE_KEY).getName()); assertEquals(FILE_NAME, request.getPart(FILE_KEY).getSubmittedFileName()); - assertEquals(PART_VALUE_1, IOUtils.toString(request.getPart(PART_KEY_1).getInputStream())); - assertEquals(PART_VALUE_2, IOUtils.toString(request.getPart(PART_KEY_2).getInputStream())); + assertEquals(PART_VALUE_1, IOUtils.toString(request.getPart(PART_KEY_1).getInputStream(), Charset.defaultCharset())); + assertEquals(PART_VALUE_2, IOUtils.toString(request.getPart(PART_KEY_2).getInputStream(), Charset.defaultCharset())); } catch (IOException | ServletException e) { fail(e.getMessage()); } } @Test - public void postForm_getParamsBase64Encoded_expectAllParams() { + void postForm_getParamsBase64Encoded_expectAllParams() { AwsProxyRequest proxyRequest = new AwsProxyRequestBuilder("/form", "POST") - .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_FORM_URLENCODED).build(); + .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_FORM_URLENCODED).build(); proxyRequest.setBody(Base64.getEncoder().encodeToString(ENCODED_FORM_ENTITY.getBytes(Charset.defaultCharset()))); proxyRequest.setIsBase64Encoded(true); @@ -131,7 +128,7 @@ public void postForm_getParamsBase64Encoded_expectAllParams() { * issue #340 */ @Test - public void postForm_emptyParamPresent() { + void postForm_emptyParamPresent() { AwsProxyRequest proxyRequest = new AwsProxyRequestBuilder("/form", "POST") .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_FORM_URLENCODED).build(); String body = PART_KEY_1 + "=" + "&" + PART_KEY_2 + "=" + PART_VALUE_2; diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestReaderTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestReaderTest.java index 166bfb472..486e923aa 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestReaderTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestReaderTest.java @@ -7,14 +7,14 @@ import com.amazonaws.serverless.proxy.model.ContainerConfig; import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; import com.amazonaws.services.lambda.runtime.Context; -import org.junit.Test; +import org.junit.jupiter.api.Test; import javax.servlet.http.HttpServletRequest; import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.SecurityContext; import java.lang.reflect.Method; -import static org.junit.Assert.*; +import static org.junit.jupiter.api.Assertions.*; public class AwsProxyHttpServletRequestReaderTest { @@ -26,7 +26,7 @@ public class AwsProxyHttpServletRequestReaderTest { private static final String DECODED_REQUEST_PATH = "/foo/bar/Some Thing"; @Test - public void readRequest_validAwsProxy_populatedRequest() { + void readRequest_validAwsProxy_populatedRequest() { AwsProxyRequest request = new AwsProxyRequestBuilder("/path", "GET").header(TEST_HEADER_KEY, TEST_HEADER_VALUE).build(); try { HttpServletRequest servletRequest = reader.readRequest(request, null, null, ContainerConfig.defaultConfig()); @@ -39,7 +39,7 @@ public void readRequest_validAwsProxy_populatedRequest() { } @Test - public void readRequest_urlDecode_expectDecodedPath() { + void readRequest_urlDecode_expectDecodedPath() { AwsProxyRequest request = new AwsProxyRequestBuilder(ENCODED_REQUEST_PATH, "GET").build(); try { HttpServletRequest servletRequest = reader.readRequest(request, null, null, ContainerConfig.defaultConfig()); @@ -54,7 +54,7 @@ public void readRequest_urlDecode_expectDecodedPath() { } @Test - public void readRequest_contentCharset_doesNotOverrideRequestCharset() { + void readRequest_contentCharset_doesNotOverrideRequestCharset() { String requestCharset = "application/json; charset=UTF-8"; AwsProxyRequest request = new AwsProxyRequestBuilder(ENCODED_REQUEST_PATH, "GET").header(HttpHeaders.CONTENT_TYPE, requestCharset).build(); try { @@ -70,7 +70,7 @@ public void readRequest_contentCharset_doesNotOverrideRequestCharset() { } @Test - public void readRequest_contentCharset_setsDefaultCharsetWhenNotSpecified() { + void readRequest_contentCharset_setsDefaultCharsetWhenNotSpecified() { String requestCharset = "application/json"; AwsProxyRequest request = new AwsProxyRequestBuilder(ENCODED_REQUEST_PATH, "GET").header(HttpHeaders.CONTENT_TYPE, requestCharset).build(); try { @@ -87,7 +87,7 @@ public void readRequest_contentCharset_setsDefaultCharsetWhenNotSpecified() { } @Test - public void readRequest_contentCharset_appendsCharsetToComplextContentType() { + void readRequest_contentCharset_appendsCharsetToComplextContentType() { String contentType = "multipart/form-data; boundary=something"; AwsProxyRequest request = new AwsProxyRequestBuilder(ENCODED_REQUEST_PATH, "GET").header(HttpHeaders.CONTENT_TYPE, contentType).build(); try { @@ -104,7 +104,7 @@ public void readRequest_contentCharset_appendsCharsetToComplextContentType() { } @Test - public void readRequest_validEventEmptyPath_expectException() { + void readRequest_validEventEmptyPath_expectException() { try { AwsProxyRequest req = new AwsProxyRequestBuilder(null, "GET").build(); HttpServletRequest servletReq = reader.readRequest(req, null, null, ContainerConfig.defaultConfig()); @@ -116,7 +116,7 @@ public void readRequest_validEventEmptyPath_expectException() { } @Test - public void readRequest_invalidEventEmptyMethod_expectException() { + void readRequest_invalidEventEmptyMethod_expectException() { try { AwsProxyRequest req = new AwsProxyRequestBuilder("/path", null).build(); reader.readRequest(req, null, null, ContainerConfig.defaultConfig()); @@ -127,7 +127,7 @@ public void readRequest_invalidEventEmptyMethod_expectException() { } @Test - public void readRequest_invalidEventEmptyContext_expectException() { + void readRequest_invalidEventEmptyContext_expectException() { try { AwsProxyRequest req = new AwsProxyRequestBuilder("/path", "GET").build(); req.setRequestContext(null); @@ -139,7 +139,7 @@ public void readRequest_invalidEventEmptyContext_expectException() { } @Test - public void readRequest_nullHeaders_expectSuccess() { + void readRequest_nullHeaders_expectSuccess() { AwsProxyRequest req = new AwsProxyRequestBuilder("/path", "GET").build(); req.setMultiValueHeaders(null); try { @@ -153,7 +153,7 @@ public void readRequest_nullHeaders_expectSuccess() { } @Test - public void readRequest_emptyHeaders_expectSuccess() { + void readRequest_emptyHeaders_expectSuccess() { AwsProxyRequest req = new AwsProxyRequestBuilder("/path", "GET").build(); try { HttpServletRequest servletReq = reader.readRequest(req, null, null, ContainerConfig.defaultConfig()); diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestTest.java index de23d855c..73c07a8f2 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestTest.java @@ -5,9 +5,8 @@ import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; import com.amazonaws.services.lambda.runtime.Context; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; import javax.servlet.http.HttpServletRequest; import javax.ws.rs.core.HttpHeaders; @@ -22,10 +21,9 @@ import java.time.ZonedDateTime; import java.util.*; -import static org.junit.Assert.*; -import static org.junit.Assume.assumeFalse; +import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assumptions.assumeFalse; -@RunWith(Parameterized.class) public class AwsProxyHttpServletRequestTest { private String requestType; @@ -66,6 +64,7 @@ public class AwsProxyHttpServletRequestTest { .header(HttpHeaders.CONTENT_TYPE.toLowerCase(Locale.getDefault()), MediaType.APPLICATION_JSON); private static final AwsProxyRequestBuilder REQUEST_NULL_QUERY_STRING; + static { AwsProxyRequest awsProxyRequest = new AwsProxyRequestBuilder("/hello", "GET").build(); awsProxyRequest.setMultiValueQueryStringParameters(null); @@ -78,13 +77,12 @@ public class AwsProxyHttpServletRequestTest { .queryString(FORM_PARAM_NAME, ""); - public AwsProxyHttpServletRequestTest(String type) { + public void initAwsProxyHttpServletRequestTest(String type) { requestType = type; } - @Parameterized.Parameters public static Collection data() { - return Arrays.asList(new Object[] { "API_GW", "ALB", "HTTP_API", "WRAP" }); + return Arrays.asList(new Object[]{"API_GW", "ALB", "HTTP_API", "WRAP"}); } private HttpServletRequest getRequest(AwsProxyRequestBuilder req, Context lambdaCtx, SecurityContext securityCtx) { @@ -104,16 +102,20 @@ private HttpServletRequest getRequest(AwsProxyRequestBuilder req, Context lambda } - @Test - public void headers_getHeader_validRequest() { + @MethodSource("data") + @ParameterizedTest + void headers_getHeader_validRequest(String type) { + initAwsProxyHttpServletRequestTest(type); HttpServletRequest request = getRequest(getRequestWithHeaders(), null, null); assertNotNull(request.getHeader(CUSTOM_HEADER_KEY)); assertEquals(CUSTOM_HEADER_VALUE, request.getHeader(CUSTOM_HEADER_KEY)); assertEquals(MediaType.APPLICATION_JSON, request.getContentType()); } - @Test - public void headers_getRefererAndUserAgent_returnsContextValues() { + @MethodSource("data") + @ParameterizedTest + void headers_getRefererAndUserAgent_returnsContextValues(String type) { + initAwsProxyHttpServletRequestTest(type); assumeFalse("ALB".equals(requestType)); HttpServletRequest request = getRequest(REQUEST_USER_AGENT_REFERER, null, null); assertNotNull(request.getHeader("Referer")); @@ -125,45 +127,57 @@ public void headers_getRefererAndUserAgent_returnsContextValues() { assertEquals(USER_AGENT, request.getHeader("user-agent")); } - @Test - public void formParams_getParameter_validForm() { + @MethodSource("data") + @ParameterizedTest + void formParams_getParameter_validForm(String type) { + initAwsProxyHttpServletRequestTest(type); HttpServletRequest request = getRequest(REQUEST_FORM_URLENCODED, null, null); assertNotNull(request); assertNotNull(request.getParameter(FORM_PARAM_NAME)); assertEquals(FORM_PARAM_NAME_VALUE, request.getParameter(FORM_PARAM_NAME)); } - @Test - public void formParams_getParameter_null() { + @MethodSource("data") + @ParameterizedTest + void formParams_getParameter_null(String type) { + initAwsProxyHttpServletRequestTest(type); HttpServletRequest request = getRequest(REQUEST_INVALID_FORM_URLENCODED, null, null); assertNotNull(request); assertNull(request.getParameter(FORM_PARAM_NAME)); } - @Test - public void formParams_getParameter_multipleParams() { + @MethodSource("data") + @ParameterizedTest + void formParams_getParameter_multipleParams(String type) { + initAwsProxyHttpServletRequestTest(type); HttpServletRequest request = getRequest(REQUEST_FORM_URLENCODED_AND_QUERY, null, null); assertNotNull(request); assertEquals(2, request.getParameterValues(FORM_PARAM_NAME).length); } - @Test - public void formParams_getParameter_queryStringPrecendence() { + @MethodSource("data") + @ParameterizedTest + void formParams_getParameter_queryStringPrecendence(String type) { + initAwsProxyHttpServletRequestTest(type); HttpServletRequest request = getRequest(REQUEST_FORM_URLENCODED_AND_QUERY, null, null); assertNotNull(request); assertEquals(2, request.getParameterValues(FORM_PARAM_NAME).length); assertEquals(QUERY_STRING_NAME_VALUE, request.getParameter(FORM_PARAM_NAME)); } - @Test - public void dateHeader_noDate_returnNegativeOne() { + @MethodSource("data") + @ParameterizedTest + void dateHeader_noDate_returnNegativeOne(String type) { + initAwsProxyHttpServletRequestTest(type); HttpServletRequest request = getRequest(REQUEST_FORM_URLENCODED_AND_QUERY, null, null); assertNotNull(request); assertEquals(-1L, request.getDateHeader(HttpHeaders.DATE)); } - @Test - public void dateHeader_correctDate_parseToCorrectLong() { + @MethodSource("data") + @ParameterizedTest + void dateHeader_correctDate_parseToCorrectLong(String type) { + initAwsProxyHttpServletRequestTest(type); HttpServletRequest request = getRequest(REQUEST_WITH_DATE, null, null); assertNotNull(request); @@ -172,32 +186,40 @@ public void dateHeader_correctDate_parseToCorrectLong() { assertEquals(-1L, request.getDateHeader(HttpHeaders.IF_MODIFIED_SINCE)); } - @Test - public void scheme_getScheme_https() { + @MethodSource("data") + @ParameterizedTest + void scheme_getScheme_https(String type) { + initAwsProxyHttpServletRequestTest(type); HttpServletRequest request = getRequest(REQUEST_FORM_URLENCODED, null, null); assertNotNull(request); assertNotNull(request.getScheme()); assertEquals("https", request.getScheme()); } - @Test - public void scheme_getScheme_http() { + @MethodSource("data") + @ParameterizedTest + void scheme_getScheme_http(String type) { + initAwsProxyHttpServletRequestTest(type); HttpServletRequest request = getRequest(getRequestWithHeaders(), null, null); assertNotNull(request); assertNotNull(request.getScheme()); assertEquals(REQUEST_SCHEME_HTTP, request.getScheme()); } - @Test - public void cookie_getCookies_noCookies() { + @MethodSource("data") + @ParameterizedTest + void cookie_getCookies_noCookies(String type) { + initAwsProxyHttpServletRequestTest(type); HttpServletRequest request = getRequest(getRequestWithHeaders(), null, null); assertNotNull(request); assertNotNull(request.getCookies()); assertEquals(0, request.getCookies().length); } - @Test - public void cookie_getCookies_singleCookie() { + @MethodSource("data") + @ParameterizedTest + void cookie_getCookies_singleCookie(String type) { + initAwsProxyHttpServletRequestTest(type); HttpServletRequest request = getRequest(REQUEST_SINGLE_COOKIE, null, null); assertNotNull(request); assertNotNull(request.getCookies()); @@ -206,8 +228,10 @@ public void cookie_getCookies_singleCookie() { assertEquals(FORM_PARAM_NAME_VALUE, request.getCookies()[0].getValue()); } - @Test - public void cookie_getCookies_multipleCookies() { + @MethodSource("data") + @ParameterizedTest + void cookie_getCookies_multipleCookies(String type) { + initAwsProxyHttpServletRequestTest(type); HttpServletRequest request = getRequest(REQUEST_MULTIPLE_COOKIES, null, null); assertNotNull(request); assertNotNull(request.getCookies()); @@ -218,47 +242,59 @@ public void cookie_getCookies_multipleCookies() { assertEquals(FORM_PARAM_NAME_VALUE, request.getCookies()[1].getValue()); } - @Test - public void cookie_getCookies_emptyCookies() { + @MethodSource("data") + @ParameterizedTest + void cookie_getCookies_emptyCookies(String type) { + initAwsProxyHttpServletRequestTest(type); HttpServletRequest request = getRequest(REQUEST_MALFORMED_COOKIE, null, null); assertNotNull(request); assertNotNull(request.getCookies()); assertEquals(0, request.getCookies().length); } - @Test - public void queryParameters_getParameterMap_null() { + @MethodSource("data") + @ParameterizedTest + void queryParameters_getParameterMap_null(String type) { + initAwsProxyHttpServletRequestTest(type); HttpServletRequest request = getRequest(REQUEST_NULL_QUERY_STRING, null, null); assertNotNull(request); assertEquals(0, request.getParameterMap().size()); } - @Test - public void queryParameters_getParameterMap_nonNull() { + @MethodSource("data") + @ParameterizedTest + void queryParameters_getParameterMap_nonNull(String type) { + initAwsProxyHttpServletRequestTest(type); HttpServletRequest request = getRequest(REQUEST_QUERY, null, null); assertNotNull(request); assertEquals(1, request.getParameterMap().size()); assertEquals(QUERY_STRING_NAME_VALUE, request.getParameterMap().get(FORM_PARAM_NAME)[0]); } - @Test - public void queryParameters_getParameterMap_nonNull_EmptyParamValue() { + @MethodSource("data") + @ParameterizedTest + void queryParameters_getParameterMap_nonNull_EmptyParamValue(String type) { + initAwsProxyHttpServletRequestTest(type); HttpServletRequest request = getRequest(REQUEST_QUERY_EMPTY_VALUE, null, null); assertNotNull(request); assertEquals(1, request.getParameterMap().size()); assertEquals("", request.getParameterMap().get(FORM_PARAM_NAME)[0]); } - @Test - public void queryParameters_getParameterNames_null() { + @MethodSource("data") + @ParameterizedTest + void queryParameters_getParameterNames_null(String type) { + initAwsProxyHttpServletRequestTest(type); HttpServletRequest request = getRequest(REQUEST_NULL_QUERY_STRING, null, null); List parameterNames = Collections.list(request.getParameterNames()); assertNotNull(request); assertEquals(0, parameterNames.size()); } - @Test - public void queryParameters_getParameterNames_notNull() { + @MethodSource("data") + @ParameterizedTest + void queryParameters_getParameterNames_notNull(String type) { + initAwsProxyHttpServletRequestTest(type); HttpServletRequest request = getRequest(REQUEST_QUERY, null, null); List parameterNames = Collections.list(request.getParameterNames()); assertNotNull(request); @@ -266,8 +302,10 @@ public void queryParameters_getParameterNames_notNull() { assertTrue(parameterNames.contains(FORM_PARAM_NAME)); } - @Test - public void queryParameter_getParameterMap_avoidDuplicationOnMultipleCalls() { + @MethodSource("data") + @ParameterizedTest + void queryParameter_getParameterMap_avoidDuplicationOnMultipleCalls(String type) { + initAwsProxyHttpServletRequestTest(type); HttpServletRequest request = getRequest(REQUEST_MULTIPLE_FORM_AND_QUERY, null, null); Map params = request.getParameterMap(); @@ -287,23 +325,27 @@ public void queryParameter_getParameterMap_avoidDuplicationOnMultipleCalls() { assertEquals(1, params.get(FORM_PARAM_TEST).length); } - @Test - public void charEncoding_getEncoding_expectNoEncodingWithoutContentType() { - HttpServletRequest request = getRequest(REQUEST_SINGLE_COOKIE, null, null); - try { - request.setCharacterEncoding(StandardCharsets.UTF_8.name()); - // we have not specified a content type so the encoding will not be set - assertNull(request.getCharacterEncoding()); - assertNull(request.getContentType()); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - fail("Unsupported encoding"); + @MethodSource("data") + @ParameterizedTest + void charEncoding_getEncoding_expectNoEncodingWithoutContentType(String type) { + initAwsProxyHttpServletRequestTest(type); + HttpServletRequest request = getRequest(REQUEST_SINGLE_COOKIE, null, null); + try { + request.setCharacterEncoding(StandardCharsets.UTF_8.name()); + // we have not specified a content type so the encoding will not be set + assertNull(request.getCharacterEncoding()); + assertNull(request.getContentType()); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + fail("Unsupported encoding"); - } + } } - @Test - public void charEncoding_getEncoding_expectContentTypeOnly() { + @MethodSource("data") + @ParameterizedTest + void charEncoding_getEncoding_expectContentTypeOnly(String type) { + initAwsProxyHttpServletRequestTest(type); HttpServletRequest request = getRequest(getRequestWithHeaders(), null, null); // we have not specified a content type so the encoding will not be set assertNull(request.getCharacterEncoding()); @@ -320,11 +362,13 @@ public void charEncoding_getEncoding_expectContentTypeOnly() { } } - @Test - public void charEncoding_addCharEncodingTwice_expectSingleMediaTypeAndEncoding() { + @MethodSource("data") + @ParameterizedTest + void charEncoding_addCharEncodingTwice_expectSingleMediaTypeAndEncoding(String type) { + initAwsProxyHttpServletRequestTest(type); HttpServletRequest request = getRequest(getRequestWithHeaders(), null, null); // we have not specified a content type so the encoding will not be set - assertEquals(null, request.getCharacterEncoding()); + assertNull(request.getCharacterEncoding()); assertEquals(MediaType.APPLICATION_JSON, request.getContentType()); try { @@ -346,8 +390,10 @@ public void charEncoding_addCharEncodingTwice_expectSingleMediaTypeAndEncoding() } } - @Test - public void contentType_lowerCaseHeaderKey_expectUpdatedMediaType() { + @MethodSource("data") + @ParameterizedTest + void contentType_lowerCaseHeaderKey_expectUpdatedMediaType(String type) { + initAwsProxyHttpServletRequestTest(type); HttpServletRequest request = getRequest(REQUEST_WITH_LOWERCASE_HEADER, null, null); try { request.setCharacterEncoding(StandardCharsets.UTF_8.name()); @@ -361,8 +407,10 @@ public void contentType_lowerCaseHeaderKey_expectUpdatedMediaType() { } } - @Test - public void contentType_duplicateCase_expectSingleContentTypeHeader() { + @MethodSource("data") + @ParameterizedTest + void contentType_duplicateCase_expectSingleContentTypeHeader(String type) { + initAwsProxyHttpServletRequestTest(type); AwsProxyRequestBuilder proxyRequest = getRequestWithHeaders(); HttpServletRequest request = getRequest(proxyRequest, null, null); @@ -376,8 +424,10 @@ public void contentType_duplicateCase_expectSingleContentTypeHeader() { } } - @Test - public void requestURL_getUrl_expectHttpSchemaAndLocalhostForLocalTesting() { + @MethodSource("data") + @ParameterizedTest + void requestURL_getUrl_expectHttpSchemaAndLocalhostForLocalTesting(String type) { + initAwsProxyHttpServletRequestTest(type); assumeFalse("ALB".equals(requestType)); AwsProxyRequestBuilder req = getRequestWithHeaders(); req.apiId("test-id"); @@ -397,8 +447,10 @@ public void requestURL_getUrl_expectHttpSchemaAndLocalhostForLocalTesting() { LambdaContainerHandler.getContainerConfig().getCustomDomainNames().remove("localhost"); } - @Test - public void requestURL_getUrlWithCustomBasePath_expectCustomBasePath() { + @MethodSource("data") + @ParameterizedTest + void requestURL_getUrlWithCustomBasePath_expectCustomBasePath(String type) { + initAwsProxyHttpServletRequestTest(type); AwsProxyRequestBuilder req = getRequestWithHeaders(); LambdaContainerHandler.getContainerConfig().setServiceBasePath("test"); HttpServletRequest servletRequest = getRequest(req, null, null); @@ -407,8 +459,10 @@ public void requestURL_getUrlWithCustomBasePath_expectCustomBasePath() { LambdaContainerHandler.getContainerConfig().setServiceBasePath(null); } - @Test - public void requestURL_getUrlWithContextPath_expectStageAsContextPath() { + @MethodSource("data") + @ParameterizedTest + void requestURL_getUrlWithContextPath_expectStageAsContextPath(String type) { + initAwsProxyHttpServletRequestTest(type); assumeFalse("ALB".equals(requestType)); AwsProxyRequestBuilder req = getRequestWithHeaders(); req.stage("test-stage"); @@ -420,8 +474,10 @@ public void requestURL_getUrlWithContextPath_expectStageAsContextPath() { LambdaContainerHandler.getContainerConfig().setUseStageAsServletContext(false); } - @Test - public void getLocales_emptyAcceptHeader_expectDefaultLocale() { + @MethodSource("data") + @ParameterizedTest + void getLocales_emptyAcceptHeader_expectDefaultLocale(String type) { + initAwsProxyHttpServletRequestTest(type); AwsProxyRequestBuilder req = getRequestWithHeaders(); HttpServletRequest servletRequest = getRequest(req, null, null); Enumeration locales = servletRequest.getLocales(); @@ -434,8 +490,10 @@ public void getLocales_emptyAcceptHeader_expectDefaultLocale() { assertEquals(1, localesNo); } - @Test - public void getLocales_validAcceptHeader_expectSingleLocale() { + @MethodSource("data") + @ParameterizedTest + void getLocales_validAcceptHeader_expectSingleLocale(String type) { + initAwsProxyHttpServletRequestTest(type); AwsProxyRequestBuilder req = getRequestWithHeaders(); req.header(HttpHeaders.ACCEPT_LANGUAGE, "fr-CH"); HttpServletRequest servletRequest = getRequest(req, null, null); @@ -449,8 +507,10 @@ public void getLocales_validAcceptHeader_expectSingleLocale() { assertEquals(1, localesNo); } - @Test - public void getLocales_validAcceptHeaderMultipleLocales_expectFullLocaleList() { + @MethodSource("data") + @ParameterizedTest + void getLocales_validAcceptHeaderMultipleLocales_expectFullLocaleList(String type) { + initAwsProxyHttpServletRequestTest(type); AwsProxyRequestBuilder req = getRequestWithHeaders(); req.header(HttpHeaders.ACCEPT_LANGUAGE, "fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5"); HttpServletRequest servletRequest = getRequest(req, null, null); @@ -470,8 +530,10 @@ public void getLocales_validAcceptHeaderMultipleLocales_expectFullLocaleList() { assertEquals(new Locale("fr-CH"), servletRequest.getLocale()); } - @Test - public void getLocales_validAcceptHeaderMultipleLocales_expectFullLocaleListOrdered() { + @MethodSource("data") + @ParameterizedTest + void getLocales_validAcceptHeaderMultipleLocales_expectFullLocaleListOrdered(String type) { + initAwsProxyHttpServletRequestTest(type); AwsProxyRequestBuilder req = getRequestWithHeaders(); req.header(HttpHeaders.ACCEPT_LANGUAGE, "fr-CH, en;q=0.8, de;q=0.7, *;q=0.5, fr;q=0.9"); HttpServletRequest servletRequest = getRequest(req, null, null); @@ -488,8 +550,10 @@ public void getLocales_validAcceptHeaderMultipleLocales_expectFullLocaleListOrde assertEquals(new Locale("*"), localesList.get(4)); } - @Test - public void nullQueryString_expectNoExceptions() { + @MethodSource("data") + @ParameterizedTest + void nullQueryString_expectNoExceptions(String type) { + initAwsProxyHttpServletRequestTest(type); AwsProxyRequestBuilder req = new AwsProxyRequestBuilder("/hello", "GET"); HttpServletRequest servletReq = getRequest(req, null, null); assertNull(servletReq.getQueryString()); @@ -499,8 +563,10 @@ public void nullQueryString_expectNoExceptions() { assertNull(servletReq.getParameterValues("param")); } - @Test - public void inputStream_emptyBody_expectNullInputStream() { + @MethodSource("data") + @ParameterizedTest + void inputStream_emptyBody_expectNullInputStream(String type) { + initAwsProxyHttpServletRequestTest(type); AwsProxyRequestBuilder proxyReq = getRequestWithHeaders(); assertNull(proxyReq.build().getBody()); HttpServletRequest req = getRequest(proxyReq, null, null); @@ -514,37 +580,47 @@ public void inputStream_emptyBody_expectNullInputStream() { } } - @Test - public void getHeaders_emptyHeaders_expectEmptyEnumeration() { + @MethodSource("data") + @ParameterizedTest + void getHeaders_emptyHeaders_expectEmptyEnumeration(String type) { + initAwsProxyHttpServletRequestTest(type); AwsProxyRequestBuilder proxyReq = new AwsProxyRequestBuilder("/hello", "GET"); HttpServletRequest req = getRequest(proxyReq, null, null); assertFalse(req.getHeaders("param").hasMoreElements()); } - @Test - public void getServerPort_defaultPort_expect443() { + @MethodSource("data") + @ParameterizedTest + void getServerPort_defaultPort_expect443(String type) { + initAwsProxyHttpServletRequestTest(type); HttpServletRequest req = getRequest(getRequestWithHeaders(), null, null); assertEquals(443, req.getServerPort()); } - @Test - public void getServerPort_customPortFromHeader_expectCustomPort() { + @MethodSource("data") + @ParameterizedTest + void getServerPort_customPortFromHeader_expectCustomPort(String type) { + initAwsProxyHttpServletRequestTest(type); AwsProxyRequestBuilder proxyReq = getRequestWithHeaders(); proxyReq.header(AwsProxyHttpServletRequest.PORT_HEADER_NAME, "80"); HttpServletRequest req = getRequest(proxyReq, null, null); assertEquals(80, req.getServerPort()); } - @Test - public void getServerPort_invalidCustomPortFromHeader_expectDefaultPort() { + @MethodSource("data") + @ParameterizedTest + void getServerPort_invalidCustomPortFromHeader_expectDefaultPort(String type) { + initAwsProxyHttpServletRequestTest(type); AwsProxyRequestBuilder proxyReq = getRequestWithHeaders(); proxyReq.header(AwsProxyHttpServletRequest.PORT_HEADER_NAME, "7200"); HttpServletRequest req = getRequest(proxyReq, null, null); assertEquals(443, req.getServerPort()); } - @Test - public void serverName_emptyHeaders_doesNotThrowNullPointer() { + @MethodSource("data") + @ParameterizedTest + void serverName_emptyHeaders_doesNotThrowNullPointer(String type) { + initAwsProxyHttpServletRequestTest(type); AwsProxyRequestBuilder proxyReq = new AwsProxyRequestBuilder("/test", "GET"); proxyReq.multiValueHeaders(null); HttpServletRequest servletReq = getRequest(proxyReq, null, null); @@ -552,8 +628,10 @@ public void serverName_emptyHeaders_doesNotThrowNullPointer() { assertTrue(serverName.startsWith("null.execute-api")); } - @Test - public void serverName_hostHeader_returnsHostHeaderOnly() { + @MethodSource("data") + @ParameterizedTest + void serverName_hostHeader_returnsHostHeaderOnly(String type) { + initAwsProxyHttpServletRequestTest(type); AwsProxyRequestBuilder proxyReq = new AwsProxyRequestBuilder("/test", "GET") .header(HttpHeaders.HOST, "testapi.com"); LambdaContainerHandler.getContainerConfig().addCustomDomain("testapi.com"); @@ -564,8 +642,8 @@ public void serverName_hostHeader_returnsHostHeaderOnly() { private AwsProxyRequestBuilder getRequestWithHeaders() { return new AwsProxyRequestBuilder("/hello", "GET") - .header(CUSTOM_HEADER_KEY, CUSTOM_HEADER_VALUE) - .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON) - .header(AwsProxyHttpServletRequest.CF_PROTOCOL_HEADER_NAME, REQUEST_SCHEME_HTTP); + .header(CUSTOM_HEADER_KEY, CUSTOM_HEADER_VALUE) + .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON) + .header(AwsProxyHttpServletRequest.CF_PROTOCOL_HEADER_NAME, REQUEST_SCHEME_HTTP); } } diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyRequestDispatcherTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyRequestDispatcherTest.java index d061a1115..03c06ad24 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyRequestDispatcherTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyRequestDispatcherTest.java @@ -10,7 +10,7 @@ import com.amazonaws.serverless.proxy.model.AwsProxyResponse; import com.amazonaws.serverless.proxy.model.ContainerConfig; import com.amazonaws.services.lambda.runtime.Context; -import org.junit.Test; +import org.junit.jupiter.api.Test; import org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestWrapper; import javax.servlet.Servlet; @@ -21,9 +21,7 @@ import java.nio.charset.Charset; import java.util.concurrent.CountDownLatch; -import static junit.framework.TestCase.*; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.*; public class AwsProxyRequestDispatcherTest { public static final String FORWARD_PATH = "/newpath"; @@ -31,9 +29,9 @@ public class AwsProxyRequestDispatcherTest { @Test - public void setPath_forwardByPath_proxyRequestObjectInPropertyReferencesSameProxyRequest() throws InvalidRequestEventException { + void setPath_forwardByPath_proxyRequestObjectInPropertyReferencesSameProxyRequest() throws InvalidRequestEventException { AwsProxyRequest proxyRequest = new AwsProxyRequestBuilder("/hello", "GET").build(); - HttpServletRequest servletRequest = requestReader.readRequest(proxyRequest,null, new MockLambdaContext(), ContainerConfig.defaultConfig()); + HttpServletRequest servletRequest = requestReader.readRequest(proxyRequest, null, new MockLambdaContext(), ContainerConfig.defaultConfig()); AwsProxyRequestDispatcher dispatcher = new AwsProxyRequestDispatcher(FORWARD_PATH, false, null); dispatcher.setRequestPath(servletRequest, FORWARD_PATH); @@ -41,9 +39,9 @@ public void setPath_forwardByPath_proxyRequestObjectInPropertyReferencesSameProx } @Test - public void setPathForWrappedRequest_forwardByPath_proxyRequestObjectInPropertyReferencesSameProxyRequest() throws InvalidRequestEventException { + void setPathForWrappedRequest_forwardByPath_proxyRequestObjectInPropertyReferencesSameProxyRequest() throws InvalidRequestEventException { AwsProxyRequest proxyRequest = new AwsProxyRequestBuilder("/hello", "GET").build(); - HttpServletRequest servletRequest = requestReader.readRequest(proxyRequest,null, new MockLambdaContext(), ContainerConfig.defaultConfig()); + HttpServletRequest servletRequest = requestReader.readRequest(proxyRequest, null, new MockLambdaContext(), ContainerConfig.defaultConfig()); SecurityContextHolderAwareRequestWrapper springSecurityRequest = new SecurityContextHolderAwareRequestWrapper(servletRequest, "ADMIN"); AwsProxyRequestDispatcher dispatcher = new AwsProxyRequestDispatcher(FORWARD_PATH, false, null); @@ -52,7 +50,7 @@ public void setPathForWrappedRequest_forwardByPath_proxyRequestObjectInPropertyR } @Test - public void setPathForWrappedRequestWithoutGatewayEvent_forwardByPath_throwsException() { + void setPathForWrappedRequestWithoutGatewayEvent_forwardByPath_throwsException() { AwsProxyRequest proxyRequest = new AwsProxyRequestBuilder("/hello", "GET").build(); AwsProxyHttpServletRequest servletRequest = new AwsProxyHttpServletRequest(proxyRequest, new MockLambdaContext(), null); SecurityContextHolderAwareRequestWrapper springSecurityRequest = new SecurityContextHolderAwareRequestWrapper(servletRequest, "ADMIN"); @@ -68,9 +66,9 @@ public void setPathForWrappedRequestWithoutGatewayEvent_forwardByPath_throwsExce } @Test - public void forwardRequest_nullHandler_throwsIllegalStateException() throws InvalidRequestEventException { + void forwardRequest_nullHandler_throwsIllegalStateException() throws InvalidRequestEventException { AwsProxyRequest proxyRequest = new AwsProxyRequestBuilder("/hello", "GET").build(); - HttpServletRequest servletRequest = requestReader.readRequest(proxyRequest,null, new MockLambdaContext(), ContainerConfig.defaultConfig()); + HttpServletRequest servletRequest = requestReader.readRequest(proxyRequest, null, new MockLambdaContext(), ContainerConfig.defaultConfig()); AwsProxyRequestDispatcher dispatcher = new AwsProxyRequestDispatcher(FORWARD_PATH, false, null); try { dispatcher.forward(servletRequest, new AwsHttpServletResponse(servletRequest, new CountDownLatch(1))); @@ -86,9 +84,9 @@ public void forwardRequest_nullHandler_throwsIllegalStateException() throws Inva } @Test - public void forwardRequest_committedResponse_throwsIllegalStateException() throws InvalidRequestEventException { + void forwardRequest_committedResponse_throwsIllegalStateException() throws InvalidRequestEventException { AwsProxyRequest proxyRequest = new AwsProxyRequestBuilder("/hello", "GET").build(); - HttpServletRequest servletRequest = requestReader.readRequest(proxyRequest,null, new MockLambdaContext(), ContainerConfig.defaultConfig()); + HttpServletRequest servletRequest = requestReader.readRequest(proxyRequest, null, new MockLambdaContext(), ContainerConfig.defaultConfig()); AwsProxyRequestDispatcher dispatcher = new AwsProxyRequestDispatcher(FORWARD_PATH, false, mockLambdaHandler(null)); AwsHttpServletResponse resp = new AwsHttpServletResponse(servletRequest, new CountDownLatch(1)); @@ -107,9 +105,9 @@ public void forwardRequest_committedResponse_throwsIllegalStateException() throw } @Test - public void forwardRequest_partiallyWrittenResponse_resetsBuffer() throws InvalidRequestEventException { + void forwardRequest_partiallyWrittenResponse_resetsBuffer() throws InvalidRequestEventException { AwsProxyRequest proxyRequest = new AwsProxyRequestBuilder("/hello", "GET").build(); - HttpServletRequest servletRequest = requestReader.readRequest(proxyRequest,null, new MockLambdaContext(), ContainerConfig.defaultConfig()); + HttpServletRequest servletRequest = requestReader.readRequest(proxyRequest, null, new MockLambdaContext(), ContainerConfig.defaultConfig()); AwsProxyRequestDispatcher dispatcher = new AwsProxyRequestDispatcher(FORWARD_PATH, false, mockLambdaHandler(null)); AwsHttpServletResponse resp = new AwsHttpServletResponse(servletRequest, new CountDownLatch(1)); @@ -127,12 +125,12 @@ public void forwardRequest_partiallyWrittenResponse_resetsBuffer() throws Invali } @Test - public void include_addsToResponse_appendsCorrectly() throws InvalidRequestEventException, IOException { + void include_addsToResponse_appendsCorrectly() throws InvalidRequestEventException, IOException { final String firstPart = "first"; final String secondPart = "second"; AwsProxyRequest proxyRequest = new AwsProxyRequestBuilder("/hello", "GET").build(); - AwsProxyResponse resp = mockLambdaHandler((AwsProxyHttpServletRequest req, AwsHttpServletResponse res)-> { + AwsProxyResponse resp = mockLambdaHandler((AwsProxyHttpServletRequest req, AwsHttpServletResponse res) -> { if (req.getAttribute("cnt") == null) { res.getOutputStream().write(firstPart.getBytes()); req.setAttribute("cnt", 1); @@ -147,13 +145,13 @@ public void include_addsToResponse_appendsCorrectly() throws InvalidRequestEvent } @Test - public void include_appendsNewHeader_cannotAppendNewHeaders() throws InvalidRequestEventException, IOException { + void include_appendsNewHeader_cannotAppendNewHeaders() throws InvalidRequestEventException, IOException { final String firstPart = "first"; final String secondPart = "second"; final String headerKey = "X-Custom-Header"; AwsProxyRequest proxyRequest = new AwsProxyRequestBuilder("/hello", "GET").build(); - AwsProxyResponse resp = mockLambdaHandler((AwsProxyHttpServletRequest req, AwsHttpServletResponse res)-> { + AwsProxyResponse resp = mockLambdaHandler((AwsProxyHttpServletRequest req, AwsHttpServletResponse res) -> { if (req.getAttribute("cnt") == null) { res.getOutputStream().write(firstPart.getBytes()); req.setAttribute("cnt", 1); diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContextTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContextTest.java index 07628f187..5c84bca30 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContextTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContextTest.java @@ -4,9 +4,9 @@ import com.amazonaws.serverless.proxy.internal.servlet.filters.UrlPathValidator; import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; -import org.junit.BeforeClass; -import org.junit.Ignore; -import org.junit.Test; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; import javax.servlet.*; import javax.servlet.http.HttpServletRequest; @@ -21,13 +21,13 @@ import java.nio.file.Paths; import java.util.concurrent.CountDownLatch; -import static org.junit.Assert.*; +import static org.junit.jupiter.api.Assertions.*; public class AwsServletContextTest { private static String TMP_DIR = System.getProperty("java.io.tmpdir"); private static final AwsServletContext STATIC_CTX = new AwsServletContext(null); - @BeforeClass + @BeforeAll public static void setUp() { LambdaContainerHandler.getContainerConfig().addValidFilePath("/private/var/task"); File tmpFile = new File(TMP_DIR); @@ -40,8 +40,9 @@ public static void setUp() { LambdaContainerHandler.getContainerConfig().addValidFilePath("C:\\MyTestFolder"); } - @Test @Ignore - public void getMimeType_disabledPath_expectException() { + @Test + @Disabled + void getMimeType_disabledPath_expectException() { AwsServletContext ctx = new AwsServletContext(null); try { assertNull(ctx.getMimeType("/usr/local/lib/nothing")); @@ -54,13 +55,13 @@ public void getMimeType_disabledPath_expectException() { } @Test - public void getMimeType_nonExistentFileInTaskPath_expectNull() { + void getMimeType_nonExistentFileInTaskPath_expectNull() { AwsServletContext ctx = new AwsServletContext(null); assertNull(ctx.getMimeType("/var/task/nothing")); } @Test - public void getMimeType_mimeTypeOfCorrectFile_expectMime() { + void getMimeType_mimeTypeOfCorrectFile_expectMime() { String tmpFilePath = TMP_DIR + "test_text.txt"; AwsServletContext ctx = new AwsServletContext(null); String mimeType = ctx.getMimeType(tmpFilePath); @@ -71,7 +72,7 @@ public void getMimeType_mimeTypeOfCorrectFile_expectMime() { } @Test - public void getMimeType_unknownExtension_expectAppOctetStream() { + void getMimeType_unknownExtension_expectAppOctetStream() { AwsServletContext ctx = new AwsServletContext(null); String mimeType = ctx.getMimeType("myfile.unkext"); assertEquals("application/octet-stream", mimeType); @@ -79,7 +80,7 @@ public void getMimeType_unknownExtension_expectAppOctetStream() { @Test - public void addFilter_nonExistentFilterClass_expectException() { + void addFilter_nonExistentFilterClass_expectException() { AwsServletContext ctx = new AwsServletContext(null); String filterClass = "com.amazonaws.serverless.TestingFilterClassNonExistent"; try { @@ -92,7 +93,7 @@ public void addFilter_nonExistentFilterClass_expectException() { } @Test - public void addFilter_doesNotImplementFilter_expectException() { + void addFilter_doesNotImplementFilter_expectException() { AwsServletContext ctx = new AwsServletContext(null); try { ctx.addFilter("filter", this.getClass().getName()); @@ -104,7 +105,7 @@ public void addFilter_doesNotImplementFilter_expectException() { } @Test - public void addFilter_validFilter_expectSuccess() { + void addFilter_validFilter_expectSuccess() { AwsServletContext ctx = new AwsServletContext(null); FilterRegistration.Dynamic reg = ctx.addFilter("filter", UrlPathValidator.class.getName()); assertNotNull(reg); @@ -118,7 +119,7 @@ public void addFilter_validFilter_expectSuccess() { } @Test - public void addFilter_validFilter_expectSuccessWithCustomFilterName() { + void addFilter_validFilter_expectSuccessWithCustomFilterName() { AwsServletContext ctx = new AwsServletContext(null); FilterRegistration.Dynamic reg = ctx.addFilter("filter", TestFilter.class.getName()); assertNotNull(reg); @@ -132,18 +133,18 @@ public void addFilter_validFilter_expectSuccessWithCustomFilterName() { } @Test - public void getContextPath_expectEmpty() { + void getContextPath_expectEmpty() { assertEquals("", STATIC_CTX.getContextPath()); } @Test - public void getContext_returnsSameContext() { + void getContext_returnsSameContext() { assertEquals(STATIC_CTX, STATIC_CTX.getContext("1")); assertEquals(STATIC_CTX, STATIC_CTX.getContext("2")); } @Test - public void getVersions_expectStaticVersions() { + void getVersions_expectStaticVersions() { assertEquals(AwsServletContext.SERVLET_API_MAJOR_VERSION, STATIC_CTX.getMajorVersion()); assertEquals(AwsServletContext.SERVLET_API_MINOR_VERSION, STATIC_CTX.getMinorVersion()); assertEquals(AwsServletContext.SERVLET_API_MAJOR_VERSION, STATIC_CTX.getEffectiveMajorVersion()); @@ -151,7 +152,7 @@ public void getVersions_expectStaticVersions() { } @Test - public void startAsync_expectPopulatedAsyncContext() { + void startAsync_expectPopulatedAsyncContext() { HttpServletRequest req = new AwsProxyHttpServletRequest( new AwsProxyRequestBuilder("/", "GET").build(), null, @@ -164,7 +165,7 @@ public void startAsync_expectPopulatedAsyncContext() { } @Test - public void startAsyncWithNewRequest_expectPopulatedAsyncContext() { + void startAsyncWithNewRequest_expectPopulatedAsyncContext() { HttpServletRequest req = new AwsProxyHttpServletRequest( new AwsProxyRequestBuilder("/", "GET").build(), null, @@ -182,7 +183,7 @@ public void startAsyncWithNewRequest_expectPopulatedAsyncContext() { } @Test - public void unsupportedOperations_expectExceptions() { + void unsupportedOperations_expectExceptions() { int exCount = 0; try { STATIC_CTX.getResourcePaths("1"); @@ -194,13 +195,13 @@ public void unsupportedOperations_expectExceptions() { } catch (UnsupportedOperationException e) { exCount++; } - assertEquals(2, exCount); + assertEquals(2, exCount); assertNull(STATIC_CTX.getServletRegistration("1")); } @Test - public void servletMappings_expectCorrectServlet() { + void servletMappings_expectCorrectServlet() { AwsServletContext ctx = new AwsServletContext(null); TestServlet srv1 = new TestServlet("srv1"); TestServlet srv2 = new TestServlet("srv2"); @@ -223,7 +224,7 @@ public void servletMappings_expectCorrectServlet() { } @Test - public void addServlet_callsDefaultConstructor() throws ServletException { + void addServlet_callsDefaultConstructor() throws ServletException { AwsServletContext ctx = new AwsServletContext(null); ctx.addServlet("srv1", TestServlet.class); assertNotNull(ctx.getServlet("srv1")); diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletRegistrationTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletRegistrationTest.java index b823da10f..105abc61d 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletRegistrationTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletRegistrationTest.java @@ -1,6 +1,6 @@ package com.amazonaws.serverless.proxy.internal.servlet; -import org.junit.Test; +import org.junit.jupiter.api.Test; import javax.servlet.*; @@ -10,12 +10,12 @@ import java.util.Map; import java.util.Set; -import static org.junit.Assert.*; +import static org.junit.jupiter.api.Assertions.*; public class AwsServletRegistrationTest { @Test - public void getMappings_singleMapping_savedCorrectly() { + void getMappings_singleMapping_savedCorrectly() { ServletRegistration.Dynamic reg = new AwsServletRegistration("test", null, new AwsServletContext(null)); reg.addMapping("/"); assertEquals(1, reg.getMappings().size()); @@ -27,7 +27,7 @@ public void getMappings_singleMapping_savedCorrectly() { } @Test - public void metadata_savedAndReturnedCorrectly() { + void metadata_savedAndReturnedCorrectly() { ServletRegistration.Dynamic reg = new AwsServletRegistration("test", null, new AwsServletContext(null)); assertEquals("test", reg.getName()); reg.setLoadOnStartup(2); @@ -40,7 +40,7 @@ public void metadata_savedAndReturnedCorrectly() { } @Test - public void setInitParameter_savedCorrectly() { + void setInitParameter_savedCorrectly() { ServletRegistration.Dynamic reg = new AwsServletRegistration("test", null, new AwsServletContext(null)); assertTrue(reg.setInitParameter("param", "value")); assertFalse(reg.setInitParameter("param", "value")); @@ -55,7 +55,7 @@ public void setInitParameter_savedCorrectly() { } @Test - public void servletConfig_populatesConfig() throws ServletException { + void servletConfig_populatesConfig() throws ServletException { AwsServletContext servletCtx = new AwsServletContext(null); TestServlet servlet = new TestServlet(); ServletRegistration.Dynamic reg = new AwsServletRegistration("test", servlet, servletCtx); diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/FilterHolderTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/FilterHolderTest.java index 6c39c8d8d..1180a5d15 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/FilterHolderTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/FilterHolderTest.java @@ -3,15 +3,15 @@ import com.amazonaws.serverless.proxy.internal.servlet.filters.UrlPathValidator; import com.amazonaws.serverless.proxy.internal.testutils.MockLambdaContext; import com.amazonaws.services.lambda.runtime.Context; -import org.junit.Test; +import org.junit.jupiter.api.Test; -import static org.junit.Assert.*; +import static org.junit.jupiter.api.Assertions.*; public class FilterHolderTest { private static Context lambdaContext = new MockLambdaContext(); @Test - public void annotation_filterRegistration_pathValidator() { + void annotation_filterRegistration_pathValidator() { FilterHolder holder = new FilterHolder(new UrlPathValidator(), new AwsServletContext(null)); assertTrue(holder.isAnnotated()); diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/ServletLambdaContainerHandlerBuilderTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/ServletLambdaContainerHandlerBuilderTest.java index 1481afc7e..5ae5aae02 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/ServletLambdaContainerHandlerBuilderTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/ServletLambdaContainerHandlerBuilderTest.java @@ -6,17 +6,17 @@ import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.serverless.proxy.model.AwsProxyResponse; import com.amazonaws.services.lambda.runtime.Context; -import org.junit.Test; +import org.junit.jupiter.api.Test; import javax.servlet.http.HttpServletRequest; import java.util.concurrent.CountDownLatch; -import static org.junit.Assert.*; +import static org.junit.jupiter.api.Assertions.*; public class ServletLambdaContainerHandlerBuilderTest { @Test - public void validation_throwsException() { + void validation_throwsException() { TestBuilder testBuilder = new TestBuilder(); try { testBuilder.validate(); @@ -27,21 +27,21 @@ public void validation_throwsException() { } @Test - public void additionalMethod_testSetter() { + void additionalMethod_testSetter() { TestBuilder test = new TestBuilder().exceptionHandler(new AwsProxyExceptionHandler()).name("test"); assertEquals("test", test.getName()); } @Test - public void defaultProxy_setsValuesCorrectly() { + void defaultProxy_setsValuesCorrectly() { TestBuilder test = new TestBuilder().defaultProxy().name("test"); assertNotNull(test.initializationWrapper); assertTrue(test.exceptionHandler instanceof AwsProxyExceptionHandler); assertTrue(test.requestReader instanceof AwsProxyHttpServletRequestReader); assertTrue(test.responseWriter instanceof AwsProxyHttpServletResponseWriter); assertTrue(test.securityContextWriter instanceof AwsProxySecurityContextWriter); - assertSame(test.requestTypeClass, AwsProxyRequest.class); - assertSame(test.responseTypeClass, AwsProxyResponse.class); + assertSame(AwsProxyRequest.class, test.requestTypeClass); + assertSame(AwsProxyResponse.class, test.responseTypeClass); assertEquals("test", test.name); } diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/filters/UrlPathValidatorTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/filters/UrlPathValidatorTest.java index beb273d56..11a018eb4 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/filters/UrlPathValidatorTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/filters/UrlPathValidatorTest.java @@ -5,7 +5,7 @@ import com.amazonaws.serverless.proxy.internal.servlet.AwsProxyHttpServletRequest; import com.amazonaws.serverless.proxy.internal.servlet.FilterHolder; import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; -import org.junit.Test; +import org.junit.jupiter.api.Test; import javax.servlet.FilterConfig; import javax.servlet.ServletContext; @@ -17,12 +17,12 @@ import java.util.HashMap; import java.util.Map; -import static junit.framework.TestCase.assertEquals; -import static junit.framework.TestCase.fail; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.fail; public class UrlPathValidatorTest { @Test - public void init_noConfig_setsDefaultStatusCode() { + void init_noConfig_setsDefaultStatusCode() { UrlPathValidator pathValidator = new UrlPathValidator(); try { pathValidator.init(null); @@ -34,7 +34,7 @@ public void init_noConfig_setsDefaultStatusCode() { } @Test - public void init_withConfig_setsCorrectStatusCode() { + void init_withConfig_setsCorrectStatusCode() { UrlPathValidator pathValidator = new UrlPathValidator(); Map params = new HashMap<>(); params.put(UrlPathValidator.PARAM_INVALID_STATUS_CODE, "401"); @@ -49,7 +49,7 @@ public void init_withConfig_setsCorrectStatusCode() { } @Test - public void init_withWrongConfig_setsDefaultStatusCode() { + void init_withWrongConfig_setsDefaultStatusCode() { UrlPathValidator pathValidator = new UrlPathValidator(); Map params = new HashMap<>(); params.put(UrlPathValidator.PARAM_INVALID_STATUS_CODE, "hello"); @@ -64,7 +64,7 @@ public void init_withWrongConfig_setsDefaultStatusCode() { } @Test - public void doFilter_invalidRelativePathUri_setsDefaultStatusCode() { + void doFilter_invalidRelativePathUri_setsDefaultStatusCode() { AwsProxyHttpServletRequest req = new AwsProxyHttpServletRequest(new AwsProxyRequestBuilder("../..", "GET").build(), null, null); AwsHttpServletResponse resp = new AwsHttpServletResponse(req, null); UrlPathValidator pathValidator = new UrlPathValidator(); @@ -79,7 +79,7 @@ public void doFilter_invalidRelativePathUri_setsDefaultStatusCode() { } @Test - public void doFilter_invalidUri_setsDefaultStatusCode() { + void doFilter_invalidUri_setsDefaultStatusCode() { AwsProxyHttpServletRequest req = new AwsProxyHttpServletRequest(new AwsProxyRequestBuilder("wonkyprotocol://˝Ó#\u0009", "GET").build(), null, null); AwsHttpServletResponse resp = new AwsHttpServletResponse(req, null); UrlPathValidator pathValidator = new UrlPathValidator(); diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/model/ApiGatewayAuthorizerContextTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/model/ApiGatewayAuthorizerContextTest.java index 87ab0ed7a..196552c1d 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/model/ApiGatewayAuthorizerContextTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/model/ApiGatewayAuthorizerContextTest.java @@ -2,11 +2,11 @@ import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.io.IOException; -import static org.junit.Assert.*; +import static org.junit.jupiter.api.Assertions.*; public class ApiGatewayAuthorizerContextTest { private static final String FIELD_NAME_1 = "CUSTOM_FIELD_1"; @@ -60,7 +60,7 @@ public class ApiGatewayAuthorizerContextTest { + "}"; @Test - public void authorizerContext_serialize_customValues() { + void authorizerContext_serialize_customValues() { try { AwsProxyRequest req = new AwsProxyRequestBuilder().fromJsonString(AUTHORIZER_REQUEST).build(); diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/model/AwsProxyRequestTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/model/AwsProxyRequestTest.java index b06e04cf6..6d0aa9eeb 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/model/AwsProxyRequestTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/model/AwsProxyRequestTest.java @@ -1,13 +1,11 @@ package com.amazonaws.serverless.proxy.model; -import static junit.framework.TestCase.assertTrue; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; +import static org.junit.jupiter.api.Assertions.*; + import java.io.IOException; -import org.junit.Test; +import org.junit.jupiter.api.Test; import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; import com.fasterxml.jackson.databind.ObjectMapper; @@ -16,7 +14,7 @@ public class AwsProxyRequestTest { private static final String CUSTOM_HEADER_VALUE = "123456"; @Test - public void deserialize_multiValuedHeaders_caseInsensitive() throws IOException { + void deserialize_multiValuedHeaders_caseInsensitive() throws IOException { AwsProxyRequest req = new AwsProxyRequestBuilder() .fromJsonString(getRequestJson(true, CUSTOM_HEADER_KEY_LOWER_CASE, CUSTOM_HEADER_VALUE)).build(); assertNotNull(req.getMultiValueHeaders().get(CUSTOM_HEADER_KEY_LOWER_CASE.toUpperCase())); @@ -25,7 +23,7 @@ public void deserialize_multiValuedHeaders_caseInsensitive() throws IOException } @Test - public void deserialize_base64Encoded_readsBoolCorrectly() throws IOException { + void deserialize_base64Encoded_readsBoolCorrectly() throws IOException { AwsProxyRequest req = new AwsProxyRequestBuilder() .fromJsonString(getRequestJson(true, CUSTOM_HEADER_KEY_LOWER_CASE, CUSTOM_HEADER_VALUE)).build(); assertTrue(req.isBase64Encoded()); @@ -35,7 +33,7 @@ public void deserialize_base64Encoded_readsBoolCorrectly() throws IOException { } @Test - public void serialize_base64Encoded_fieldContainsIsPrefix() throws IOException { + void serialize_base64Encoded_fieldContainsIsPrefix() throws IOException { AwsProxyRequest req = new AwsProxyRequestBuilder() .fromJsonString(getRequestJson(true, CUSTOM_HEADER_KEY_LOWER_CASE, CUSTOM_HEADER_VALUE)).build(); ObjectMapper mapper = new ObjectMapper(); @@ -106,9 +104,9 @@ private String getRequestJson(boolean base64Encoded, String headerKey, String he } @Test - public void deserialize_singleValuedHeaders() throws IOException { + void deserialize_singleValuedHeaders() throws IOException { AwsProxyRequest req = - new AwsProxyRequestBuilder().fromJsonString(getSingleValueRequestJson()).build(); + new AwsProxyRequestBuilder().fromJsonString(getSingleValueRequestJson()).build(); assertThat(req.getHeaders().get("accept"), is("*")); } diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/model/CognitoAuthorizerClaimsTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/model/CognitoAuthorizerClaimsTest.java index 55b5d936f..1ad2314b6 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/model/CognitoAuthorizerClaimsTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/model/CognitoAuthorizerClaimsTest.java @@ -2,14 +2,14 @@ import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.io.IOException; import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; import java.util.Locale; -import static org.junit.Assert.*; +import static org.junit.jupiter.api.Assertions.*; public class CognitoAuthorizerClaimsTest { @@ -77,7 +77,7 @@ public class CognitoAuthorizerClaimsTest { @Test - public void claims_serialize_validJsonString() { + void claims_serialize_validJsonString() { try { AwsProxyRequest req = new AwsProxyRequestBuilder().fromJsonString(USER_POOLS_REQUEST).build(); @@ -90,7 +90,7 @@ public void claims_serialize_validJsonString() { } @Test - public void claims_dateParse_issueTime() { + void claims_dateParse_issueTime() { try { AwsProxyRequest req = new AwsProxyRequestBuilder().fromJsonString(USER_POOLS_REQUEST).build(); diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/model/HttpApiV2ProxyRequestTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/model/HttpApiV2ProxyRequestTest.java index c673a59e1..5a0943d05 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/model/HttpApiV2ProxyRequestTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/model/HttpApiV2ProxyRequestTest.java @@ -2,11 +2,11 @@ import com.amazonaws.serverless.proxy.internal.LambdaContainerHandler; import com.fasterxml.jackson.core.JsonProcessingException; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.util.ArrayList; -import static org.junit.Assert.*; +import static org.junit.jupiter.api.Assertions.*; public class HttpApiV2ProxyRequestTest { @@ -128,10 +128,10 @@ public class HttpApiV2ProxyRequestTest { " \"body\": \"Hello from Lambda\",\n" + " \"isBase64Encoded\": false,\n" + " \"stageVariables\": {\"stageVariable1\": \"value1\", \"stageVariable2\": \"value2\"}\n" + - " }\n";; + " }\n"; @Test - public void deserialize_fromJsonString_authorizerPopulatedCorrectly() { + void deserialize_fromJsonString_authorizerPopulatedCorrectly() { try { HttpApiV2ProxyRequest req = LambdaContainerHandler.getObjectMapper().readValue(BASE_PROXY_REQUEST, HttpApiV2ProxyRequest.class); assertTrue(req.getRequestContext().getAuthorizer().getJwtAuthorizer().getClaims().containsKey("claim1")); @@ -143,7 +143,7 @@ public void deserialize_fromJsonString_authorizerPopulatedCorrectly() { } @Test - public void deserialize_fromJsonString_authorizerEmptyMap() { + void deserialize_fromJsonString_authorizerEmptyMap() { try { HttpApiV2ProxyRequest req = LambdaContainerHandler.getObjectMapper().readValue(NO_AUTH_PROXY, HttpApiV2ProxyRequest.class); assertNotNull(req.getRequestContext().getAuthorizer()); @@ -156,7 +156,7 @@ public void deserialize_fromJsonString_authorizerEmptyMap() { } @Test - public void deserialize_fromJsonString_lambdaAuthorizer() { + void deserialize_fromJsonString_lambdaAuthorizer() { try { HttpApiV2ProxyRequest req = LambdaContainerHandler.getObjectMapper().readValue(LAMBDA_AUTHORIZER, HttpApiV2ProxyRequest.class); assertNotNull(req.getRequestContext().getAuthorizer()); @@ -171,7 +171,7 @@ public void deserialize_fromJsonString_lambdaAuthorizer() { } @Test - public void deserialize_fromJsonString_isBase64EncodedPopulates() { + void deserialize_fromJsonString_isBase64EncodedPopulates() { try { HttpApiV2ProxyRequest req = LambdaContainerHandler.getObjectMapper().readValue(BASE_PROXY_REQUEST, HttpApiV2ProxyRequest.class); assertFalse(req.isBase64Encoded()); @@ -184,7 +184,7 @@ public void deserialize_fromJsonString_isBase64EncodedPopulates() { } @Test - public void serialize_toJsonString_authorizerPopulatesCorrectly() { + void serialize_toJsonString_authorizerPopulatesCorrectly() { HttpApiV2ProxyRequest req = new HttpApiV2ProxyRequest(); req.setBase64Encoded(false); req.setRequestContext(new HttpApiV2ProxyRequestContext()); diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/model/MultiValuedTreeMapTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/model/MultiValuedTreeMapTest.java index edc6d2810..c2566cbe0 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/model/MultiValuedTreeMapTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/model/MultiValuedTreeMapTest.java @@ -1,17 +1,15 @@ package com.amazonaws.serverless.proxy.model; -import org.junit.Test; +import org.junit.jupiter.api.Test; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; +import static org.junit.jupiter.api.Assertions.*; public class MultiValuedTreeMapTest { @Test - public void add_sameNameCaseSensitive_expectBothValues() { + void add_sameNameCaseSensitive_expectBothValues() { MultiValuedTreeMap map = new MultiValuedTreeMap<>(); map.add("Test", "test"); map.add("Test", "test2"); @@ -28,7 +26,7 @@ public void add_sameNameCaseSensitive_expectBothValues() { } @Test - public void add_sameNameCaseInsensitive_expectOneValue() { + void add_sameNameCaseInsensitive_expectOneValue() { Headers map = new Headers(); map.add("Test", "test"); assertNotNull(map.get("Test")); @@ -41,7 +39,7 @@ public void add_sameNameCaseInsensitive_expectOneValue() { } @Test - public void addFirst_sameNameKey_ExpectFirstReplaced() { + void addFirst_sameNameKey_ExpectFirstReplaced() { MultiValuedTreeMap map = new MultiValuedTreeMap<>(); map.add("Test", "test1"); map.add("Test", "test2"); diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index 11c9ee9ca..2d491078f 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -100,6 +100,11 @@ ${jersey.version} test + + org.junit.jupiter + junit-jupiter + test + @@ -151,7 +156,7 @@ org.apache.maven.plugins maven-surefire-plugin - 2.9 + 2.22.2 always diff --git a/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyAwsProxyTest.java b/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyAwsProxyTest.java index dbcaac407..179555323 100644 --- a/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyAwsProxyTest.java +++ b/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyAwsProxyTest.java @@ -30,9 +30,8 @@ import org.glassfish.jersey.logging.LoggingFeature; import org.glassfish.jersey.media.multipart.MultiPartFeature; import org.glassfish.jersey.server.ResourceConfig; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.MediaType; @@ -42,16 +41,15 @@ import java.util.Collection; import java.util.UUID; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; -import static org.junit.Assume.assumeTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.fail; +import static org.junit.jupiter.api.Assumptions.assumeTrue; /** * Unit test class for the Jersey AWS_PROXY default implementation */ -@RunWith(Parameterized.class) public class JerseyAwsProxyTest { private static final String CUSTOM_HEADER_KEY = "x-custom-header"; private static final String CUSTOM_HEADER_VALUE = "my-custom-value"; @@ -62,43 +60,42 @@ public class JerseyAwsProxyTest { private static ObjectMapper objectMapper = new ObjectMapper(); private static ResourceConfig app = new ResourceConfig().packages("com.amazonaws.serverless.proxy.jersey") - .register(LoggingFeature.class) - .register(ServletRequestFilter.class) - .register(MultiPartFeature.class) - .register(new ResourceBinder()) - .property(LoggingFeature.LOGGING_FEATURE_VERBOSITY_SERVER, LoggingFeature.Verbosity.PAYLOAD_ANY); + .register(LoggingFeature.class) + .register(ServletRequestFilter.class) + .register(MultiPartFeature.class) + .register(new ResourceBinder()) + .property(LoggingFeature.LOGGING_FEATURE_VERBOSITY_SERVER, LoggingFeature.Verbosity.PAYLOAD_ANY); private static ResourceConfig httpApiApp = new ResourceConfig().packages("com.amazonaws.serverless.proxy.jersey") - .register(LoggingFeature.class) - .register(ServletRequestFilter.class) - .register(MultiPartFeature.class) - .register(new ResourceBinder()) - .property(LoggingFeature.LOGGING_FEATURE_VERBOSITY_SERVER, LoggingFeature.Verbosity.PAYLOAD_ANY); + .register(LoggingFeature.class) + .register(ServletRequestFilter.class) + .register(MultiPartFeature.class) + .register(new ResourceBinder()) + .property(LoggingFeature.LOGGING_FEATURE_VERBOSITY_SERVER, LoggingFeature.Verbosity.PAYLOAD_ANY); private static ResourceConfig appWithoutRegisteredDependencies = new ResourceConfig() - .packages("com.amazonaws.serverless.proxy.jersey") - .register(LoggingFeature.class) - .register(ServletRequestFilter.class) - .register(MultiPartFeature.class) - .property(LoggingFeature.LOGGING_FEATURE_VERBOSITY_SERVER, LoggingFeature.Verbosity.PAYLOAD_ANY); + .packages("com.amazonaws.serverless.proxy.jersey") + .register(LoggingFeature.class) + .register(ServletRequestFilter.class) + .register(MultiPartFeature.class) + .property(LoggingFeature.LOGGING_FEATURE_VERBOSITY_SERVER, LoggingFeature.Verbosity.PAYLOAD_ANY); private static JerseyLambdaContainerHandler handler; private static JerseyLambdaContainerHandler httpApiHandler; private static JerseyLambdaContainerHandler handlerWithoutRegisteredDependencies - = JerseyLambdaContainerHandler.getAwsProxyHandler(appWithoutRegisteredDependencies); + = JerseyLambdaContainerHandler.getAwsProxyHandler(appWithoutRegisteredDependencies); private static Context lambdaContext = new MockLambdaContext(); private String type; - public JerseyAwsProxyTest(String reqType) { + public void initJerseyAwsProxyTest(String reqType) { type = reqType; } - @Parameterized.Parameters public static Collection data() { - return Arrays.asList(new Object[] { "API_GW", "ALB", "HTTP_API" }); + return Arrays.asList(new Object[]{"API_GW", "ALB", "HTTP_API"}); } private AwsProxyRequestBuilder getRequestBuilder(String path, String method) { @@ -140,11 +137,13 @@ private JerseyLambdaContainerHandler getHandler() { } } - @Test - public void headers_getHeaders_echo() { + @MethodSource("data") + @ParameterizedTest + void headers_getHeaders_echo(String reqType) { + initJerseyAwsProxyTest(reqType); AwsProxyRequestBuilder request = getRequestBuilder("/echo/headers", "GET") - .json() - .header(CUSTOM_HEADER_KEY, CUSTOM_HEADER_VALUE); + .json() + .header(CUSTOM_HEADER_KEY, CUSTOM_HEADER_VALUE); AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(200, output.getStatusCode()); @@ -153,11 +152,13 @@ public void headers_getHeaders_echo() { validateMapResponseModel(output); } - @Test - public void headers_servletRequest_echo() { + @MethodSource("data") + @ParameterizedTest + void headers_servletRequest_echo(String reqType) { + initJerseyAwsProxyTest(reqType); AwsProxyRequestBuilder request = getRequestBuilder("/echo/servlet-headers", "GET") - .json() - .header(CUSTOM_HEADER_KEY, CUSTOM_HEADER_VALUE); + .json() + .header(CUSTOM_HEADER_KEY, CUSTOM_HEADER_VALUE); AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(200, output.getStatusCode()); @@ -166,31 +167,37 @@ public void headers_servletRequest_echo() { validateMapResponseModel(output); } - @Test - public void headers_servletRequest_failedDependencyInjection_expectInternalServerError() { + @MethodSource("data") + @ParameterizedTest + void headers_servletRequest_failedDependencyInjection_expectInternalServerError(String reqType) { + initJerseyAwsProxyTest(reqType); assumeTrue("API_GW".equals(type)); AwsProxyRequest request = getRequestBuilder("/echo/servlet-headers", "GET") - .json() - .header(CUSTOM_HEADER_KEY, CUSTOM_HEADER_VALUE) - .build(); + .json() + .header(CUSTOM_HEADER_KEY, CUSTOM_HEADER_VALUE) + .build(); AwsProxyResponse output = handlerWithoutRegisteredDependencies.proxy(request, lambdaContext); assertEquals("application/json", output.getMultiValueHeaders().getFirst("Content-Type")); assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), output.getStatusCode()); } - @Test - public void context_servletResponse_setCustomHeader() { + @MethodSource("data") + @ParameterizedTest + void context_servletResponse_setCustomHeader(String reqType) { + initJerseyAwsProxyTest(reqType); AwsProxyRequestBuilder request = getRequestBuilder("/echo/servlet-response", "GET") - .json(); + .json(); AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(200, output.getStatusCode()); assertTrue(output.getMultiValueHeaders().containsKey(EchoJerseyResource.SERVLET_RESP_HEADER_KEY)); } - @Test - public void context_serverInfo_correctContext() { + @MethodSource("data") + @ParameterizedTest + void context_serverInfo_correctContext(String reqType) { + initJerseyAwsProxyTest(reqType); AwsProxyRequestBuilder request = getRequestBuilder("/echo/servlet-context", "GET"); AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(200, output.getStatusCode()); @@ -199,10 +206,12 @@ public void context_serverInfo_correctContext() { validateSingleValueModel(output, AwsServletContext.SERVER_INFO); } - @Test - public void requestScheme_valid_expectHttps() { + @MethodSource("data") + @ParameterizedTest + void requestScheme_valid_expectHttps(String reqType) { + initJerseyAwsProxyTest(reqType); AwsProxyRequestBuilder request = getRequestBuilder("/echo/scheme", "GET") - .json(); + .json(); AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(200, output.getStatusCode()); @@ -211,10 +220,12 @@ public void requestScheme_valid_expectHttps() { validateSingleValueModel(output, "https"); } - @Test - public void requestFilter_injectsServletRequest_expectCustomAttribute() { + @MethodSource("data") + @ParameterizedTest + void requestFilter_injectsServletRequest_expectCustomAttribute(String reqType) { + initJerseyAwsProxyTest(reqType); AwsProxyRequestBuilder request = getRequestBuilder("/echo/filter-attribute", "GET") - .json(); + .json(); AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(200, output.getStatusCode()); @@ -223,12 +234,14 @@ public void requestFilter_injectsServletRequest_expectCustomAttribute() { validateSingleValueModel(output, ServletRequestFilter.FILTER_ATTRIBUTE_VALUE); } - @Test - public void authorizer_securityContext_customPrincipalSuccess() { + @MethodSource("data") + @ParameterizedTest + void authorizer_securityContext_customPrincipalSuccess(String reqType) { + initJerseyAwsProxyTest(reqType); assumeTrue("API_GW".equals(type)); // TODO: We should figure out a way to run this for HTTP_API too AwsProxyRequestBuilder request = getRequestBuilder("/echo/authorizer-principal", "GET") - .json() - .authorizerPrincipal(AUTHORIZER_PRINCIPAL_ID); + .json() + .authorizerPrincipal(AUTHORIZER_PRINCIPAL_ID); AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(200, output.getStatusCode()); @@ -236,14 +249,16 @@ public void authorizer_securityContext_customPrincipalSuccess() { validateSingleValueModel(output, AUTHORIZER_PRINCIPAL_ID); } - @Test - public void authorizer_securityContext_customAuthorizerContextSuccess() { + @MethodSource("data") + @ParameterizedTest + void authorizer_securityContext_customAuthorizerContextSuccess(String reqType) { + initJerseyAwsProxyTest(reqType); assumeTrue("API_GW".equals(type)); AwsProxyRequestBuilder request = getRequestBuilder("/echo/authorizer-context", "GET") - .json() - .authorizerPrincipal(AUTHORIZER_PRINCIPAL_ID) - .authorizerContextValue(CUSTOM_HEADER_KEY, CUSTOM_HEADER_VALUE) - .queryString("key", CUSTOM_HEADER_KEY); + .json() + .authorizerPrincipal(AUTHORIZER_PRINCIPAL_ID) + .authorizerContextValue(CUSTOM_HEADER_KEY, CUSTOM_HEADER_VALUE) + .queryString("key", CUSTOM_HEADER_KEY); AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(200, output.getStatusCode()); @@ -252,41 +267,49 @@ public void authorizer_securityContext_customAuthorizerContextSuccess() { validateSingleValueModel(output, CUSTOM_HEADER_VALUE); } - @Test - public void errors_unknownRoute_expect404() { + @MethodSource("data") + @ParameterizedTest + void errors_unknownRoute_expect404(String reqType) { + initJerseyAwsProxyTest(reqType); AwsProxyRequestBuilder request = getRequestBuilder("/echo/test33", "GET"); AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(404, output.getStatusCode()); } - @Test - public void error_contentType_invalidContentType() { + @MethodSource("data") + @ParameterizedTest + void error_contentType_invalidContentType(String reqType) { + initJerseyAwsProxyTest(reqType); AwsProxyRequestBuilder request = getRequestBuilder("/echo/json-body", "POST") - .header("Content-Type", "application/octet-stream") - .body("asdasdasd"); + .header("Content-Type", "application/octet-stream") + .body("asdasdasd"); AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(415, output.getStatusCode()); } - @Test - public void error_statusCode_methodNotAllowed() { + @MethodSource("data") + @ParameterizedTest + void error_statusCode_methodNotAllowed(String reqType) { + initJerseyAwsProxyTest(reqType); AwsProxyRequestBuilder request = getRequestBuilder("/echo/status-code", "POST") - .json() - .queryString("status", "201"); + .json() + .queryString("status", "201"); AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(405, output.getStatusCode()); } - @Test - public void responseBody_responseWriter_validBody() throws JsonProcessingException { + @MethodSource("data") + @ParameterizedTest + void responseBody_responseWriter_validBody(String reqType) throws JsonProcessingException { + initJerseyAwsProxyTest(reqType); SingleValueModel singleValueModel = new SingleValueModel(); singleValueModel.setValue(CUSTOM_HEADER_VALUE); AwsProxyRequestBuilder request = getRequestBuilder("/echo/json-body", "POST") - .json() - .body(objectMapper.writeValueAsString(singleValueModel)); + .json() + .body(objectMapper.writeValueAsString(singleValueModel)); AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(200, output.getStatusCode()); @@ -295,18 +318,22 @@ public void responseBody_responseWriter_validBody() throws JsonProcessingExcepti validateSingleValueModel(output, CUSTOM_HEADER_VALUE); } - @Test - public void statusCode_responseStatusCode_customStatusCode() { + @MethodSource("data") + @ParameterizedTest + void statusCode_responseStatusCode_customStatusCode(String reqType) { + initJerseyAwsProxyTest(reqType); AwsProxyRequestBuilder request = getRequestBuilder("/echo/status-code", "GET") - .json() - .queryString("status", "201"); + .json() + .queryString("status", "201"); AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(201, output.getStatusCode()); } - @Test - public void base64_binaryResponse_base64Encoding() { + @MethodSource("data") + @ParameterizedTest + void base64_binaryResponse_base64Encoding(String reqType) { + initJerseyAwsProxyTest(reqType); AwsProxyRequestBuilder request = getRequestBuilder("/echo/binary", "GET"); AwsProxyResponse response = executeRequest(request, lambdaContext); @@ -314,8 +341,10 @@ public void base64_binaryResponse_base64Encoding() { assertTrue(Base64.isBase64(response.getBody())); } - @Test - public void exception_mapException_mapToNotImplemented() { + @MethodSource("data") + @ParameterizedTest + void exception_mapException_mapToNotImplemented(String reqType) { + initJerseyAwsProxyTest(reqType); AwsProxyRequestBuilder request = getRequestBuilder("/echo/exception", "GET"); AwsProxyResponse response = executeRequest(request, lambdaContext); @@ -324,24 +353,28 @@ public void exception_mapException_mapToNotImplemented() { assertEquals(Response.Status.NOT_IMPLEMENTED.getStatusCode(), response.getStatusCode()); } - @Test - public void stripBasePath_route_shouldRouteCorrectly() { + @MethodSource("data") + @ParameterizedTest + void stripBasePath_route_shouldRouteCorrectly(String reqType) { + initJerseyAwsProxyTest(reqType); AwsProxyRequestBuilder request = getRequestBuilder("/custompath/echo/status-code", "GET") - .json() - .queryString("status", "201"); + .json() + .queryString("status", "201"); getHandler().stripBasePath("/custompath"); AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(201, output.getStatusCode()); getHandler().stripBasePath(""); } - @Test - public void stripBasePath_route_shouldReturn404WithStageAsContext() { + @MethodSource("data") + @ParameterizedTest + void stripBasePath_route_shouldReturn404WithStageAsContext(String reqType) { + initJerseyAwsProxyTest(reqType); assumeTrue(!"ALB".equals(type)); AwsProxyRequestBuilder request = getRequestBuilder("/custompath/echo/status-code", "GET") - .stage("prod") - .json() - .queryString("status", "201"); + .stage("prod") + .json() + .queryString("status", "201"); getHandler().stripBasePath("/custompath"); LambdaContainerHandler.getContainerConfig().setUseStageAsServletContext(true); AwsProxyResponse output = executeRequest(request, lambdaContext); @@ -350,57 +383,67 @@ public void stripBasePath_route_shouldReturn404WithStageAsContext() { LambdaContainerHandler.getContainerConfig().setUseStageAsServletContext(false); } - @Test - public void stripBasePath_route_shouldReturn404() { + @MethodSource("data") + @ParameterizedTest + void stripBasePath_route_shouldReturn404(String reqType) { + initJerseyAwsProxyTest(reqType); AwsProxyRequestBuilder request = getRequestBuilder("/custompath/echo/status-code", "GET") - .json() - .queryString("status", "201"); + .json() + .queryString("status", "201"); getHandler().stripBasePath("/custom"); AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(404, output.getStatusCode()); getHandler().stripBasePath(""); } - @Test - public void securityContext_injectPrincipal_expectPrincipalName() { + @MethodSource("data") + @ParameterizedTest + void securityContext_injectPrincipal_expectPrincipalName(String reqType) { + initJerseyAwsProxyTest(reqType); assumeTrue("API_GW".equals(type)); AwsProxyRequestBuilder request = getRequestBuilder("/echo/security-context", "GET") - .authorizerPrincipal(USER_PRINCIPAL); + .authorizerPrincipal(USER_PRINCIPAL); AwsProxyResponse resp = executeRequest(request, lambdaContext); assertEquals(200, resp.getStatusCode()); validateSingleValueModel(resp, USER_PRINCIPAL); } - @Test - public void emptyStream_putNullBody_expectPutToSucceed() { + @MethodSource("data") + @ParameterizedTest + void emptyStream_putNullBody_expectPutToSucceed(String reqType) { + initJerseyAwsProxyTest(reqType); AwsProxyRequestBuilder request = getRequestBuilder("/echo/empty-stream/" + CUSTOM_HEADER_KEY + "/test/2", "PUT") - .nullBody() - .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON); + .nullBody() + .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON); AwsProxyResponse resp = executeRequest(request, lambdaContext); assertEquals(200, resp.getStatusCode()); validateSingleValueModel(resp, CUSTOM_HEADER_KEY); } - @Test - public void refererHeader_headerParam_expectCorrectInjection() { + @MethodSource("data") + @ParameterizedTest + void refererHeader_headerParam_expectCorrectInjection(String reqType) { + initJerseyAwsProxyTest(reqType); String refererValue = "test-referer"; AwsProxyRequestBuilder request = getRequestBuilder("/echo/referer-header", "GET") - .nullBody() - .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON) - .header("Referer", refererValue); + .nullBody() + .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON) + .header("Referer", refererValue); AwsProxyResponse resp = executeRequest(request, lambdaContext); assertEquals(200, resp.getStatusCode()); validateSingleValueModel(resp, refererValue); } - @Test - public void textPlainContent_plain_responseHonorsContentType() { + @MethodSource("data") + @ParameterizedTest + void textPlainContent_plain_responseHonorsContentType(String reqType) { + initJerseyAwsProxyTest(reqType); AwsProxyRequestBuilder req = getRequestBuilder("/echo/plain", "GET") - .nullBody() - .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON) - .header(HttpHeaders.ACCEPT, MediaType.TEXT_PLAIN); + .nullBody() + .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON) + .header(HttpHeaders.ACCEPT, MediaType.TEXT_PLAIN); AwsProxyResponse resp = executeRequest(req, lambdaContext); assertEquals(200, resp.getStatusCode()); diff --git a/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyInjectionTest.java b/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyInjectionTest.java index e8e86270b..cfbe5c9bb 100644 --- a/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyInjectionTest.java +++ b/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyInjectionTest.java @@ -12,16 +12,15 @@ */ package com.amazonaws.serverless.proxy.jersey; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; import javax.inject.Singleton; import org.glassfish.jersey.internal.inject.AbstractBinder; import org.glassfish.jersey.media.multipart.MultiPartFeature; import org.glassfish.jersey.server.ResourceConfig; -import org.junit.Test; - +import org.junit.jupiter.api.Test; import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.serverless.proxy.model.AwsProxyResponse; @@ -47,7 +46,7 @@ protected void configure() { app); @Test - public void can_get_injected_resources() throws Exception { + void can_get_injected_resources() throws Exception { JerseyInjectionTest instance1 = handler.getInjectionManager().getInstance(JerseyInjectionTest.class); assertNotNull(instance1); diff --git a/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyParamEncodingTest.java b/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyParamEncodingTest.java index e736cbc1e..25bb26bd4 100644 --- a/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyParamEncodingTest.java +++ b/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyParamEncodingTest.java @@ -14,10 +14,9 @@ import com.fasterxml.jackson.databind.ObjectMapper; import org.glassfish.jersey.media.multipart.MultiPartFeature; import org.glassfish.jersey.server.ResourceConfig; -import org.junit.Ignore; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; import javax.ws.rs.core.MediaType; @@ -27,12 +26,11 @@ import java.util.Arrays; import java.util.Collection; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.fail; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.fail; -@RunWith(Parameterized.class) public class JerseyParamEncodingTest { private static final String SIMPLE_ENCODED_PARAM = "p/z+3"; @@ -40,55 +38,54 @@ public class JerseyParamEncodingTest { private static final String QUERY_STRING_KEY = "identifier"; private static final String QUERY_STRING_NON_ENCODED_VALUE = "Space Test"; private static final String QUERY_STRING_ENCODED_VALUE = "Space%20Test"; - private static final byte[] FILE_CONTENTS = new byte[] { - (byte)47, (byte)85, (byte)135, (byte)12, (byte)53, (byte)7, (byte)158, (byte)212, (byte)55, (byte)193, (byte)149, (byte)3, (byte)166, (byte)181, - (byte)151, (byte)84, (byte)122, (byte)200, (byte)244, (byte)5, (byte)115, (byte)159, (byte)66, (byte)64, (byte)143, (byte)211, (byte)13, (byte)63, - (byte)235, (byte)184, (byte)51, (byte)49, (byte)143, (byte)167, (byte)231, (byte)31, (byte)78, (byte)234, (byte)145, (byte)105, (byte)190, (byte)170, - (byte)49, (byte)135, (byte)175, (byte)106, (byte)25, (byte)86, (byte)145, (byte)181, (byte)156, (byte)23, (byte)153, (byte)99, (byte)175, (byte)63, - (byte)43, (byte)208, (byte)5, (byte)16, (byte)140, (byte)103, (byte)146, (byte)254, (byte)155, (byte)97, (byte)53, (byte)100, (byte)137, (byte)6, - (byte)62, (byte)101, (byte)189, (byte)137, (byte)140, (byte)5, (byte)110, (byte)218, (byte)113, (byte)132, (byte)36, (byte)188, (byte)19, (byte)168, - (byte)93, (byte)169, (byte)124, (byte)253, (byte)201, (byte)233, (byte)21, (byte)80, (byte)4, (byte)56, (byte)0, (byte)204, (byte)205, (byte)232, - (byte)213, (byte)253, (byte)232, (byte)91, (byte)153, (byte)169, (byte)82, (byte)247, (byte)78, (byte)71, (byte)188, (byte)71, (byte)23, (byte)171, - (byte)232, (byte)26, (byte)146, (byte)189, (byte)145, (byte)82, (byte)79, (byte)148, (byte)1, (byte)201, (byte)243, (byte)73, (byte)98, (byte)65, - (byte)236, (byte)177, (byte)211, (byte)106, (byte)105, (byte)46, (byte)204, (byte)214, (byte)55, (byte)182, (byte)55, (byte)149, (byte)221, (byte)52, - (byte)186, (byte)122, (byte)255, (byte)195, (byte)60, (byte)146, (byte)21, (byte)212, (byte)139, (byte)38, (byte)146, (byte)166, (byte)14, (byte)174, - (byte)242, (byte)145, (byte)16, (byte)44, (byte)68, (byte)89, (byte)25, (byte)219, (byte)62, (byte)227, (byte)6, (byte)89, (byte)194, (byte)146, (byte)93, - (byte)167, (byte)230, (byte)90, (byte)59, (byte)35, (byte)136, (byte)37, (byte)196, (byte)118, (byte)16, (byte)28, (byte)107, (byte)105, (byte)87, - (byte)195, (byte)86, (byte)87, (byte)180, (byte)176, (byte)118, (byte)6, (byte)29, (byte)26, (byte)51, (byte)94, (byte)21, (byte)23, (byte)32, (byte)156, - (byte)150, (byte)204, (byte)53, (byte)110, (byte)134, (byte)153, (byte)138, (byte)247, (byte)98, (byte)135, (byte)249, (byte)119, (byte)121, (byte)2, - (byte)42, (byte)62, (byte)198, (byte)197, (byte)112, (byte)153, (byte)244, (byte)174, (byte)145, (byte)54, (byte)246, (byte)44, (byte)198, (byte)50, - (byte)2, (byte)37, (byte)102, (byte)50, (byte)103, (byte)207, (byte)81, (byte)62, (byte)138, (byte)164, (byte)140, (byte)64, (byte)247, (byte)115, - (byte)40, (byte)41, (byte)252, (byte)54, (byte)189, (byte)207, (byte)124, (byte)147, (byte)122, (byte)243, (byte)83, (byte)34, (byte)160, (byte)64, (byte)189, (byte)226, (byte)202, (byte)181, (byte)55, (byte)158, (byte)121, (byte)78, (byte)143, (byte)41, (byte)58, (byte)27, (byte)77, (byte)186, (byte)214, (byte)23, (byte)132, (byte)100, (byte)180, (byte)26, (byte)37, (byte)247, (byte)254, (byte)97, (byte)214, (byte)57, (byte)30, (byte)46, (byte)96, (byte)44, (byte)138, (byte)15, (byte)162, (byte)93, (byte)222, (byte)239, (byte)189, (byte)72, (byte)15, (byte)79, (byte)136, (byte)210, (byte)44, (byte)233, (byte)99, (byte)72, (byte)234, (byte)225, (byte)245, (byte)27, (byte)111, (byte)175, (byte)132, (byte)112, (byte)135, (byte)253, (byte)66, (byte)215, (byte)168, (byte)156, (byte)168, (byte)79, (byte)78, (byte)140, (byte)14, (byte)129, (byte)37, (byte)238, (byte)196, (byte)34, (byte)245, (byte)141, (byte)148, (byte)161, (byte)29, (byte)110, (byte)32, (byte)255, (byte)247, (byte)52, (byte)48, (byte)102, (byte)42, (byte)54, (byte)97, (byte)185, (byte)10, (byte)114, (byte)225, (byte)247, (byte)254, (byte)108, (byte)116, (byte)73, (byte)84, (byte)242, (byte)86, (byte)15, (byte)72, (byte)68, (byte)172, (byte)74, (byte)107, (byte)103, (byte)222, (byte)246, (byte)152, (byte)67, (byte)12, (byte)104, (byte)245, (byte)20, (byte)112, (byte)94, (byte)197, (byte)201, (byte)89, (byte)182, (byte)214, (byte)6, (byte)182, (byte)165, (byte)209, (byte)79, (byte)192, (byte)211, (byte)163, (byte)208, (byte)12, (byte)73, (byte)53, (byte)99, (byte)59, (byte)182, (byte)186, (byte)48, (byte)184, (byte)215, (byte)22, (byte)24, (byte)233, (byte)109, (byte)206, (byte)59, (byte)0, (byte)118, (byte)141, (byte)25, (byte)50, (byte)242, (byte)247, (byte)240, (byte)238, (byte)127, (byte)236, (byte)241, (byte)224, (byte)20, (byte)61, (byte)65, (byte)148, (byte)120, (byte)192, (byte)99, (byte)172, (byte)194, (byte)135, (byte)61, (byte)147, (byte)251, (byte)161, (byte)219, (byte)252, (byte)187, (byte)154, (byte)115, (byte)193, (byte)118, (byte)167, (byte)130, (byte)174, (byte)211, (byte)236, (byte)141, (byte)14, (byte)8, (byte)244, (byte)110, (byte)66, (byte)210, (byte)110, (byte)236, (byte)255, (byte)25, (byte)16, (byte)134, (byte)70, (byte)196, (byte)163, (byte)30, (byte)177, (byte)238, (byte)225, (byte)237, (byte)12, (byte)14, (byte)215, (byte)40, (byte)77, (byte)206, (byte)76, (byte)122, (byte)205, (byte)20, (byte)183, (byte)106, (byte)230, (byte)230, (byte)123, (byte)209, (byte)77, (byte)102, (byte)65, (byte)241, (byte)41, (byte)213, (byte)219, (byte)79, (byte)37, (byte)61, (byte)10, (byte)154, (byte)19, (byte)93, (byte)33, (byte)72, (byte)105, (byte)247, (byte)221, (byte)145, (byte)179, (byte)69, (byte)38, (byte)234, (byte)163, (byte)218, (byte)131, (byte)179, (byte)30, (byte)114, (byte)150, (byte)106, (byte)17, (byte)187, (byte)229, (byte)106, (byte)7, (byte)112 + private static final byte[] FILE_CONTENTS = new byte[]{ + (byte)47, (byte)85, (byte)135, (byte)12, (byte)53, (byte)7, (byte)158, (byte)212, (byte)55, (byte)193, (byte)149, (byte)3, (byte)166, (byte)181, + (byte)151, (byte)84, (byte)122, (byte)200, (byte)244, (byte)5, (byte)115, (byte)159, (byte)66, (byte)64, (byte)143, (byte)211, (byte)13, (byte)63, + (byte)235, (byte)184, (byte)51, (byte)49, (byte)143, (byte)167, (byte)231, (byte)31, (byte)78, (byte)234, (byte)145, (byte)105, (byte)190, (byte)170, + (byte)49, (byte)135, (byte)175, (byte)106, (byte)25, (byte)86, (byte)145, (byte)181, (byte)156, (byte)23, (byte)153, (byte)99, (byte)175, (byte)63, + (byte)43, (byte)208, (byte)5, (byte)16, (byte)140, (byte)103, (byte)146, (byte)254, (byte)155, (byte)97, (byte)53, (byte)100, (byte)137, (byte)6, + (byte)62, (byte)101, (byte)189, (byte)137, (byte)140, (byte)5, (byte)110, (byte)218, (byte)113, (byte)132, (byte)36, (byte)188, (byte)19, (byte)168, + (byte)93, (byte)169, (byte)124, (byte)253, (byte)201, (byte)233, (byte)21, (byte)80, (byte)4, (byte)56, (byte)0, (byte)204, (byte)205, (byte)232, + (byte)213, (byte)253, (byte)232, (byte)91, (byte)153, (byte)169, (byte)82, (byte)247, (byte)78, (byte)71, (byte)188, (byte)71, (byte)23, (byte)171, + (byte)232, (byte)26, (byte)146, (byte)189, (byte)145, (byte)82, (byte)79, (byte)148, (byte)1, (byte)201, (byte)243, (byte)73, (byte)98, (byte)65, + (byte)236, (byte)177, (byte)211, (byte)106, (byte)105, (byte)46, (byte)204, (byte)214, (byte)55, (byte)182, (byte)55, (byte)149, (byte)221, (byte)52, + (byte)186, (byte)122, (byte)255, (byte)195, (byte)60, (byte)146, (byte)21, (byte)212, (byte)139, (byte)38, (byte)146, (byte)166, (byte)14, (byte)174, + (byte)242, (byte)145, (byte)16, (byte)44, (byte)68, (byte)89, (byte)25, (byte)219, (byte)62, (byte)227, (byte)6, (byte)89, (byte)194, (byte)146, (byte)93, + (byte)167, (byte)230, (byte)90, (byte)59, (byte)35, (byte)136, (byte)37, (byte)196, (byte)118, (byte)16, (byte)28, (byte)107, (byte)105, (byte)87, + (byte)195, (byte)86, (byte)87, (byte)180, (byte)176, (byte)118, (byte)6, (byte)29, (byte)26, (byte)51, (byte)94, (byte)21, (byte)23, (byte)32, (byte)156, + (byte)150, (byte)204, (byte)53, (byte)110, (byte)134, (byte)153, (byte)138, (byte)247, (byte)98, (byte)135, (byte)249, (byte)119, (byte)121, (byte)2, + (byte)42, (byte)62, (byte)198, (byte)197, (byte)112, (byte)153, (byte)244, (byte)174, (byte)145, (byte)54, (byte)246, (byte)44, (byte)198, (byte)50, + (byte)2, (byte)37, (byte)102, (byte)50, (byte)103, (byte)207, (byte)81, (byte)62, (byte)138, (byte)164, (byte)140, (byte)64, (byte)247, (byte)115, + (byte)40, (byte)41, (byte)252, (byte)54, (byte)189, (byte)207, (byte)124, (byte)147, (byte)122, (byte)243, (byte)83, (byte)34, (byte)160, (byte)64, (byte)189, (byte)226, (byte)202, (byte)181, (byte)55, (byte)158, (byte)121, (byte)78, (byte)143, (byte)41, (byte)58, (byte)27, (byte)77, (byte)186, (byte)214, (byte)23, (byte)132, (byte)100, (byte)180, (byte)26, (byte)37, (byte)247, (byte)254, (byte)97, (byte)214, (byte)57, (byte)30, (byte)46, (byte)96, (byte)44, (byte)138, (byte)15, (byte)162, (byte)93, (byte)222, (byte)239, (byte)189, (byte)72, (byte)15, (byte)79, (byte)136, (byte)210, (byte)44, (byte)233, (byte)99, (byte)72, (byte)234, (byte)225, (byte)245, (byte)27, (byte)111, (byte)175, (byte)132, (byte)112, (byte)135, (byte)253, (byte)66, (byte)215, (byte)168, (byte)156, (byte)168, (byte)79, (byte)78, (byte)140, (byte)14, (byte)129, (byte)37, (byte)238, (byte)196, (byte)34, (byte)245, (byte)141, (byte)148, (byte)161, (byte)29, (byte)110, (byte)32, (byte)255, (byte)247, (byte)52, (byte)48, (byte)102, (byte)42, (byte)54, (byte)97, (byte)185, (byte)10, (byte)114, (byte)225, (byte)247, (byte)254, (byte)108, (byte)116, (byte)73, (byte)84, (byte)242, (byte)86, (byte)15, (byte)72, (byte)68, (byte)172, (byte)74, (byte)107, (byte)103, (byte)222, (byte)246, (byte)152, (byte)67, (byte)12, (byte)104, (byte)245, (byte)20, (byte)112, (byte)94, (byte)197, (byte)201, (byte)89, (byte)182, (byte)214, (byte)6, (byte)182, (byte)165, (byte)209, (byte)79, (byte)192, (byte)211, (byte)163, (byte)208, (byte)12, (byte)73, (byte)53, (byte)99, (byte)59, (byte)182, (byte)186, (byte)48, (byte)184, (byte)215, (byte)22, (byte)24, (byte)233, (byte)109, (byte)206, (byte)59, (byte)0, (byte)118, (byte)141, (byte)25, (byte)50, (byte)242, (byte)247, (byte)240, (byte)238, (byte)127, (byte)236, (byte)241, (byte)224, (byte)20, (byte)61, (byte)65, (byte)148, (byte)120, (byte)192, (byte)99, (byte)172, (byte)194, (byte)135, (byte)61, (byte)147, (byte)251, (byte)161, (byte)219, (byte)252, (byte)187, (byte)154, (byte)115, (byte)193, (byte)118, (byte)167, (byte)130, (byte)174, (byte)211, (byte)236, (byte)141, (byte)14, (byte)8, (byte)244, (byte)110, (byte)66, (byte)210, (byte)110, (byte)236, (byte)255, (byte)25, (byte)16, (byte)134, (byte)70, (byte)196, (byte)163, (byte)30, (byte)177, (byte)238, (byte)225, (byte)237, (byte)12, (byte)14, (byte)215, (byte)40, (byte)77, (byte)206, (byte)76, (byte)122, (byte)205, (byte)20, (byte)183, (byte)106, (byte)230, (byte)230, (byte)123, (byte)209, (byte)77, (byte)102, (byte)65, (byte)241, (byte)41, (byte)213, (byte)219, (byte)79, (byte)37, (byte)61, (byte)10, (byte)154, (byte)19, (byte)93, (byte)33, (byte)72, (byte)105, (byte)247, (byte)221, (byte)145, (byte)179, (byte)69, (byte)38, (byte)234, (byte)163, (byte)218, (byte)131, (byte)179, (byte)30, (byte)114, (byte)150, (byte)106, (byte)17, (byte)187, (byte)229, (byte)106, (byte)7, (byte)112 }; private static ObjectMapper objectMapper = new ObjectMapper(); private static ResourceConfig app = new ResourceConfig().packages("com.amazonaws.serverless.proxy.jersey") - .register(MultiPartFeature.class) - .register(new ResourceBinder()) - .property("jersey.config.server.tracing.type", "ALL") - .property("jersey.config.server.tracing.threshold", "VERBOSE"); + .register(MultiPartFeature.class) + .register(new ResourceBinder()) + .property("jersey.config.server.tracing.type", "ALL") + .property("jersey.config.server.tracing.threshold", "VERBOSE"); private static JerseyLambdaContainerHandler handler; private static ResourceConfig httpApiApp = new ResourceConfig().packages("com.amazonaws.serverless.proxy.jersey") - .register(MultiPartFeature.class) - .register(new ResourceBinder()) - .property("jersey.config.server.tracing.type", "ALL") - .property("jersey.config.server.tracing.threshold", "VERBOSE"); + .register(MultiPartFeature.class) + .register(new ResourceBinder()) + .property("jersey.config.server.tracing.type", "ALL") + .property("jersey.config.server.tracing.threshold", "VERBOSE"); private static JerseyLambdaContainerHandler httpApiHandler; private static Context lambdaContext = new MockLambdaContext(); private String type; - public JerseyParamEncodingTest(String reqType) { + public void initJerseyParamEncodingTest(String reqType) { type = reqType; LambdaContainerHandler.getContainerConfig().addBinaryContentTypes(MediaType.MULTIPART_FORM_DATA); } - @Parameterized.Parameters public static Collection data() { - return Arrays.asList(new Object[] { "API_GW", "ALB", "HTTP_API" }); + return Arrays.asList(new Object[]{"API_GW", "ALB", "HTTP_API"}); } private AwsProxyRequestBuilder getRequestBuilder(String path, String method) { @@ -117,11 +114,13 @@ private AwsProxyResponse executeRequest(AwsProxyRequestBuilder requestBuilder, C } } - @Test - public void queryString_uriInfo_echo() { + @MethodSource("data") + @ParameterizedTest + void queryString_uriInfo_echo(String reqType) { + initJerseyParamEncodingTest(reqType); AwsProxyRequestBuilder request = getRequestBuilder("/echo/query-string", "GET") - .json() - .queryString(QUERY_STRING_KEY, QUERY_STRING_NON_ENCODED_VALUE); + .json() + .queryString(QUERY_STRING_KEY, QUERY_STRING_NON_ENCODED_VALUE); AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(200, output.getStatusCode()); @@ -130,11 +129,13 @@ public void queryString_uriInfo_echo() { validateMapResponseModel(output, QUERY_STRING_KEY, QUERY_STRING_NON_ENCODED_VALUE); } - @Test - public void queryString_notEncoded_echo() { + @MethodSource("data") + @ParameterizedTest + void queryString_notEncoded_echo(String reqType) { + initJerseyParamEncodingTest(reqType); AwsProxyRequestBuilder request = getRequestBuilder("/echo/query-string", "GET") - .json() - .queryString(QUERY_STRING_KEY, QUERY_STRING_NON_ENCODED_VALUE); + .json() + .queryString(QUERY_STRING_KEY, QUERY_STRING_NON_ENCODED_VALUE); AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(200, output.getStatusCode()); @@ -143,12 +144,14 @@ public void queryString_notEncoded_echo() { validateMapResponseModel(output, QUERY_STRING_KEY, QUERY_STRING_NON_ENCODED_VALUE); } - @Test - @Ignore("We expect to only receive decoded values from API Gateway") - public void queryString_encoded_echo() { + @ParameterizedTest + @Disabled("We expect to only receive decoded values from API Gateway") + @MethodSource("data") + void queryString_encoded_echo(String reqType) { + initJerseyParamEncodingTest(reqType); AwsProxyRequestBuilder request = getRequestBuilder("/echo/query-string", "GET") - .json() - .queryString(QUERY_STRING_KEY, QUERY_STRING_ENCODED_VALUE); + .json() + .queryString(QUERY_STRING_KEY, QUERY_STRING_ENCODED_VALUE); AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(200, output.getStatusCode()); @@ -157,8 +160,10 @@ public void queryString_encoded_echo() { validateMapResponseModel(output, QUERY_STRING_KEY, QUERY_STRING_NON_ENCODED_VALUE); } - @Test - public void simpleQueryParam_encoding_expectDecodedParam() { + @MethodSource("data") + @ParameterizedTest + void simpleQueryParam_encoding_expectDecodedParam(String reqType) { + initJerseyParamEncodingTest(reqType); AwsProxyRequestBuilder request = getRequestBuilder("/echo/decoded-param", "GET").queryString("param", SIMPLE_ENCODED_PARAM); AwsProxyResponse resp = executeRequest(request, lambdaContext); @@ -166,8 +171,10 @@ public void simpleQueryParam_encoding_expectDecodedParam() { validateSingleValueModel(resp, SIMPLE_ENCODED_PARAM); } - @Test - public void jsonQueryParam_encoding_expectDecodedParam() { + @MethodSource("data") + @ParameterizedTest + void jsonQueryParam_encoding_expectDecodedParam(String reqType) { + initJerseyParamEncodingTest(reqType); AwsProxyRequestBuilder request = getRequestBuilder("/echo/decoded-param", "GET").queryString("param", JSON_ENCODED_PARAM); AwsProxyResponse resp = executeRequest(request, lambdaContext); @@ -175,8 +182,10 @@ public void jsonQueryParam_encoding_expectDecodedParam() { validateSingleValueModel(resp, JSON_ENCODED_PARAM); } - @Test - public void simpleQueryParam_encoding_expectEncodedParam() { + @MethodSource("data") + @ParameterizedTest + void simpleQueryParam_encoding_expectEncodedParam(String reqType) { + initJerseyParamEncodingTest(reqType); AwsProxyRequestBuilder request = getRequestBuilder("/echo/encoded-param", "GET").queryString("param", SIMPLE_ENCODED_PARAM); String encodedVal = ""; try { @@ -189,8 +198,10 @@ public void simpleQueryParam_encoding_expectEncodedParam() { validateSingleValueModel(resp, encodedVal); } - @Test - public void jsonQueryParam_encoding_expectEncodedParam() { + @MethodSource("data") + @ParameterizedTest + void jsonQueryParam_encoding_expectEncodedParam(String reqType) { + initJerseyParamEncodingTest(reqType); AwsProxyRequestBuilder request = getRequestBuilder("/echo/encoded-param", "GET").queryString("param", JSON_ENCODED_PARAM); String encodedVal = ""; try { @@ -203,52 +214,62 @@ public void jsonQueryParam_encoding_expectEncodedParam() { validateSingleValueModel(resp, encodedVal); } - @Test - public void queryParam_encoding_expectFullyEncodedUrl() { + @MethodSource("data") + @ParameterizedTest + void queryParam_encoding_expectFullyEncodedUrl(String reqType) { + initJerseyParamEncodingTest(reqType); String paramValue = "/+="; AwsProxyRequestBuilder request = getRequestBuilder("/echo/encoded-param", "GET").queryString("param", paramValue); AwsProxyResponse resp = executeRequest(request, lambdaContext); assertNotNull(resp); - assertEquals(resp.getStatusCode(), 200); + assertEquals(200, resp.getStatusCode()); validateSingleValueModel(resp, "%2F%2B%3D"); } - @Test - public void pathParam_encoded_routesToCorrectPath() { + @MethodSource("data") + @ParameterizedTest + void pathParam_encoded_routesToCorrectPath(String reqType) { + initJerseyParamEncodingTest(reqType); String encodedParam = "http%3A%2F%2Fhelloresource.com"; String path = "/echo/encoded-path/" + encodedParam; AwsProxyRequestBuilder request = getRequestBuilder(path, "GET"); AwsProxyResponse resp = executeRequest(request, lambdaContext); assertNotNull(resp); - assertEquals(resp.getStatusCode(), 200); + assertEquals(200, resp.getStatusCode()); validateSingleValueModel(resp, encodedParam); } - @Test - public void pathParam_encoded_returns404() { + @MethodSource("data") + @ParameterizedTest + void pathParam_encoded_returns404(String reqType) { + initJerseyParamEncodingTest(reqType); String encodedParam = "http://helloresource.com"; String path = "/echo/encoded-path/" + encodedParam; AwsProxyRequestBuilder request = getRequestBuilder(path, "GET"); AwsProxyResponse resp = executeRequest(request, lambdaContext); assertNotNull(resp); - assertEquals(resp.getStatusCode(), 404); + assertEquals(404, resp.getStatusCode()); } - @Test - @Ignore - public void queryParam_listOfString_expectCorrectLength() { + @ParameterizedTest + @Disabled + @MethodSource("data") + void queryParam_listOfString_expectCorrectLength(String reqType) { + initJerseyParamEncodingTest(reqType); AwsProxyRequestBuilder request = getRequestBuilder("/echo/list-query-string", "GET").queryString("list", "v1,v2,v3"); AwsProxyResponse resp = executeRequest(request, lambdaContext); assertNotNull(resp); - assertEquals(resp.getStatusCode(), 200); + assertEquals(200, resp.getStatusCode()); validateSingleValueModel(resp, "3"); } - @Test - public void multipart_getFileSize_expectCorrectLength() - throws IOException { + @MethodSource("data") + @ParameterizedTest + void multipart_getFileSize_expectCorrectLength(String reqType) + throws IOException { + initJerseyParamEncodingTest(reqType); AwsProxyRequestBuilder request = getRequestBuilder("/echo/file-size", "POST") - .formFilePart("file", "myfile.jpg", FILE_CONTENTS); + .formFilePart("file", "myfile.jpg", FILE_CONTENTS); AwsProxyResponse resp = executeRequest(request, lambdaContext); assertNotNull(resp); assertEquals(200, resp.getStatusCode()); diff --git a/aws-serverless-java-container-spark/pom.xml b/aws-serverless-java-container-spark/pom.xml index 9da5aa343..f5ea6b868 100644 --- a/aws-serverless-java-container-spark/pom.xml +++ b/aws-serverless-java-container-spark/pom.xml @@ -33,6 +33,11 @@ spark-core ${spark.version} + + org.junit.jupiter + junit-jupiter + test + @@ -84,7 +89,7 @@ org.apache.maven.plugins maven-surefire-plugin - 2.9 + 2.22.2 always diff --git a/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/HelloWorldSparkStreamTest.java b/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/HelloWorldSparkStreamTest.java index 0c41f91f7..56087ed62 100644 --- a/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/HelloWorldSparkStreamTest.java +++ b/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/HelloWorldSparkStreamTest.java @@ -10,10 +10,9 @@ import com.amazonaws.serverless.proxy.model.HttpApiV2ProxyRequest; import com.amazonaws.services.lambda.runtime.Context; -import org.junit.AfterClass; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; import spark.Spark; import javax.servlet.http.Cookie; @@ -23,15 +22,12 @@ import java.util.Arrays; import java.util.Collection; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; +import static org.junit.jupiter.api.Assertions.*; import static spark.Spark.get; // This class doesn't actually test Spark. Instead it tests the proxyStream method of the // LambdaContainerHandler object. We use the Spark implementation for this because it's the // fastest to start -@RunWith(Parameterized.class) public class HelloWorldSparkStreamTest { private static final String CUSTOM_HEADER_KEY = "X-Custom-Header"; private static final String CUSTOM_HEADER_VALUE = "My Header Value"; @@ -47,7 +43,7 @@ public class HelloWorldSparkStreamTest { private String type; - public HelloWorldSparkStreamTest(String reqType) { + public void initHelloWorldSparkStreamTest(String reqType) { type = reqType; try { switch (type) { @@ -70,9 +66,8 @@ public HelloWorldSparkStreamTest(String reqType) { } } - @Parameterized.Parameters public static Collection data() { - return Arrays.asList(new Object[] { "API_GW", "ALB", "HTTP_API" }); + return Arrays.asList(new Object[]{"API_GW", "ALB", "HTTP_API"}); } private AwsProxyRequestBuilder getRequestBuilder() { @@ -97,13 +92,15 @@ private ByteArrayOutputStream executeRequest(AwsProxyRequestBuilder requestBuild return os; } - @AfterClass + @AfterAll public static void stopSpark() { Spark.stop(); } - @Test - public void helloRequest_basicStream_populatesOutputSuccessfully() { + @MethodSource("data") + @ParameterizedTest + void helloRequest_basicStream_populatesOutputSuccessfully(String reqType) { + initHelloWorldSparkStreamTest(reqType); try { ByteArrayOutputStream outputStream = executeRequest(getRequestBuilder().method("GET").path("/hello"), new MockLambdaContext()); AwsProxyResponse response = LambdaContainerHandler.getObjectMapper().readValue(outputStream.toByteArray(), AwsProxyResponse.class); @@ -118,8 +115,10 @@ public void helloRequest_basicStream_populatesOutputSuccessfully() { } } - @Test - public void nullPathRequest_doesntFail_expectA404() { + @MethodSource("data") + @ParameterizedTest + void nullPathRequest_doesntFail_expectA404(String reqType) { + initHelloWorldSparkStreamTest(reqType); try { ByteArrayOutputStream outputStream = executeRequest(getRequestBuilder().method("GET").path(null), new MockLambdaContext()); AwsProxyResponse response = LambdaContainerHandler.getObjectMapper().readValue(outputStream.toByteArray(), AwsProxyResponse.class); diff --git a/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/HelloWorldSparkTest.java b/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/HelloWorldSparkTest.java index 108eeabeb..5402b6a9c 100644 --- a/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/HelloWorldSparkTest.java +++ b/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/HelloWorldSparkTest.java @@ -7,11 +7,10 @@ import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; import com.amazonaws.serverless.proxy.internal.testutils.MockLambdaContext; -import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; import spark.Spark; import javax.servlet.http.Cookie; @@ -20,11 +19,10 @@ import java.util.Arrays; import java.util.Collection; -import static org.junit.Assert.*; +import static org.junit.jupiter.api.Assertions.*; import static spark.Spark.get; -@RunWith(Parameterized.class) public class HelloWorldSparkTest { private static final String CUSTOM_HEADER_KEY = "X-Custom-Header"; private static final String CUSTOM_HEADER_VALUE = "My Header Value"; @@ -41,13 +39,12 @@ public class HelloWorldSparkTest { private boolean isAlb; - public HelloWorldSparkTest(boolean alb) { + public void initHelloWorldSparkTest(boolean alb) { isAlb = alb; } - @Parameterized.Parameters public static Collection data() { - return Arrays.asList(new Object[] { false, true }); + return Arrays.asList(new Object[]{false, true}); } private AwsProxyRequestBuilder getRequestBuilder() { @@ -57,7 +54,7 @@ private AwsProxyRequestBuilder getRequestBuilder() { return builder; } - @BeforeClass + @BeforeAll public static void initializeServer() { try { handler = SparkLambdaContainerHandler.getAwsProxyHandler(); @@ -70,13 +67,15 @@ public static void initializeServer() { } } - @AfterClass + @AfterAll public static void stopSpark() { Spark.stop(); } - @Test - public void basicServer_handleRequest_emptyFilters() { + @MethodSource("data") + @ParameterizedTest + void basicServer_handleRequest_emptyFilters(boolean alb) { + initHelloWorldSparkTest(alb); AwsProxyRequest req = getRequestBuilder().method("GET").path("/hello").build(); AwsProxyResponse response = handler.proxy(req, new MockLambdaContext()); @@ -86,8 +85,10 @@ public void basicServer_handleRequest_emptyFilters() { assertEquals(BODY_TEXT_RESPONSE, response.getBody()); } - @Test - public void addCookie_setCookieOnResponse_validCustomCookie() { + @MethodSource("data") + @ParameterizedTest + void addCookie_setCookieOnResponse_validCustomCookie(boolean alb) { + initHelloWorldSparkTest(alb); AwsProxyRequest req = getRequestBuilder().method("GET").path("/cookie").build(); AwsProxyResponse response = handler.proxy(req, new MockLambdaContext()); @@ -98,8 +99,10 @@ public void addCookie_setCookieOnResponse_validCustomCookie() { assertTrue(response.getMultiValueHeaders().getFirst(HttpHeaders.SET_COOKIE).contains(COOKIE_PATH)); } - @Test - public void multiCookie_setCookieOnResponse_singleHeaderWithMultipleValues() { + @MethodSource("data") + @ParameterizedTest + void multiCookie_setCookieOnResponse_singleHeaderWithMultipleValues(boolean alb) { + initHelloWorldSparkTest(alb); AwsProxyRequest req = getRequestBuilder().method("GET").path("/multi-cookie").build(); AwsProxyResponse response = handler.proxy(req, new MockLambdaContext()); @@ -113,8 +116,10 @@ public void multiCookie_setCookieOnResponse_singleHeaderWithMultipleValues() { assertTrue(response.getMultiValueHeaders().getFirst(HttpHeaders.SET_COOKIE).contains(COOKIE_PATH)); } - @Test - public void rootResource_basicRequest_expectSuccess() { + @MethodSource("data") + @ParameterizedTest + void rootResource_basicRequest_expectSuccess(boolean alb) { + initHelloWorldSparkTest(alb); AwsProxyRequest req = getRequestBuilder().method("GET").path("/").build(); AwsProxyResponse response = handler.proxy(req, new MockLambdaContext()); @@ -124,8 +129,10 @@ public void rootResource_basicRequest_expectSuccess() { assertEquals(BODY_TEXT_RESPONSE, response.getBody()); } - @Test - public void readCookie_customDomainName_expectValidCookie() { + @MethodSource("data") + @ParameterizedTest + void readCookie_customDomainName_expectValidCookie(boolean alb) { + initHelloWorldSparkTest(alb); AwsProxyRequest req = getRequestBuilder().method("GET").path("/cookie-read").cookie(READ_COOKIE_NAME, "test").build(); AwsProxyResponse response = handler.proxy(req, new MockLambdaContext()); assertEquals("test", response.getBody()); diff --git a/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/InitExceptionHandlerTest.java b/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/InitExceptionHandlerTest.java index 6042899e4..92c84a49b 100644 --- a/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/InitExceptionHandlerTest.java +++ b/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/InitExceptionHandlerTest.java @@ -11,15 +11,13 @@ import com.amazonaws.serverless.proxy.spark.embeddedserver.LambdaEmbeddedServer; import com.amazonaws.serverless.proxy.spark.embeddedserver.LambdaEmbeddedServerFactory; -import org.junit.AfterClass; -import org.junit.Test; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.Test; import spark.Spark; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.fail; -import static org.mockito.Matchers.anyInt; -import static org.mockito.Matchers.anyObject; -import static org.mockito.Matchers.anyString; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.fail; +import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.when; @@ -33,11 +31,11 @@ public class InitExceptionHandlerTest { private static LambdaEmbeddedServer embeddedServer = mock(LambdaEmbeddedServer.class); @Test - public void initException_mockException_expectHandlerToRun() { + void initException_mockException_expectHandlerToRun() { try { - when(embeddedServer.ignite(anyString(), anyInt(), anyObject(), anyInt(), anyInt(), anyInt())) - .thenThrow(new ContainerInitializationException(TEST_EXCEPTION_MESSAGE, null)); + when(embeddedServer.ignite(anyString(), anyInt(), any(), anyInt(), anyInt(), anyInt())) + .thenThrow(new ContainerInitializationException(TEST_EXCEPTION_MESSAGE, null)); LambdaEmbeddedServerFactory serverFactory = new LambdaEmbeddedServerFactory(embeddedServer); new SparkLambdaContainerHandler<>(AwsProxyRequest.class, AwsProxyResponse.class, @@ -56,7 +54,7 @@ public void initException_mockException_expectHandlerToRun() { } - @AfterClass + @AfterAll public static void stopSpark() { // un-mock the embedded server to avoid blocking other tests reset(embeddedServer); diff --git a/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/SparkLambdaContainerHandlerTest.java b/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/SparkLambdaContainerHandlerTest.java index c778bd57e..52f2a5388 100644 --- a/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/SparkLambdaContainerHandlerTest.java +++ b/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/SparkLambdaContainerHandlerTest.java @@ -9,8 +9,8 @@ import com.amazonaws.serverless.proxy.spark.filter.CustomHeaderFilter; import com.amazonaws.serverless.proxy.spark.filter.UnauthenticatedFilter; -import org.junit.AfterClass; -import org.junit.Test; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.Test; import spark.Spark; import javax.servlet.DispatcherType; @@ -18,7 +18,7 @@ import java.util.EnumSet; -import static org.junit.Assert.*; +import static org.junit.jupiter.api.Assertions.*; import static spark.Spark.get; @@ -26,11 +26,11 @@ public class SparkLambdaContainerHandlerTest { private static final String RESPONSE_BODY_TEXT = "hello"; @Test - public void filters_onStartupMethod_executeFilters() { + void filters_onStartupMethod_executeFilters() { SparkLambdaContainerHandler handler = null; try { - handler = SparkLambdaContainerHandler.getAwsProxyHandler(); + handler = SparkLambdaContainerHandler.getAwsProxyHandler(); } catch (ContainerInitializationException e) { e.printStackTrace(); fail(); @@ -62,7 +62,7 @@ public void filters_onStartupMethod_executeFilters() { } @Test - public void filters_unauthenticatedFilter_stopRequestProcessing() { + void filters_unauthenticatedFilter_stopRequestProcessing() { SparkLambdaContainerHandler handler = null; try { @@ -97,7 +97,7 @@ public void filters_unauthenticatedFilter_stopRequestProcessing() { // now we test with the custom header, this should stop request processing in the // filter and return an unauthenticated response AwsProxyRequest unauthReq = new AwsProxyRequestBuilder().method("GET").path("/unauth") - .header(UnauthenticatedFilter.HEADER_NAME, "1").build(); + .header(UnauthenticatedFilter.HEADER_NAME, "1").build(); AwsProxyResponse unauthResp = handler.proxy(unauthReq, new MockLambdaContext()); assertNotNull(unauthResp); @@ -105,7 +105,7 @@ public void filters_unauthenticatedFilter_stopRequestProcessing() { assertEquals("", unauthResp.getBody()); } - @AfterClass + @AfterAll public static void stopSpark() { Spark.stop(); } diff --git a/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/embeddedserver/LambdaEmbeddedServerTest.java b/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/embeddedserver/LambdaEmbeddedServerTest.java index 968b2b47b..8cb34eae1 100644 --- a/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/embeddedserver/LambdaEmbeddedServerTest.java +++ b/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/embeddedserver/LambdaEmbeddedServerTest.java @@ -1,18 +1,18 @@ package com.amazonaws.serverless.proxy.spark.embeddedserver; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.util.Optional; -import static org.junit.Assert.*; +import static org.junit.jupiter.api.Assertions.fail; public class LambdaEmbeddedServerTest { private static LambdaEmbeddedServer server = new LambdaEmbeddedServer(null, null, null, false); @Test - public void webSocket_configureWebSocket_noException() { + void webSocket_configureWebSocket_noException() { try { server.configureWebSockets(null, Optional.of(0L)); } catch (Exception e) { diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index b238a0d55..be0c1d9f0 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -74,6 +74,11 @@ 6.2.1.Final test + + org.junit.jupiter + junit-jupiter + test + javax.el @@ -199,7 +204,7 @@ org.apache.maven.plugins maven-surefire-plugin - 2.9 + 2.22.2 always diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SlowAppTest.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SlowAppTest.java index 0844b6246..a33d5374f 100644 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SlowAppTest.java +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SlowAppTest.java @@ -8,19 +8,17 @@ import com.amazonaws.serverless.proxy.spring.springslowapp.LambdaHandler; import com.amazonaws.serverless.proxy.spring.springslowapp.MessageController; import com.amazonaws.serverless.proxy.spring.springslowapp.SlowAppConfig; -import org.junit.Assert; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.time.Instant; import java.util.Objects; -import static org.junit.Assert.*; -import static org.junit.Assume.assumeFalse; +import static org.junit.jupiter.api.Assertions.*; public class SlowAppTest { @Test - public void springSlowApp_continuesInBackgroundThread_returnsCorrect() { + void springSlowApp_continuesInBackgroundThread_returnsCorrect() { LambdaHandler slowApp = null; try { slowApp = new LambdaHandler(); @@ -36,7 +34,7 @@ public void springSlowApp_continuesInBackgroundThread_returnsCorrect() { long endRequestTime = Instant.now().toEpochMilli(); assertTrue(endRequestTime - startRequestTime > SlowAppConfig.SlowDownInit.INIT_SLEEP_TIME_MS - 10_000); assertEquals(200, resp.getStatusCode()); - Assert.assertEquals(MessageController.HELLO_MESSAGE, resp.getBody()); + assertEquals(MessageController.HELLO_MESSAGE, resp.getBody()); } } diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringAwsProxyTest.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringAwsProxyTest.java index c1365a5b1..6c744f6b5 100644 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringAwsProxyTest.java +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringAwsProxyTest.java @@ -18,10 +18,9 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.commons.codec.binary.Base64; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; @@ -44,11 +43,10 @@ import java.util.EnumSet; import java.util.UUID; -import static org.junit.Assert.*; -import static org.junit.Assume.assumeFalse; -import static org.junit.Assume.assumeTrue; +import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assumptions.assumeFalse; +import static org.junit.jupiter.api.Assumptions.assumeTrue; -@RunWith(Parameterized.class) public class SpringAwsProxyTest { private static final String CUSTOM_HEADER_KEY = "x-custom-header"; private static final String CUSTOM_HEADER_VALUE = "my-custom-value"; @@ -72,12 +70,11 @@ public class SpringAwsProxyTest { private String type; - @Parameterized.Parameters public static Collection data() { - return Arrays.asList(new Object[] { "API_GW", "ALB", "HTTP_API" }); + return Arrays.asList(new Object[]{"API_GW", "ALB", "HTTP_API"}); } - public SpringAwsProxyTest(String reqType) { + public void initSpringAwsProxyTest(String reqType) { type = reqType; } @@ -112,16 +109,18 @@ private AwsProxyResponse executeRequest(AwsProxyRequestBuilder requestBuilder, C } } - @Before + @BeforeEach public void clearServletContextCache() { AwsServletContext.clearServletContextCache(); } - @Test - public void controllerAdvice_invalidPath_returnAdvice() { + @MethodSource("data") + @ParameterizedTest + void controllerAdvice_invalidPath_returnAdvice(String reqType) { + initSpringAwsProxyTest(reqType); AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo2", "GET") - .json() - .header(CUSTOM_HEADER_KEY, CUSTOM_HEADER_VALUE); + .json() + .header(CUSTOM_HEADER_KEY, CUSTOM_HEADER_VALUE); AwsProxyResponse output = executeRequest(request, lambdaContext); assertNotNull(output); @@ -130,8 +129,10 @@ public void controllerAdvice_invalidPath_returnAdvice() { } - @Test - public void headers_getHeaders_echo() { + @MethodSource("data") + @ParameterizedTest + void headers_getHeaders_echo(String reqType) { + initSpringAwsProxyTest(reqType); AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo/headers", "GET") .json() .header(CUSTOM_HEADER_KEY, CUSTOM_HEADER_VALUE); @@ -143,8 +144,10 @@ public void headers_getHeaders_echo() { validateMapResponseModel(output); } - @Test - public void headers_servletRequest_echo() { + @MethodSource("data") + @ParameterizedTest + void headers_servletRequest_echo(String reqType) { + initSpringAwsProxyTest(reqType); AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo/servlet-headers", "GET") .json() .header(CUSTOM_HEADER_KEY, CUSTOM_HEADER_VALUE); @@ -156,8 +159,10 @@ public void headers_servletRequest_echo() { validateMapResponseModel(output); } - @Test - public void queryString_uriInfo_echo() { + @MethodSource("data") + @ParameterizedTest + void queryString_uriInfo_echo(String reqType) { + initSpringAwsProxyTest(reqType); AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo/query-string", "GET") .json() .queryString(CUSTOM_HEADER_KEY, CUSTOM_HEADER_VALUE); @@ -169,11 +174,13 @@ public void queryString_uriInfo_echo() { validateMapResponseModel(output); } - @Test - public void queryString_listParameter_expectCorrectLength() { + @MethodSource("data") + @ParameterizedTest + void queryString_listParameter_expectCorrectLength(String reqType) { + initSpringAwsProxyTest(reqType); AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo/list-query-string", "GET") - .json() - .queryString("list", "v1,v2,v3"); + .json() + .queryString("list", "v1,v2,v3"); AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(200, output.getStatusCode()); @@ -181,13 +188,15 @@ public void queryString_listParameter_expectCorrectLength() { validateSingleValueModel(output, "3"); } - @Test - public void queryString_multiParam_expectCorrectValueCount() + @MethodSource("data") + @ParameterizedTest + void queryString_multiParam_expectCorrectValueCount(String reqType) throws IOException { + initSpringAwsProxyTest(reqType); AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo/multivalue-query-string", "GET") - .json() - .queryString("multiple", "first") - .queryString("multiple", "second"); + .json() + .queryString("multiple", "first") + .queryString("multiple", "second"); AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(200, output.getStatusCode()); @@ -198,36 +207,42 @@ public void queryString_multiParam_expectCorrectValueCount() assertTrue(response.getValues().containsKey("second")); } - @Test - public void dateHeader_notModified_expect304() { + @MethodSource("data") + @ParameterizedTest + void dateHeader_notModified_expect304(String reqType) { + initSpringAwsProxyTest(reqType); AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo/last-modified", "GET") - .json() - .header( - HttpHeaders.IF_MODIFIED_SINCE, - DateTimeFormatter.RFC_1123_DATE_TIME.format(ZonedDateTime.now().minus(1, ChronoUnit.SECONDS)) - ); + .json() + .header( + HttpHeaders.IF_MODIFIED_SINCE, + DateTimeFormatter.RFC_1123_DATE_TIME.format(ZonedDateTime.now().minus(1, ChronoUnit.SECONDS)) + ); AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(304, output.getStatusCode()); assertEquals("", output.getBody()); } - @Test - public void dateHeader_notModified_expect200() { + @MethodSource("data") + @ParameterizedTest + void dateHeader_notModified_expect200(String reqType) { + initSpringAwsProxyTest(reqType); AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo/last-modified", "GET") - .json() - .header( - HttpHeaders.IF_MODIFIED_SINCE, - DateTimeFormatter.RFC_1123_DATE_TIME.format(ZonedDateTime.now().minus(5, ChronoUnit.DAYS)) - ); + .json() + .header( + HttpHeaders.IF_MODIFIED_SINCE, + DateTimeFormatter.RFC_1123_DATE_TIME.format(ZonedDateTime.now().minus(5, ChronoUnit.DAYS)) + ); AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(200, output.getStatusCode()); assertEquals(EchoResource.STRING_BODY, output.getBody()); } - @Test - public void authorizer_securityContext_customPrincipalSuccess() { + @MethodSource("data") + @ParameterizedTest + void authorizer_securityContext_customPrincipalSuccess(String reqType) { + initSpringAwsProxyTest(reqType); assumeTrue("API_GW".equals(type)); AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo/authorizer-principal", "GET") .json() @@ -240,16 +255,20 @@ public void authorizer_securityContext_customPrincipalSuccess() { validateSingleValueModel(output, AUTHORIZER_PRINCIPAL_ID); } - @Test - public void errors_unknownRoute_expect404() { + @MethodSource("data") + @ParameterizedTest + void errors_unknownRoute_expect404(String reqType) { + initSpringAwsProxyTest(reqType); AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo/test33", "GET"); AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(404, output.getStatusCode()); } - @Test - public void error_contentType_invalidContentType() { + @MethodSource("data") + @ParameterizedTest + void error_contentType_invalidContentType(String reqType) { + initSpringAwsProxyTest(reqType); AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo/json-body", "POST") .header("Content-Type", "application/octet-stream") .body("asdasdasd"); @@ -258,8 +277,10 @@ public void error_contentType_invalidContentType() { assertEquals(415, output.getStatusCode()); } - @Test - public void error_statusCode_methodNotAllowed() { + @MethodSource("data") + @ParameterizedTest + void error_statusCode_methodNotAllowed(String reqType) { + initSpringAwsProxyTest(reqType); AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo/status-code", "POST") .json() .queryString("status", "201"); @@ -268,19 +289,23 @@ public void error_statusCode_methodNotAllowed() { assertEquals(405, output.getStatusCode()); } - @Test - public void error_unauthenticatedCall_filterStepsRequest() { + @MethodSource("data") + @ParameterizedTest + void error_unauthenticatedCall_filterStepsRequest(String reqType) { + initSpringAwsProxyTest(reqType); AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo/status-code", "GET") - .header(UnauthenticatedFilter.HEADER_NAME, "1") - .json() - .queryString("status", "201"); + .header(UnauthenticatedFilter.HEADER_NAME, "1") + .json() + .queryString("status", "201"); AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(401, output.getStatusCode()); } - @Test - public void responseBody_responseWriter_validBody() throws JsonProcessingException { + @MethodSource("data") + @ParameterizedTest + void responseBody_responseWriter_validBody(String reqType) throws JsonProcessingException { + initSpringAwsProxyTest(reqType); SingleValueModel singleValueModel = new SingleValueModel(); singleValueModel.setValue(CUSTOM_HEADER_VALUE); AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo/json-body", "POST") @@ -294,13 +319,15 @@ public void responseBody_responseWriter_validBody() throws JsonProcessingExcepti validateSingleValueModel(output, CUSTOM_HEADER_VALUE); } - @Test - public void responseBody_responseWriter_validBody_UTF() throws JsonProcessingException { + @MethodSource("data") + @ParameterizedTest + void responseBody_responseWriter_validBody_UTF(String reqType) throws JsonProcessingException { + initSpringAwsProxyTest(reqType); SingleValueModel singleValueModel = new SingleValueModel(); singleValueModel.setValue(UNICODE_VALUE); AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo/json-body", "POST") - .header("Content-Type", "application/json; charset=UTF-8") - .body(objectMapper.writeValueAsString(singleValueModel)); + .header("Content-Type", "application/json; charset=UTF-8") + .body(objectMapper.writeValueAsString(singleValueModel)); LambdaContainerHandler.getContainerConfig().setDefaultContentCharset("UTF-8"); AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(200, output.getStatusCode()); @@ -309,8 +336,10 @@ public void responseBody_responseWriter_validBody_UTF() throws JsonProcessingExc LambdaContainerHandler.getContainerConfig().setDefaultContentCharset(ContainerConfig.DEFAULT_CONTENT_CHARSET); } - @Test - public void statusCode_responseStatusCode_customStatusCode() { + @MethodSource("data") + @ParameterizedTest + void statusCode_responseStatusCode_customStatusCode(String reqType) { + initSpringAwsProxyTest(reqType); AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo/status-code", "GET") .json() .queryString("status", "201"); @@ -319,8 +348,10 @@ public void statusCode_responseStatusCode_customStatusCode() { assertEquals(201, output.getStatusCode()); } - @Test - public void base64_binaryResponse_base64Encoding() { + @MethodSource("data") + @ParameterizedTest + void base64_binaryResponse_base64Encoding(String reqType) { + initSpringAwsProxyTest(reqType); AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo/binary", "GET"); AwsProxyResponse response = executeRequest(request, lambdaContext); @@ -328,11 +359,13 @@ public void base64_binaryResponse_base64Encoding() { assertTrue(Base64.isBase64(response.getBody())); } - @Test - public void injectBody_populatedResponse_noException() { + @MethodSource("data") + @ParameterizedTest + void injectBody_populatedResponse_noException(String reqType) { + initSpringAwsProxyTest(reqType); AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo/request-body", "POST") - .header(HttpHeaders.CONTENT_TYPE, "text/plain") - .body("This is a populated body"); + .header(HttpHeaders.CONTENT_TYPE, "text/plain") + .body("This is a populated body"); AwsProxyResponse response = executeRequest(request, lambdaContext); assertNotNull(response.getBody()); @@ -349,15 +382,17 @@ public void injectBody_populatedResponse_noException() { AwsProxyResponse emptyResp = executeRequest(emptyReq, lambdaContext); try { SingleValueModel output = objectMapper.readValue(emptyResp.getBody(), SingleValueModel.class); - assertEquals(null, output.getValue()); + assertNull(output.getValue()); } catch (IOException e) { e.printStackTrace(); fail(); } } - @Test - public void servletRequestEncoding_acceptEncoding_okStatusCode() { + @MethodSource("data") + @ParameterizedTest + void servletRequestEncoding_acceptEncoding_okStatusCode(String reqType) { + initSpringAwsProxyTest(reqType); SingleValueModel singleValueModel = new SingleValueModel(); singleValueModel.setValue(CUSTOM_HEADER_VALUE); AwsProxyRequestBuilder request = null; @@ -375,8 +410,10 @@ public void servletRequestEncoding_acceptEncoding_okStatusCode() { assertEquals(200, output.getStatusCode()); } - @Test - public void request_requestURI() { + @MethodSource("data") + @ParameterizedTest + void request_requestURI(String reqType) { + initSpringAwsProxyTest(reqType); AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo/request-URI", "GET"); AwsProxyResponse output = executeRequest(request, lambdaContext); @@ -385,8 +422,10 @@ public void request_requestURI() { validateSingleValueModel(output, "/echo/request-URI"); } - @Test - public void request_requestURL() { + @MethodSource("data") + @ParameterizedTest + void request_requestURL(String reqType) { + initSpringAwsProxyTest(reqType); AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo/request-url", "GET") .scheme("https") .serverName("api.myserver.com") @@ -398,12 +437,14 @@ public void request_requestURL() { validateSingleValueModel(output, "https://api.myserver.com/echo/request-url"); } - @Test - public void request_encodedPath_returnsDecodedPath() { + @MethodSource("data") + @ParameterizedTest + void request_encodedPath_returnsDecodedPath(String reqType) { + initSpringAwsProxyTest(reqType); AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo/encoded-request-uri/Some%20Thing", "GET") - .scheme("https") - .serverName("api.myserver.com") - .stage("prod"); + .scheme("https") + .serverName("api.myserver.com") + .stage("prod"); AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(200, output.getStatusCode()); @@ -412,13 +453,15 @@ public void request_encodedPath_returnsDecodedPath() { } - @Test - public void contextPath_generateLink_returnsCorrectPath() { + @MethodSource("data") + @ParameterizedTest + void contextPath_generateLink_returnsCorrectPath(String reqType) { + initSpringAwsProxyTest(reqType); assumeFalse("ALB".equals(type)); AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo/generate-uri", "GET") - .scheme("https") - .serverName("api.myserver.com") - .stage("prod"); + .scheme("https") + .serverName("api.myserver.com") + .stage("prod"); LambdaContainerHandler.getContainerConfig().addCustomDomain("api.myserver.com"); SpringLambdaContainerHandler.getContainerConfig().setUseStageAsServletContext(true); @@ -432,11 +475,13 @@ public void contextPath_generateLink_returnsCorrectPath() { SpringLambdaContainerHandler.getContainerConfig().setUseStageAsServletContext(false); } - @Test - public void multipart_getFileName_returnsCorrectFileName() + @MethodSource("data") + @ParameterizedTest + void multipart_getFileName_returnsCorrectFileName(String reqType) throws IOException { + initSpringAwsProxyTest(reqType); AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo/attachment", "POST") - .formFilePart("testFile", "myFile.txt", "hello".getBytes()); + .formFilePart("testFile", "myFile.txt", "hello".getBytes()); AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(200, output.getStatusCode()); diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringServletContextTest.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringServletContextTest.java index 15e9c5b4e..cfc39b845 100644 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringServletContextTest.java +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringServletContextTest.java @@ -11,8 +11,8 @@ import com.amazonaws.serverless.proxy.spring.echoapp.CustomHeaderFilter; import com.amazonaws.serverless.proxy.spring.echoapp.EchoSpringAppConfig; import com.amazonaws.serverless.proxy.spring.echoapp.model.ValidatedUserModel; -import org.junit.BeforeClass; -import org.junit.Test; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; @@ -22,7 +22,7 @@ import java.util.EnumSet; -import static org.junit.Assert.*; +import static org.junit.jupiter.api.Assertions.*; // we don't use the spring annotations to pretend we are running in the actual container public class SpringServletContextTest { @@ -31,7 +31,7 @@ public class SpringServletContextTest { private static SpringLambdaContainerHandler handler; - @BeforeClass + @BeforeAll public static void setUp() { try { handler = SpringLambdaContainerHandler.getAwsProxyHandler(EchoSpringAppConfig.class); @@ -49,7 +49,7 @@ public static void setUp() { } @Test - public void context_autowireValidContext_echoContext() { + void context_autowireValidContext_echoContext() { AwsProxyRequest request = new AwsProxyRequestBuilder("/echo/servlet-context", "GET") .json() .stage(STAGE) @@ -62,7 +62,7 @@ public void context_autowireValidContext_echoContext() { } @Test - public void context_contextAware_contextEcho() { + void context_contextAware_contextEcho() { AwsProxyRequest request = new AwsProxyRequestBuilder("/context/echo", "GET") .json() .stage(STAGE) @@ -75,7 +75,7 @@ public void context_contextAware_contextEcho() { } @Test - public void filter_customHeaderFilter_echoHeaders() { + void filter_customHeaderFilter_echoHeaders() { AwsProxyRequest request = new AwsProxyRequestBuilder("/echo/headers", "GET") .json() .stage(STAGE) @@ -89,7 +89,7 @@ public void filter_customHeaderFilter_echoHeaders() { } @Test - public void filter_validationFilter_emptyName() { + void filter_validationFilter_emptyName() { ValidatedUserModel userModel = new ValidatedUserModel(); userModel.setFirstName("Test"); AwsProxyRequest request = new AwsProxyRequestBuilder("/context/user", "POST") @@ -102,11 +102,11 @@ public void filter_validationFilter_emptyName() { } @Test - public void exception_populatedException_annotationValuesMappedCorrectly() { + void exception_populatedException_annotationValuesMappedCorrectly() { AwsProxyRequest request = new AwsProxyRequestBuilder("/context/exception", "GET") - .stage(STAGE) - .header(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE) - .build(); + .stage(STAGE) + .header(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE) + .build(); AwsProxyResponse output = handler.proxy(request, lambdaContext); @@ -115,11 +115,11 @@ public void exception_populatedException_annotationValuesMappedCorrectly() { } @Test - public void cookie_injectInResponse_expectCustomSetCookie() { + void cookie_injectInResponse_expectCustomSetCookie() { AwsProxyRequest request = new AwsProxyRequestBuilder("/context/cookie", "GET") - .stage(STAGE) - .header(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE) - .build(); + .stage(STAGE) + .header(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE) + .build(); AwsProxyResponse output = handler.proxy(request, lambdaContext); diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/StaticAppProxyTest.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/StaticAppProxyTest.java index 38d3e3d22..d2b74b26a 100644 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/StaticAppProxyTest.java +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/StaticAppProxyTest.java @@ -8,12 +8,13 @@ import com.amazonaws.serverless.proxy.internal.testutils.MockLambdaContext; import com.amazonaws.serverless.proxy.spring.staticapp.LambdaHandler; -import org.junit.Test; +import org.junit.jupiter.api.Test; import org.springframework.http.HttpHeaders; import javax.ws.rs.core.MediaType; -import static org.junit.Assert.*; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; public class StaticAppProxyTest { @@ -21,7 +22,7 @@ public class StaticAppProxyTest { private LambdaHandler lambdaHandler = new LambdaHandler(); @Test - public void staticPage() { + void staticPage() { AwsProxyRequest req = new AwsProxyRequestBuilder("/sample/page", "GET").build(); // we temporarily allow the container to read from any path LambdaContainerHandler.getContainerConfig().addValidFilePath("/"); diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/extensibility/CustomServletTest.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/extensibility/CustomServletTest.java index 9cac0aa1f..dd3d3fd71 100644 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/extensibility/CustomServletTest.java +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/extensibility/CustomServletTest.java @@ -2,26 +2,26 @@ import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; import com.amazonaws.serverless.proxy.internal.testutils.MockLambdaContext; -import org.junit.Test; +import org.junit.jupiter.api.Test; import javax.ws.rs.HttpMethod; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertTrue; public class CustomServletTest { @Test - public void customServlet() throws IOException { + void customServlet() throws IOException { StreamLambdaHandler lambdaHandler = new StreamLambdaHandler(); InputStream requestStream = new AwsProxyRequestBuilder("/test", HttpMethod.GET) .buildStream(); ByteArrayOutputStream responseStream = new ByteArrayOutputStream(); lambdaHandler.handleRequest(requestStream, responseStream, new MockLambdaContext()); - assertTrue("response should contain value set in CustomServlet", - responseStream.toString().contains("Unittest")); + assertTrue(responseStream.toString().contains("Unittest"), + "response should contain value set in CustomServlet"); } } diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/profile/SpringProfileTest.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/profile/SpringProfileTest.java index 727a4cdc4..7742db7f6 100644 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/profile/SpringProfileTest.java +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/profile/SpringProfileTest.java @@ -9,19 +9,19 @@ import com.amazonaws.serverless.proxy.spring.echoapp.EchoSpringAppConfig; import com.amazonaws.serverless.proxy.spring.echoapp.model.MapResponseModel; import com.fasterxml.jackson.databind.ObjectMapper; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.TestExecutionListeners; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.test.context.support.DependencyInjectionTestExecutionListener; import org.springframework.test.context.web.WebAppConfiguration; -import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; -@RunWith(SpringJUnit4ClassRunner.class) +@ExtendWith(SpringExtension.class) @ContextConfiguration(classes = EchoSpringAppConfig.class) @WebAppConfiguration @TestExecutionListeners(inheritListeners = false, listeners = {DependencyInjectionTestExecutionListener.class}) @@ -32,13 +32,13 @@ public class SpringProfileTest { @Autowired private MockLambdaContext lambdaContext; - @Before + @BeforeEach public void clearServletContextCache() { AwsServletContext.clearServletContextCache(); } @Test - public void profile_defaultProfile() throws Exception { + void profile_defaultProfile() throws Exception { AwsProxyRequest request = new AwsProxyRequestBuilder("/profile/spring-properties", "GET") .build(); @@ -54,7 +54,7 @@ public void profile_defaultProfile() throws Exception { } @Test - public void profile_overrideProfile() throws Exception { + void profile_overrideProfile() throws Exception { AwsProxyRequest request = new AwsProxyRequestBuilder("/profile/spring-properties", "GET") .build(); SpringLambdaContainerHandler handler = SpringLambdaContainerHandler.getAwsProxyHandler(EchoSpringAppConfig.class); diff --git a/aws-serverless-java-container-springboot2/pom.xml b/aws-serverless-java-container-springboot2/pom.xml index 8768c373c..31e90b99e 100644 --- a/aws-serverless-java-container-springboot2/pom.xml +++ b/aws-serverless-java-container-springboot2/pom.xml @@ -159,6 +159,11 @@ 6.2.1.Final test + + org.junit.jupiter + junit-jupiter + test + javax.activation @@ -219,7 +224,7 @@ org.apache.maven.plugins maven-surefire-plugin - 2.9 + 2.22.2 always diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/SecurityAppTest.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/SecurityAppTest.java index e9682d4c4..e322e1a67 100644 --- a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/SecurityAppTest.java +++ b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/SecurityAppTest.java @@ -6,13 +6,13 @@ import com.amazonaws.serverless.proxy.model.AwsProxyResponse; import com.amazonaws.serverless.proxy.spring.securityapp.LambdaHandler; import com.amazonaws.serverless.proxy.spring.securityapp.SecurityConfig; -import org.junit.Test; +import org.junit.jupiter.api.Test; import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.MediaType; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; public class SecurityAppTest { @@ -24,7 +24,7 @@ public SecurityAppTest() { } @Test - public void helloRequest_withAuth_respondsWithSingleMessage() { + void helloRequest_withAuth_respondsWithSingleMessage() { AwsProxyRequest req = new AwsProxyRequestBuilder("/hello", "GET").build(); AwsProxyResponse resp = handler.handleRequest(req, lambdaContext); assertEquals(401, resp.getStatusCode()); diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/ServletAppTest.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/ServletAppTest.java index 7c80dc86b..f5e2e8185 100644 --- a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/ServletAppTest.java +++ b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/ServletAppTest.java @@ -8,10 +8,8 @@ import com.amazonaws.serverless.proxy.model.ContainerConfig; import com.amazonaws.serverless.proxy.spring.servletapp.*; import com.fasterxml.jackson.core.JsonProcessingException; -import org.junit.Assert; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.MediaType; @@ -23,9 +21,8 @@ import java.util.Collection; import java.util.stream.Collectors; -import static org.junit.Assert.*; +import static org.junit.jupiter.api.Assertions.*; -@RunWith(Parameterized.class) public class ServletAppTest { LambdaHandler handler; @@ -33,25 +30,28 @@ public class ServletAppTest { private String type; - @Parameterized.Parameters public static Collection data() { - return Arrays.asList(new Object[] { "API_GW", "ALB", "HTTP_API" }); + return Arrays.asList(new Object[]{"API_GW", "ALB", "HTTP_API"}); } - public ServletAppTest(String reqType) { + public void initServletAppTest(String reqType) { type = reqType; handler = new LambdaHandler(type); } - @Test - public void helloRequest_respondsWithSingleMessage() { + @MethodSource("data") + @ParameterizedTest + void helloRequest_respondsWithSingleMessage(String reqType) { + initServletAppTest(reqType); AwsProxyRequestBuilder req = new AwsProxyRequestBuilder("/hello", "GET"); AwsProxyResponse resp = handler.handleRequest(req, lambdaContext); - Assert.assertEquals(MessageController.HELLO_MESSAGE, resp.getBody()); + assertEquals(MessageController.HELLO_MESSAGE, resp.getBody()); } - @Test - public void validateRequest_invalidData_respondsWith400() { + @MethodSource("data") + @ParameterizedTest + void validateRequest_invalidData_respondsWith400(String reqType) { + initServletAppTest(reqType); UserData ud = new UserData(); AwsProxyRequestBuilder req = new AwsProxyRequestBuilder("/validate", "POST") .header(HttpHeaders.ACCEPT, MediaType.TEXT_PLAIN) @@ -79,8 +79,10 @@ public void validateRequest_invalidData_respondsWith400() { assertEquals(400, resp.getStatusCode()); } - @Test - public void messageObject_parsesObject_returnsCorrectMessage() { + @MethodSource("data") + @ParameterizedTest + void messageObject_parsesObject_returnsCorrectMessage(String reqType) { + initServletAppTest(reqType); AwsProxyRequestBuilder req = new AwsProxyRequestBuilder("/message", "POST") .json() .body(new MessageData("test message")); @@ -90,8 +92,10 @@ public void messageObject_parsesObject_returnsCorrectMessage() { assertEquals("test message", resp.getBody()); } - @Test - public void messageObject_propertiesInContentType_returnsCorrectMessage() { + @MethodSource("data") + @ParameterizedTest + void messageObject_propertiesInContentType_returnsCorrectMessage(String reqType) { + initServletAppTest(reqType); AwsProxyRequestBuilder req = new AwsProxyRequestBuilder("/message", "POST") .header(HttpHeaders.CONTENT_TYPE, "application/json;v=1") .header(HttpHeaders.ACCEPT, "application/json;v=1") @@ -102,8 +106,10 @@ public void messageObject_propertiesInContentType_returnsCorrectMessage() { assertEquals("test message", resp.getBody()); } - @Test - public void echoMessage_fileNameLikeParameter_returnsMessage() { + @MethodSource("data") + @ParameterizedTest + void echoMessage_fileNameLikeParameter_returnsMessage(String reqType) { + initServletAppTest(reqType); AwsProxyRequestBuilder req = new AwsProxyRequestBuilder("/echo/test.test.test", "GET"); AwsProxyResponse resp = handler.handleRequest(req, lambdaContext); assertNotNull(resp); @@ -111,8 +117,10 @@ public void echoMessage_fileNameLikeParameter_returnsMessage() { assertEquals("test.test.test", resp.getBody()); } - @Test - public void getUtf8String_returnsValidUtf8String() { + @MethodSource("data") + @ParameterizedTest + void getUtf8String_returnsValidUtf8String(String reqType) { + initServletAppTest(reqType); // We expect strings to come back as UTF-8 correctly because Spring itself will call the setCharacterEncoding // method on the response to set it to UTF- LambdaContainerHandler.getContainerConfig().setDefaultContentCharset(ContainerConfig.DEFAULT_CONTENT_CHARSET); @@ -125,18 +133,22 @@ public void getUtf8String_returnsValidUtf8String() { assertEquals(MessageController.UTF8_RESPONSE, resp.getBody()); } - @Test - public void getUtf8Json_returnsValidUtf8String() { + @MethodSource("data") + @ParameterizedTest + void getUtf8Json_returnsValidUtf8String(String reqType) { + initServletAppTest(reqType); LambdaContainerHandler.getContainerConfig().setDefaultContentCharset(ContainerConfig.DEFAULT_CONTENT_CHARSET); AwsProxyRequestBuilder req = new AwsProxyRequestBuilder("/content-type/jsonutf8", "GET"); AwsProxyResponse resp = handler.handleRequest(req, lambdaContext); assertNotNull(resp); assertEquals(200, resp.getStatusCode()); - assertEquals("{\"s\":\""+MessageController.UTF8_RESPONSE+"\"}", resp.getBody()); + assertEquals("{\"s\":\"" + MessageController.UTF8_RESPONSE + "\"}", resp.getBody()); } - @Test - public void stream_getUtf8String_returnsValidUtf8String() throws IOException { + @MethodSource("data") + @ParameterizedTest + void stream_getUtf8String_returnsValidUtf8String(String reqType) throws IOException { + initServletAppTest(reqType); LambdaContainerHandler.getContainerConfig().setDefaultContentCharset(ContainerConfig.DEFAULT_CONTENT_CHARSET); LambdaStreamHandler streamHandler = new LambdaStreamHandler(type); AwsProxyRequestBuilder reqBuilder = new AwsProxyRequestBuilder("/content-type/utf8", "GET") @@ -160,8 +172,10 @@ public void stream_getUtf8String_returnsValidUtf8String() throws IOException { assertEquals(MessageController.UTF8_RESPONSE, resp.getBody()); } - @Test - public void stream_getUtf8Json_returnsValidUtf8String() throws IOException { + @MethodSource("data") + @ParameterizedTest + void stream_getUtf8Json_returnsValidUtf8String(String reqType) throws IOException { + initServletAppTest(reqType); LambdaContainerHandler.getContainerConfig().setDefaultContentCharset(ContainerConfig.DEFAULT_CONTENT_CHARSET); LambdaStreamHandler streamHandler = new LambdaStreamHandler(type); AwsProxyRequestBuilder reqBuilder = new AwsProxyRequestBuilder("/content-type/jsonutf8", "GET"); @@ -181,19 +195,23 @@ public void stream_getUtf8Json_returnsValidUtf8String() throws IOException { AwsProxyResponse resp = LambdaContainerHandler.getObjectMapper().readValue(out.toByteArray(), AwsProxyResponse.class); assertNotNull(resp); assertEquals(200, resp.getStatusCode()); - assertEquals("{\"s\":\""+MessageController.UTF8_RESPONSE+"\"}", resp.getBody()); + assertEquals("{\"s\":\"" + MessageController.UTF8_RESPONSE + "\"}", resp.getBody()); } - @Test - public void springExceptionMapping_throw404Ex_expectMappedTo404() { + @MethodSource("data") + @ParameterizedTest + void springExceptionMapping_throw404Ex_expectMappedTo404(String reqType) { + initServletAppTest(reqType); AwsProxyRequestBuilder req = new AwsProxyRequestBuilder("/ex/customstatus", "GET"); AwsProxyResponse resp = handler.handleRequest(req, lambdaContext); assertNotNull(resp); assertEquals(404, resp.getStatusCode()); } - @Test - public void echoMessage_populatesSingleValueHeadersForHttpApiV2() { + @MethodSource("data") + @ParameterizedTest + void echoMessage_populatesSingleValueHeadersForHttpApiV2(String reqType) { + initServletAppTest(reqType); AwsProxyRequestBuilder req = new AwsProxyRequestBuilder("/message", "POST") .header(HttpHeaders.CONTENT_TYPE, "application/json;v=1") .header(HttpHeaders.ACCEPT, "application/json;v=1") diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/SlowAppTest.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/SlowAppTest.java index 8dabc5f66..f5e83e85e 100644 --- a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/SlowAppTest.java +++ b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/SlowAppTest.java @@ -7,18 +7,17 @@ import com.amazonaws.serverless.proxy.spring.slowapp.LambdaHandler; import com.amazonaws.serverless.proxy.spring.slowapp.MessageController; import com.amazonaws.serverless.proxy.spring.slowapp.SlowTestApplication; -import org.junit.Assert; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.time.Instant; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; public class SlowAppTest { @Test - public void slowAppInit_continuesInBackgroundThread_returnsCorrect() { + void slowAppInit_continuesInBackgroundThread_returnsCorrect() { LambdaHandler slowApp = new LambdaHandler(); System.out.println("Start time: " + slowApp.getConstructorTime()); assertTrue(slowApp.getConstructorTime() < 10_000); @@ -28,6 +27,6 @@ public void slowAppInit_continuesInBackgroundThread_returnsCorrect() { long endRequestTime = Instant.now().toEpochMilli(); assertTrue(endRequestTime - startRequestTime > SlowTestApplication.SlowDownInit.INIT_SLEEP_TIME_MS - 10_000); assertEquals(200, resp.getStatusCode()); - Assert.assertEquals(MessageController.HELLO_MESSAGE, resp.getBody()); + assertEquals(MessageController.HELLO_MESSAGE, resp.getBody()); } } diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/WebFluxAppTest.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/WebFluxAppTest.java index 811a1ab55..0a477ef0f 100644 --- a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/WebFluxAppTest.java +++ b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/WebFluxAppTest.java @@ -9,18 +9,15 @@ import com.amazonaws.serverless.proxy.spring.webfluxapp.MessageController; import com.amazonaws.serverless.proxy.spring.webfluxapp.MessageData; import com.fasterxml.jackson.core.JsonProcessingException; -import org.junit.Assert; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; import java.util.Arrays; import java.util.Collection; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; -@RunWith(Parameterized.class) public class WebFluxAppTest { LambdaHandler handler; @@ -28,34 +25,39 @@ public class WebFluxAppTest { private String type; - @Parameterized.Parameters public static Collection data() { - return Arrays.asList(new Object[] { "API_GW", "ALB", "HTTP_API" }); + return Arrays.asList(new Object[]{"API_GW", "ALB", "HTTP_API"}); } - public WebFluxAppTest(String reqType) { + public void initWebFluxAppTest(String reqType) { type = reqType; handler = new LambdaHandler(type); } - @Test - public void helloRequest_respondsWithSingleMessage() { + @MethodSource("data") + @ParameterizedTest + void helloRequest_respondsWithSingleMessage(String reqType) { + initWebFluxAppTest(reqType); AwsProxyRequestBuilder req = new AwsProxyRequestBuilder("/single", "GET"); AwsProxyResponse resp = handler.handleRequest(req, lambdaContext); System.out.println(resp.getBody()); - Assert.assertEquals(MessageController.MESSAGE, resp.getBody()); + assertEquals(MessageController.MESSAGE, resp.getBody()); } - @Test - public void helloDoubleRequest_respondsWithDoubleMessage() { + @MethodSource("data") + @ParameterizedTest + void helloDoubleRequest_respondsWithDoubleMessage(String reqType) { + initWebFluxAppTest(reqType); AwsProxyRequestBuilder req = new AwsProxyRequestBuilder("/double", "GET"); AwsProxyResponse resp = handler.handleRequest(req, lambdaContext); assertEquals(MessageController.MESSAGE + MessageController.MESSAGE, resp.getBody()); } - @Test - public void messageObject_parsesObject_returnsCorrectMessage() throws JsonProcessingException { + @MethodSource("data") + @ParameterizedTest + void messageObject_parsesObject_returnsCorrectMessage(String reqType) throws JsonProcessingException { + initWebFluxAppTest(reqType); AwsProxyRequestBuilder req = new AwsProxyRequestBuilder("/message", "POST") .json() .body(new MessageData("test message")); diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactoryTest.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactoryTest.java index 11779420c..2fddcf0a5 100644 --- a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactoryTest.java +++ b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactoryTest.java @@ -9,14 +9,14 @@ import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.serverless.proxy.model.AwsProxyResponse; import com.amazonaws.serverless.proxy.spring.SpringBootLambdaContainerHandler; -import org.junit.Test; +import org.junit.jupiter.api.Test; import org.springframework.boot.WebApplicationType; import org.springframework.boot.web.servlet.ServletContextInitializer; import javax.servlet.ServletContext; import javax.servlet.ServletException; -import static org.junit.Assert.fail; +import static org.junit.jupiter.api.Assertions.fail; public class ServerlessServletEmbeddedServerFactoryTest { private SpringBootLambdaContainerHandler handler = new SpringBootLambdaContainerHandler<>( @@ -35,7 +35,7 @@ public ServerlessServletEmbeddedServerFactoryTest() throws ContainerInitializati } @Test - public void getWebServer_callsInitializers() { + void getWebServer_callsInitializers() { ServerlessServletEmbeddedServerFactory factory = new ServerlessServletEmbeddedServerFactory(); factory.getWebServer(new ServletContextInitializer() { @Override diff --git a/aws-serverless-java-container-struts/pom.xml b/aws-serverless-java-container-struts/pom.xml index 9ba433706..7cac0a1ad 100644 --- a/aws-serverless-java-container-struts/pom.xml +++ b/aws-serverless-java-container-struts/pom.xml @@ -49,6 +49,12 @@ struts2-junit-plugin ${struts.version} test + + + junit + junit + + @@ -151,9 +157,9 @@ org.apache.maven.plugins maven-surefire-plugin - 2.9 + 2.22.2 - always + false diff --git a/aws-serverless-java-container-struts/src/test/java/com/amazonaws/serverless/proxy/struts/StrutsAwsProxyTest.java b/aws-serverless-java-container-struts/src/test/java/com/amazonaws/serverless/proxy/struts/StrutsAwsProxyTest.java index eb890cf5b..d288e67e4 100644 --- a/aws-serverless-java-container-struts/src/test/java/com/amazonaws/serverless/proxy/struts/StrutsAwsProxyTest.java +++ b/aws-serverless-java-container-struts/src/test/java/com/amazonaws/serverless/proxy/struts/StrutsAwsProxyTest.java @@ -25,9 +25,8 @@ import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.commons.codec.binary.Base64; import org.apache.struts2.StrutsRestTestCase; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; import javax.ws.rs.core.Response; import java.io.IOException; @@ -39,16 +38,15 @@ import java.util.Map; import java.util.UUID; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; -import static org.junit.Assume.assumeTrue; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.fail; +import static org.junit.jupiter.api.Assumptions.assumeTrue; /** * Unit test class for the Struts2 AWS_PROXY default implementation */ -@RunWith(Parameterized.class) public class StrutsAwsProxyTest extends StrutsRestTestCase { private static final String CUSTOM_HEADER_KEY = "x-custom-header"; private static final String CUSTOM_HEADER_VALUE = "my-custom-value"; @@ -67,15 +65,14 @@ public class StrutsAwsProxyTest extends StrutsRestTestCase { private final StrutsLambdaContainerHandler httpApiHandler = StrutsLambdaContainerHandler .getHttpApiV2ProxyHandler(); private final Context lambdaContext = new MockLambdaContext(); - private final String type; + private String type; - public StrutsAwsProxyTest(String reqType) { + public void initStrutsAwsProxyTest(String reqType) { type = reqType; } - @Parameterized.Parameters public static Collection data() { - return Arrays.asList(new Object[] { "API_GW", "ALB", "HTTP_API" }); + return Arrays.asList(new Object[]{"API_GW", "ALB", "HTTP_API"}); } private AwsProxyResponse executeRequest(AwsProxyRequestBuilder requestBuilder, Context lambdaContext) { @@ -90,9 +87,11 @@ private AwsProxyResponse executeRequest(AwsProxyRequestBuilder requestBuilder, C throw new RuntimeException("Unknown request type: " + type); } } - - @Test - public void headers_getHeaders_echo() { + + @MethodSource("data") + @ParameterizedTest + void headers_getHeaders_echo(String reqType) { + initStrutsAwsProxyTest(reqType); AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo-request-info", HTTP_METHOD_GET) .queryString(QUERY_STRING_MODE, "headers") .header(CUSTOM_HEADER_KEY, CUSTOM_HEADER_VALUE) @@ -105,8 +104,10 @@ public void headers_getHeaders_echo() { validateMapResponseModel(output); } - @Test - public void context_servletResponse_setCustomHeader() { + @MethodSource("data") + @ParameterizedTest + void context_servletResponse_setCustomHeader(String reqType) { + initStrutsAwsProxyTest(reqType); AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo", HTTP_METHOD_GET) .queryString("customHeader", "true") .json(); @@ -116,8 +117,10 @@ public void context_servletResponse_setCustomHeader() { assertTrue(output.getMultiValueHeaders().containsKey("XX")); } - @Test - public void context_serverInfo_correctContext() { + @MethodSource("data") + @ParameterizedTest + void context_serverInfo_correctContext(String reqType) { + initStrutsAwsProxyTest(reqType); assumeTrue("API_GW".equals(type)); AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo", HTTP_METHOD_GET) .queryString(QUERY_STRING_KEY, "Hello Struts2") @@ -130,8 +133,10 @@ public void context_serverInfo_correctContext() { validateSingleValueModel(output, "Hello Struts2"); } - @Test - public void queryString_uriInfo_echo() { + @MethodSource("data") + @ParameterizedTest + void queryString_uriInfo_echo(String reqType) { + initStrutsAwsProxyTest(reqType); AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo-request-info", HTTP_METHOD_GET) .queryString(QUERY_STRING_MODE, "query-string") .queryString(CUSTOM_HEADER_KEY, CUSTOM_HEADER_VALUE) @@ -145,8 +150,10 @@ public void queryString_uriInfo_echo() { validateMapResponseModel(output); } - @Test - public void requestScheme_valid_expectHttps() { + @MethodSource("data") + @ParameterizedTest + void requestScheme_valid_expectHttps(String reqType) { + initStrutsAwsProxyTest(reqType); AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo-request-info", HTTP_METHOD_GET) .queryString(QUERY_STRING_MODE, "scheme") .queryString(QUERY_STRING_KEY, QUERY_STRING_ENCODED_VALUE) @@ -159,8 +166,10 @@ public void requestScheme_valid_expectHttps() { validateSingleValueModel(output, "https"); } - @Test - public void authorizer_securityContext_customPrincipalSuccess() { + @MethodSource("data") + @ParameterizedTest + void authorizer_securityContext_customPrincipalSuccess(String reqType) { + initStrutsAwsProxyTest(reqType); assumeTrue("API_GW".equals(type)); AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo-request-info", HTTP_METHOD_GET) .queryString(QUERY_STRING_MODE, "principal") @@ -174,16 +183,20 @@ public void authorizer_securityContext_customPrincipalSuccess() { validateSingleValueModel(output, AUTHORIZER_PRINCIPAL_ID); } - @Test - public void errors_unknownRoute_expect404() { + @MethodSource("data") + @ParameterizedTest + void errors_unknownRoute_expect404(String reqType) { + initStrutsAwsProxyTest(reqType); AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/unknown", HTTP_METHOD_GET); AwsProxyResponse output = executeRequest(request, lambdaContext); assertEquals(404, output.getStatusCode()); } - @Test - public void error_contentType_invalidContentType() { + @MethodSource("data") + @ParameterizedTest + void error_contentType_invalidContentType(String reqType) { + initStrutsAwsProxyTest(reqType); AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo-request-info", "POST") .queryString(QUERY_STRING_MODE, "content-type") .header("Content-Type", "application/octet-stream") @@ -193,8 +206,10 @@ public void error_contentType_invalidContentType() { assertEquals(415, output.getStatusCode()); } - @Test - public void error_statusCode_methodNotAllowed() { + @MethodSource("data") + @ParameterizedTest + void error_statusCode_methodNotAllowed(String reqType) { + initStrutsAwsProxyTest(reqType); AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo-request-info", "POST") .queryString(QUERY_STRING_MODE, "not-allowed") .json(); @@ -204,8 +219,10 @@ public void error_statusCode_methodNotAllowed() { } - @Test - public void responseBody_responseWriter_validBody() throws JsonProcessingException { + @MethodSource("data") + @ParameterizedTest + void responseBody_responseWriter_validBody(String reqType) throws JsonProcessingException { + initStrutsAwsProxyTest(reqType); Map value = new HashMap<>(); value.put(QUERY_STRING_KEY, CUSTOM_HEADER_VALUE); AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo", "POST") @@ -219,8 +236,10 @@ public void responseBody_responseWriter_validBody() throws JsonProcessingExcepti validateSingleValueModel(output, "{\"message\":\"my-custom-value\"}"); } - @Test - public void statusCode_responseStatusCode_customStatusCode() { + @MethodSource("data") + @ParameterizedTest + void statusCode_responseStatusCode_customStatusCode(String reqType) { + initStrutsAwsProxyTest(reqType); AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo-request-info", HTTP_METHOD_GET) .queryString(QUERY_STRING_MODE, "custom-status-code") .queryString("status", "201") @@ -230,8 +249,10 @@ public void statusCode_responseStatusCode_customStatusCode() { assertEquals(201, output.getStatusCode()); } - @Test - public void base64_binaryResponse_base64Encoding() { + @MethodSource("data") + @ParameterizedTest + void base64_binaryResponse_base64Encoding(String reqType) { + initStrutsAwsProxyTest(reqType); AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo", HTTP_METHOD_GET); AwsProxyResponse response = executeRequest(request, lambdaContext); @@ -239,8 +260,10 @@ public void base64_binaryResponse_base64Encoding() { assertTrue(Base64.isBase64(response.getBody())); } - @Test - public void exception_mapException_mapToNotImplemented() { + @MethodSource("data") + @ParameterizedTest + void exception_mapException_mapToNotImplemented(String reqType) { + initStrutsAwsProxyTest(reqType); AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo-request-info", "POST") .queryString(QUERY_STRING_MODE, "not-implemented"); @@ -250,8 +273,10 @@ public void exception_mapException_mapToNotImplemented() { assertEquals(Response.Status.NOT_IMPLEMENTED.getStatusCode(), response.getStatusCode()); } - @Test - public void stripBasePath_route_shouldRouteCorrectly() { + @MethodSource("data") + @ParameterizedTest + void stripBasePath_route_shouldRouteCorrectly(String reqType) { + initStrutsAwsProxyTest(reqType); AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/custompath/echo", HTTP_METHOD_GET) .json() .queryString(QUERY_STRING_KEY, "stripped"); @@ -262,8 +287,10 @@ public void stripBasePath_route_shouldRouteCorrectly() { handler.stripBasePath(""); } - @Test - public void stripBasePath_route_shouldReturn404() { + @MethodSource("data") + @ParameterizedTest + void stripBasePath_route_shouldReturn404(String reqType) { + initStrutsAwsProxyTest(reqType); AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/custompath/echo/status-code", HTTP_METHOD_GET) .json() .queryString("status", "201"); @@ -273,8 +300,10 @@ public void stripBasePath_route_shouldReturn404() { handler.stripBasePath(""); } - @Test - public void securityContext_injectPrincipal_expectPrincipalName() { + @MethodSource("data") + @ParameterizedTest + void securityContext_injectPrincipal_expectPrincipalName(String reqType) { + initStrutsAwsProxyTest(reqType); assumeTrue("API_GW".equals(type)); AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo-request-info", HTTP_METHOD_GET) .queryString(QUERY_STRING_MODE, "principal") @@ -285,8 +314,10 @@ public void securityContext_injectPrincipal_expectPrincipalName() { validateSingleValueModel(resp, USER_PRINCIPAL); } - @Test - public void queryParam_encoding_expectUnencodedParam() { + @MethodSource("data") + @ParameterizedTest + void queryParam_encoding_expectUnencodedParam(String reqType) { + initStrutsAwsProxyTest(reqType); assumeTrue("API_GW".equals(type)); String paramValue = "p%2Fz%2B3"; String decodedParam = ""; @@ -303,8 +334,10 @@ public void queryParam_encoding_expectUnencodedParam() { validateSingleValueModel(resp, decodedParam); } - @Test - public void queryParam_encoding_expectEncodedParam() { + @MethodSource("data") + @ParameterizedTest + void queryParam_encoding_expectEncodedParam(String reqType) { + initStrutsAwsProxyTest(reqType); assumeTrue("API_GW".equals(type)); String paramValue = "p%2Fz%2B3"; AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo", HTTP_METHOD_GET).queryString(QUERY_STRING_KEY, paramValue); diff --git a/pom.xml b/pom.xml index d5ff104b2..3e997e5ec 100644 --- a/pom.xml +++ b/pom.xml @@ -84,15 +84,27 @@ 7.3.0 2.14.0 2.0.3 + 5.9.1 + 4.4.0 + 1.3 UTF-8 - junit - junit - 4.13.2 + org.junit.jupiter + junit-jupiter-api + test + + + org.junit.jupiter + junit-jupiter-engine + test + + + org.junit.jupiter + junit-jupiter-params test @@ -114,8 +126,15 @@ org.mockito - mockito-all - 1.10.19 + mockito-core + ${mockito.version} + test + + + + org.hamcrest + hamcrest-all + ${hamcrest.version} test @@ -128,6 +147,18 @@ + + + + org.junit + junit-bom + ${junit.version} + import + pom + + + + From d84a418b9fe9bcf58b21e843ca91863680b09ab9 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Thu, 8 Dec 2022 13:00:41 +0100 Subject: [PATCH 271/888] chore(deps): Explicitly add more recent commons-io version (#488) --- aws-serverless-java-container-core/pom.xml | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 0e777b78a..fb4d818cc 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -63,6 +63,11 @@ commons-fileupload 1.4 + + commons-io + commons-io + 2.11.0 + @@ -110,16 +115,6 @@ - - - - commons-io - commons-io - 2.11.0 - - - - From 4e85edcf079aa923558539d25c23ad5503b39f8c Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Thu, 8 Dec 2022 14:35:49 +0100 Subject: [PATCH 272/888] chore(deps): Update Struts dependency to 6.1.1 --- aws-serverless-java-container-struts/pom.xml | 13 +++++++++---- .../proxy/struts/StrutsAwsProxyTest.java | 2 +- .../resources/archetype-resources/build.gradle | 10 +++++----- .../main/resources/archetype-resources/pom.xml | 15 ++++----------- samples/struts/pet-store/build.gradle | 8 ++++---- samples/struts/pet-store/pom.xml | 2 +- 6 files changed, 24 insertions(+), 26 deletions(-) diff --git a/aws-serverless-java-container-struts/pom.xml b/aws-serverless-java-container-struts/pom.xml index 7cac0a1ad..c42747a7f 100644 --- a/aws-serverless-java-container-struts/pom.xml +++ b/aws-serverless-java-container-struts/pom.xml @@ -15,7 +15,7 @@ - 6.0.3 + 6.1.1 @@ -74,7 +74,7 @@ javax.el javax.el-api - 2.2.5 + 3.0.0 test @@ -86,9 +86,9 @@ - org.glassfish.web + org.glassfish javax.el - 2.2.6 + 3.0.0 test @@ -105,6 +105,11 @@ commons-text 1.10.0 + + commons-net + commons-net + 3.9.0 + diff --git a/aws-serverless-java-container-struts/src/test/java/com/amazonaws/serverless/proxy/struts/StrutsAwsProxyTest.java b/aws-serverless-java-container-struts/src/test/java/com/amazonaws/serverless/proxy/struts/StrutsAwsProxyTest.java index d288e67e4..f48547241 100644 --- a/aws-serverless-java-container-struts/src/test/java/com/amazonaws/serverless/proxy/struts/StrutsAwsProxyTest.java +++ b/aws-serverless-java-container-struts/src/test/java/com/amazonaws/serverless/proxy/struts/StrutsAwsProxyTest.java @@ -24,7 +24,7 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.commons.codec.binary.Base64; -import org.apache.struts2.StrutsRestTestCase; +import org.apache.struts2.junit.StrutsRestTestCase; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle index d37db592f..acfa4baaf 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle @@ -18,19 +18,19 @@ dependencies { exclude group: 'org.apache.logging.log4j', module: 'log4j-api' exclude group: 'org.apache.logging.log4j', module: 'log4j-to-slf4j' } - implementation ('org.apache.struts:struts2-convention-plugin:6.0.3') { + implementation ('org.apache.struts:struts2-convention-plugin:6.1.1') { exclude group: 'org.apache.struts', module: 'struts2-core' } - implementation ('org.apache.struts:struts2-rest-plugin:6.0.3') { + implementation ('org.apache.struts:struts2-rest-plugin:6.1.1') { exclude group: 'org.apache.struts', module: 'struts2-core' } - implementation ('org.apache.struts:struts2-bean-validation-plugin:6.0.3') { + implementation ('org.apache.struts:struts2-bean-validation-plugin:6.1.1') { exclude group: 'org.apache.struts', module: 'struts2-core' } implementation ('com.jgeppert.struts2:struts2-aws-lambda-support-plugin:1.4.2') { exclude group: 'org.apache.struts', module: 'struts2-core' } - implementation ('org.apache.struts:struts2-core:6.0.3') { + implementation ('org.apache.struts:struts2-core:6.1.1') { exclude group: 'org.apache.logging.log4j', module: 'log4j-api' } implementation ('org.hibernate.validator:hibernate-validator:6.1.7.Final') @@ -42,7 +42,7 @@ dependencies { implementation ('com.amazonaws:aws-lambda-java-log4j2:1.5.1') testImplementation('junit:junit:4.13.2') - testImplementation('org.apache.struts:struts2-junit-plugin:6.0.3') { + testImplementation('org.apache.struts:struts2-junit-plugin:6.1.1') { exclude group: 'org.apache.struts', module: 'struts2-core' } } diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml index ef32c9b28..7c2710ca8 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml @@ -15,19 +15,12 @@ 1.8 1.8 - 6.0.3 + 6.1.1 2.14.0 4.13.2 2.19.0 - - - struts-staging - https://repository.apache.org/content/repositories/staging/ - - - com.amazonaws.serverless @@ -122,13 +115,13 @@ javax.el javax.el-api - 2.2.5 + 3.0.0 test - org.glassfish.web + org.glassfish javax.el - 2.2.6 + 3.0.0 test diff --git a/samples/struts/pet-store/build.gradle b/samples/struts/pet-store/build.gradle index f7d6af5e8..1de0a80e9 100644 --- a/samples/struts/pet-store/build.gradle +++ b/samples/struts/pet-store/build.gradle @@ -14,10 +14,10 @@ configurations { dependencies { implementation ( 'com.amazonaws.serverless:aws-serverless-java-container-struts:[1.9,)', - 'org.apache.struts:struts2-convention-plugin:6.0.3', - 'org.apache.struts:struts2-rest-plugin:6.0.3', - 'org.apache.struts:struts2-bean-validation-plugin:6.0.3', - 'org.apache.struts:struts2-junit-plugin:6.0.3', + 'org.apache.struts:struts2-convention-plugin:6.1.1', + 'org.apache.struts:struts2-rest-plugin:6.1.1', + 'org.apache.struts:struts2-bean-validation-plugin:6.1.1', + 'org.apache.struts:struts2-junit-plugin:6.1.1', 'com.jgeppert.struts2:struts2-aws-lambda-support-plugin:1.4.2', 'org.hibernate.validator:hibernate-validator:6.1.7.Final', 'org.glassfish:javax.el:3.0.0', diff --git a/samples/struts/pet-store/pom.xml b/samples/struts/pet-store/pom.xml index 3f6b1d7b8..025229a45 100644 --- a/samples/struts/pet-store/pom.xml +++ b/samples/struts/pet-store/pom.xml @@ -26,7 +26,7 @@ 1.8 1.8 - 6.0.3 + 6.1.1 2.14.0 4.13.2 2.19.0 From 02d3633125e6d6160cfab04304e359ff8e44aa49 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Tue, 13 Dec 2022 15:25:06 +0100 Subject: [PATCH 273/888] chore(deps): Update lambda-java-core dependency to 1.2.2 --- aws-serverless-java-container-core/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 3 +-- .../src/main/resources/archetype-resources/pom.xml | 6 ------ samples/jersey/pet-store/build.gradle | 3 +-- samples/jersey/pet-store/pom.xml | 8 +------- samples/spring/pet-store/pom.xml | 8 +------- samples/struts/pet-store/pom.xml | 6 ------ 7 files changed, 5 insertions(+), 31 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index fb4d818cc..793c82338 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -25,7 +25,7 @@ com.amazonaws aws-lambda-java-core - 1.2.1 + 1.2.2 diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle index 381bc42e6..4ca57d42e 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle @@ -7,8 +7,7 @@ repositories { dependencies { implementation ( - 'com.amazonaws:aws-lambda-java-core:1.2.1', - 'com.amazonaws.serverless:aws-serverless-java-container-jersey:[1.0,)', + 'com.amazonaws.serverless:aws-serverless-java-container-jersey:[1.9,)', 'com.fasterxml.jackson.core:jackson-databind:2.14.0', 'io.symphonia:lambda-logging:1.0.3' ) diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml index 7c2710ca8..691d65bc2 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml @@ -28,12 +28,6 @@ ${project.version} - - com.amazonaws - aws-lambda-java-core - 1.2.1 - - org.apache.struts struts2-convention-plugin diff --git a/samples/jersey/pet-store/build.gradle b/samples/jersey/pet-store/build.gradle index 10af02e06..7ed83d095 100644 --- a/samples/jersey/pet-store/build.gradle +++ b/samples/jersey/pet-store/build.gradle @@ -7,8 +7,7 @@ repositories { dependencies { implementation ( - 'com.amazonaws:aws-lambda-java-core:1.2.1', - 'com.amazonaws.serverless:aws-serverless-java-container-jersey:[1.0,)', + 'com.amazonaws.serverless:aws-serverless-java-container-jersey:[1.9,)', 'com.fasterxml.jackson.core:jackson-databind:2.14.0', 'io.symphonia:lambda-logging:1.0.3' ) diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index e24ad8223..fa317309c 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -34,13 +34,7 @@ com.amazonaws.serverless aws-serverless-java-container-jersey - [1.6,) - - - - com.amazonaws - aws-lambda-java-core - 1.2.1 + [1.9,) diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index 2d1a472f3..bffa8fcf3 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -35,13 +35,7 @@ com.amazonaws.serverless aws-serverless-java-container-spring - [1.6,) - - - - com.amazonaws - aws-lambda-java-core - 1.2.1 + [1.9,) diff --git a/samples/struts/pet-store/pom.xml b/samples/struts/pet-store/pom.xml index 025229a45..d2f597b29 100644 --- a/samples/struts/pet-store/pom.xml +++ b/samples/struts/pet-store/pom.xml @@ -39,12 +39,6 @@ [1.9,) - - com.amazonaws - aws-lambda-java-core - 1.2.1 - - org.apache.struts struts2-convention-plugin From 9430b36a67752b2071f17a5951ad7b7d70dc1cae Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Tue, 13 Dec 2022 16:35:42 +0100 Subject: [PATCH 274/888] chore(deps): update Jackson version to 2.14.1 --- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/build.gradle | 4 ++-- .../src/main/resources/archetype-resources/pom.xml | 2 +- pom.xml | 2 +- samples/jersey/pet-store/build.gradle | 2 +- samples/jersey/pet-store/pom.xml | 2 +- samples/spark/pet-store/build.gradle | 2 +- samples/spark/pet-store/pom.xml | 2 +- samples/spring/pet-store/build.gradle | 2 +- samples/struts/pet-store/build.gradle | 4 ++-- samples/struts/pet-store/pom.xml | 2 +- 15 files changed, 17 insertions(+), 17 deletions(-) diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle index 4ca57d42e..c1756d92e 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle @@ -8,7 +8,7 @@ repositories { dependencies { implementation ( 'com.amazonaws.serverless:aws-serverless-java-container-jersey:[1.9,)', - 'com.fasterxml.jackson.core:jackson-databind:2.14.0', + 'com.fasterxml.jackson.core:jackson-databind:2.14.1', 'io.symphonia:lambda-logging:1.0.3' ) diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml index 2ae636fa1..dbb4cf12c 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml @@ -15,7 +15,7 @@ 1.8 1.8 2.37 - 2.14.0 + 2.14.1 diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle index 95cf50f90..780810c90 100644 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle @@ -9,7 +9,7 @@ dependencies { implementation ( 'com.sparkjava:spark-core:2.9.4', 'com.amazonaws.serverless:aws-serverless-java-container-spark:[1.0,)', - 'com.fasterxml.jackson.core:jackson-databind:2.14.0', + 'com.fasterxml.jackson.core:jackson-databind:2.14.1', 'io.symphonia:lambda-logging:1.0.3' ) diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml index 0381379f0..9e1910aa1 100644 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 1.8 - 2.14.0 + 2.14.1 2.9.1 diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index 3e53cd649..8921a0abf 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -13,7 +13,7 @@ dependencies { 'org.apache.logging.log4j:log4j-core:2.19.0', 'org.apache.logging.log4j:log4j-api:2.19.0', 'org.apache.logging.log4j:log4j-slf4j-impl:2.19.0', - 'com.fasterxml.jackson.core:jackson-databind:2.14.0', + 'com.fasterxml.jackson.core:jackson-databind:2.14.1', 'com.amazonaws:aws-lambda-java-log4j2:1.5.1', ) diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle index acfa4baaf..34373b60a 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle @@ -34,8 +34,8 @@ dependencies { exclude group: 'org.apache.logging.log4j', module: 'log4j-api' } implementation ('org.hibernate.validator:hibernate-validator:6.1.7.Final') - implementation ('com.fasterxml.jackson.core:jackson-databind:2.14.0') - implementation ('com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.14.0') + implementation ('com.fasterxml.jackson.core:jackson-databind:2.14.1') + implementation ('com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.14.1') implementation ('org.apache.logging.log4j:log4j-core:2.19.0') implementation ('org.apache.logging.log4j:log4j-api:2.19.0') implementation ('org.apache.logging.log4j:log4j-slf4j-impl:2.19.0') diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml index 691d65bc2..d84ad1902 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 1.8 6.1.1 - 2.14.0 + 2.14.1 4.13.2 2.19.0 diff --git a/pom.xml b/pom.xml index 3e997e5ec..88f22abb6 100644 --- a/pom.xml +++ b/pom.xml @@ -82,7 +82,7 @@ 0.7 7.3.0 - 2.14.0 + 2.14.1 2.0.3 5.9.1 4.4.0 diff --git a/samples/jersey/pet-store/build.gradle b/samples/jersey/pet-store/build.gradle index 7ed83d095..ea8ee51d4 100644 --- a/samples/jersey/pet-store/build.gradle +++ b/samples/jersey/pet-store/build.gradle @@ -8,7 +8,7 @@ repositories { dependencies { implementation ( 'com.amazonaws.serverless:aws-serverless-java-container-jersey:[1.9,)', - 'com.fasterxml.jackson.core:jackson-databind:2.14.0', + 'com.fasterxml.jackson.core:jackson-databind:2.14.1', 'io.symphonia:lambda-logging:1.0.3' ) diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index fa317309c..ce0baf4c0 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -27,7 +27,7 @@ 1.8 1.8 2.37 - 2.14.0 + 2.14.1 diff --git a/samples/spark/pet-store/build.gradle b/samples/spark/pet-store/build.gradle index 053d46ecd..5087400ce 100644 --- a/samples/spark/pet-store/build.gradle +++ b/samples/spark/pet-store/build.gradle @@ -9,7 +9,7 @@ dependencies { implementation ( 'com.sparkjava:spark-core:2.9.4', 'com.amazonaws.serverless:aws-serverless-java-container-spark:[1.0,)', - 'com.fasterxml.jackson.core:jackson-databind:2.14.0', + 'com.fasterxml.jackson.core:jackson-databind:2.14.1', 'io.symphonia:lambda-logging:1.0.3' ) } diff --git a/samples/spark/pet-store/pom.xml b/samples/spark/pet-store/pom.xml index e25f0f9e4..04915a2b2 100644 --- a/samples/spark/pet-store/pom.xml +++ b/samples/spark/pet-store/pom.xml @@ -26,7 +26,7 @@ 1.8 1.8 - 2.14.0 + 2.14.1 2.9.1 diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index 838afd6ab..7dc80b04a 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -13,7 +13,7 @@ dependencies { 'org.apache.logging.log4j:log4j-core:2.19.0', 'org.apache.logging.log4j:log4j-api:2.19.0', 'org.apache.logging.log4j:log4j-slf4j-impl:2.19.0', - 'com.fasterxml.jackson.core:jackson-databind:2.14.0', + 'com.fasterxml.jackson.core:jackson-databind:2.14.1', 'com.amazonaws:aws-lambda-java-log4j2:1.5.1', ) } diff --git a/samples/struts/pet-store/build.gradle b/samples/struts/pet-store/build.gradle index 1de0a80e9..6aeff27df 100644 --- a/samples/struts/pet-store/build.gradle +++ b/samples/struts/pet-store/build.gradle @@ -22,8 +22,8 @@ dependencies { 'org.hibernate.validator:hibernate-validator:6.1.7.Final', 'org.glassfish:javax.el:3.0.0', 'javax.el:javax.el-api:3.0.0', - 'com.fasterxml.jackson.core:jackson-databind:2.14.0', - 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.14.0', + 'com.fasterxml.jackson.core:jackson-databind:2.14.1', + 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.14.1', 'org.apache.logging.log4j:log4j-core:2.19.0', 'org.apache.logging.log4j:log4j-api:2.19.0', 'com.amazonaws:aws-lambda-java-log4j2:1.5.1', diff --git a/samples/struts/pet-store/pom.xml b/samples/struts/pet-store/pom.xml index d2f597b29..a1bf62595 100644 --- a/samples/struts/pet-store/pom.xml +++ b/samples/struts/pet-store/pom.xml @@ -27,7 +27,7 @@ 1.8 1.8 6.1.1 - 2.14.0 + 2.14.1 4.13.2 2.19.0 From fda6e1d2401b3879e214c0d3c19b5f82414ff9d7 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Tue, 13 Dec 2022 16:37:25 +0100 Subject: [PATCH 275/888] chore(deps): update SLF4J to 2.0.6 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 88f22abb6..5ccd7c99b 100644 --- a/pom.xml +++ b/pom.xml @@ -83,7 +83,7 @@ 0.7 7.3.0 2.14.1 - 2.0.3 + 2.0.6 5.9.1 4.4.0 1.3 From da1f403c5155d89a7e60c5d24dfcaf57a98b0e32 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Tue, 13 Dec 2022 16:53:28 +0100 Subject: [PATCH 276/888] chore(deps): Update Spring dependencies (framework to 5.3.24, security to 5.7.5, boot to 2.7.6) --- aws-serverless-java-container-core/pom.xml | 2 +- aws-serverless-java-container-spring/pom.xml | 4 ++-- aws-serverless-java-container-springboot2/pom.xml | 6 +++--- .../src/main/resources/archetype-resources/build.gradle | 4 ++-- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/spring/pet-store/build.gradle | 4 ++-- samples/spring/pet-store/pom.xml | 2 +- samples/springboot2/pet-store/build.gradle | 2 +- samples/springboot2/pet-store/pom.xml | 2 +- 11 files changed, 16 insertions(+), 16 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 793c82338..7e531095f 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -110,7 +110,7 @@ org.springframework.security spring-security-web - 5.7.4 + 5.7.5 test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index be0c1d9f0..4f6c60033 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -16,8 +16,8 @@ - 5.3.23 - 5.7.4 + 5.3.24 + 5.7.5 diff --git a/aws-serverless-java-container-springboot2/pom.xml b/aws-serverless-java-container-springboot2/pom.xml index 31e90b99e..98662d22b 100644 --- a/aws-serverless-java-container-springboot2/pom.xml +++ b/aws-serverless-java-container-springboot2/pom.xml @@ -15,9 +15,9 @@ 1.10-SNAPSHOT - 5.3.23 - 2.7.5 - 5.7.4 + 5.3.24 + 2.7.6 + 5.7.5 1.8 1.8 diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index 8921a0abf..24743ce1f 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -7,8 +7,8 @@ repositories { dependencies { implementation ( - 'org.springframework:spring-webmvc:5.3.23', - 'org.springframework:spring-context:5.3.23', + 'org.springframework:spring-webmvc:5.3.24', + 'org.springframework:spring-context:5.3.24', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[1.0,)', 'org.apache.logging.log4j:log4j-core:2.19.0', 'org.apache.logging.log4j:log4j-api:2.19.0', diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index 5491fbb62..69db642a0 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 1.8 - 5.3.23 + 5.3.24 4.13.2 2.19.0 diff --git a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle index 73c0bdb60..bbf0b8707 100644 --- a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle @@ -8,7 +8,7 @@ repositories { dependencies { implementation ( - 'org.springframework.boot:spring-boot-starter-web:2.7.5', + 'org.springframework.boot:spring-boot-starter-web:2.7.6', 'com.amazonaws.serverless:aws-serverless-java-container-springboot2:[1.0,)', 'io.symphonia:lambda-logging:1.0.3' ) diff --git a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml index 9a0b4123a..17a1419b9 100644 --- a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ org.springframework.boot spring-boot-starter-parent - 2.7.5 + 2.7.6 diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index 7dc80b04a..7d51cc703 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -7,8 +7,8 @@ repositories { dependencies { implementation ( - 'org.springframework:spring-webmvc:5.3.23', - 'org.springframework:spring-context:5.3.23', + 'org.springframework:spring-webmvc:5.3.24', + 'org.springframework:spring-context:5.3.24', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[1.0,)', 'org.apache.logging.log4j:log4j-core:2.19.0', 'org.apache.logging.log4j:log4j-api:2.19.0', diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index bffa8fcf3..4b54b0da5 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -26,7 +26,7 @@ 1.8 1.8 - 5.3.23 + 5.3.24 4.13.2 2.19.0 diff --git a/samples/springboot2/pet-store/build.gradle b/samples/springboot2/pet-store/build.gradle index 22989c9e9..c0dddba8a 100644 --- a/samples/springboot2/pet-store/build.gradle +++ b/samples/springboot2/pet-store/build.gradle @@ -8,7 +8,7 @@ repositories { dependencies { implementation ( - implementation('org.springframework.boot:spring-boot-starter-web:2.7.5') { + implementation('org.springframework.boot:spring-boot-starter-web:2.7.6') { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat' }, 'com.amazonaws.serverless:aws-serverless-java-container-springboot2:[1.4,)', diff --git a/samples/springboot2/pet-store/pom.xml b/samples/springboot2/pet-store/pom.xml index 8f7150db7..bf9cf13f6 100644 --- a/samples/springboot2/pet-store/pom.xml +++ b/samples/springboot2/pet-store/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 2.7.5 + 2.7.6 From f170312f9834a2692eb38475b07323e26497d086 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Wed, 14 Dec 2022 08:53:18 +0100 Subject: [PATCH 277/888] chore(deps): Update Mockito dependency to 4.9.0 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 5ccd7c99b..319ab6f95 100644 --- a/pom.xml +++ b/pom.xml @@ -85,7 +85,7 @@ 2.14.1 2.0.6 5.9.1 - 4.4.0 + 4.9.0 1.3 UTF-8 From 2c038683af19698af01962be7974179ee0b27728 Mon Sep 17 00:00:00 2001 From: anmolk6 <65782524+anmolk6@users.noreply.github.com> Date: Wed, 14 Dec 2022 14:14:13 +0530 Subject: [PATCH 278/888] Fixing NullpointerException in case of non defined statusCode (#497) pdating AwsProxyHttpServletResponseWriter.java Fix provided for #497 This is to resolve NullPointerException when HttpStatusCode is not present in default enum Response.StatusType --- .../servlet/AwsProxyHttpServletResponseWriter.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletResponseWriter.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletResponseWriter.java index 524a36f96..b6061e1e7 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletResponseWriter.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletResponseWriter.java @@ -17,13 +17,13 @@ import com.amazonaws.serverless.proxy.ResponseWriter; import com.amazonaws.serverless.proxy.internal.LambdaContainerHandler; import com.amazonaws.serverless.proxy.internal.testutils.Timer; -import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.serverless.proxy.model.AwsProxyResponse; import com.amazonaws.serverless.proxy.model.Headers; import com.amazonaws.serverless.proxy.model.RequestSource; import com.amazonaws.services.lambda.runtime.Context; import javax.ws.rs.core.Response; +import javax.ws.rs.core.Response.Status; import java.util.Base64; import java.util.HashMap; @@ -74,8 +74,11 @@ public AwsProxyResponse writeResponse(AwsHttpServletResponse containerResponse, awsProxyResponse.setStatusCode(containerResponse.getStatus()); - if (containerResponse.getAwsProxyRequest() != null && containerResponse.getAwsProxyRequest().getRequestSource() == RequestSource.ALB) { - awsProxyResponse.setStatusDescription(containerResponse.getStatus() + " " + Response.Status.fromStatusCode(containerResponse.getStatus()).getReasonPhrase()); + Status responseStatus = Response.Status.fromStatusCode(containerResponse.getStatus()); + + if (containerResponse.getAwsProxyRequest() != null && containerResponse.getAwsProxyRequest().getRequestSource() == RequestSource.ALB + && responseStatus != null) { + awsProxyResponse.setStatusDescription(containerResponse.getStatus() + " " + responseStatus.getReasonPhrase()); } Timer.stop("SERVLET_RESPONSE_WRITE"); From 90671a8a9bbf282679f8033158a5f32b498fb8b9 Mon Sep 17 00:00:00 2001 From: deki Date: Wed, 14 Dec 2022 09:03:13 +0000 Subject: [PATCH 279/888] chore: release -prepare release aws-serverless-java-container-1.9.1 --- aws-serverless-java-container-core/pom.xml | 4 ++-- aws-serverless-java-container-jersey/pom.xml | 6 +++--- aws-serverless-java-container-spark/pom.xml | 6 +++--- aws-serverless-java-container-spring/pom.xml | 6 +++--- aws-serverless-java-container-springboot2/pom.xml | 6 +++--- aws-serverless-java-container-struts/pom.xml | 6 +++--- aws-serverless-jersey-archetype/pom.xml | 6 +++--- aws-serverless-spark-archetype/pom.xml | 6 +++--- aws-serverless-spring-archetype/pom.xml | 6 +++--- aws-serverless-springboot2-archetype/pom.xml | 6 +++--- aws-serverless-struts-archetype/pom.xml | 6 +++--- pom.xml | 4 ++-- 12 files changed, 34 insertions(+), 34 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 7e531095f..cc5efc06a 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Core Allows Java applications written for a servlet container to run in AWS Lambda https://aws.amazon.com/lambda - 1.10-SNAPSHOT + 1.9.1 com.amazonaws.serverless aws-serverless-java-container - 1.10-SNAPSHOT + 1.9.1 .. diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index 2d491078f..0419dc2e6 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Jersey implementation Allows Java applications written for Jersey to run in AWS Lambda https://aws.amazon.com/lambda - 1.10-SNAPSHOT + 1.9.1 com.amazonaws.serverless aws-serverless-java-container - 1.10-SNAPSHOT + 1.9.1 .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.10-SNAPSHOT + 1.9.1 com.fasterxml.jackson.core diff --git a/aws-serverless-java-container-spark/pom.xml b/aws-serverless-java-container-spark/pom.xml index f5ea6b868..f6071ca50 100644 --- a/aws-serverless-java-container-spark/pom.xml +++ b/aws-serverless-java-container-spark/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spark implementation Allows Java applications written for Spark to run in AWS Lambda https://aws.amazon.com/lambda - 1.10-SNAPSHOT + 1.9.1 com.amazonaws.serverless aws-serverless-java-container - 1.10-SNAPSHOT + 1.9.1 .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.10-SNAPSHOT + 1.9.1 diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 4f6c60033..49706b995 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spring implementation Allows Java applications written for the Spring framework to run in AWS Lambda https://aws.amazon.com/lambda - 1.10-SNAPSHOT + 1.9.1 com.amazonaws.serverless aws-serverless-java-container - 1.10-SNAPSHOT + 1.9.1 .. @@ -25,7 +25,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.10-SNAPSHOT + 1.9.1 diff --git a/aws-serverless-java-container-springboot2/pom.xml b/aws-serverless-java-container-springboot2/pom.xml index 98662d22b..8f7c4cbe3 100644 --- a/aws-serverless-java-container-springboot2/pom.xml +++ b/aws-serverless-java-container-springboot2/pom.xml @@ -3,7 +3,7 @@ aws-serverless-java-container com.amazonaws.serverless - 1.10-SNAPSHOT + 1.9.1 4.0.0 @@ -12,7 +12,7 @@ AWS Serverless Java container support - SpringBoot 2 implementation Allows Java applications written for SpringBoot 2 to run in AWS Lambda https://aws.amazon.com/lambda - 1.10-SNAPSHOT + 1.9.1 5.3.24 @@ -27,7 +27,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.10-SNAPSHOT + 1.9.1 diff --git a/aws-serverless-java-container-struts/pom.xml b/aws-serverless-java-container-struts/pom.xml index c42747a7f..ea9ea1ab2 100644 --- a/aws-serverless-java-container-struts/pom.xml +++ b/aws-serverless-java-container-struts/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Struts implementation Allows Java applications written for the Struts framework to run in AWS Lambda https://aws.amazon.com/lambda - 1.10-SNAPSHOT + 1.9.1 com.amazonaws.serverless aws-serverless-java-container - 1.10-SNAPSHOT + 1.9.1 @@ -23,7 +23,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.10-SNAPSHOT + 1.9.1 diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index c13c05869..264ee5bad 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.10-SNAPSHOT + 1.9.1 com.amazonaws.serverless.archetypes aws-serverless-jersey-archetype - 1.10-SNAPSHOT + 1.9.1 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.9.1 diff --git a/aws-serverless-spark-archetype/pom.xml b/aws-serverless-spark-archetype/pom.xml index ca3ad3952..843a05bc4 100644 --- a/aws-serverless-spark-archetype/pom.xml +++ b/aws-serverless-spark-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.10-SNAPSHOT + 1.9.1 com.amazonaws.serverless.archetypes aws-serverless-spark-archetype - 1.10-SNAPSHOT + 1.9.1 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.9.1 diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index 83dc79743..24f665610 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.10-SNAPSHOT + 1.9.1 com.amazonaws.serverless.archetypes aws-serverless-spring-archetype - 1.10-SNAPSHOT + 1.9.1 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.9.1 diff --git a/aws-serverless-springboot2-archetype/pom.xml b/aws-serverless-springboot2-archetype/pom.xml index 1e7279dbf..5b14469e9 100644 --- a/aws-serverless-springboot2-archetype/pom.xml +++ b/aws-serverless-springboot2-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.10-SNAPSHOT + 1.9.1 com.amazonaws.serverless.archetypes aws-serverless-springboot2-archetype - 1.10-SNAPSHOT + 1.9.1 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.9.1 diff --git a/aws-serverless-struts-archetype/pom.xml b/aws-serverless-struts-archetype/pom.xml index b91cfa4bd..eee02b4da 100644 --- a/aws-serverless-struts-archetype/pom.xml +++ b/aws-serverless-struts-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.10-SNAPSHOT + 1.9.1 com.amazonaws.serverless.archetypes aws-serverless-struts-archetype - 1.10-SNAPSHOT + 1.9.1 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.9.1 diff --git a/pom.xml b/pom.xml index 319ab6f95..3be7fe025 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazonaws.serverless aws-serverless-java-container pom - 1.10-SNAPSHOT + 1.9.1 AWS Serverless Java container A Java framework to run Spring, Spring Boot, Jersey, Spark, and Struts applications inside AWS Lambda https://github.com/awslabs/aws-serverless-java-container @@ -41,7 +41,7 @@ https://github.com/awslabs/aws-serverless-java-container scm:git:https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.9.1 From 13a93a36a6283775e74ce7b56f1ab91cd0ddccb6 Mon Sep 17 00:00:00 2001 From: deki Date: Wed, 14 Dec 2022 09:03:16 +0000 Subject: [PATCH 280/888] chore: release -prepare for next development iteration --- aws-serverless-java-container-core/pom.xml | 4 ++-- aws-serverless-java-container-jersey/pom.xml | 6 +++--- aws-serverless-java-container-spark/pom.xml | 6 +++--- aws-serverless-java-container-spring/pom.xml | 6 +++--- aws-serverless-java-container-springboot2/pom.xml | 6 +++--- aws-serverless-java-container-struts/pom.xml | 6 +++--- aws-serverless-jersey-archetype/pom.xml | 6 +++--- aws-serverless-spark-archetype/pom.xml | 6 +++--- aws-serverless-spring-archetype/pom.xml | 6 +++--- aws-serverless-springboot2-archetype/pom.xml | 6 +++--- aws-serverless-struts-archetype/pom.xml | 6 +++--- pom.xml | 4 ++-- 12 files changed, 34 insertions(+), 34 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index cc5efc06a..7e531095f 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Core Allows Java applications written for a servlet container to run in AWS Lambda https://aws.amazon.com/lambda - 1.9.1 + 1.10-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.9.1 + 1.10-SNAPSHOT .. diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index 0419dc2e6..2d491078f 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Jersey implementation Allows Java applications written for Jersey to run in AWS Lambda https://aws.amazon.com/lambda - 1.9.1 + 1.10-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.9.1 + 1.10-SNAPSHOT .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.9.1 + 1.10-SNAPSHOT com.fasterxml.jackson.core diff --git a/aws-serverless-java-container-spark/pom.xml b/aws-serverless-java-container-spark/pom.xml index f6071ca50..f5ea6b868 100644 --- a/aws-serverless-java-container-spark/pom.xml +++ b/aws-serverless-java-container-spark/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spark implementation Allows Java applications written for Spark to run in AWS Lambda https://aws.amazon.com/lambda - 1.9.1 + 1.10-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.9.1 + 1.10-SNAPSHOT .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.9.1 + 1.10-SNAPSHOT diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 49706b995..4f6c60033 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spring implementation Allows Java applications written for the Spring framework to run in AWS Lambda https://aws.amazon.com/lambda - 1.9.1 + 1.10-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.9.1 + 1.10-SNAPSHOT .. @@ -25,7 +25,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.9.1 + 1.10-SNAPSHOT diff --git a/aws-serverless-java-container-springboot2/pom.xml b/aws-serverless-java-container-springboot2/pom.xml index 8f7c4cbe3..98662d22b 100644 --- a/aws-serverless-java-container-springboot2/pom.xml +++ b/aws-serverless-java-container-springboot2/pom.xml @@ -3,7 +3,7 @@ aws-serverless-java-container com.amazonaws.serverless - 1.9.1 + 1.10-SNAPSHOT 4.0.0 @@ -12,7 +12,7 @@ AWS Serverless Java container support - SpringBoot 2 implementation Allows Java applications written for SpringBoot 2 to run in AWS Lambda https://aws.amazon.com/lambda - 1.9.1 + 1.10-SNAPSHOT 5.3.24 @@ -27,7 +27,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.9.1 + 1.10-SNAPSHOT diff --git a/aws-serverless-java-container-struts/pom.xml b/aws-serverless-java-container-struts/pom.xml index ea9ea1ab2..c42747a7f 100644 --- a/aws-serverless-java-container-struts/pom.xml +++ b/aws-serverless-java-container-struts/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Struts implementation Allows Java applications written for the Struts framework to run in AWS Lambda https://aws.amazon.com/lambda - 1.9.1 + 1.10-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.9.1 + 1.10-SNAPSHOT @@ -23,7 +23,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.9.1 + 1.10-SNAPSHOT diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index 264ee5bad..c13c05869 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.9.1 + 1.10-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-jersey-archetype - 1.9.1 + 1.10-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.9.1 + HEAD diff --git a/aws-serverless-spark-archetype/pom.xml b/aws-serverless-spark-archetype/pom.xml index 843a05bc4..ca3ad3952 100644 --- a/aws-serverless-spark-archetype/pom.xml +++ b/aws-serverless-spark-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.9.1 + 1.10-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-spark-archetype - 1.9.1 + 1.10-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.9.1 + HEAD diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index 24f665610..83dc79743 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.9.1 + 1.10-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-spring-archetype - 1.9.1 + 1.10-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.9.1 + HEAD diff --git a/aws-serverless-springboot2-archetype/pom.xml b/aws-serverless-springboot2-archetype/pom.xml index 5b14469e9..1e7279dbf 100644 --- a/aws-serverless-springboot2-archetype/pom.xml +++ b/aws-serverless-springboot2-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.9.1 + 1.10-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-springboot2-archetype - 1.9.1 + 1.10-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.9.1 + HEAD diff --git a/aws-serverless-struts-archetype/pom.xml b/aws-serverless-struts-archetype/pom.xml index eee02b4da..b91cfa4bd 100644 --- a/aws-serverless-struts-archetype/pom.xml +++ b/aws-serverless-struts-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.9.1 + 1.10-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-struts-archetype - 1.9.1 + 1.10-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.9.1 + HEAD diff --git a/pom.xml b/pom.xml index 3be7fe025..319ab6f95 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazonaws.serverless aws-serverless-java-container pom - 1.9.1 + 1.10-SNAPSHOT AWS Serverless Java container A Java framework to run Spring, Spring Boot, Jersey, Spark, and Struts applications inside AWS Lambda https://github.com/awslabs/aws-serverless-java-container @@ -41,7 +41,7 @@ https://github.com/awslabs/aws-serverless-java-container scm:git:https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.9.1 + HEAD From be15cfd056efc5de1ce2b8cc100db35879fad993 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Wed, 14 Dec 2022 10:39:29 +0100 Subject: [PATCH 281/888] chore(deps): Update OWASP dependency check to 7.4.1 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 319ab6f95..48f6ea9d3 100644 --- a/pom.xml +++ b/pom.xml @@ -81,7 +81,7 @@ 0.7 - 7.3.0 + 7.4.1 2.14.1 2.0.6 5.9.1 From 03db37c35242464ece681f4a49fba5af74d4a5b4 Mon Sep 17 00:00:00 2001 From: Artur Signell Date: Fri, 3 Feb 2023 14:40:46 +0200 Subject: [PATCH 282/888] fix: Write resources using the charset defined in a Content-Type header If a resource is returned using "application/javascript; charset=UTF-8" it should not be written as ISO-8859-1 --- .../internal/servlet/AwsHttpServletResponse.java | 6 +++++- .../servlet/AwsHttpServletResponseTest.java | 14 ++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponse.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponse.java index 63a2dca80..fc03922ce 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponse.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponse.java @@ -213,7 +213,11 @@ public void addDateHeader(String s, long l) { @Override public void setHeader(String s, String s1) { if (!canSetHeader()) return; - setHeader(s, s1, true); + if ("Content-Type".equalsIgnoreCase(s)) { + setContentType(s1); + } else { + setHeader(s, s1, true); + } } diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponseTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponseTest.java index 8a1d8f1e6..39fe7144b 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponseTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponseTest.java @@ -12,6 +12,7 @@ import java.io.IOException; import java.io.PrintWriter; +import java.nio.charset.StandardCharsets; import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.Instant; @@ -38,6 +39,7 @@ public class AwsHttpServletResponseTest { private static final Pattern EXPIRES_PATTERN = Pattern.compile("Expires=(.*)$"); private static final String CONTENT_TYPE_WITH_CHARSET = "application/json; charset=UTF-8"; + private static final String JAVASCRIPT_CONTENT_TYPE_WITH_CHARSET = "application/javascript; charset=UTF-8"; @Test void cookie_addCookie_verifyPath() { @@ -325,6 +327,18 @@ void characterEncoding_setCharacterEncodingInContentType_overridesDefault() { assertEquals("UTF-8", resp.getCharacterEncoding()); } + @Test + void characterEncoding_encodingInContentTypeHeader_writesCorrectData() throws IOException { + AwsHttpServletResponse resp = new AwsHttpServletResponse(null, new CountDownLatch(1)); + resp.setHeader("Content-Type", JAVASCRIPT_CONTENT_TYPE_WITH_CHARSET); + resp.getOutputStream().write("ü".getBytes(StandardCharsets.UTF_8)); + resp.flushBuffer(); + + assertEquals(JAVASCRIPT_CONTENT_TYPE_WITH_CHARSET, resp.getContentType()); + assertEquals(JAVASCRIPT_CONTENT_TYPE_WITH_CHARSET, resp.getHeader("Content-Type")); + assertEquals("ü",resp.getAwsResponseBodyString()); + } + private int getMaxAge(String header) { Matcher ageMatcher = MAX_AGE_PATTERN.matcher(header); assertTrue(ageMatcher.find()); From f1755de81b0de38c42722fcd16df94e0ea3b9988 Mon Sep 17 00:00:00 2001 From: Artur Signell Date: Fri, 3 Feb 2023 15:08:30 +0200 Subject: [PATCH 283/888] fix: Dispatch to the given servlet when using getNamedDispatcher --- .../servlet/AwsProxyRequestDispatcher.java | 7 ++- .../internal/servlet/AwsServletContext.java | 2 +- .../internal/servlet/FilterChainManager.java | 26 +++++++-- .../proxy/internal/testutils/MockServlet.java | 23 ++++++++ .../servlet/AwsFilterChainManagerTest.java | 53 ++++++++++++++++++- .../servlet/AwsServletContextTest.java | 18 +++---- 6 files changed, 111 insertions(+), 18 deletions(-) create mode 100644 aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/testutils/MockServlet.java diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyRequestDispatcher.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyRequestDispatcher.java index 27a352ebf..fc52d1dba 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyRequestDispatcher.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyRequestDispatcher.java @@ -80,7 +80,7 @@ public void forward(ServletRequest servletRequest, ServletResponse servletRespon } if (isNamedDispatcher) { - lambdaContainerHandler.doFilter((HttpServletRequest) servletRequest, (HttpServletResponse) servletResponse, getServlet((HttpServletRequest)servletRequest)); + lambdaContainerHandler.doFilter((HttpServletRequest) servletRequest, (HttpServletResponse) servletResponse, getServlet(dispatchTo)); return; } @@ -148,4 +148,9 @@ void setRequestPath(ServletRequest req, final String destinationPath) { private Servlet getServlet(HttpServletRequest req) { return ((AwsServletContext)lambdaContainerHandler.getServletContext()).getServletForPath(req.getPathInfo()); } + + private Servlet getServlet(String servletName) throws ServletException { + return ((AwsServletContext)lambdaContainerHandler.getServletContext()).getServlet(servletName); + } + } diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java index 864a9bf10..44ec701ee 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java @@ -171,7 +171,7 @@ public RequestDispatcher getRequestDispatcher(String s) { @Override public RequestDispatcher getNamedDispatcher(String s) { - throw new UnsupportedOperationException(); + return new AwsProxyRequestDispatcher(s, true, containerHandler); } diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/FilterChainManager.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/FilterChainManager.java index 92ff55daf..1bf6f4b2a 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/FilterChainManager.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/FilterChainManager.java @@ -132,7 +132,7 @@ FilterChainHolder getFilterChain(final HttpServletRequest request, Servlet servl chainHolder.addFilter(new FilterHolder(new ServletExecutionFilter(servletRegistration), servletContext)); } - putFilterChainCache(type, targetPath, chainHolder); + putFilterChainCache(type, targetPath, servlet, chainHolder); // update total filter size if (filtersSize != registrations.size()) { filtersSize = registrations.size(); @@ -151,13 +151,16 @@ FilterChainHolder getFilterChain(final HttpServletRequest request, Servlet servl * initialized with the cached list of {@link FilterHolder} objects * @param type The dispatcher type for the incoming request * @param targetPath The request path - this is extracted with the getPath method of the request object - * @param servlet Servlet to put at the end of the chain (optional). + * @param servlet The final servlet in the filter chain (if any) * @return A populated FilterChainHolder */ private FilterChainHolder getFilterChainCache(final DispatcherType type, final String targetPath, Servlet servlet) { TargetCacheKey key = new TargetCacheKey(); key.setDispatcherType(type); key.setTargetPath(targetPath); + if (servlet != null) { + key.setServletName(servlet.getServletConfig().getServletName()); + } if (!filterCache.containsKey(key)) { return null; @@ -174,12 +177,16 @@ private FilterChainHolder getFilterChainCache(final DispatcherType type, final S * method to retry this. * @param type DispatcherType from the incoming request * @param targetPath The target path in the API - * @param holder The FilterChainHolder object to save in the cache + * @param servlet The final servlet in the filter chain (if any) + * @param holder The FilterChainHolder object to save in the cache */ - private void putFilterChainCache(final DispatcherType type, final String targetPath, final FilterChainHolder holder) { + private void putFilterChainCache(final DispatcherType type, final String targetPath, Servlet servlet, final FilterChainHolder holder) { TargetCacheKey key = new TargetCacheKey(); key.setDispatcherType(type); key.setTargetPath(targetPath); + if (servlet != null) { + key.setServletName(servlet.getServletConfig().getServletName()); + } // we couldn't compute the hash code because either the target path or dispatcher type were null if (key.hashCode() == -1) { @@ -256,6 +263,7 @@ protected static class TargetCacheKey { private String targetPath; private DispatcherType dispatcherType; + private String servletName; //------------------------------------------------------------- @@ -295,10 +303,15 @@ public int hashCode() { } hashString += ":" + hashDispatcher; + if (servletName != null) { + hashString += ":" + servletName; + } + return hashString.hashCode(); } + @Override public boolean equals(Object key) { if (key == null) { @@ -324,6 +337,11 @@ void setTargetPath(String targetPath) { void setDispatcherType(DispatcherType dispatcherType) { this.dispatcherType = dispatcherType; } + public void setServletName(String servletName) { + this.servletName = servletName; + } + + } @SuppressFBWarnings("URF_UNREAD_FIELD") diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/testutils/MockServlet.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/testutils/MockServlet.java new file mode 100644 index 000000000..b93625bfb --- /dev/null +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/testutils/MockServlet.java @@ -0,0 +1,23 @@ +package com.amazonaws.serverless.proxy.internal.testutils; + +import java.io.IOException; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +public class MockServlet extends HttpServlet { + + private int serviceCalls = 0; + + @Override + protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { + super.service(req, resp); + serviceCalls++; + } + + public int getServiceCalls() { + return serviceCalls; + } +} diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsFilterChainManagerTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsFilterChainManagerTest.java index 882aa085c..4eedc0f93 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsFilterChainManagerTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsFilterChainManagerTest.java @@ -2,6 +2,7 @@ import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; import com.amazonaws.serverless.proxy.internal.testutils.MockLambdaContext; +import com.amazonaws.serverless.proxy.internal.testutils.MockServlet; import com.amazonaws.services.lambda.runtime.Context; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; @@ -17,6 +18,8 @@ import static org.junit.jupiter.api.Assertions.*; public class AwsFilterChainManagerTest { + private static final String SERVLET1_NAME = "Servlet 1"; + private static final String SERVLET2_NAME = "Servlet 2"; private static final String REQUEST_CUSTOM_ATTRIBUTE_NAME = "X-Custom-Attribute"; private static final String REQUEST_CUSTOM_ATTRIBUTE_VALUE = "CustomAttrValue"; @@ -36,6 +39,10 @@ public static void setUp() { reg2.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), true, "/second/*"); FilterRegistration.Dynamic reg3 = servletContext.addFilter("Filter3", new MockFilter()); reg3.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), true, "/third/fourth/*"); + ServletRegistration.Dynamic firstServlet = servletContext.addServlet(SERVLET1_NAME, new MockServlet()); + firstServlet.addMapping("/first/*"); + ServletRegistration.Dynamic secondServlet = servletContext.addServlet(SERVLET2_NAME, new MockServlet()); + secondServlet.addMapping("/second/*"); chainManager = new AwsFilterChainManager((AwsServletContext) servletContext); } @@ -88,6 +95,22 @@ void cacheKey_compare_differentDispatcher() { assertNotEquals(cacheKey, secondCacheKey); } + @Test + void cacheKey_compare_differentServlet() { + FilterChainManager.TargetCacheKey cacheKey = new FilterChainManager.TargetCacheKey(); + cacheKey.setDispatcherType(DispatcherType.REQUEST); + cacheKey.setTargetPath("/first/path"); + cacheKey.setServletName("Dispatcher servlet"); + + FilterChainManager.TargetCacheKey secondCacheKey = new FilterChainManager.TargetCacheKey(); + secondCacheKey.setDispatcherType(DispatcherType.REQUEST); + secondCacheKey.setTargetPath("/first/path"); + cacheKey.setServletName("Real servlet"); + + assertNotEquals(cacheKey.hashCode(), secondCacheKey.hashCode()); + assertNotEquals(cacheKey, secondCacheKey); + } + @Test void cacheKey_compare_additionalChars() { FilterChainManager.TargetCacheKey cacheKey = new FilterChainManager.TargetCacheKey(); @@ -154,7 +177,7 @@ void filterChain_matchMultipleTimes_expectSameMatch() { } @Test - void filerChain_executeMultipleFilters_expectRunEachTime() { + void filterChain_executeMultipleFilters_expectRunEachTime() { AwsProxyHttpServletRequest req = new AwsProxyHttpServletRequest( new AwsProxyRequestBuilder("/first/second", "GET").build(), lambdaContext, null ); @@ -204,6 +227,34 @@ void filerChain_executeMultipleFilters_expectRunEachTime() { assertEquals(REQUEST_CUSTOM_ATTRIBUTE_VALUE, req2.getAttribute(REQUEST_CUSTOM_ATTRIBUTE_NAME)); } + @Test + void filterChain_multipleServlets_callsCorrectServlet() throws IOException, ServletException { + MockServlet servlet1 = (MockServlet) servletContext.getServlet(SERVLET1_NAME); + ServletConfig servlet1Config = ((AwsServletRegistration) servletContext.getServletRegistration(SERVLET1_NAME)).getServletConfig(); + servlet1.init(servlet1Config); + + MockServlet servlet2 = (MockServlet) servletContext.getServlet(SERVLET2_NAME); + ServletConfig servlet2Config = ((AwsServletRegistration) servletContext.getServletRegistration(SERVLET2_NAME)).getServletConfig(); + servlet2.init(servlet2Config); + + AwsProxyHttpServletRequest req = new AwsProxyHttpServletRequest( + new AwsProxyRequestBuilder("/", "GET").build(), lambdaContext, null + ); + AwsHttpServletResponse resp = new AwsHttpServletResponse(req, new CountDownLatch(1)); + + FilterChainHolder servlet1filterChain = chainManager.getFilterChain(req, servlet1); + servlet1filterChain.doFilter(req, resp); + + assertEquals(1, servlet1.getServiceCalls()); + assertEquals(0, servlet2.getServiceCalls()); + + FilterChainHolder servlet2filterChain = chainManager.getFilterChain(req, servlet2); + servlet2filterChain.doFilter(req, resp); + + assertEquals(1, servlet1.getServiceCalls()); + assertEquals(1, servlet2.getServiceCalls()); + } + @Test void filterChain_getFilterChain_multipleFilters() { AwsProxyHttpServletRequest req = new AwsProxyHttpServletRequest( diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContextTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContextTest.java index 5c84bca30..35f6723b6 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContextTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContextTest.java @@ -13,12 +13,7 @@ import javax.servlet.http.HttpServletResponse; import java.io.File; -import java.io.FileNotFoundException; import java.io.IOException; -import java.io.PrintWriter; -import java.io.UnsupportedEncodingException; -import java.nio.file.Files; -import java.nio.file.Paths; import java.util.concurrent.CountDownLatch; import static org.junit.jupiter.api.Assertions.*; @@ -190,12 +185,7 @@ void unsupportedOperations_expectExceptions() { } catch (UnsupportedOperationException e) { exCount++; } - try { - STATIC_CTX.getNamedDispatcher("1"); - } catch (UnsupportedOperationException e) { - exCount++; - } - assertEquals(2, exCount); + assertEquals(1, exCount); assertNull(STATIC_CTX.getServletRegistration("1")); } @@ -232,6 +222,12 @@ void addServlet_callsDefaultConstructor() throws ServletException { assertEquals("", ((TestServlet)ctx.getServlet("srv1")).getId()); } + @Test + void getNamedDispatcher_returnsDispatcher() { + AwsServletContext ctx = new AwsServletContext(null); + assertNotNull(ctx.getNamedDispatcher("/hello")); + } + public static class TestServlet implements Servlet { private String id; From ff842c4f0f9177488014f8ffc3f3894a43a2d026 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 3 Feb 2023 16:13:12 +0100 Subject: [PATCH 284/888] chore(deps): Update Junit to 5.9.2 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 48f6ea9d3..6aaf501d5 100644 --- a/pom.xml +++ b/pom.xml @@ -84,7 +84,7 @@ 7.4.1 2.14.1 2.0.6 - 5.9.1 + 5.9.2 4.9.0 1.3 UTF-8 From 65d12c2f1335e7f63ddbce29fd2268c12c9b2b6a Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 3 Feb 2023 16:15:56 +0100 Subject: [PATCH 285/888] chore(deps): Update Spring dependencies (framework to 5.3.25, security to 5.7.6, boot to 2.7.8) --- aws-serverless-java-container-core/pom.xml | 2 +- aws-serverless-java-container-spring/pom.xml | 4 ++-- aws-serverless-java-container-springboot2/pom.xml | 6 +++--- .../src/main/resources/archetype-resources/build.gradle | 4 ++-- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/spring/pet-store/build.gradle | 4 ++-- samples/spring/pet-store/pom.xml | 2 +- samples/springboot2/pet-store/build.gradle | 2 +- samples/springboot2/pet-store/pom.xml | 2 +- 11 files changed, 16 insertions(+), 16 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 7e531095f..87bbb7927 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -110,7 +110,7 @@ org.springframework.security spring-security-web - 5.7.5 + 5.7.6 test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 4f6c60033..4aa95970f 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -16,8 +16,8 @@ - 5.3.24 - 5.7.5 + 5.3.25 + 5.7.6 diff --git a/aws-serverless-java-container-springboot2/pom.xml b/aws-serverless-java-container-springboot2/pom.xml index 98662d22b..1d7fffd44 100644 --- a/aws-serverless-java-container-springboot2/pom.xml +++ b/aws-serverless-java-container-springboot2/pom.xml @@ -15,9 +15,9 @@ 1.10-SNAPSHOT - 5.3.24 - 2.7.6 - 5.7.5 + 5.3.25 + 2.7.8 + 5.7.6 1.8 1.8 diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index 24743ce1f..319a102d5 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -7,8 +7,8 @@ repositories { dependencies { implementation ( - 'org.springframework:spring-webmvc:5.3.24', - 'org.springframework:spring-context:5.3.24', + 'org.springframework:spring-webmvc:5.3.25', + 'org.springframework:spring-context:5.3.25', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[1.0,)', 'org.apache.logging.log4j:log4j-core:2.19.0', 'org.apache.logging.log4j:log4j-api:2.19.0', diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index 69db642a0..855e267d3 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 1.8 - 5.3.24 + 5.3.25 4.13.2 2.19.0 diff --git a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle index bbf0b8707..b47ce60a8 100644 --- a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle @@ -8,7 +8,7 @@ repositories { dependencies { implementation ( - 'org.springframework.boot:spring-boot-starter-web:2.7.6', + 'org.springframework.boot:spring-boot-starter-web:2.7.8', 'com.amazonaws.serverless:aws-serverless-java-container-springboot2:[1.0,)', 'io.symphonia:lambda-logging:1.0.3' ) diff --git a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml index 17a1419b9..b4ad6174f 100644 --- a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ org.springframework.boot spring-boot-starter-parent - 2.7.6 + 2.7.8 diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index 7d51cc703..057ca5c70 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -7,8 +7,8 @@ repositories { dependencies { implementation ( - 'org.springframework:spring-webmvc:5.3.24', - 'org.springframework:spring-context:5.3.24', + 'org.springframework:spring-webmvc:5.3.25', + 'org.springframework:spring-context:5.3.25', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[1.0,)', 'org.apache.logging.log4j:log4j-core:2.19.0', 'org.apache.logging.log4j:log4j-api:2.19.0', diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index 4b54b0da5..013532950 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -26,7 +26,7 @@ 1.8 1.8 - 5.3.24 + 5.3.25 4.13.2 2.19.0 diff --git a/samples/springboot2/pet-store/build.gradle b/samples/springboot2/pet-store/build.gradle index c0dddba8a..cfc92b151 100644 --- a/samples/springboot2/pet-store/build.gradle +++ b/samples/springboot2/pet-store/build.gradle @@ -8,7 +8,7 @@ repositories { dependencies { implementation ( - implementation('org.springframework.boot:spring-boot-starter-web:2.7.6') { + implementation('org.springframework.boot:spring-boot-starter-web:2.7.8') { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat' }, 'com.amazonaws.serverless:aws-serverless-java-container-springboot2:[1.4,)', diff --git a/samples/springboot2/pet-store/pom.xml b/samples/springboot2/pet-store/pom.xml index bf9cf13f6..a6f20823d 100644 --- a/samples/springboot2/pet-store/pom.xml +++ b/samples/springboot2/pet-store/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 2.7.6 + 2.7.8 From 3b99b5348da133625ec625a37ed4b9080c719b70 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 3 Feb 2023 16:17:08 +0100 Subject: [PATCH 286/888] chore(deps): update Jackson version to 2.14.2 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 6aaf501d5..21a097a39 100644 --- a/pom.xml +++ b/pom.xml @@ -82,7 +82,7 @@ 0.7 7.4.1 - 2.14.1 + 2.14.2 2.0.6 5.9.2 4.9.0 From abae8e8bb830dfdde4b1218a94e91a64d95304a9 Mon Sep 17 00:00:00 2001 From: Artur Signell Date: Fri, 3 Feb 2023 14:40:46 +0200 Subject: [PATCH 287/888] Align header checks --- .../proxy/internal/servlet/AwsHttpServletResponse.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponse.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponse.java index fc03922ce..65677d00a 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponse.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponse.java @@ -213,7 +213,7 @@ public void addDateHeader(String s, long l) { @Override public void setHeader(String s, String s1) { if (!canSetHeader()) return; - if ("Content-Type".equalsIgnoreCase(s)) { + if (isContentTypeHeader(s)) { setContentType(s1); } else { setHeader(s, s1, true); @@ -221,11 +221,16 @@ public void setHeader(String s, String s1) { } + private boolean isContentTypeHeader(String s) { + return s.toLowerCase(Locale.getDefault()).equals(HttpHeaders.CONTENT_TYPE.toLowerCase(Locale.getDefault())); + } + + @Override public void addHeader(String s, String s1) { if (!canSetHeader()) return; // TODO: We should probably have a list of headers that we are not allowed to have multiple values for - if (s.toLowerCase(Locale.getDefault()).equals(HttpHeaders.CONTENT_TYPE.toLowerCase(Locale.getDefault()))) { + if (isContentTypeHeader(s)) { setContentType(s1); } else { setHeader(s, s1, false); From 22393803e3d17a09373745bb52347ba2292e4b38 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Wed, 15 Feb 2023 07:03:02 +0100 Subject: [PATCH 288/888] chore(deps): update Commons Fileupload version to 1.5 --- aws-serverless-java-container-core/pom.xml | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 87bbb7927..52301fc3f 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -61,12 +61,7 @@ commons-fileupload commons-fileupload - 1.4 - - - commons-io - commons-io - 2.11.0 + 1.5 From f098f97a0b8a03175b040207714beb3b983d63be Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Thu, 16 Feb 2023 14:34:49 +0100 Subject: [PATCH 289/888] doc: added comment for https://stackoverflow.com/a/75471488/3156607 --- .../serverless/proxy/internal/servlet/AwsHttpServletRequest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java index 61d97bfef..0a2ab1992 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java @@ -145,6 +145,7 @@ public HttpSession getSession(boolean b) { @Override public HttpSession getSession() { log.debug("Trying to access session. Lambda functions are stateless and should not rely on the session"); + // as per Servlet spec this method should create a session if none exists, so we should change it to getSession(true) in the future return this.session; } From dc87300299f7f0559913bb8e9db6023b768551a8 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Tue, 7 Mar 2023 09:43:47 +0100 Subject: [PATCH 290/888] chore(deps): Update Spring dependencies (security to 5.7.7, boot to 2.7.9) --- aws-serverless-java-container-core/pom.xml | 2 +- aws-serverless-java-container-spring/pom.xml | 2 +- aws-serverless-java-container-springboot2/pom.xml | 4 ++-- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/springboot2/pet-store/build.gradle | 2 +- samples/springboot2/pet-store/pom.xml | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 52301fc3f..b086412ee 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -105,7 +105,7 @@ org.springframework.security spring-security-web - 5.7.6 + 5.7.7 test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 4aa95970f..f31f9a0fb 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -17,7 +17,7 @@ 5.3.25 - 5.7.6 + 5.7.7 diff --git a/aws-serverless-java-container-springboot2/pom.xml b/aws-serverless-java-container-springboot2/pom.xml index 1d7fffd44..0c34b51db 100644 --- a/aws-serverless-java-container-springboot2/pom.xml +++ b/aws-serverless-java-container-springboot2/pom.xml @@ -16,8 +16,8 @@ 5.3.25 - 2.7.8 - 5.7.6 + 2.7.9 + 5.7.7 1.8 1.8 diff --git a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle index b47ce60a8..15a428b14 100644 --- a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle @@ -8,7 +8,7 @@ repositories { dependencies { implementation ( - 'org.springframework.boot:spring-boot-starter-web:2.7.8', + 'org.springframework.boot:spring-boot-starter-web:2.7.9', 'com.amazonaws.serverless:aws-serverless-java-container-springboot2:[1.0,)', 'io.symphonia:lambda-logging:1.0.3' ) diff --git a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml index b4ad6174f..074b01128 100644 --- a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ org.springframework.boot spring-boot-starter-parent - 2.7.8 + 2.7.9 diff --git a/samples/springboot2/pet-store/build.gradle b/samples/springboot2/pet-store/build.gradle index cfc92b151..8b83cc443 100644 --- a/samples/springboot2/pet-store/build.gradle +++ b/samples/springboot2/pet-store/build.gradle @@ -8,7 +8,7 @@ repositories { dependencies { implementation ( - implementation('org.springframework.boot:spring-boot-starter-web:2.7.8') { + implementation('org.springframework.boot:spring-boot-starter-web:2.7.9') { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat' }, 'com.amazonaws.serverless:aws-serverless-java-container-springboot2:[1.4,)', diff --git a/samples/springboot2/pet-store/pom.xml b/samples/springboot2/pet-store/pom.xml index a6f20823d..6901fb7e2 100644 --- a/samples/springboot2/pet-store/pom.xml +++ b/samples/springboot2/pet-store/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 2.7.8 + 2.7.9 From aa27167a2d516790e463982431ee131b1ce264de Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Tue, 7 Mar 2023 09:52:46 +0100 Subject: [PATCH 291/888] chore(deps): Update OWASP dependency check to 8.1.2 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 21a097a39..90d84d55f 100644 --- a/pom.xml +++ b/pom.xml @@ -81,7 +81,7 @@ 0.7 - 7.4.1 + 8.1.2 2.14.2 2.0.6 5.9.2 From 3645aae2c89ff4fab0660ef5bd55cb91bb5eab76 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 24 Mar 2023 13:03:03 +0100 Subject: [PATCH 292/888] chore(deps): Update Spring dependencies (framework to 5.3.26, boot to 2.7.10) --- aws-serverless-java-container-spring/pom.xml | 2 +- aws-serverless-java-container-springboot2/pom.xml | 4 ++-- .../src/main/resources/archetype-resources/build.gradle | 4 ++-- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/spring/pet-store/build.gradle | 4 ++-- samples/spring/pet-store/pom.xml | 2 +- samples/springboot2/pet-store/build.gradle | 2 +- samples/springboot2/pet-store/pom.xml | 2 +- 10 files changed, 13 insertions(+), 13 deletions(-) diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index f31f9a0fb..7a58ac1d3 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -16,7 +16,7 @@ - 5.3.25 + 5.3.26 5.7.7 diff --git a/aws-serverless-java-container-springboot2/pom.xml b/aws-serverless-java-container-springboot2/pom.xml index 0c34b51db..d9dfb4aaf 100644 --- a/aws-serverless-java-container-springboot2/pom.xml +++ b/aws-serverless-java-container-springboot2/pom.xml @@ -15,8 +15,8 @@ 1.10-SNAPSHOT - 5.3.25 - 2.7.9 + 5.3.26 + 2.7.10 5.7.7 1.8 1.8 diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index 319a102d5..1a80d26dc 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -7,8 +7,8 @@ repositories { dependencies { implementation ( - 'org.springframework:spring-webmvc:5.3.25', - 'org.springframework:spring-context:5.3.25', + 'org.springframework:spring-webmvc:5.3.26', + 'org.springframework:spring-context:5.3.26', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[1.0,)', 'org.apache.logging.log4j:log4j-core:2.19.0', 'org.apache.logging.log4j:log4j-api:2.19.0', diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index 855e267d3..5f30c5c78 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 1.8 - 5.3.25 + 5.3.26 4.13.2 2.19.0 diff --git a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle index 15a428b14..36a13b5d7 100644 --- a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle @@ -8,7 +8,7 @@ repositories { dependencies { implementation ( - 'org.springframework.boot:spring-boot-starter-web:2.7.9', + 'org.springframework.boot:spring-boot-starter-web:2.7.10', 'com.amazonaws.serverless:aws-serverless-java-container-springboot2:[1.0,)', 'io.symphonia:lambda-logging:1.0.3' ) diff --git a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml index 074b01128..5612389cd 100644 --- a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ org.springframework.boot spring-boot-starter-parent - 2.7.9 + 2.7.10 diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index 057ca5c70..e47d06260 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -7,8 +7,8 @@ repositories { dependencies { implementation ( - 'org.springframework:spring-webmvc:5.3.25', - 'org.springframework:spring-context:5.3.25', + 'org.springframework:spring-webmvc:5.3.26', + 'org.springframework:spring-context:5.3.26', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[1.0,)', 'org.apache.logging.log4j:log4j-core:2.19.0', 'org.apache.logging.log4j:log4j-api:2.19.0', diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index 013532950..c467c4984 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -26,7 +26,7 @@ 1.8 1.8 - 5.3.25 + 5.3.26 4.13.2 2.19.0 diff --git a/samples/springboot2/pet-store/build.gradle b/samples/springboot2/pet-store/build.gradle index 8b83cc443..5f4624197 100644 --- a/samples/springboot2/pet-store/build.gradle +++ b/samples/springboot2/pet-store/build.gradle @@ -8,7 +8,7 @@ repositories { dependencies { implementation ( - implementation('org.springframework.boot:spring-boot-starter-web:2.7.9') { + implementation('org.springframework.boot:spring-boot-starter-web:2.7.10') { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat' }, 'com.amazonaws.serverless:aws-serverless-java-container-springboot2:[1.4,)', diff --git a/samples/springboot2/pet-store/pom.xml b/samples/springboot2/pet-store/pom.xml index 6901fb7e2..202d9c343 100644 --- a/samples/springboot2/pet-store/pom.xml +++ b/samples/springboot2/pet-store/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 2.7.9 + 2.7.10 From 188b8b0930f27c6b599836e843017d8eaf137094 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 24 Mar 2023 15:55:02 +0100 Subject: [PATCH 293/888] chore(deps): update SLF4J to 2.0.7 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 90d84d55f..a526e8f79 100644 --- a/pom.xml +++ b/pom.xml @@ -83,7 +83,7 @@ 0.7 8.1.2 2.14.2 - 2.0.6 + 2.0.7 5.9.2 4.9.0 1.3 From 4266dabfb37103d7aea2df0693355244282d4392 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 24 Mar 2023 19:45:19 +0100 Subject: [PATCH 294/888] chore(deps): update Mockito to 5.2.0 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index a526e8f79..78b3b4e00 100644 --- a/pom.xml +++ b/pom.xml @@ -85,7 +85,7 @@ 2.14.2 2.0.7 5.9.2 - 4.9.0 + 5.2.0 1.3 UTF-8 From ec8bd789e0c3679f4559935db8f1266b83b8053e Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 24 Mar 2023 19:45:40 +0100 Subject: [PATCH 295/888] chore(deps): update Struts to 6.1.2 --- aws-serverless-java-container-struts/pom.xml | 2 +- .../main/resources/archetype-resources/build.gradle | 10 +++++----- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/struts/pet-store/build.gradle | 8 ++++---- samples/struts/pet-store/pom.xml | 2 +- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/aws-serverless-java-container-struts/pom.xml b/aws-serverless-java-container-struts/pom.xml index c42747a7f..1c628e943 100644 --- a/aws-serverless-java-container-struts/pom.xml +++ b/aws-serverless-java-container-struts/pom.xml @@ -15,7 +15,7 @@ - 6.1.1 + 6.1.2 diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle index 34373b60a..53d46cf91 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle @@ -18,19 +18,19 @@ dependencies { exclude group: 'org.apache.logging.log4j', module: 'log4j-api' exclude group: 'org.apache.logging.log4j', module: 'log4j-to-slf4j' } - implementation ('org.apache.struts:struts2-convention-plugin:6.1.1') { + implementation ('org.apache.struts:struts2-convention-plugin:6.1.2') { exclude group: 'org.apache.struts', module: 'struts2-core' } - implementation ('org.apache.struts:struts2-rest-plugin:6.1.1') { + implementation ('org.apache.struts:struts2-rest-plugin:6.1.2') { exclude group: 'org.apache.struts', module: 'struts2-core' } - implementation ('org.apache.struts:struts2-bean-validation-plugin:6.1.1') { + implementation ('org.apache.struts:struts2-bean-validation-plugin:6.1.2') { exclude group: 'org.apache.struts', module: 'struts2-core' } implementation ('com.jgeppert.struts2:struts2-aws-lambda-support-plugin:1.4.2') { exclude group: 'org.apache.struts', module: 'struts2-core' } - implementation ('org.apache.struts:struts2-core:6.1.1') { + implementation ('org.apache.struts:struts2-core:6.1.2') { exclude group: 'org.apache.logging.log4j', module: 'log4j-api' } implementation ('org.hibernate.validator:hibernate-validator:6.1.7.Final') @@ -42,7 +42,7 @@ dependencies { implementation ('com.amazonaws:aws-lambda-java-log4j2:1.5.1') testImplementation('junit:junit:4.13.2') - testImplementation('org.apache.struts:struts2-junit-plugin:6.1.1') { + testImplementation('org.apache.struts:struts2-junit-plugin:6.1.2') { exclude group: 'org.apache.struts', module: 'struts2-core' } } diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml index d84ad1902..044ea80e6 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml @@ -15,7 +15,7 @@ 1.8 1.8 - 6.1.1 + 6.1.2 2.14.1 4.13.2 2.19.0 diff --git a/samples/struts/pet-store/build.gradle b/samples/struts/pet-store/build.gradle index 6aeff27df..ed108a3fa 100644 --- a/samples/struts/pet-store/build.gradle +++ b/samples/struts/pet-store/build.gradle @@ -14,10 +14,10 @@ configurations { dependencies { implementation ( 'com.amazonaws.serverless:aws-serverless-java-container-struts:[1.9,)', - 'org.apache.struts:struts2-convention-plugin:6.1.1', - 'org.apache.struts:struts2-rest-plugin:6.1.1', - 'org.apache.struts:struts2-bean-validation-plugin:6.1.1', - 'org.apache.struts:struts2-junit-plugin:6.1.1', + 'org.apache.struts:struts2-convention-plugin:6.1.2', + 'org.apache.struts:struts2-rest-plugin:6.1.2', + 'org.apache.struts:struts2-bean-validation-plugin:6.1.2', + 'org.apache.struts:struts2-junit-plugin:6.1.2', 'com.jgeppert.struts2:struts2-aws-lambda-support-plugin:1.4.2', 'org.hibernate.validator:hibernate-validator:6.1.7.Final', 'org.glassfish:javax.el:3.0.0', diff --git a/samples/struts/pet-store/pom.xml b/samples/struts/pet-store/pom.xml index a1bf62595..0e6df26ed 100644 --- a/samples/struts/pet-store/pom.xml +++ b/samples/struts/pet-store/pom.xml @@ -26,7 +26,7 @@ 1.8 1.8 - 6.1.1 + 6.1.2 2.14.1 4.13.2 2.19.0 From f3ba895ce91527b85248e054684ecac163e76ebc Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 24 Mar 2023 20:07:01 +0100 Subject: [PATCH 296/888] chore(deps): update Jersey to 2.39.1 along with JAX-RS API to 2.1.1 --- aws-serverless-java-container-core/pom.xml | 2 +- aws-serverless-java-container-jersey/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 4 ++-- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/jersey/pet-store/build.gradle | 4 ++-- samples/jersey/pet-store/pom.xml | 2 +- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index b086412ee..462cbc83c 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -16,7 +16,7 @@ - 2.1 + 2.1.1 3.1.0 diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index 2d491078f..ae8949859 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -16,7 +16,7 @@ - 2.37 + 2.39.1 diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle index c1756d92e..58ac7f618 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle @@ -12,13 +12,13 @@ dependencies { 'io.symphonia:lambda-logging:1.0.3' ) - implementation("org.glassfish.jersey.media:jersey-media-json-jackson:2.37") { + implementation("org.glassfish.jersey.media:jersey-media-json-jackson:2.39.1") { exclude group: 'com.fasterxml.jackson.core', module: "jackson-annotations" exclude group: 'com.fasterxml.jackson.core', module: "jackson-databind" exclude group: 'com.fasterxml.jackson.core', module: "jackson-core" } - implementation("org.glassfish.jersey.inject:jersey-hk2:2.37") { + implementation("org.glassfish.jersey.inject:jersey-hk2:2.39.1") { exclude group: 'javax.inject', module: "javax.inject" } diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml index dbb4cf12c..389bd8c25 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml @@ -14,7 +14,7 @@ 1.8 1.8 - 2.37 + 2.39.1 2.14.1 diff --git a/samples/jersey/pet-store/build.gradle b/samples/jersey/pet-store/build.gradle index ea8ee51d4..632fb35da 100644 --- a/samples/jersey/pet-store/build.gradle +++ b/samples/jersey/pet-store/build.gradle @@ -12,13 +12,13 @@ dependencies { 'io.symphonia:lambda-logging:1.0.3' ) - implementation("org.glassfish.jersey.media:jersey-media-json-jackson:2.37") { + implementation("org.glassfish.jersey.media:jersey-media-json-jackson:2.39.1") { exclude group: 'com.fasterxml.jackson.core', module: "jackson-annotations" exclude group: 'com.fasterxml.jackson.core', module: "jackson-databind" exclude group: 'com.fasterxml.jackson.core', module: "jackson-core" } - implementation("org.glassfish.jersey.inject:jersey-hk2:2.37") { + implementation("org.glassfish.jersey.inject:jersey-hk2:2.39.1") { exclude group: 'javax.inject', module: "javax.inject" } } diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index ce0baf4c0..7f26e5c22 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -26,7 +26,7 @@ 1.8 1.8 - 2.37 + 2.39.1 2.14.1 From b4a643eda6c0233d58c83592a50d8269bff8fce3 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 24 Mar 2023 20:09:43 +0100 Subject: [PATCH 297/888] chore(deps): use Jackson 2.14.2 also in samples and archetypes --- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/build.gradle | 4 ++-- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/jersey/pet-store/build.gradle | 2 +- samples/jersey/pet-store/pom.xml | 2 +- samples/spark/pet-store/build.gradle | 2 +- samples/spark/pet-store/pom.xml | 2 +- samples/spring/pet-store/build.gradle | 2 +- samples/struts/pet-store/build.gradle | 4 ++-- samples/struts/pet-store/pom.xml | 2 +- 14 files changed, 16 insertions(+), 16 deletions(-) diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle index 58ac7f618..6ed4bc370 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle @@ -8,7 +8,7 @@ repositories { dependencies { implementation ( 'com.amazonaws.serverless:aws-serverless-java-container-jersey:[1.9,)', - 'com.fasterxml.jackson.core:jackson-databind:2.14.1', + 'com.fasterxml.jackson.core:jackson-databind:2.14.2', 'io.symphonia:lambda-logging:1.0.3' ) diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml index 389bd8c25..195dcf39d 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml @@ -15,7 +15,7 @@ 1.8 1.8 2.39.1 - 2.14.1 + 2.14.2 diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle index 780810c90..3632fe38a 100644 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle @@ -9,7 +9,7 @@ dependencies { implementation ( 'com.sparkjava:spark-core:2.9.4', 'com.amazonaws.serverless:aws-serverless-java-container-spark:[1.0,)', - 'com.fasterxml.jackson.core:jackson-databind:2.14.1', + 'com.fasterxml.jackson.core:jackson-databind:2.14.2', 'io.symphonia:lambda-logging:1.0.3' ) diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml index 9e1910aa1..21eaced6e 100644 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 1.8 - 2.14.1 + 2.14.2 2.9.1 diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index 1a80d26dc..126348451 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -13,7 +13,7 @@ dependencies { 'org.apache.logging.log4j:log4j-core:2.19.0', 'org.apache.logging.log4j:log4j-api:2.19.0', 'org.apache.logging.log4j:log4j-slf4j-impl:2.19.0', - 'com.fasterxml.jackson.core:jackson-databind:2.14.1', + 'com.fasterxml.jackson.core:jackson-databind:2.14.2', 'com.amazonaws:aws-lambda-java-log4j2:1.5.1', ) diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle index 53d46cf91..a944bcdaf 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle @@ -34,8 +34,8 @@ dependencies { exclude group: 'org.apache.logging.log4j', module: 'log4j-api' } implementation ('org.hibernate.validator:hibernate-validator:6.1.7.Final') - implementation ('com.fasterxml.jackson.core:jackson-databind:2.14.1') - implementation ('com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.14.1') + implementation ('com.fasterxml.jackson.core:jackson-databind:2.14.2') + implementation ('com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.14.2') implementation ('org.apache.logging.log4j:log4j-core:2.19.0') implementation ('org.apache.logging.log4j:log4j-api:2.19.0') implementation ('org.apache.logging.log4j:log4j-slf4j-impl:2.19.0') diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml index 044ea80e6..b9abc256b 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 1.8 6.1.2 - 2.14.1 + 2.14.2 4.13.2 2.19.0 diff --git a/samples/jersey/pet-store/build.gradle b/samples/jersey/pet-store/build.gradle index 632fb35da..c0f5bd933 100644 --- a/samples/jersey/pet-store/build.gradle +++ b/samples/jersey/pet-store/build.gradle @@ -8,7 +8,7 @@ repositories { dependencies { implementation ( 'com.amazonaws.serverless:aws-serverless-java-container-jersey:[1.9,)', - 'com.fasterxml.jackson.core:jackson-databind:2.14.1', + 'com.fasterxml.jackson.core:jackson-databind:2.14.2', 'io.symphonia:lambda-logging:1.0.3' ) diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index 7f26e5c22..521112399 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -27,7 +27,7 @@ 1.8 1.8 2.39.1 - 2.14.1 + 2.14.2 diff --git a/samples/spark/pet-store/build.gradle b/samples/spark/pet-store/build.gradle index 5087400ce..f90fcd3c3 100644 --- a/samples/spark/pet-store/build.gradle +++ b/samples/spark/pet-store/build.gradle @@ -9,7 +9,7 @@ dependencies { implementation ( 'com.sparkjava:spark-core:2.9.4', 'com.amazonaws.serverless:aws-serverless-java-container-spark:[1.0,)', - 'com.fasterxml.jackson.core:jackson-databind:2.14.1', + 'com.fasterxml.jackson.core:jackson-databind:2.14.2', 'io.symphonia:lambda-logging:1.0.3' ) } diff --git a/samples/spark/pet-store/pom.xml b/samples/spark/pet-store/pom.xml index 04915a2b2..fe887dbd5 100644 --- a/samples/spark/pet-store/pom.xml +++ b/samples/spark/pet-store/pom.xml @@ -26,7 +26,7 @@ 1.8 1.8 - 2.14.1 + 2.14.2 2.9.1 diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index e47d06260..261f094c4 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -13,7 +13,7 @@ dependencies { 'org.apache.logging.log4j:log4j-core:2.19.0', 'org.apache.logging.log4j:log4j-api:2.19.0', 'org.apache.logging.log4j:log4j-slf4j-impl:2.19.0', - 'com.fasterxml.jackson.core:jackson-databind:2.14.1', + 'com.fasterxml.jackson.core:jackson-databind:2.14.2', 'com.amazonaws:aws-lambda-java-log4j2:1.5.1', ) } diff --git a/samples/struts/pet-store/build.gradle b/samples/struts/pet-store/build.gradle index ed108a3fa..d48136b41 100644 --- a/samples/struts/pet-store/build.gradle +++ b/samples/struts/pet-store/build.gradle @@ -22,8 +22,8 @@ dependencies { 'org.hibernate.validator:hibernate-validator:6.1.7.Final', 'org.glassfish:javax.el:3.0.0', 'javax.el:javax.el-api:3.0.0', - 'com.fasterxml.jackson.core:jackson-databind:2.14.1', - 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.14.1', + 'com.fasterxml.jackson.core:jackson-databind:2.14.2', + 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.14.2', 'org.apache.logging.log4j:log4j-core:2.19.0', 'org.apache.logging.log4j:log4j-api:2.19.0', 'com.amazonaws:aws-lambda-java-log4j2:1.5.1', diff --git a/samples/struts/pet-store/pom.xml b/samples/struts/pet-store/pom.xml index 0e6df26ed..6741d350e 100644 --- a/samples/struts/pet-store/pom.xml +++ b/samples/struts/pet-store/pom.xml @@ -27,7 +27,7 @@ 1.8 1.8 6.1.2 - 2.14.1 + 2.14.2 4.13.2 2.19.0 From 35e0ad35c6975ec38919bdd80efaf6e5dc02ca23 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 24 Mar 2023 20:24:32 +0100 Subject: [PATCH 298/888] chore(deps): set Mockito to 4.11.0 as 5.x requires JDK 11 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 78b3b4e00..2c3ff9524 100644 --- a/pom.xml +++ b/pom.xml @@ -85,7 +85,7 @@ 2.14.2 2.0.7 5.9.2 - 5.2.0 + 4.11.0 1.3 UTF-8 From 63d82cb043b57a20b276d194debd7c7a7a36d7cd Mon Sep 17 00:00:00 2001 From: deki Date: Sat, 25 Mar 2023 06:51:39 +0000 Subject: [PATCH 299/888] chore: release -prepare release aws-serverless-java-container-1.9.2 --- aws-serverless-java-container-core/pom.xml | 4 ++-- aws-serverless-java-container-jersey/pom.xml | 6 +++--- aws-serverless-java-container-spark/pom.xml | 6 +++--- aws-serverless-java-container-spring/pom.xml | 6 +++--- aws-serverless-java-container-springboot2/pom.xml | 6 +++--- aws-serverless-java-container-struts/pom.xml | 6 +++--- aws-serverless-jersey-archetype/pom.xml | 6 +++--- aws-serverless-spark-archetype/pom.xml | 6 +++--- aws-serverless-spring-archetype/pom.xml | 6 +++--- aws-serverless-springboot2-archetype/pom.xml | 6 +++--- aws-serverless-struts-archetype/pom.xml | 6 +++--- pom.xml | 4 ++-- 12 files changed, 34 insertions(+), 34 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 462cbc83c..95f26abb0 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Core Allows Java applications written for a servlet container to run in AWS Lambda https://aws.amazon.com/lambda - 1.10-SNAPSHOT + 1.9.2 com.amazonaws.serverless aws-serverless-java-container - 1.10-SNAPSHOT + 1.9.2 .. diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index ae8949859..9467cef8b 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Jersey implementation Allows Java applications written for Jersey to run in AWS Lambda https://aws.amazon.com/lambda - 1.10-SNAPSHOT + 1.9.2 com.amazonaws.serverless aws-serverless-java-container - 1.10-SNAPSHOT + 1.9.2 .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.10-SNAPSHOT + 1.9.2 com.fasterxml.jackson.core diff --git a/aws-serverless-java-container-spark/pom.xml b/aws-serverless-java-container-spark/pom.xml index f5ea6b868..fae2d5ea4 100644 --- a/aws-serverless-java-container-spark/pom.xml +++ b/aws-serverless-java-container-spark/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spark implementation Allows Java applications written for Spark to run in AWS Lambda https://aws.amazon.com/lambda - 1.10-SNAPSHOT + 1.9.2 com.amazonaws.serverless aws-serverless-java-container - 1.10-SNAPSHOT + 1.9.2 .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.10-SNAPSHOT + 1.9.2 diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 7a58ac1d3..76de160dd 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spring implementation Allows Java applications written for the Spring framework to run in AWS Lambda https://aws.amazon.com/lambda - 1.10-SNAPSHOT + 1.9.2 com.amazonaws.serverless aws-serverless-java-container - 1.10-SNAPSHOT + 1.9.2 .. @@ -25,7 +25,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.10-SNAPSHOT + 1.9.2 diff --git a/aws-serverless-java-container-springboot2/pom.xml b/aws-serverless-java-container-springboot2/pom.xml index d9dfb4aaf..8d7a064e9 100644 --- a/aws-serverless-java-container-springboot2/pom.xml +++ b/aws-serverless-java-container-springboot2/pom.xml @@ -3,7 +3,7 @@ aws-serverless-java-container com.amazonaws.serverless - 1.10-SNAPSHOT + 1.9.2 4.0.0 @@ -12,7 +12,7 @@ AWS Serverless Java container support - SpringBoot 2 implementation Allows Java applications written for SpringBoot 2 to run in AWS Lambda https://aws.amazon.com/lambda - 1.10-SNAPSHOT + 1.9.2 5.3.26 @@ -27,7 +27,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.10-SNAPSHOT + 1.9.2 diff --git a/aws-serverless-java-container-struts/pom.xml b/aws-serverless-java-container-struts/pom.xml index 1c628e943..c6dbf9f1e 100644 --- a/aws-serverless-java-container-struts/pom.xml +++ b/aws-serverless-java-container-struts/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Struts implementation Allows Java applications written for the Struts framework to run in AWS Lambda https://aws.amazon.com/lambda - 1.10-SNAPSHOT + 1.9.2 com.amazonaws.serverless aws-serverless-java-container - 1.10-SNAPSHOT + 1.9.2 @@ -23,7 +23,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.10-SNAPSHOT + 1.9.2 diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index c13c05869..fc3b452ff 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.10-SNAPSHOT + 1.9.2 com.amazonaws.serverless.archetypes aws-serverless-jersey-archetype - 1.10-SNAPSHOT + 1.9.2 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.9.2 diff --git a/aws-serverless-spark-archetype/pom.xml b/aws-serverless-spark-archetype/pom.xml index ca3ad3952..27fe34a3e 100644 --- a/aws-serverless-spark-archetype/pom.xml +++ b/aws-serverless-spark-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.10-SNAPSHOT + 1.9.2 com.amazonaws.serverless.archetypes aws-serverless-spark-archetype - 1.10-SNAPSHOT + 1.9.2 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.9.2 diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index 83dc79743..03f94e757 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.10-SNAPSHOT + 1.9.2 com.amazonaws.serverless.archetypes aws-serverless-spring-archetype - 1.10-SNAPSHOT + 1.9.2 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.9.2 diff --git a/aws-serverless-springboot2-archetype/pom.xml b/aws-serverless-springboot2-archetype/pom.xml index 1e7279dbf..b2d37a591 100644 --- a/aws-serverless-springboot2-archetype/pom.xml +++ b/aws-serverless-springboot2-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.10-SNAPSHOT + 1.9.2 com.amazonaws.serverless.archetypes aws-serverless-springboot2-archetype - 1.10-SNAPSHOT + 1.9.2 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.9.2 diff --git a/aws-serverless-struts-archetype/pom.xml b/aws-serverless-struts-archetype/pom.xml index b91cfa4bd..3ed5a50ce 100644 --- a/aws-serverless-struts-archetype/pom.xml +++ b/aws-serverless-struts-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.10-SNAPSHOT + 1.9.2 com.amazonaws.serverless.archetypes aws-serverless-struts-archetype - 1.10-SNAPSHOT + 1.9.2 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.9.2 diff --git a/pom.xml b/pom.xml index 2c3ff9524..44ac1cb4d 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazonaws.serverless aws-serverless-java-container pom - 1.10-SNAPSHOT + 1.9.2 AWS Serverless Java container A Java framework to run Spring, Spring Boot, Jersey, Spark, and Struts applications inside AWS Lambda https://github.com/awslabs/aws-serverless-java-container @@ -41,7 +41,7 @@ https://github.com/awslabs/aws-serverless-java-container scm:git:https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.9.2 From 0210a77f280f7069462795020d039edf7680d3f9 Mon Sep 17 00:00:00 2001 From: deki Date: Sat, 25 Mar 2023 06:51:40 +0000 Subject: [PATCH 300/888] chore: release -prepare for next development iteration --- aws-serverless-java-container-core/pom.xml | 4 ++-- aws-serverless-java-container-jersey/pom.xml | 6 +++--- aws-serverless-java-container-spark/pom.xml | 6 +++--- aws-serverless-java-container-spring/pom.xml | 6 +++--- aws-serverless-java-container-springboot2/pom.xml | 6 +++--- aws-serverless-java-container-struts/pom.xml | 6 +++--- aws-serverless-jersey-archetype/pom.xml | 6 +++--- aws-serverless-spark-archetype/pom.xml | 6 +++--- aws-serverless-spring-archetype/pom.xml | 6 +++--- aws-serverless-springboot2-archetype/pom.xml | 6 +++--- aws-serverless-struts-archetype/pom.xml | 6 +++--- pom.xml | 4 ++-- 12 files changed, 34 insertions(+), 34 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 95f26abb0..462cbc83c 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Core Allows Java applications written for a servlet container to run in AWS Lambda https://aws.amazon.com/lambda - 1.9.2 + 1.10-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.9.2 + 1.10-SNAPSHOT .. diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index 9467cef8b..ae8949859 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Jersey implementation Allows Java applications written for Jersey to run in AWS Lambda https://aws.amazon.com/lambda - 1.9.2 + 1.10-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.9.2 + 1.10-SNAPSHOT .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.9.2 + 1.10-SNAPSHOT com.fasterxml.jackson.core diff --git a/aws-serverless-java-container-spark/pom.xml b/aws-serverless-java-container-spark/pom.xml index fae2d5ea4..f5ea6b868 100644 --- a/aws-serverless-java-container-spark/pom.xml +++ b/aws-serverless-java-container-spark/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spark implementation Allows Java applications written for Spark to run in AWS Lambda https://aws.amazon.com/lambda - 1.9.2 + 1.10-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.9.2 + 1.10-SNAPSHOT .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.9.2 + 1.10-SNAPSHOT diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 76de160dd..7a58ac1d3 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spring implementation Allows Java applications written for the Spring framework to run in AWS Lambda https://aws.amazon.com/lambda - 1.9.2 + 1.10-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.9.2 + 1.10-SNAPSHOT .. @@ -25,7 +25,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.9.2 + 1.10-SNAPSHOT diff --git a/aws-serverless-java-container-springboot2/pom.xml b/aws-serverless-java-container-springboot2/pom.xml index 8d7a064e9..d9dfb4aaf 100644 --- a/aws-serverless-java-container-springboot2/pom.xml +++ b/aws-serverless-java-container-springboot2/pom.xml @@ -3,7 +3,7 @@ aws-serverless-java-container com.amazonaws.serverless - 1.9.2 + 1.10-SNAPSHOT 4.0.0 @@ -12,7 +12,7 @@ AWS Serverless Java container support - SpringBoot 2 implementation Allows Java applications written for SpringBoot 2 to run in AWS Lambda https://aws.amazon.com/lambda - 1.9.2 + 1.10-SNAPSHOT 5.3.26 @@ -27,7 +27,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.9.2 + 1.10-SNAPSHOT diff --git a/aws-serverless-java-container-struts/pom.xml b/aws-serverless-java-container-struts/pom.xml index c6dbf9f1e..1c628e943 100644 --- a/aws-serverless-java-container-struts/pom.xml +++ b/aws-serverless-java-container-struts/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Struts implementation Allows Java applications written for the Struts framework to run in AWS Lambda https://aws.amazon.com/lambda - 1.9.2 + 1.10-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.9.2 + 1.10-SNAPSHOT @@ -23,7 +23,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.9.2 + 1.10-SNAPSHOT diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index fc3b452ff..c13c05869 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.9.2 + 1.10-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-jersey-archetype - 1.9.2 + 1.10-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.9.2 + HEAD diff --git a/aws-serverless-spark-archetype/pom.xml b/aws-serverless-spark-archetype/pom.xml index 27fe34a3e..ca3ad3952 100644 --- a/aws-serverless-spark-archetype/pom.xml +++ b/aws-serverless-spark-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.9.2 + 1.10-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-spark-archetype - 1.9.2 + 1.10-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.9.2 + HEAD diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index 03f94e757..83dc79743 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.9.2 + 1.10-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-spring-archetype - 1.9.2 + 1.10-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.9.2 + HEAD diff --git a/aws-serverless-springboot2-archetype/pom.xml b/aws-serverless-springboot2-archetype/pom.xml index b2d37a591..1e7279dbf 100644 --- a/aws-serverless-springboot2-archetype/pom.xml +++ b/aws-serverless-springboot2-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.9.2 + 1.10-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-springboot2-archetype - 1.9.2 + 1.10-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.9.2 + HEAD diff --git a/aws-serverless-struts-archetype/pom.xml b/aws-serverless-struts-archetype/pom.xml index 3ed5a50ce..b91cfa4bd 100644 --- a/aws-serverless-struts-archetype/pom.xml +++ b/aws-serverless-struts-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.9.2 + 1.10-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-struts-archetype - 1.9.2 + 1.10-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.9.2 + HEAD diff --git a/pom.xml b/pom.xml index 44ac1cb4d..2c3ff9524 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazonaws.serverless aws-serverless-java-container pom - 1.9.2 + 1.10-SNAPSHOT AWS Serverless Java container A Java framework to run Spring, Spring Boot, Jersey, Spark, and Struts applications inside AWS Lambda https://github.com/awslabs/aws-serverless-java-container @@ -41,7 +41,7 @@ https://github.com/awslabs/aws-serverless-java-container scm:git:https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.9.2 + HEAD From 47b259893a0423a9e30706a71c618905f49f277e Mon Sep 17 00:00:00 2001 From: Daan Kerkhofs <17711209+kerkhofsd@users.noreply.github.com> Date: Fri, 14 Apr 2023 11:15:10 +0200 Subject: [PATCH 301/888] gh-511 Adapt AwsProxyHttpServletRequest getLocale tests --- .../AwsProxyHttpServletRequestTest.java | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestTest.java index 73c07a8f2..af272e231 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestTest.java @@ -501,7 +501,7 @@ void getLocales_validAcceptHeader_expectSingleLocale(String type) { int localesNo = 0; while (locales.hasMoreElements()) { Locale defaultLocale = locales.nextElement(); - assertEquals(new Locale("fr-CH"), defaultLocale); + assertEquals(new Locale("fr", "CH"), defaultLocale); localesNo++; } assertEquals(1, localesNo); @@ -512,7 +512,7 @@ void getLocales_validAcceptHeader_expectSingleLocale(String type) { void getLocales_validAcceptHeaderMultipleLocales_expectFullLocaleList(String type) { initAwsProxyHttpServletRequestTest(type); AwsProxyRequestBuilder req = getRequestWithHeaders(); - req.header(HttpHeaders.ACCEPT_LANGUAGE, "fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5"); + req.header(HttpHeaders.ACCEPT_LANGUAGE, "fr-CA, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5"); HttpServletRequest servletRequest = getRequest(req, null, null); Enumeration locales = servletRequest.getLocales(); List localesList = new ArrayList<>(); @@ -520,14 +520,14 @@ void getLocales_validAcceptHeaderMultipleLocales_expectFullLocaleList(String typ localesList.add(locales.nextElement()); } assertEquals(5, localesList.size()); - assertEquals(new Locale("fr-CH"), localesList.get(0)); - assertEquals(new Locale("fr"), localesList.get(1)); - assertEquals(new Locale("en"), localesList.get(2)); + assertEquals(Locale.CANADA_FRENCH, localesList.get(0)); + assertEquals(Locale.FRENCH, localesList.get(1)); + assertEquals(Locale.ENGLISH, localesList.get(2)); assertEquals(new Locale("de"), localesList.get(3)); assertEquals(new Locale("*"), localesList.get(4)); assertNotNull(servletRequest.getLocale()); - assertEquals(new Locale("fr-CH"), servletRequest.getLocale()); + assertEquals(Locale.CANADA_FRENCH, servletRequest.getLocale()); } @MethodSource("data") @@ -535,7 +535,7 @@ void getLocales_validAcceptHeaderMultipleLocales_expectFullLocaleList(String typ void getLocales_validAcceptHeaderMultipleLocales_expectFullLocaleListOrdered(String type) { initAwsProxyHttpServletRequestTest(type); AwsProxyRequestBuilder req = getRequestWithHeaders(); - req.header(HttpHeaders.ACCEPT_LANGUAGE, "fr-CH, en;q=0.8, de;q=0.7, *;q=0.5, fr;q=0.9"); + req.header(HttpHeaders.ACCEPT_LANGUAGE, "fr-CA, en;q=0.8, de;q=0.7, *;q=0.5, fr;q=0.9"); HttpServletRequest servletRequest = getRequest(req, null, null); Enumeration locales = servletRequest.getLocales(); List localesList = new ArrayList<>(); @@ -543,9 +543,9 @@ void getLocales_validAcceptHeaderMultipleLocales_expectFullLocaleListOrdered(Str localesList.add(locales.nextElement()); } assertEquals(5, localesList.size()); - assertEquals(new Locale("fr-CH"), localesList.get(0)); - assertEquals(new Locale("fr"), localesList.get(1)); - assertEquals(new Locale("en"), localesList.get(2)); + assertEquals(Locale.CANADA_FRENCH, localesList.get(0)); + assertEquals(Locale.FRENCH, localesList.get(1)); + assertEquals(Locale.ENGLISH, localesList.get(2)); assertEquals(new Locale("de"), localesList.get(3)); assertEquals(new Locale("*"), localesList.get(4)); } From be3a7dd3c5dd8bfd9743d868bddad300c40388d1 Mon Sep 17 00:00:00 2001 From: Daan Kerkhofs <17711209+kerkhofsd@users.noreply.github.com> Date: Fri, 14 Apr 2023 11:15:10 +0200 Subject: [PATCH 302/888] gh-511 Support country part in Accept-Language language tags --- .../AwsHttpApiV2ProxyHttpServletRequest.java | 24 ++------- .../servlet/AwsHttpServletRequest.java | 51 +++++++++++++++++-- .../servlet/AwsProxyHttpServletRequest.java | 38 ++------------ 3 files changed, 53 insertions(+), 60 deletions(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2ProxyHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2ProxyHttpServletRequest.java index 09a5e8846..c03facc32 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2ProxyHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2ProxyHttpServletRequest.java @@ -408,31 +408,13 @@ public String getRemoteHost() { @Override public Locale getLocale() { - // Accept-Language: fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5 - List values = this.parseHeaderValue( - headers.getFirst(HttpHeaders.ACCEPT_LANGUAGE), ",", ";" - ); - if (values.size() == 0) { - return Locale.getDefault(); - } - return new Locale(values.get(0).getValue()); + List locales = parseAcceptLanguageHeader(headers.getFirst(HttpHeaders.ACCEPT_LANGUAGE)); + return locales.size() == 0 ? Locale.getDefault() : locales.get(0); } @Override public Enumeration getLocales() { - List values = this.parseHeaderValue( - headers.getFirst(HttpHeaders.ACCEPT_LANGUAGE), ",", ";" - ); - - List locales = new ArrayList<>(); - if (values.size() == 0) { - locales.add(Locale.getDefault()); - } else { - for (HeaderValue locale : values) { - locales.add(new Locale(locale.getValue())); - } - } - + List locales = parseAcceptLanguageHeader(headers.getFirst(HttpHeaders.ACCEPT_LANGUAGE)); return Collections.enumeration(locales); } diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java index 0a2ab1992..d2157e3d8 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java @@ -16,9 +16,11 @@ import com.amazonaws.serverless.proxy.internal.LambdaContainerHandler; import com.amazonaws.serverless.proxy.internal.SecurityUtils; import com.amazonaws.serverless.proxy.internal.testutils.Timer; -import com.amazonaws.serverless.proxy.model.*; +import com.amazonaws.serverless.proxy.model.AwsProxyRequestContext; +import com.amazonaws.serverless.proxy.model.ContainerConfig; +import com.amazonaws.serverless.proxy.model.Headers; +import com.amazonaws.serverless.proxy.model.MultiValuedTreeMap; import com.amazonaws.services.lambda.runtime.Context; - import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileUploadException; @@ -30,10 +32,15 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.servlet.*; -import javax.servlet.http.*; +import javax.servlet.DispatcherType; +import javax.servlet.ServletContext; +import javax.servlet.ServletException; +import javax.servlet.ServletInputStream; +import javax.servlet.http.Cookie; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import javax.servlet.http.Part; import javax.ws.rs.core.MediaType; - import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.UnsupportedEncodingException; @@ -697,6 +704,40 @@ protected List parseHeaderValue(String headerValue, String valueSep return values; } + protected List parseAcceptLanguageHeader(String headerValue) { + // Accept-Language: fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5 + List values = this.parseHeaderValue( + headerValue, ",", ";" + ); + + List locales = new ArrayList<>(); + if (values.size() == 0) { + locales.add(Locale.getDefault()); + } else { + for (HeaderValue locale : values) { + locales.add(parseLanguageTag(locale.getValue())); + } + } + + return locales; + } + + protected Locale parseLanguageTag(String languageTag) { + languageTag = languageTag.trim(); + String language; + String country = ""; + + int indexDash = languageTag.indexOf('-'); + if (indexDash > -1) { + country = languageTag.substring(indexDash + 1).trim(); + language = languageTag.substring(0, indexDash).trim(); + } else { + language = languageTag; + } + + return new Locale(language, country); + } + static String decodeRequestPath(String requestPath, ContainerConfig config) { try { return URLDecoder.decode(requestPath, config.getUriEncoding()); diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java index 61486bc74..c85bf80a4 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java @@ -20,7 +20,6 @@ import com.amazonaws.serverless.proxy.model.Headers; import com.amazonaws.serverless.proxy.model.RequestSource; import com.amazonaws.services.lambda.runtime.Context; - import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -29,7 +28,6 @@ import javax.servlet.http.*; import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.SecurityContext; - import java.io.BufferedReader; import java.io.IOException; import java.io.StringReader; @@ -38,15 +36,7 @@ import java.time.Instant; import java.time.ZonedDateTime; import java.time.format.DateTimeParseException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.Enumeration; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.Set; +import java.util.*; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -471,36 +461,16 @@ public String getRemoteHost() { @Override public Locale getLocale() { - // Accept-Language: fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5 - List values = this.parseHeaderValue( - request.getMultiValueHeaders().getFirst(HttpHeaders.ACCEPT_LANGUAGE), ",", ";" - ); - if (values.size() == 0) { - return Locale.getDefault(); - } - return new Locale(values.get(0).getValue()); + List locales = parseAcceptLanguageHeader(request.getMultiValueHeaders().getFirst(HttpHeaders.ACCEPT_LANGUAGE)); + return locales.size() == 0 ? Locale.getDefault() : locales.get(0); } - @Override public Enumeration getLocales() { - List values = this.parseHeaderValue( - request.getMultiValueHeaders().getFirst(HttpHeaders.ACCEPT_LANGUAGE), ",", ";" - ); - - List locales = new ArrayList<>(); - if (values.size() == 0) { - locales.add(Locale.getDefault()); - } else { - for (HeaderValue locale : values) { - locales.add(new Locale(locale.getValue())); - } - } - + List locales = parseAcceptLanguageHeader(request.getMultiValueHeaders().getFirst(HttpHeaders.ACCEPT_LANGUAGE)); return Collections.enumeration(locales); } - @Override public boolean isSecure() { return securityContext.isSecure(); From 4de5f4be69b47007d6b325e99c70e4658d482a2a Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 24 Apr 2023 08:09:21 +0200 Subject: [PATCH 303/888] chore(deps): Update Spring dependencies (framework to 5.3.27, security to 5.7.8, boot to 2.7.11) --- aws-serverless-java-container-core/pom.xml | 2 +- aws-serverless-java-container-spring/pom.xml | 4 ++-- aws-serverless-java-container-springboot2/pom.xml | 6 +++--- .../src/main/resources/archetype-resources/build.gradle | 4 ++-- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/spring/pet-store/build.gradle | 4 ++-- samples/spring/pet-store/pom.xml | 2 +- samples/springboot2/pet-store/build.gradle | 2 +- samples/springboot2/pet-store/pom.xml | 2 +- 11 files changed, 16 insertions(+), 16 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 462cbc83c..584c39842 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -105,7 +105,7 @@ org.springframework.security spring-security-web - 5.7.7 + 5.7.8 test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 7a58ac1d3..444b95be0 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -16,8 +16,8 @@ - 5.3.26 - 5.7.7 + 5.3.27 + 5.7.8 diff --git a/aws-serverless-java-container-springboot2/pom.xml b/aws-serverless-java-container-springboot2/pom.xml index d9dfb4aaf..33bb8171b 100644 --- a/aws-serverless-java-container-springboot2/pom.xml +++ b/aws-serverless-java-container-springboot2/pom.xml @@ -15,9 +15,9 @@ 1.10-SNAPSHOT - 5.3.26 - 2.7.10 - 5.7.7 + 5.3.27 + 2.7.11 + 5.7.8 1.8 1.8 diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index 126348451..713fc0eb1 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -7,8 +7,8 @@ repositories { dependencies { implementation ( - 'org.springframework:spring-webmvc:5.3.26', - 'org.springframework:spring-context:5.3.26', + 'org.springframework:spring-webmvc:5.3.27', + 'org.springframework:spring-context:5.3.27', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[1.0,)', 'org.apache.logging.log4j:log4j-core:2.19.0', 'org.apache.logging.log4j:log4j-api:2.19.0', diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index 5f30c5c78..3fbd51264 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 1.8 - 5.3.26 + 5.3.27 4.13.2 2.19.0 diff --git a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle index 36a13b5d7..d6946e7f0 100644 --- a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle @@ -8,7 +8,7 @@ repositories { dependencies { implementation ( - 'org.springframework.boot:spring-boot-starter-web:2.7.10', + 'org.springframework.boot:spring-boot-starter-web:2.7.11', 'com.amazonaws.serverless:aws-serverless-java-container-springboot2:[1.0,)', 'io.symphonia:lambda-logging:1.0.3' ) diff --git a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml index 5612389cd..53404bdb1 100644 --- a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ org.springframework.boot spring-boot-starter-parent - 2.7.10 + 2.7.11 diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index 261f094c4..4d5a460fe 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -7,8 +7,8 @@ repositories { dependencies { implementation ( - 'org.springframework:spring-webmvc:5.3.26', - 'org.springframework:spring-context:5.3.26', + 'org.springframework:spring-webmvc:5.3.27', + 'org.springframework:spring-context:5.3.27', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[1.0,)', 'org.apache.logging.log4j:log4j-core:2.19.0', 'org.apache.logging.log4j:log4j-api:2.19.0', diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index c467c4984..73cf9dc1a 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -26,7 +26,7 @@ 1.8 1.8 - 5.3.26 + 5.3.27 4.13.2 2.19.0 diff --git a/samples/springboot2/pet-store/build.gradle b/samples/springboot2/pet-store/build.gradle index 5f4624197..60affd722 100644 --- a/samples/springboot2/pet-store/build.gradle +++ b/samples/springboot2/pet-store/build.gradle @@ -8,7 +8,7 @@ repositories { dependencies { implementation ( - implementation('org.springframework.boot:spring-boot-starter-web:2.7.10') { + implementation('org.springframework.boot:spring-boot-starter-web:2.7.11') { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat' }, 'com.amazonaws.serverless:aws-serverless-java-container-springboot2:[1.4,)', diff --git a/samples/springboot2/pet-store/pom.xml b/samples/springboot2/pet-store/pom.xml index 202d9c343..534d565d7 100644 --- a/samples/springboot2/pet-store/pom.xml +++ b/samples/springboot2/pet-store/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 2.7.10 + 2.7.11 From fe6cb1752af37fa79345c1798aa229a1ea350692 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 24 Apr 2023 08:58:36 +0200 Subject: [PATCH 304/888] chore(deps): Update Apache HttpComponents dependencies (httpmime, httpclient to 4.5.14, httpcore to 4.4.16) --- aws-serverless-java-container-core/pom.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 584c39842..f86819ecc 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -68,7 +68,7 @@ org.apache.httpcomponents httpmime - 4.5.13 + 4.5.14 compile @@ -76,7 +76,7 @@ org.apache.httpcomponents httpclient - 4.5.13 + 4.5.14 test @@ -97,7 +97,7 @@ org.apache.httpcomponents httpcore - 4.4.15 + 4.4.16 compile true From c9c0ab53fb54388e355000fe387955d0e2c42150 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 24 Apr 2023 09:14:37 +0200 Subject: [PATCH 305/888] chore(deps): Update Jackson dependency to 2.15.0 --- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/build.gradle | 4 ++-- .../src/main/resources/archetype-resources/pom.xml | 2 +- pom.xml | 2 +- samples/jersey/pet-store/build.gradle | 2 +- samples/jersey/pet-store/pom.xml | 2 +- samples/spark/pet-store/build.gradle | 2 +- samples/spark/pet-store/pom.xml | 2 +- samples/spring/pet-store/build.gradle | 2 +- samples/struts/pet-store/build.gradle | 4 ++-- samples/struts/pet-store/pom.xml | 2 +- 15 files changed, 17 insertions(+), 17 deletions(-) diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle index 6ed4bc370..949112fcf 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle @@ -8,7 +8,7 @@ repositories { dependencies { implementation ( 'com.amazonaws.serverless:aws-serverless-java-container-jersey:[1.9,)', - 'com.fasterxml.jackson.core:jackson-databind:2.14.2', + 'com.fasterxml.jackson.core:jackson-databind:2.15.0', 'io.symphonia:lambda-logging:1.0.3' ) diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml index 195dcf39d..1783f79a3 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml @@ -15,7 +15,7 @@ 1.8 1.8 2.39.1 - 2.14.2 + 2.15.0 diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle index 3632fe38a..73adc7fed 100644 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle @@ -9,7 +9,7 @@ dependencies { implementation ( 'com.sparkjava:spark-core:2.9.4', 'com.amazonaws.serverless:aws-serverless-java-container-spark:[1.0,)', - 'com.fasterxml.jackson.core:jackson-databind:2.14.2', + 'com.fasterxml.jackson.core:jackson-databind:2.15.0', 'io.symphonia:lambda-logging:1.0.3' ) diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml index 21eaced6e..358bbd5ec 100644 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 1.8 - 2.14.2 + 2.15.0 2.9.1 diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index 713fc0eb1..66093c4b1 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -13,7 +13,7 @@ dependencies { 'org.apache.logging.log4j:log4j-core:2.19.0', 'org.apache.logging.log4j:log4j-api:2.19.0', 'org.apache.logging.log4j:log4j-slf4j-impl:2.19.0', - 'com.fasterxml.jackson.core:jackson-databind:2.14.2', + 'com.fasterxml.jackson.core:jackson-databind:2.15.0', 'com.amazonaws:aws-lambda-java-log4j2:1.5.1', ) diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle index a944bcdaf..83e8e8bb0 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle @@ -34,8 +34,8 @@ dependencies { exclude group: 'org.apache.logging.log4j', module: 'log4j-api' } implementation ('org.hibernate.validator:hibernate-validator:6.1.7.Final') - implementation ('com.fasterxml.jackson.core:jackson-databind:2.14.2') - implementation ('com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.14.2') + implementation ('com.fasterxml.jackson.core:jackson-databind:2.15.0') + implementation ('com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.15.0') implementation ('org.apache.logging.log4j:log4j-core:2.19.0') implementation ('org.apache.logging.log4j:log4j-api:2.19.0') implementation ('org.apache.logging.log4j:log4j-slf4j-impl:2.19.0') diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml index b9abc256b..c7aafda35 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 1.8 6.1.2 - 2.14.2 + 2.15.0 4.13.2 2.19.0 diff --git a/pom.xml b/pom.xml index 2c3ff9524..3bf6fbf0d 100644 --- a/pom.xml +++ b/pom.xml @@ -82,7 +82,7 @@ 0.7 8.1.2 - 2.14.2 + 2.15.0 2.0.7 5.9.2 4.11.0 diff --git a/samples/jersey/pet-store/build.gradle b/samples/jersey/pet-store/build.gradle index c0f5bd933..b32dc8ef8 100644 --- a/samples/jersey/pet-store/build.gradle +++ b/samples/jersey/pet-store/build.gradle @@ -8,7 +8,7 @@ repositories { dependencies { implementation ( 'com.amazonaws.serverless:aws-serverless-java-container-jersey:[1.9,)', - 'com.fasterxml.jackson.core:jackson-databind:2.14.2', + 'com.fasterxml.jackson.core:jackson-databind:2.15.0', 'io.symphonia:lambda-logging:1.0.3' ) diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index 521112399..f6b5bed42 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -27,7 +27,7 @@ 1.8 1.8 2.39.1 - 2.14.2 + 2.15.0 diff --git a/samples/spark/pet-store/build.gradle b/samples/spark/pet-store/build.gradle index f90fcd3c3..78b700c35 100644 --- a/samples/spark/pet-store/build.gradle +++ b/samples/spark/pet-store/build.gradle @@ -9,7 +9,7 @@ dependencies { implementation ( 'com.sparkjava:spark-core:2.9.4', 'com.amazonaws.serverless:aws-serverless-java-container-spark:[1.0,)', - 'com.fasterxml.jackson.core:jackson-databind:2.14.2', + 'com.fasterxml.jackson.core:jackson-databind:2.15.0', 'io.symphonia:lambda-logging:1.0.3' ) } diff --git a/samples/spark/pet-store/pom.xml b/samples/spark/pet-store/pom.xml index fe887dbd5..e2d89cb30 100644 --- a/samples/spark/pet-store/pom.xml +++ b/samples/spark/pet-store/pom.xml @@ -26,7 +26,7 @@ 1.8 1.8 - 2.14.2 + 2.15.0 2.9.1 diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index 4d5a460fe..759aa0610 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -13,7 +13,7 @@ dependencies { 'org.apache.logging.log4j:log4j-core:2.19.0', 'org.apache.logging.log4j:log4j-api:2.19.0', 'org.apache.logging.log4j:log4j-slf4j-impl:2.19.0', - 'com.fasterxml.jackson.core:jackson-databind:2.14.2', + 'com.fasterxml.jackson.core:jackson-databind:2.15.0', 'com.amazonaws:aws-lambda-java-log4j2:1.5.1', ) } diff --git a/samples/struts/pet-store/build.gradle b/samples/struts/pet-store/build.gradle index d48136b41..bd4738f0f 100644 --- a/samples/struts/pet-store/build.gradle +++ b/samples/struts/pet-store/build.gradle @@ -22,8 +22,8 @@ dependencies { 'org.hibernate.validator:hibernate-validator:6.1.7.Final', 'org.glassfish:javax.el:3.0.0', 'javax.el:javax.el-api:3.0.0', - 'com.fasterxml.jackson.core:jackson-databind:2.14.2', - 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.14.2', + 'com.fasterxml.jackson.core:jackson-databind:2.15.0', + 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.15.0', 'org.apache.logging.log4j:log4j-core:2.19.0', 'org.apache.logging.log4j:log4j-api:2.19.0', 'com.amazonaws:aws-lambda-java-log4j2:1.5.1', diff --git a/samples/struts/pet-store/pom.xml b/samples/struts/pet-store/pom.xml index 6741d350e..2a90ffc05 100644 --- a/samples/struts/pet-store/pom.xml +++ b/samples/struts/pet-store/pom.xml @@ -27,7 +27,7 @@ 1.8 1.8 6.1.2 - 2.14.2 + 2.15.0 4.13.2 2.19.0 From a4c406e49316b4d2972d28f7054233172cf21bd3 Mon Sep 17 00:00:00 2001 From: deki Date: Mon, 24 Apr 2023 08:13:21 +0000 Subject: [PATCH 306/888] chore: release -prepare release aws-serverless-java-container-1.9.3 --- aws-serverless-java-container-core/pom.xml | 4 ++-- aws-serverless-java-container-jersey/pom.xml | 6 +++--- aws-serverless-java-container-spark/pom.xml | 6 +++--- aws-serverless-java-container-spring/pom.xml | 6 +++--- aws-serverless-java-container-springboot2/pom.xml | 6 +++--- aws-serverless-java-container-struts/pom.xml | 6 +++--- aws-serverless-jersey-archetype/pom.xml | 6 +++--- aws-serverless-spark-archetype/pom.xml | 6 +++--- aws-serverless-spring-archetype/pom.xml | 6 +++--- aws-serverless-springboot2-archetype/pom.xml | 6 +++--- aws-serverless-struts-archetype/pom.xml | 6 +++--- pom.xml | 4 ++-- 12 files changed, 34 insertions(+), 34 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index f86819ecc..1f0978bf8 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Core Allows Java applications written for a servlet container to run in AWS Lambda https://aws.amazon.com/lambda - 1.10-SNAPSHOT + 1.9.3 com.amazonaws.serverless aws-serverless-java-container - 1.10-SNAPSHOT + 1.9.3 .. diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index ae8949859..290b5cf93 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Jersey implementation Allows Java applications written for Jersey to run in AWS Lambda https://aws.amazon.com/lambda - 1.10-SNAPSHOT + 1.9.3 com.amazonaws.serverless aws-serverless-java-container - 1.10-SNAPSHOT + 1.9.3 .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.10-SNAPSHOT + 1.9.3 com.fasterxml.jackson.core diff --git a/aws-serverless-java-container-spark/pom.xml b/aws-serverless-java-container-spark/pom.xml index f5ea6b868..d5210669a 100644 --- a/aws-serverless-java-container-spark/pom.xml +++ b/aws-serverless-java-container-spark/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spark implementation Allows Java applications written for Spark to run in AWS Lambda https://aws.amazon.com/lambda - 1.10-SNAPSHOT + 1.9.3 com.amazonaws.serverless aws-serverless-java-container - 1.10-SNAPSHOT + 1.9.3 .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.10-SNAPSHOT + 1.9.3 diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 444b95be0..82b2286c8 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spring implementation Allows Java applications written for the Spring framework to run in AWS Lambda https://aws.amazon.com/lambda - 1.10-SNAPSHOT + 1.9.3 com.amazonaws.serverless aws-serverless-java-container - 1.10-SNAPSHOT + 1.9.3 .. @@ -25,7 +25,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.10-SNAPSHOT + 1.9.3 diff --git a/aws-serverless-java-container-springboot2/pom.xml b/aws-serverless-java-container-springboot2/pom.xml index 33bb8171b..db2253006 100644 --- a/aws-serverless-java-container-springboot2/pom.xml +++ b/aws-serverless-java-container-springboot2/pom.xml @@ -3,7 +3,7 @@ aws-serverless-java-container com.amazonaws.serverless - 1.10-SNAPSHOT + 1.9.3 4.0.0 @@ -12,7 +12,7 @@ AWS Serverless Java container support - SpringBoot 2 implementation Allows Java applications written for SpringBoot 2 to run in AWS Lambda https://aws.amazon.com/lambda - 1.10-SNAPSHOT + 1.9.3 5.3.27 @@ -27,7 +27,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.10-SNAPSHOT + 1.9.3 diff --git a/aws-serverless-java-container-struts/pom.xml b/aws-serverless-java-container-struts/pom.xml index 1c628e943..3a8857551 100644 --- a/aws-serverless-java-container-struts/pom.xml +++ b/aws-serverless-java-container-struts/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Struts implementation Allows Java applications written for the Struts framework to run in AWS Lambda https://aws.amazon.com/lambda - 1.10-SNAPSHOT + 1.9.3 com.amazonaws.serverless aws-serverless-java-container - 1.10-SNAPSHOT + 1.9.3 @@ -23,7 +23,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.10-SNAPSHOT + 1.9.3 diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index c13c05869..57df9ba3d 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.10-SNAPSHOT + 1.9.3 com.amazonaws.serverless.archetypes aws-serverless-jersey-archetype - 1.10-SNAPSHOT + 1.9.3 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.9.3 diff --git a/aws-serverless-spark-archetype/pom.xml b/aws-serverless-spark-archetype/pom.xml index ca3ad3952..6d58e076f 100644 --- a/aws-serverless-spark-archetype/pom.xml +++ b/aws-serverless-spark-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.10-SNAPSHOT + 1.9.3 com.amazonaws.serverless.archetypes aws-serverless-spark-archetype - 1.10-SNAPSHOT + 1.9.3 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.9.3 diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index 83dc79743..1adb0f474 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.10-SNAPSHOT + 1.9.3 com.amazonaws.serverless.archetypes aws-serverless-spring-archetype - 1.10-SNAPSHOT + 1.9.3 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.9.3 diff --git a/aws-serverless-springboot2-archetype/pom.xml b/aws-serverless-springboot2-archetype/pom.xml index 1e7279dbf..d6a2f1d43 100644 --- a/aws-serverless-springboot2-archetype/pom.xml +++ b/aws-serverless-springboot2-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.10-SNAPSHOT + 1.9.3 com.amazonaws.serverless.archetypes aws-serverless-springboot2-archetype - 1.10-SNAPSHOT + 1.9.3 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.9.3 diff --git a/aws-serverless-struts-archetype/pom.xml b/aws-serverless-struts-archetype/pom.xml index b91cfa4bd..e60f19e34 100644 --- a/aws-serverless-struts-archetype/pom.xml +++ b/aws-serverless-struts-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.10-SNAPSHOT + 1.9.3 com.amazonaws.serverless.archetypes aws-serverless-struts-archetype - 1.10-SNAPSHOT + 1.9.3 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.9.3 diff --git a/pom.xml b/pom.xml index 3bf6fbf0d..09e91ab36 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazonaws.serverless aws-serverless-java-container pom - 1.10-SNAPSHOT + 1.9.3 AWS Serverless Java container A Java framework to run Spring, Spring Boot, Jersey, Spark, and Struts applications inside AWS Lambda https://github.com/awslabs/aws-serverless-java-container @@ -41,7 +41,7 @@ https://github.com/awslabs/aws-serverless-java-container scm:git:https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-1.9.3 From 063b443eaa06b137ff50ef1302e766bc28577ce2 Mon Sep 17 00:00:00 2001 From: deki Date: Mon, 24 Apr 2023 08:13:23 +0000 Subject: [PATCH 307/888] chore: release -prepare for next development iteration --- aws-serverless-java-container-core/pom.xml | 4 ++-- aws-serverless-java-container-jersey/pom.xml | 6 +++--- aws-serverless-java-container-spark/pom.xml | 6 +++--- aws-serverless-java-container-spring/pom.xml | 6 +++--- aws-serverless-java-container-springboot2/pom.xml | 6 +++--- aws-serverless-java-container-struts/pom.xml | 6 +++--- aws-serverless-jersey-archetype/pom.xml | 6 +++--- aws-serverless-spark-archetype/pom.xml | 6 +++--- aws-serverless-spring-archetype/pom.xml | 6 +++--- aws-serverless-springboot2-archetype/pom.xml | 6 +++--- aws-serverless-struts-archetype/pom.xml | 6 +++--- pom.xml | 4 ++-- 12 files changed, 34 insertions(+), 34 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 1f0978bf8..f86819ecc 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Core Allows Java applications written for a servlet container to run in AWS Lambda https://aws.amazon.com/lambda - 1.9.3 + 1.10-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.9.3 + 1.10-SNAPSHOT .. diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index 290b5cf93..ae8949859 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Jersey implementation Allows Java applications written for Jersey to run in AWS Lambda https://aws.amazon.com/lambda - 1.9.3 + 1.10-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.9.3 + 1.10-SNAPSHOT .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.9.3 + 1.10-SNAPSHOT com.fasterxml.jackson.core diff --git a/aws-serverless-java-container-spark/pom.xml b/aws-serverless-java-container-spark/pom.xml index d5210669a..f5ea6b868 100644 --- a/aws-serverless-java-container-spark/pom.xml +++ b/aws-serverless-java-container-spark/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spark implementation Allows Java applications written for Spark to run in AWS Lambda https://aws.amazon.com/lambda - 1.9.3 + 1.10-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.9.3 + 1.10-SNAPSHOT .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.9.3 + 1.10-SNAPSHOT diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 82b2286c8..444b95be0 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spring implementation Allows Java applications written for the Spring framework to run in AWS Lambda https://aws.amazon.com/lambda - 1.9.3 + 1.10-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.9.3 + 1.10-SNAPSHOT .. @@ -25,7 +25,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.9.3 + 1.10-SNAPSHOT diff --git a/aws-serverless-java-container-springboot2/pom.xml b/aws-serverless-java-container-springboot2/pom.xml index db2253006..33bb8171b 100644 --- a/aws-serverless-java-container-springboot2/pom.xml +++ b/aws-serverless-java-container-springboot2/pom.xml @@ -3,7 +3,7 @@ aws-serverless-java-container com.amazonaws.serverless - 1.9.3 + 1.10-SNAPSHOT 4.0.0 @@ -12,7 +12,7 @@ AWS Serverless Java container support - SpringBoot 2 implementation Allows Java applications written for SpringBoot 2 to run in AWS Lambda https://aws.amazon.com/lambda - 1.9.3 + 1.10-SNAPSHOT 5.3.27 @@ -27,7 +27,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.9.3 + 1.10-SNAPSHOT diff --git a/aws-serverless-java-container-struts/pom.xml b/aws-serverless-java-container-struts/pom.xml index 3a8857551..1c628e943 100644 --- a/aws-serverless-java-container-struts/pom.xml +++ b/aws-serverless-java-container-struts/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Struts implementation Allows Java applications written for the Struts framework to run in AWS Lambda https://aws.amazon.com/lambda - 1.9.3 + 1.10-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.9.3 + 1.10-SNAPSHOT @@ -23,7 +23,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.9.3 + 1.10-SNAPSHOT diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index 57df9ba3d..c13c05869 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.9.3 + 1.10-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-jersey-archetype - 1.9.3 + 1.10-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.9.3 + HEAD diff --git a/aws-serverless-spark-archetype/pom.xml b/aws-serverless-spark-archetype/pom.xml index 6d58e076f..ca3ad3952 100644 --- a/aws-serverless-spark-archetype/pom.xml +++ b/aws-serverless-spark-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.9.3 + 1.10-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-spark-archetype - 1.9.3 + 1.10-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.9.3 + HEAD diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index 1adb0f474..83dc79743 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.9.3 + 1.10-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-spring-archetype - 1.9.3 + 1.10-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.9.3 + HEAD diff --git a/aws-serverless-springboot2-archetype/pom.xml b/aws-serverless-springboot2-archetype/pom.xml index d6a2f1d43..1e7279dbf 100644 --- a/aws-serverless-springboot2-archetype/pom.xml +++ b/aws-serverless-springboot2-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.9.3 + 1.10-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-springboot2-archetype - 1.9.3 + 1.10-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.9.3 + HEAD diff --git a/aws-serverless-struts-archetype/pom.xml b/aws-serverless-struts-archetype/pom.xml index e60f19e34..b91cfa4bd 100644 --- a/aws-serverless-struts-archetype/pom.xml +++ b/aws-serverless-struts-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 1.9.3 + 1.10-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-struts-archetype - 1.9.3 + 1.10-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.9.3 + HEAD diff --git a/pom.xml b/pom.xml index 09e91ab36..3bf6fbf0d 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazonaws.serverless aws-serverless-java-container pom - 1.9.3 + 1.10-SNAPSHOT AWS Serverless Java container A Java framework to run Spring, Spring Boot, Jersey, Spark, and Struts applications inside AWS Lambda https://github.com/awslabs/aws-serverless-java-container @@ -41,7 +41,7 @@ https://github.com/awslabs/aws-serverless-java-container scm:git:https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-1.9.3 + HEAD From e806b75283ccea7a12dbc87a402be3ed8fadad6d Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 24 Apr 2023 10:40:17 +0200 Subject: [PATCH 308/888] doc: created overview about maintained versions --- README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.md b/README.md index d4c836e28..895313892 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,13 @@ The `aws-serverless-java-container` makes it easy to run Java applications writt Serverless Java Container natively supports API Gateway's proxy integration models for requests and responses, you can create and inject custom models for methods that use custom mappings. +Currently the following versions are maintained: + +| Version | Branch | Java Enterprise support | Spring versions | JAX-RS/ Jersey version | Struts support | Spark support | +|--------------------------|--------|-------------------------|-----------------|------------------------|----------------|---------------| +| 1.x (stable) | [1.x](https://github.com/awslabs/aws-serverless-java-container/tree/1.x) | Java EE (javax.*) | 5.x (Boot 2.x) | 2.x | :white_check_mark: | :white_check_mark: | +| 2.x (under development) | [main](https://github.com/awslabs/aws-serverless-java-container/tree/main) | Jakarta EE (jakarta.*) | 6.x (Boot 3.x) | 3.x | :x: | :x: | + Follow the quick start guides in [our wiki](https://github.com/awslabs/aws-serverless-java-container/wiki) to integrate Serverless Java Container with your project: * [Spring quick start](https://github.com/awslabs/aws-serverless-java-container/wiki/Quick-start---Spring) * [Spring Boot 2 quick start](https://github.com/awslabs/aws-serverless-java-container/wiki/Quick-start---Spring-Boot2) From dd524dc35592c5113d9651c088fade9975c21b98 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 24 Apr 2023 10:44:30 +0200 Subject: [PATCH 309/888] chore: enable CI build for 1.x branch --- .github/workflows/continuous-integration-workflow.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/continuous-integration-workflow.yml b/.github/workflows/continuous-integration-workflow.yml index 2aaf17617..4942f3564 100644 --- a/.github/workflows/continuous-integration-workflow.yml +++ b/.github/workflows/continuous-integration-workflow.yml @@ -4,6 +4,7 @@ on: pull_request: branches: - main + - 1.x workflow_dispatch: jobs: From 749cad712575ab9890aa35a38c87bea49f7eea61 Mon Sep 17 00:00:00 2001 From: Mbea Date: Fri, 31 Mar 2023 16:27:37 -0700 Subject: [PATCH 310/888] Updated versions of Spring, Spring Security, Springboot spring-security-web, servlet API, commons-fileupload. --- aws-serverless-java-container-core/pom.xml | 44 +++++++++++++++---- .../AwsHttpApiV2SecurityContextWriter.java | 2 +- .../proxy/AwsProxyExceptionHandler.java | 6 +-- .../proxy/AwsProxySecurityContextWriter.java | 2 +- .../serverless/proxy/LogFormatter.java | 2 +- .../serverless/proxy/RequestReader.java | 2 +- .../proxy/SecurityContextWriter.java | 2 +- .../internal/LambdaContainerHandler.java | 2 +- .../jaxrs/AwsHttpApiV2SecurityContext.java | 4 +- .../jaxrs/AwsProxySecurityContext.java | 3 +- .../ApacheCombinedServletLogFormatter.java | 7 ++- .../internal/servlet/AwsAsyncContext.java | 6 +-- .../AwsHttpApiV2HttpServletRequestReader.java | 4 +- .../AwsHttpApiV2ProxyHttpServletRequest.java | 8 ++-- .../servlet/AwsHttpServletRequest.java | 33 +++++--------- .../servlet/AwsHttpServletRequestWrapper.java | 4 +- .../servlet/AwsHttpServletResponse.java | 16 +++---- .../internal/servlet/AwsHttpSession.java | 6 +-- .../AwsLambdaServletContainerHandler.java | 10 ++--- .../servlet/AwsProxyHttpServletRequest.java | 32 +++++++++----- .../AwsProxyHttpServletRequestReader.java | 8 ++-- .../AwsProxyHttpServletResponseWriter.java | 4 +- .../servlet/AwsProxyRequestDispatcher.java | 6 +-- .../internal/servlet/AwsProxyRequestPart.java | 2 +- .../internal/servlet/AwsServletContext.java | 43 ++++++++++++++++-- .../servlet/AwsServletInputStream.java | 4 +- .../servlet/AwsServletRegistration.java | 2 +- .../internal/servlet/FilterChainHolder.java | 2 +- .../internal/servlet/FilterChainManager.java | 4 +- .../proxy/internal/servlet/FilterHolder.java | 6 +-- .../ServletLambdaContainerHandlerBuilder.java | 2 +- .../servlet/filters/UrlPathValidator.java | 8 ++-- .../testutils/AwsProxyRequestBuilder.java | 10 +---- .../proxy/internal/testutils/MockServlet.java | 8 ++-- .../proxy/model/MultiValuedTreeMap.java | 2 +- .../proxy/AwsProxyExceptionHandlerTest.java | 6 +-- .../AwsProxySecurityContextWriterTest.java | 3 +- .../serverless/proxy/ResponseWriterTest.java | 2 +- .../internal/LambdaContainerHandlerTest.java | 2 +- .../jaxrs/HttpApiV2SecurityContextTest.java | 4 +- ...ApacheCombinedServletLogFormatterTest.java | 5 +-- .../internal/servlet/AwsAsyncContextTest.java | 12 ++--- .../servlet/AwsFilterChainManagerTest.java | 2 +- ...HttpApiV2HttpServletRequestReaderTest.java | 4 +- .../servlet/AwsHttpServletRequestTest.java | 8 ++-- .../servlet/AwsHttpServletResponseTest.java | 6 +-- .../AwsProxyHttpServletRequestFormTest.java | 8 ++-- .../AwsProxyHttpServletRequestReaderTest.java | 8 ++-- .../AwsProxyHttpServletRequestTest.java | 8 ++-- .../AwsProxyRequestDispatcherTest.java | 8 ++-- .../servlet/AwsServletContextTest.java | 6 +-- .../servlet/AwsServletRegistrationTest.java | 2 +- ...vletLambdaContainerHandlerBuilderTest.java | 2 +- .../servlet/filters/UrlPathValidatorTest.java | 9 ++-- .../pom.xml | 14 +++--- .../SpringBootLambdaContainerHandler.java | 14 ++---- .../spring/SpringBootProxyHandlerBuilder.java | 4 +- ...sReactiveServletEmbeddedServerFactory.java | 2 +- ...erverlessServletEmbeddedServerFactory.java | 2 +- .../proxy/spring/SecurityAppTest.java | 4 +- .../proxy/spring/ServletAppTest.java | 5 +-- ...rlessServletEmbeddedServerFactoryTest.java | 4 +- .../spring/servletapp/MessageController.java | 2 +- .../proxy/spring/servletapp/UserData.java | 6 +-- 64 files changed, 250 insertions(+), 218 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index f86819ecc..82135d77a 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -17,9 +17,24 @@ 2.1.1 - 3.1.0 + 5.0.0 + + + apache.snapshots + Apache Development Snapshot Repository + https://repository.apache.org/content/repositories/snapshots/ + + false + + + true + + + + + @@ -30,16 +45,16 @@ - javax.servlet - javax.servlet-api - ${servlet.version} + jakarta.servlet + jakarta.servlet-api + 5.0.0 - javax.ws.rs - javax.ws.rs-api - ${jaxrs.version} + jakarta.ws.rs + jakarta.ws.rs-api + 3.0.0-M1 @@ -58,10 +73,15 @@ - + + + org.apache.commons + commons-fileupload2 + 2.0-SNAPSHOT @@ -105,9 +125,14 @@ org.springframework.security spring-security-web - 5.7.8 + 6.0.2 test + + jakarta.activation + jakarta.activation-api + 2.1.0 + @@ -220,4 +245,5 @@ + diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/AwsHttpApiV2SecurityContextWriter.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/AwsHttpApiV2SecurityContextWriter.java index 05d4ed1a2..d4192141a 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/AwsHttpApiV2SecurityContextWriter.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/AwsHttpApiV2SecurityContextWriter.java @@ -16,7 +16,7 @@ import com.amazonaws.serverless.proxy.model.HttpApiV2ProxyRequest; import com.amazonaws.services.lambda.runtime.Context; -import javax.ws.rs.core.SecurityContext; +import jakarta.ws.rs.core.SecurityContext; public class AwsHttpApiV2SecurityContextWriter implements SecurityContextWriter { @Override diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/AwsProxyExceptionHandler.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/AwsProxyExceptionHandler.java index cf2aae3e7..1e30f1415 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/AwsProxyExceptionHandler.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/AwsProxyExceptionHandler.java @@ -22,9 +22,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.ws.rs.InternalServerErrorException; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.MediaType; +import jakarta.ws.rs.InternalServerErrorException; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.MediaType; import java.io.IOException; import java.io.OutputStream; diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/AwsProxySecurityContextWriter.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/AwsProxySecurityContextWriter.java index 4805e1193..8a58bc478 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/AwsProxySecurityContextWriter.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/AwsProxySecurityContextWriter.java @@ -16,7 +16,7 @@ import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.services.lambda.runtime.Context; -import javax.ws.rs.core.SecurityContext; +import jakarta.ws.rs.core.SecurityContext; /** * Default implementation of SecurityContextWriter. Creates a SecurityContext object based on an API Gateway diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/LogFormatter.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/LogFormatter.java index dcd524f91..8bc75ca9c 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/LogFormatter.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/LogFormatter.java @@ -12,7 +12,7 @@ */ package com.amazonaws.serverless.proxy; -import javax.ws.rs.core.SecurityContext; +import jakarta.ws.rs.core.SecurityContext; /** * Implementations of the log formatter interface are used by {@link com.amazonaws.serverless.proxy.internal.LambdaContainerHandler} class to log each request diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/RequestReader.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/RequestReader.java index e0203d76b..d8293d649 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/RequestReader.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/RequestReader.java @@ -17,7 +17,7 @@ import com.amazonaws.serverless.proxy.model.ContainerConfig; import com.amazonaws.services.lambda.runtime.Context; -import javax.ws.rs.core.SecurityContext; +import jakarta.ws.rs.core.SecurityContext; /** diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/SecurityContextWriter.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/SecurityContextWriter.java index 32430d816..27a4c6c75 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/SecurityContextWriter.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/SecurityContextWriter.java @@ -15,7 +15,7 @@ import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.services.lambda.runtime.Context; -import javax.ws.rs.core.SecurityContext; +import jakarta.ws.rs.core.SecurityContext; /** * This object is used by the container implementation to generated a Jax-Rs SecurityContext object from the diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/LambdaContainerHandler.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/LambdaContainerHandler.java index e29b1072c..d736d6373 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/LambdaContainerHandler.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/LambdaContainerHandler.java @@ -28,7 +28,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.ws.rs.core.SecurityContext; +import jakarta.ws.rs.core.SecurityContext; import java.io.IOException; import java.io.InputStream; diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/jaxrs/AwsHttpApiV2SecurityContext.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/jaxrs/AwsHttpApiV2SecurityContext.java index 6060fb2e2..f0e1f963d 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/jaxrs/AwsHttpApiV2SecurityContext.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/jaxrs/AwsHttpApiV2SecurityContext.java @@ -21,8 +21,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.SecurityContext; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.SecurityContext; import java.nio.charset.StandardCharsets; import java.security.Principal; import java.util.Base64; diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/jaxrs/AwsProxySecurityContext.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/jaxrs/AwsProxySecurityContext.java index b05822971..7c128cabe 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/jaxrs/AwsProxySecurityContext.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/jaxrs/AwsProxySecurityContext.java @@ -14,10 +14,9 @@ import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.serverless.proxy.model.CognitoAuthorizerClaims; -import com.amazonaws.serverless.proxy.model.RequestSource; import com.amazonaws.services.lambda.runtime.Context; -import javax.ws.rs.core.SecurityContext; +import jakarta.ws.rs.core.SecurityContext; import java.security.Principal; diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/ApacheCombinedServletLogFormatter.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/ApacheCombinedServletLogFormatter.java index 715e6f8d9..e0c7a7357 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/ApacheCombinedServletLogFormatter.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/ApacheCombinedServletLogFormatter.java @@ -13,15 +13,14 @@ package com.amazonaws.serverless.proxy.internal.servlet; import com.amazonaws.serverless.proxy.LogFormatter; -import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.serverless.proxy.model.AwsProxyRequestContext; import com.amazonaws.serverless.proxy.model.HttpApiV2ProxyRequestContext; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.ws.rs.core.SecurityContext; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.ws.rs.core.SecurityContext; import java.time.*; import java.time.format.DateTimeFormatter; diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContext.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContext.java index 251624541..4a46a70fa 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContext.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContext.java @@ -16,9 +16,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.servlet.*; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.*; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.ArrayList; import java.util.List; diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2HttpServletRequestReader.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2HttpServletRequestReader.java index bacedbaa4..c40740c96 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2HttpServletRequestReader.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2HttpServletRequestReader.java @@ -18,8 +18,8 @@ import com.amazonaws.serverless.proxy.model.HttpApiV2ProxyRequest; import com.amazonaws.services.lambda.runtime.Context; -import javax.servlet.http.HttpServletRequest; -import javax.ws.rs.core.SecurityContext; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.ws.rs.core.SecurityContext; public class AwsHttpApiV2HttpServletRequestReader extends RequestReader { static final String INVALID_REQUEST_ERROR = "The incoming event is not a valid HTTP API v2 proxy request"; diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2ProxyHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2ProxyHttpServletRequest.java index c03facc32..d81105bd5 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2ProxyHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2ProxyHttpServletRequest.java @@ -23,10 +23,10 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.servlet.*; -import javax.servlet.http.*; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.SecurityContext; +import jakarta.servlet.*; +import jakarta.servlet.http.*; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.SecurityContext; import java.io.BufferedReader; import java.io.IOException; import java.io.StringReader; diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java index d2157e3d8..358ccdfba 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java @@ -22,25 +22,20 @@ import com.amazonaws.serverless.proxy.model.MultiValuedTreeMap; import com.amazonaws.services.lambda.runtime.Context; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; -import org.apache.commons.fileupload.FileItem; -import org.apache.commons.fileupload.FileUploadException; -import org.apache.commons.fileupload.disk.DiskFileItemFactory; -import org.apache.commons.fileupload.servlet.ServletFileUpload; +import org.apache.commons.fileupload2.FileItem; +import org.apache.commons.fileupload2.FileUploadException; +import org.apache.commons.fileupload2.disk.DiskFileItemFactory; +import org.apache.commons.fileupload2.jaksrvlt.JakSrvltFileUpload; import org.apache.commons.io.FilenameUtils; import org.apache.commons.io.IOUtils; import org.apache.commons.io.input.NullInputStream; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.servlet.DispatcherType; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; -import javax.servlet.ServletInputStream; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpSession; -import javax.servlet.http.Part; -import javax.ws.rs.core.MediaType; +import jakarta.servlet.*; +import jakarta.servlet.http.*; +import jakarta.ws.rs.core.MediaType; + import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.UnsupportedEncodingException; @@ -185,14 +180,6 @@ public boolean isRequestedSessionIdFromURL() { } - @Override - @Deprecated - public boolean isRequestedSessionIdFromUrl() { - log.debug("Trying to access session. Lambda functions are stateless and should not rely on the session"); - return false; - } - - //------------------------------------------------------------- // Implementation - ServletRequest //------------------------------------------------------------- @@ -525,14 +512,14 @@ protected Map getMultipartFormParametersMap() { if (multipartFormParameters != null) { return multipartFormParameters; } - if (!ServletFileUpload.isMultipartContent(this)) { // isMultipartContent also checks the content type + if (!JakSrvltFileUpload.isMultipartContent(this)) { // isMultipartContent also checks the content type multipartFormParameters = new HashMap<>(); return multipartFormParameters; } Timer.start("SERVLET_REQUEST_GET_MULTIPART_PARAMS"); multipartFormParameters = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); - ServletFileUpload upload = new ServletFileUpload(new DiskFileItemFactory()); + JakSrvltFileUpload upload = new JakSrvltFileUpload(new DiskFileItemFactory()); try { List items = upload.parseRequest(this); diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestWrapper.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestWrapper.java index e151c03da..d87b707ec 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestWrapper.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestWrapper.java @@ -15,8 +15,8 @@ import com.amazonaws.serverless.proxy.internal.LambdaContainerHandler; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; -import javax.servlet.*; -import javax.servlet.http.*; +import jakarta.servlet.*; +import jakarta.servlet.http.*; import java.io.BufferedReader; import java.io.IOException; import java.io.UnsupportedEncodingException; diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponse.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponse.java index 65677d00a..814958dfa 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponse.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponse.java @@ -21,14 +21,14 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.servlet.DispatcherType; -import javax.servlet.ServletOutputStream; -import javax.servlet.WriteListener; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.MediaType; +import jakarta.servlet.DispatcherType; +import jakarta.servlet.ServletOutputStream; +import jakarta.servlet.WriteListener; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.MediaType; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpSession.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpSession.java index 8c3df7f86..eb1f728f9 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpSession.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpSession.java @@ -15,9 +15,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.servlet.ServletContext; -import javax.servlet.http.HttpSession; -import javax.servlet.http.HttpSessionContext; +import jakarta.servlet.ServletContext; +import jakarta.servlet.http.HttpSession; +import jakarta.servlet.http.HttpSessionContext; import java.time.Instant; import java.util.Collections; diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsLambdaServletContainerHandler.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsLambdaServletContainerHandler.java index 52631da54..b35bba92c 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsLambdaServletContainerHandler.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsLambdaServletContainerHandler.java @@ -19,18 +19,16 @@ import com.amazonaws.serverless.proxy.ResponseWriter; import com.amazonaws.serverless.proxy.SecurityContextWriter; -import com.amazonaws.services.lambda.runtime.Context; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.servlet.*; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpServletResponseWrapper; +import jakarta.servlet.*; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletResponseWrapper; import java.io.IOException; import java.util.*; -import java.util.stream.Collectors; /** diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java index c85bf80a4..a4ee15150 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java @@ -24,10 +24,11 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.servlet.*; -import javax.servlet.http.*; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.SecurityContext; +import jakarta.servlet.*; +import jakarta.servlet.http.*; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.SecurityContext; + import java.io.BufferedReader; import java.io.IOException; import java.io.StringReader; @@ -483,14 +484,6 @@ public RequestDispatcher getRequestDispatcher(String s) { } - @Override - @Deprecated - public String getRealPath(String s) { - // we are in an archive on a remote server - return null; - } - - @Override public int getRemotePort() { return 0; @@ -542,6 +535,21 @@ public AsyncContext getAsyncContext() { return asyncContext; } + @Override + public String getRequestId() { + return request.getRequestContext().getRequestId(); + } + + @Override + public String getProtocolRequestId() { + return ""; + } + + @Override + public ServletConnection getServletConnection() { + return null; + } + //------------------------------------------------------------- // Methods - Private //------------------------------------------------------------- diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestReader.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestReader.java index 932041db9..ec56285f7 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestReader.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestReader.java @@ -18,10 +18,10 @@ import com.amazonaws.serverless.proxy.model.ContainerConfig; import com.amazonaws.services.lambda.runtime.Context; -import javax.servlet.ServletContext; -import javax.servlet.http.HttpServletRequest; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.SecurityContext; +import jakarta.servlet.ServletContext; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.SecurityContext; /** * Simple implementation of the RequestReader interface that receives an AwsProxyRequest diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletResponseWriter.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletResponseWriter.java index b6061e1e7..0e230e9a7 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletResponseWriter.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletResponseWriter.java @@ -22,8 +22,8 @@ import com.amazonaws.serverless.proxy.model.RequestSource; import com.amazonaws.services.lambda.runtime.Context; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.Response.Status; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.Response.Status; import java.util.Base64; import java.util.HashMap; diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyRequestDispatcher.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyRequestDispatcher.java index fc52d1dba..5ed2ccf44 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyRequestDispatcher.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyRequestDispatcher.java @@ -19,9 +19,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.servlet.*; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.*; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyRequestPart.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyRequestPart.java index a6a418c2c..c2d1fa62d 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyRequestPart.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyRequestPart.java @@ -17,7 +17,7 @@ import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; -import javax.servlet.http.Part; +import jakarta.servlet.http.Part; import java.io.ByteArrayInputStream; import java.io.FileOutputStream; import java.io.IOException; diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java index 44ec701ee..a362dfc25 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java @@ -20,9 +20,10 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.activation.MimetypesFileTypeMap; -import javax.servlet.*; -import javax.servlet.descriptor.JspConfigDescriptor; +import jakarta.activation.MimetypesFileTypeMap; +import jakarta.servlet.*; +import jakarta.servlet.ServletContext; +import jakarta.servlet.descriptor.JspConfigDescriptor; import java.io.File; import java.io.InputStream; @@ -79,7 +80,6 @@ public AwsServletContext(AwsLambdaServletContainerHandler containerHandler) { this.servletRegistrations = new HashMap<>(); } - //------------------------------------------------------------- // Implementation - ServletContext //------------------------------------------------------------- @@ -95,6 +95,36 @@ public String getContextPath() { return ""; } + @Override + public void setResponseCharacterEncoding(String encoding) { + // do nothing; + } + + @Override + public String getResponseCharacterEncoding() { + return ""; + } + + @Override + public void setRequestCharacterEncoding(String encoding) { + // do nothing; + } + + @Override + public String getRequestCharacterEncoding() { + return ""; + } + + @Override + public void setSessionTimeout(int sessionTimeout) { + // do nothing; + } + + @Override + public int getSessionTimeout() { + return 1; + } + @Override public ServletContext getContext(String s) { @@ -345,6 +375,11 @@ public ServletRegistration.Dynamic addServlet(String s, Class } } + @Override + public ServletRegistration.Dynamic addJspFile(String s, String s1) { + return null; + } + @Override public T createServlet(Class aClass) throws ServletException { diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletInputStream.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletInputStream.java index 552e75a89..eb155a364 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletInputStream.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletInputStream.java @@ -16,8 +16,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.servlet.ReadListener; -import javax.servlet.ServletInputStream; +import jakarta.servlet.ReadListener; +import jakarta.servlet.ServletInputStream; import java.io.IOException; import java.io.InputStream; diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletRegistration.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletRegistration.java index 021503c13..9fdc3b3b6 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletRegistration.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletRegistration.java @@ -14,7 +14,7 @@ import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; -import javax.servlet.*; +import jakarta.servlet.*; import java.util.*; /** diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/FilterChainHolder.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/FilterChainHolder.java index bec7a8f4b..b45eed4a1 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/FilterChainHolder.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/FilterChainHolder.java @@ -16,7 +16,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.servlet.*; +import jakarta.servlet.*; import java.io.IOException; import java.util.ArrayList; diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/FilterChainManager.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/FilterChainManager.java index 1bf6f4b2a..835170bb5 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/FilterChainManager.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/FilterChainManager.java @@ -14,8 +14,8 @@ import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; -import javax.servlet.*; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.*; +import jakarta.servlet.http.HttpServletRequest; import java.io.IOException; import java.util.Collections; diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/FilterHolder.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/FilterHolder.java index 987dff14c..c3a4cdb81 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/FilterHolder.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/FilterHolder.java @@ -14,9 +14,9 @@ import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; -import javax.servlet.*; -import javax.servlet.annotation.WebFilter; -import javax.servlet.annotation.WebInitParam; +import jakarta.servlet.*; +import jakarta.servlet.annotation.WebFilter; +import jakarta.servlet.annotation.WebInitParam; import java.util.*; /** diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/ServletLambdaContainerHandlerBuilder.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/ServletLambdaContainerHandlerBuilder.java index caead2aaf..b44ec7f26 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/ServletLambdaContainerHandlerBuilder.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/ServletLambdaContainerHandlerBuilder.java @@ -18,7 +18,7 @@ import com.amazonaws.serverless.proxy.model.AwsProxyResponse; import com.amazonaws.serverless.proxy.model.HttpApiV2ProxyRequest; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import java.util.ArrayList; import java.util.List; diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/filters/UrlPathValidator.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/filters/UrlPathValidator.java index c69b39c91..aadb26efd 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/filters/UrlPathValidator.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/filters/UrlPathValidator.java @@ -15,10 +15,10 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.servlet.*; -import javax.servlet.annotation.WebFilter; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.*; +import jakarta.servlet.annotation.WebFilter; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/testutils/AwsProxyRequestBuilder.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/testutils/AwsProxyRequestBuilder.java index 6fae6db78..adcebb89d 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/testutils/AwsProxyRequestBuilder.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/testutils/AwsProxyRequestBuilder.java @@ -23,8 +23,8 @@ import org.apache.http.entity.mime.content.ByteArrayBody; import org.apache.http.entity.mime.content.StringBody; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.MediaType; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.MediaType; import java.io.ByteArrayInputStream; import java.io.File; @@ -35,12 +35,6 @@ import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.util.*; -import java.util.function.BiConsumer; -import java.util.function.BinaryOperator; -import java.util.function.Function; -import java.util.function.Supplier; -import java.util.stream.Collector; -import java.util.stream.Collectors; /** diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/testutils/MockServlet.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/testutils/MockServlet.java index b93625bfb..6dd2ade66 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/testutils/MockServlet.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/testutils/MockServlet.java @@ -2,10 +2,10 @@ import java.io.IOException; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; public class MockServlet extends HttpServlet { diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/MultiValuedTreeMap.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/MultiValuedTreeMap.java index feeab6f2b..ad0593a1f 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/MultiValuedTreeMap.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/MultiValuedTreeMap.java @@ -14,7 +14,7 @@ import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; -import javax.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.core.MultivaluedMap; import java.io.Serializable; import java.util.ArrayList; diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/AwsProxyExceptionHandlerTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/AwsProxyExceptionHandlerTest.java index dd3417db4..f94371d69 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/AwsProxyExceptionHandlerTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/AwsProxyExceptionHandlerTest.java @@ -17,9 +17,9 @@ import org.junit.jupiter.api.Test; import org.mockito.Mockito; -import javax.ws.rs.InternalServerErrorException; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.MediaType; +import jakarta.ws.rs.InternalServerErrorException; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.MediaType; import java.io.*; diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/AwsProxySecurityContextWriterTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/AwsProxySecurityContextWriterTest.java index 34af09df7..8a2134f48 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/AwsProxySecurityContextWriterTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/AwsProxySecurityContextWriterTest.java @@ -1,13 +1,12 @@ package com.amazonaws.serverless.proxy; import com.amazonaws.serverless.proxy.model.AwsProxyRequest; -import com.amazonaws.serverless.proxy.AwsProxySecurityContextWriter; import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; import com.amazonaws.services.lambda.runtime.Context; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import javax.ws.rs.core.SecurityContext; +import jakarta.ws.rs.core.SecurityContext; import java.lang.reflect.Method; diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/ResponseWriterTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/ResponseWriterTest.java index 48c544629..609fb0fdb 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/ResponseWriterTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/ResponseWriterTest.java @@ -8,7 +8,7 @@ import com.amazonaws.services.lambda.runtime.Context; import org.junit.jupiter.api.Test; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; public class ResponseWriterTest { diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/LambdaContainerHandlerTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/LambdaContainerHandlerTest.java index 31a2c575b..98b45fd1b 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/LambdaContainerHandlerTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/LambdaContainerHandlerTest.java @@ -13,7 +13,7 @@ import org.apache.http.impl.execchain.RequestAbortedException; import org.junit.jupiter.api.Test; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import java.util.concurrent.CountDownLatch; import static org.junit.jupiter.api.Assertions.*; diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/jaxrs/HttpApiV2SecurityContextTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/jaxrs/HttpApiV2SecurityContextTest.java index 0fda7b975..a4c6aa311 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/jaxrs/HttpApiV2SecurityContextTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/jaxrs/HttpApiV2SecurityContextTest.java @@ -5,8 +5,8 @@ import com.amazonaws.serverless.proxy.model.HttpApiV2ProxyRequest; import org.junit.jupiter.api.Test; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.SecurityContext; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.SecurityContext; import static org.junit.jupiter.api.Assertions.*; diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/ApacheCombinedServletLogFormatterTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/ApacheCombinedServletLogFormatterTest.java index e07932680..69b2d7985 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/ApacheCombinedServletLogFormatterTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/ApacheCombinedServletLogFormatterTest.java @@ -7,15 +7,14 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.time.Clock; import java.time.Instant; import java.time.ZoneId; import static com.amazonaws.serverless.proxy.RequestReader.API_GATEWAY_CONTEXT_PROPERTY; -import static com.amazonaws.serverless.proxy.RequestReader.API_GATEWAY_EVENT_PROPERTY; import static org.hamcrest.CoreMatchers.containsString; import static org.hamcrest.MatcherAssert.assertThat; import static org.mockito.ArgumentMatchers.eq; diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContextTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContextTest.java index b5b79bba1..2177fa8bb 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContextTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContextTest.java @@ -12,12 +12,12 @@ import com.amazonaws.services.lambda.runtime.Context; import org.junit.jupiter.api.Test; -import javax.servlet.AsyncContext; -import javax.servlet.Servlet; -import javax.servlet.ServletException; -import javax.servlet.ServletRegistration; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.AsyncContext; +import jakarta.servlet.Servlet; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRegistration; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.concurrent.CountDownLatch; diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsFilterChainManagerTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsFilterChainManagerTest.java index 4eedc0f93..7e7fba49b 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsFilterChainManagerTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsFilterChainManagerTest.java @@ -9,7 +9,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.servlet.*; +import jakarta.servlet.*; import java.io.IOException; import java.util.EnumSet; diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2HttpServletRequestReaderTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2HttpServletRequestReaderTest.java index e35fedb7d..12f694bc1 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2HttpServletRequestReaderTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2HttpServletRequestReaderTest.java @@ -7,8 +7,8 @@ import com.amazonaws.serverless.proxy.model.HttpApiV2ProxyRequestContext; import org.junit.jupiter.api.Test; -import javax.servlet.http.HttpServletRequest; -import javax.ws.rs.core.HttpHeaders; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.ws.rs.core.HttpHeaders; import static org.junit.jupiter.api.Assertions.*; diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestTest.java index 35903333b..051c12fc6 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestTest.java @@ -5,13 +5,11 @@ import com.amazonaws.serverless.proxy.internal.testutils.MockLambdaContext; import com.amazonaws.serverless.proxy.model.ContainerConfig; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.jupiter.api.Test; -import javax.servlet.ServletException; -import javax.servlet.http.Cookie; -import javax.ws.rs.core.HttpHeaders; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.Cookie; +import jakarta.ws.rs.core.HttpHeaders; import static org.junit.jupiter.api.Assertions.*; diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponseTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponseTest.java index 39fe7144b..6c951a4f1 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponseTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponseTest.java @@ -6,9 +6,9 @@ import org.junit.jupiter.api.Test; -import javax.servlet.http.Cookie; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.MediaType; +import jakarta.servlet.http.Cookie; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.MediaType; import java.io.IOException; import java.io.PrintWriter; diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestFormTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestFormTest.java index a185a1f8a..07a2f410e 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestFormTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestFormTest.java @@ -10,10 +10,10 @@ import org.apache.http.entity.mime.MultipartEntityBuilder; import org.junit.jupiter.api.Test; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.MediaType; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.MediaType; import java.io.IOException; import java.nio.charset.Charset; diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestReaderTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestReaderTest.java index 486e923aa..f92c37168 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestReaderTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestReaderTest.java @@ -6,13 +6,11 @@ import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.serverless.proxy.model.ContainerConfig; import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; -import com.amazonaws.services.lambda.runtime.Context; import org.junit.jupiter.api.Test; -import javax.servlet.http.HttpServletRequest; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.SecurityContext; -import java.lang.reflect.Method; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.SecurityContext; import static org.junit.jupiter.api.Assertions.*; diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestTest.java index af272e231..855fae403 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestTest.java @@ -8,10 +8,10 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; -import javax.servlet.http.HttpServletRequest; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.SecurityContext; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.SecurityContext; import java.io.IOException; import java.io.InputStream; diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyRequestDispatcherTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyRequestDispatcherTest.java index 03c06ad24..254ce04a0 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyRequestDispatcherTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyRequestDispatcherTest.java @@ -13,10 +13,10 @@ import org.junit.jupiter.api.Test; import org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestWrapper; -import javax.servlet.Servlet; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.Servlet; +import jakarta.servlet.ServletException; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.nio.charset.Charset; import java.util.concurrent.CountDownLatch; diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContextTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContextTest.java index 35f6723b6..5817527e2 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContextTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContextTest.java @@ -8,9 +8,9 @@ import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; -import javax.servlet.*; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.*; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.File; import java.io.IOException; diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletRegistrationTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletRegistrationTest.java index 105abc61d..80bb38060 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletRegistrationTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletRegistrationTest.java @@ -2,7 +2,7 @@ import org.junit.jupiter.api.Test; -import javax.servlet.*; +import jakarta.servlet.*; import java.io.IOException; import java.util.Enumeration; diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/ServletLambdaContainerHandlerBuilderTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/ServletLambdaContainerHandlerBuilderTest.java index 5ae5aae02..73f8d7908 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/ServletLambdaContainerHandlerBuilderTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/ServletLambdaContainerHandlerBuilderTest.java @@ -8,7 +8,7 @@ import com.amazonaws.services.lambda.runtime.Context; import org.junit.jupiter.api.Test; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; import java.util.concurrent.CountDownLatch; import static org.junit.jupiter.api.Assertions.*; diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/filters/UrlPathValidatorTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/filters/UrlPathValidatorTest.java index 11a018eb4..fa6712c7c 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/filters/UrlPathValidatorTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/filters/UrlPathValidatorTest.java @@ -1,17 +1,14 @@ package com.amazonaws.serverless.proxy.internal.servlet.filters; -import com.amazonaws.serverless.proxy.internal.servlet.AwsHttpServletRequest; import com.amazonaws.serverless.proxy.internal.servlet.AwsHttpServletResponse; import com.amazonaws.serverless.proxy.internal.servlet.AwsProxyHttpServletRequest; -import com.amazonaws.serverless.proxy.internal.servlet.FilterHolder; import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; import org.junit.jupiter.api.Test; -import javax.servlet.FilterConfig; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletException; -import java.io.IOException; import java.util.Collections; import java.util.Enumeration; import java.util.HashMap; diff --git a/aws-serverless-java-container-springboot2/pom.xml b/aws-serverless-java-container-springboot2/pom.xml index 33bb8171b..c955649d6 100644 --- a/aws-serverless-java-container-springboot2/pom.xml +++ b/aws-serverless-java-container-springboot2/pom.xml @@ -15,11 +15,10 @@ 1.10-SNAPSHOT - 5.3.27 - 2.7.11 - 5.7.8 - 1.8 - 1.8 + 6.0.5 + 3.0.4 + 6.0.2 + 17 @@ -171,6 +170,11 @@ 1.1.1 test + + jakarta.activation + jakarta.activation-api + 2.1.0 + diff --git a/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java b/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java index ce6bad7b1..1f7719e9a 100644 --- a/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java +++ b/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java @@ -14,7 +14,6 @@ import com.amazonaws.serverless.exceptions.ContainerInitializationException; import com.amazonaws.serverless.proxy.*; -import com.amazonaws.serverless.proxy.internal.LambdaContainerHandler; import com.amazonaws.serverless.proxy.internal.servlet.*; import com.amazonaws.serverless.proxy.internal.testutils.Timer; import com.amazonaws.serverless.proxy.model.AwsProxyRequest; @@ -25,19 +24,14 @@ import com.amazonaws.services.lambda.runtime.Context; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.boot.SpringApplication; import org.springframework.boot.WebApplicationType; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext; import org.springframework.context.ConfigurableApplicationContext; -import org.springframework.core.env.ConfigurableEnvironment; -import org.springframework.core.env.StandardEnvironment; -import org.springframework.web.context.ConfigurableWebApplicationContext; -import org.springframework.web.servlet.DispatcherServlet; - -import javax.servlet.Servlet; -import javax.servlet.ServletRegistration; -import javax.servlet.http.HttpServletRequest; + +import jakarta.servlet.Servlet; +import jakarta.servlet.ServletRegistration; +import jakarta.servlet.http.HttpServletRequest; import java.util.concurrent.CountDownLatch; /** diff --git a/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootProxyHandlerBuilder.java b/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootProxyHandlerBuilder.java index b9894834c..cdec18551 100644 --- a/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootProxyHandlerBuilder.java +++ b/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootProxyHandlerBuilder.java @@ -13,13 +13,11 @@ package com.amazonaws.serverless.proxy.spring; import com.amazonaws.serverless.exceptions.ContainerInitializationException; -import com.amazonaws.serverless.proxy.internal.servlet.AwsProxyHttpServletRequest; import com.amazonaws.serverless.proxy.internal.servlet.ServletLambdaContainerHandlerBuilder; -import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.serverless.proxy.model.AwsProxyResponse; import org.springframework.boot.WebApplicationType; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; public final class SpringBootProxyHandlerBuilder extends ServletLambdaContainerHandlerBuilder< RequestType, diff --git a/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessReactiveServletEmbeddedServerFactory.java b/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessReactiveServletEmbeddedServerFactory.java index 9b2c04948..3376452e2 100644 --- a/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessReactiveServletEmbeddedServerFactory.java +++ b/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessReactiveServletEmbeddedServerFactory.java @@ -22,7 +22,7 @@ import org.springframework.http.server.reactive.HttpHandler; import org.springframework.http.server.reactive.ServletHttpHandlerAdapter; -import javax.servlet.*; +import jakarta.servlet.*; import java.io.IOException; import java.util.Enumeration; diff --git a/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactory.java b/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactory.java index ad228f7d4..fbc31145d 100644 --- a/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactory.java +++ b/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactory.java @@ -21,7 +21,7 @@ import org.springframework.boot.web.servlet.server.ServletWebServerFactory; import org.springframework.core.Ordered; -import javax.servlet.ServletException; +import jakarta.servlet.ServletException; @AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE) public class ServerlessServletEmbeddedServerFactory implements ServletWebServerFactory, WebServer { diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/SecurityAppTest.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/SecurityAppTest.java index e322e1a67..d0b579509 100644 --- a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/SecurityAppTest.java +++ b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/SecurityAppTest.java @@ -8,8 +8,8 @@ import com.amazonaws.serverless.proxy.spring.securityapp.SecurityConfig; import org.junit.jupiter.api.Test; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.MediaType; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.MediaType; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/ServletAppTest.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/ServletAppTest.java index f5e2e8185..aacf5444c 100644 --- a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/ServletAppTest.java +++ b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/ServletAppTest.java @@ -3,7 +3,6 @@ import com.amazonaws.serverless.proxy.internal.LambdaContainerHandler; import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; import com.amazonaws.serverless.proxy.internal.testutils.MockLambdaContext; -import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.serverless.proxy.model.AwsProxyResponse; import com.amazonaws.serverless.proxy.model.ContainerConfig; import com.amazonaws.serverless.proxy.spring.servletapp.*; @@ -11,8 +10,8 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.MediaType; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.MediaType; import java.io.ByteArrayOutputStream; import java.io.IOException; diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactoryTest.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactoryTest.java index 2fddcf0a5..5ffd4a311 100644 --- a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactoryTest.java +++ b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactoryTest.java @@ -13,8 +13,8 @@ import org.springframework.boot.WebApplicationType; import org.springframework.boot.web.servlet.ServletContextInitializer; -import javax.servlet.ServletContext; -import javax.servlet.ServletException; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletException; import static org.junit.jupiter.api.Assertions.fail; diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/MessageController.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/MessageController.java index 6bd516324..927822a4e 100644 --- a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/MessageController.java +++ b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/MessageController.java @@ -7,7 +7,7 @@ import org.springframework.web.bind.annotation.*; import org.springframework.web.server.ResponseStatusException; -import javax.validation.Valid; +import jakarta.validation.Valid; import java.util.HashMap; import java.util.Map; diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/UserData.java b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/UserData.java index e180c1738..379291a39 100644 --- a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/UserData.java +++ b/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/UserData.java @@ -1,9 +1,9 @@ package com.amazonaws.serverless.proxy.spring.servletapp; -import javax.validation.constraints.Email; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; +import jakarta.validation.constraints.Email; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; public class UserData { @NotBlank From 9cf61f0ff285a5dc1432b95bc73facd470b4f26c Mon Sep 17 00:00:00 2001 From: Mbea Date: Sat, 1 Apr 2023 02:08:25 -0700 Subject: [PATCH 311/888] - Did the namespace change on the other components - Fixed 2 failing tests in AwsServletContextTest by adding version 2.0.0 of the angus-mail dependency --- aws-serverless-java-container-core/pom.xml | 6 ++++ .../internal/servlet/AwsServletContext.java | 4 ++- .../proxy/jersey/JerseyHandlerFilter.java | 22 ++++++------- .../jersey/JerseyLambdaContainerHandler.java | 15 +++++---- .../jersey/JerseyServletResponseWriter.java | 6 ++-- .../AwsProxyServletContextSupplier.java | 8 ++--- .../AwsProxyServletRequestSupplier.java | 4 +-- .../AwsProxyServletResponseSupplier.java | 4 +-- .../proxy/jersey/EchoJerseyResource.java | 31 +++++++------------ .../proxy/jersey/JerseyAwsProxyTest.java | 6 ++-- .../proxy/jersey/JerseyInjectionTest.java | 2 +- .../proxy/jersey/JerseyParamEncodingTest.java | 2 +- .../proxy/jersey/ResourceBinder.java | 2 +- .../providers/CustomExceptionMapper.java | 12 +++---- .../providers/ServletRequestFilter.java | 8 ++--- .../spark/SparkLambdaContainerHandler.java | 8 ++--- .../embeddedserver/LambdaEmbeddedServer.java | 2 +- .../spark/HelloWorldSparkStreamTest.java | 2 +- .../proxy/spark/HelloWorldSparkTest.java | 4 +-- .../SparkLambdaContainerHandlerTest.java | 4 +-- .../spark/filter/CustomHeaderFilter.java | 14 ++++----- .../spark/filter/UnauthenticatedFilter.java | 16 +++++----- .../spring/SpringLambdaContainerHandler.java | 6 ++-- .../spring/SpringProxyHandlerBuilder.java | 2 +- .../proxy/spring/SpringAwsProxyTest.java | 15 +++------ .../spring/SpringServletContextTest.java | 4 +-- .../proxy/spring/StaticAppProxyTest.java | 2 +- .../proxy/spring/echoapp/ContextResource.java | 14 ++++----- .../spring/echoapp/CustomHeaderFilter.java | 14 ++++----- .../proxy/spring/echoapp/EchoResource.java | 4 +-- .../spring/echoapp/EchoSpringAppConfig.java | 2 +- .../spring/echoapp/UnauthenticatedFilter.java | 16 +++++----- .../echoapp/model/ValidatedUserModel.java | 2 +- .../spring/extensibility/CustomServlet.java | 6 ++-- .../extensibility/CustomServletTest.java | 2 +- .../CustomSpringLambdaContainerHandler.java | 4 +-- .../struts/StrutsLambdaContainerHandler.java | 8 ++--- .../proxy/struts/StrutsAwsProxyTest.java | 2 +- .../proxy/struts/echoapp/EchoAction.java | 4 +-- .../struts/echoapp/EchoRequestInfoAction.java | 4 +-- .../src/main/java/resource/PingResource.java | 12 +++---- .../test/java/StreamLambdaHandlerTest.java | 8 ++--- .../test/java/StreamLambdaHandlerTest.java | 8 ++--- .../src/main/java/SpringApiConfig.java | 4 +-- .../test/java/StreamLambdaHandlerTest.java | 8 ++--- .../test/java/StreamLambdaHandlerTest.java | 8 ++--- .../test/java/StreamLambdaHandlerTest.java | 8 ++--- .../sample/jersey/PetsResource.java | 6 ++-- .../sample/spark/SparkResources.java | 2 +- .../sample/spark/StreamLambdaHandler.java | 4 +-- .../spark/filter/CognitoIdentityFilter.java | 12 +++---- .../spring/PetStoreSpringAppConfig.java | 4 +-- .../sample/spring/StreamLambdaHandler.java | 4 +-- .../spring/filter/CognitoIdentityFilter.java | 12 +++---- .../sample/springboot2/Application.java | 4 +-- .../springboot2/StreamLambdaHandler.java | 4 +-- .../filter/CognitoIdentityFilter.java | 12 +++---- 57 files changed, 203 insertions(+), 210 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 82135d77a..7c2159d7c 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -83,6 +83,12 @@ commons-fileupload2 2.0-SNAPSHOT + + org.eclipse.angus + angus-mail + 2.0.0 + + diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java index a362dfc25..4531b14ae 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java @@ -17,13 +17,14 @@ import com.amazonaws.serverless.proxy.internal.SecurityUtils; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; +import jakarta.activation.spi.MimeTypeRegistryProvider; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import jakarta.activation.MimetypesFileTypeMap; import jakarta.servlet.*; import jakarta.servlet.ServletContext; import jakarta.servlet.descriptor.JspConfigDescriptor; +import jakarta.activation.MimetypesFileTypeMap; import java.io.File; import java.io.InputStream; @@ -166,6 +167,7 @@ public String getMimeType(String s) { if (mimeTypes == null) { mimeTypes = new MimetypesFileTypeMap(); } + // TODO: The getContentType method of the MimetypesFileTypeMap returns application/octet-stream // instead of null when the type cannot be found. We should replace with an implementation that // loads the System mime types ($JAVA_HOME/lib/mime.types diff --git a/aws-serverless-java-container-jersey/src/main/java/com/amazonaws/serverless/proxy/jersey/JerseyHandlerFilter.java b/aws-serverless-java-container-jersey/src/main/java/com/amazonaws/serverless/proxy/jersey/JerseyHandlerFilter.java index 27e3157f0..79d030bda 100644 --- a/aws-serverless-java-container-jersey/src/main/java/com/amazonaws/serverless/proxy/jersey/JerseyHandlerFilter.java +++ b/aws-serverless-java-container-jersey/src/main/java/com/amazonaws/serverless/proxy/jersey/JerseyHandlerFilter.java @@ -26,17 +26,17 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.ws.rs.InternalServerErrorException; -import javax.ws.rs.core.Application; -import javax.ws.rs.core.SecurityContext; -import javax.ws.rs.core.UriBuilder; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.ws.rs.InternalServerErrorException; +import jakarta.ws.rs.core.Application; +import jakarta.ws.rs.core.SecurityContext; +import jakarta.ws.rs.core.UriBuilder; import java.io.IOException; import java.io.InputStream; diff --git a/aws-serverless-java-container-jersey/src/main/java/com/amazonaws/serverless/proxy/jersey/JerseyLambdaContainerHandler.java b/aws-serverless-java-container-jersey/src/main/java/com/amazonaws/serverless/proxy/jersey/JerseyLambdaContainerHandler.java index fe50cd0fd..e290e284b 100644 --- a/aws-serverless-java-container-jersey/src/main/java/com/amazonaws/serverless/proxy/jersey/JerseyLambdaContainerHandler.java +++ b/aws-serverless-java-container-jersey/src/main/java/com/amazonaws/serverless/proxy/jersey/JerseyLambdaContainerHandler.java @@ -30,14 +30,13 @@ import org.glassfish.jersey.process.internal.RequestScoped; import org.glassfish.jersey.server.ResourceConfig; -import javax.servlet.DispatcherType; -import javax.servlet.FilterRegistration; -import javax.servlet.Servlet; -import javax.servlet.ServletContext; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.ws.rs.core.Application; +import jakarta.servlet.DispatcherType; +import jakarta.servlet.FilterRegistration; +import jakarta.servlet.Servlet; +import jakarta.servlet.ServletContext; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.ws.rs.core.Application; import java.util.EnumSet; import java.util.concurrent.CountDownLatch; diff --git a/aws-serverless-java-container-jersey/src/main/java/com/amazonaws/serverless/proxy/jersey/JerseyServletResponseWriter.java b/aws-serverless-java-container-jersey/src/main/java/com/amazonaws/serverless/proxy/jersey/JerseyServletResponseWriter.java index 938c6f9ff..870390f80 100644 --- a/aws-serverless-java-container-jersey/src/main/java/com/amazonaws/serverless/proxy/jersey/JerseyServletResponseWriter.java +++ b/aws-serverless-java-container-jersey/src/main/java/com/amazonaws/serverless/proxy/jersey/JerseyServletResponseWriter.java @@ -22,9 +22,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletResponse; -import javax.ws.rs.InternalServerErrorException; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.ws.rs.InternalServerErrorException; import java.io.IOException; import java.io.OutputStream; diff --git a/aws-serverless-java-container-jersey/src/main/java/com/amazonaws/serverless/proxy/jersey/suppliers/AwsProxyServletContextSupplier.java b/aws-serverless-java-container-jersey/src/main/java/com/amazonaws/serverless/proxy/jersey/suppliers/AwsProxyServletContextSupplier.java index 78f8c5c5a..4d93a89ab 100644 --- a/aws-serverless-java-container-jersey/src/main/java/com/amazonaws/serverless/proxy/jersey/suppliers/AwsProxyServletContextSupplier.java +++ b/aws-serverless-java-container-jersey/src/main/java/com/amazonaws/serverless/proxy/jersey/suppliers/AwsProxyServletContextSupplier.java @@ -15,10 +15,10 @@ import org.glassfish.jersey.server.ContainerRequest; -import javax.servlet.ServletContext; -import javax.servlet.http.HttpServletRequest; -import javax.ws.rs.InternalServerErrorException; -import javax.ws.rs.core.Context; +import jakarta.servlet.ServletContext; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.ws.rs.InternalServerErrorException; +import jakarta.ws.rs.core.Context; import java.util.function.Supplier; diff --git a/aws-serverless-java-container-jersey/src/main/java/com/amazonaws/serverless/proxy/jersey/suppliers/AwsProxyServletRequestSupplier.java b/aws-serverless-java-container-jersey/src/main/java/com/amazonaws/serverless/proxy/jersey/suppliers/AwsProxyServletRequestSupplier.java index fe1b21f13..c3a4653bf 100644 --- a/aws-serverless-java-container-jersey/src/main/java/com/amazonaws/serverless/proxy/jersey/suppliers/AwsProxyServletRequestSupplier.java +++ b/aws-serverless-java-container-jersey/src/main/java/com/amazonaws/serverless/proxy/jersey/suppliers/AwsProxyServletRequestSupplier.java @@ -15,8 +15,8 @@ import org.glassfish.jersey.server.ContainerRequest; -import javax.servlet.http.HttpServletRequest; -import javax.ws.rs.core.Context; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.ws.rs.core.Context; import java.util.function.Supplier; diff --git a/aws-serverless-java-container-jersey/src/main/java/com/amazonaws/serverless/proxy/jersey/suppliers/AwsProxyServletResponseSupplier.java b/aws-serverless-java-container-jersey/src/main/java/com/amazonaws/serverless/proxy/jersey/suppliers/AwsProxyServletResponseSupplier.java index 1fb6dc175..d4123f22e 100644 --- a/aws-serverless-java-container-jersey/src/main/java/com/amazonaws/serverless/proxy/jersey/suppliers/AwsProxyServletResponseSupplier.java +++ b/aws-serverless-java-container-jersey/src/main/java/com/amazonaws/serverless/proxy/jersey/suppliers/AwsProxyServletResponseSupplier.java @@ -15,8 +15,8 @@ import org.glassfish.jersey.server.ContainerRequest; -import javax.servlet.http.HttpServletResponse; -import javax.ws.rs.core.Context; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.ws.rs.core.Context; import java.util.function.Supplier; diff --git a/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/EchoJerseyResource.java b/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/EchoJerseyResource.java index 5da93ca08..d05c6814f 100644 --- a/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/EchoJerseyResource.java +++ b/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/EchoJerseyResource.java @@ -13,41 +13,34 @@ package com.amazonaws.serverless.proxy.jersey; import com.amazonaws.serverless.proxy.RequestReader; -import com.amazonaws.serverless.proxy.internal.servlet.AwsProxyHttpServletRequest; import com.amazonaws.serverless.proxy.jersey.providers.ServletRequestFilter; import com.amazonaws.serverless.proxy.model.AwsProxyRequestContext; import com.amazonaws.serverless.proxy.jersey.model.MapResponseModel; import com.amazonaws.serverless.proxy.jersey.model.SingleValueModel; -import org.apache.commons.io.IOUtils; import org.glassfish.jersey.media.multipart.FormDataContentDisposition; -import org.glassfish.jersey.media.multipart.FormDataMultiPart; import org.glassfish.jersey.media.multipart.FormDataParam; -import javax.inject.Inject; -import javax.servlet.ServletContext; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.ws.rs.*; -import javax.ws.rs.container.ContainerRequestContext; -import javax.ws.rs.core.Context; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.SecurityContext; -import javax.ws.rs.core.UriInfo; - -import java.io.ByteArrayInputStream; +import jakarta.inject.Inject; +import jakarta.servlet.ServletContext; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.ws.rs.*; +import jakarta.ws.rs.container.ContainerRequestContext; +import jakarta.ws.rs.core.Context; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.SecurityContext; +import jakarta.ws.rs.core.UriInfo; + import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.Enumeration; -import java.util.HashMap; import java.util.List; import java.util.Random; -import static com.amazonaws.serverless.proxy.jersey.JerseyHandlerFilter.JERSEY_SERVLET_REQUEST_PROPERTY; - /** * Jersey application class for aws-serverless-java-container unit proxy diff --git a/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyAwsProxyTest.java b/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyAwsProxyTest.java index 179555323..b845a0b69 100644 --- a/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyAwsProxyTest.java +++ b/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyAwsProxyTest.java @@ -33,9 +33,9 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; import java.io.IOException; import java.util.Arrays; import java.util.Collection; diff --git a/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyInjectionTest.java b/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyInjectionTest.java index cfbe5c9bb..e253f34a3 100644 --- a/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyInjectionTest.java +++ b/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyInjectionTest.java @@ -15,7 +15,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; -import javax.inject.Singleton; +import jakarta.inject.Singleton; import org.glassfish.jersey.internal.inject.AbstractBinder; import org.glassfish.jersey.media.multipart.MultiPartFeature; diff --git a/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyParamEncodingTest.java b/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyParamEncodingTest.java index 25bb26bd4..9dc1ab32a 100644 --- a/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyParamEncodingTest.java +++ b/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyParamEncodingTest.java @@ -18,7 +18,7 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; -import javax.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MediaType; import java.io.IOException; import java.io.UnsupportedEncodingException; diff --git a/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/ResourceBinder.java b/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/ResourceBinder.java index e98ea805a..f35bffd49 100644 --- a/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/ResourceBinder.java +++ b/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/ResourceBinder.java @@ -2,7 +2,7 @@ import org.glassfish.jersey.internal.inject.AbstractBinder; -import javax.inject.Singleton; +import jakarta.inject.Singleton; public class ResourceBinder extends AbstractBinder { @Override diff --git a/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/providers/CustomExceptionMapper.java b/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/providers/CustomExceptionMapper.java index e435aff96..61cddee1b 100644 --- a/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/providers/CustomExceptionMapper.java +++ b/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/providers/CustomExceptionMapper.java @@ -1,11 +1,11 @@ package com.amazonaws.serverless.proxy.jersey.providers; -import javax.inject.Inject; -import javax.servlet.http.HttpServletRequest; -import javax.ws.rs.core.Response; -import javax.ws.rs.ext.ExceptionMapper; -import javax.ws.rs.ext.Provider; +import jakarta.inject.Inject; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.ext.ExceptionMapper; +import jakarta.ws.rs.ext.Provider; @Provider @@ -16,7 +16,7 @@ public CustomExceptionMapper() { } @Inject - public javax.inject.Provider request; + public jakarta.inject.Provider request; @Override public Response toResponse(UnsupportedOperationException throwable) { diff --git a/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/providers/ServletRequestFilter.java b/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/providers/ServletRequestFilter.java index 70d65a64c..8ccfe488f 100644 --- a/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/providers/ServletRequestFilter.java +++ b/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/providers/ServletRequestFilter.java @@ -1,10 +1,10 @@ package com.amazonaws.serverless.proxy.jersey.providers; -import javax.servlet.http.HttpServletRequest; -import javax.ws.rs.container.ContainerRequestContext; -import javax.ws.rs.container.ContainerRequestFilter; -import javax.ws.rs.core.Context; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.ws.rs.container.ContainerRequestContext; +import jakarta.ws.rs.container.ContainerRequestFilter; +import jakarta.ws.rs.core.Context; import java.io.IOException; diff --git a/aws-serverless-java-container-spark/src/main/java/com/amazonaws/serverless/proxy/spark/SparkLambdaContainerHandler.java b/aws-serverless-java-container-spark/src/main/java/com/amazonaws/serverless/proxy/spark/SparkLambdaContainerHandler.java index 6b2168aa9..9c1b47511 100644 --- a/aws-serverless-java-container-spark/src/main/java/com/amazonaws/serverless/proxy/spark/SparkLambdaContainerHandler.java +++ b/aws-serverless-java-container-spark/src/main/java/com/amazonaws/serverless/proxy/spark/SparkLambdaContainerHandler.java @@ -31,10 +31,10 @@ import spark.Spark; import spark.embeddedserver.EmbeddedServers; -import javax.servlet.DispatcherType; -import javax.servlet.FilterRegistration; -import javax.servlet.Servlet; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.DispatcherType; +import jakarta.servlet.FilterRegistration; +import jakarta.servlet.Servlet; +import jakarta.servlet.http.HttpServletRequest; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; diff --git a/aws-serverless-java-container-spark/src/main/java/com/amazonaws/serverless/proxy/spark/embeddedserver/LambdaEmbeddedServer.java b/aws-serverless-java-container-spark/src/main/java/com/amazonaws/serverless/proxy/spark/embeddedserver/LambdaEmbeddedServer.java index fadca4941..8d79c613c 100644 --- a/aws-serverless-java-container-spark/src/main/java/com/amazonaws/serverless/proxy/spark/embeddedserver/LambdaEmbeddedServer.java +++ b/aws-serverless-java-container-spark/src/main/java/com/amazonaws/serverless/proxy/spark/embeddedserver/LambdaEmbeddedServer.java @@ -25,7 +25,7 @@ import spark.ssl.SslStores; import spark.staticfiles.StaticFilesConfiguration; -import javax.servlet.Filter; +import jakarta.servlet.Filter; import java.util.Map; import java.util.Optional; diff --git a/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/HelloWorldSparkStreamTest.java b/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/HelloWorldSparkStreamTest.java index 56087ed62..33bc19f1d 100644 --- a/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/HelloWorldSparkStreamTest.java +++ b/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/HelloWorldSparkStreamTest.java @@ -15,7 +15,7 @@ import org.junit.jupiter.params.provider.MethodSource; import spark.Spark; -import javax.servlet.http.Cookie; +import jakarta.servlet.http.Cookie; import java.io.ByteArrayOutputStream; import java.io.IOException; diff --git a/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/HelloWorldSparkTest.java b/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/HelloWorldSparkTest.java index 5402b6a9c..b687784ec 100644 --- a/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/HelloWorldSparkTest.java +++ b/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/HelloWorldSparkTest.java @@ -13,8 +13,8 @@ import org.junit.jupiter.params.provider.MethodSource; import spark.Spark; -import javax.servlet.http.Cookie; -import javax.ws.rs.core.HttpHeaders; +import jakarta.servlet.http.Cookie; +import jakarta.ws.rs.core.HttpHeaders; import java.util.Arrays; import java.util.Collection; diff --git a/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/SparkLambdaContainerHandlerTest.java b/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/SparkLambdaContainerHandlerTest.java index 52f2a5388..a5c5e824b 100644 --- a/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/SparkLambdaContainerHandlerTest.java +++ b/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/SparkLambdaContainerHandlerTest.java @@ -13,8 +13,8 @@ import org.junit.jupiter.api.Test; import spark.Spark; -import javax.servlet.DispatcherType; -import javax.servlet.FilterRegistration; +import jakarta.servlet.DispatcherType; +import jakarta.servlet.FilterRegistration; import java.util.EnumSet; diff --git a/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/filter/CustomHeaderFilter.java b/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/filter/CustomHeaderFilter.java index e3733f3a9..8f4bc99ac 100644 --- a/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/filter/CustomHeaderFilter.java +++ b/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/filter/CustomHeaderFilter.java @@ -1,13 +1,13 @@ package com.amazonaws.serverless.proxy.spark.filter; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; diff --git a/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/filter/UnauthenticatedFilter.java b/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/filter/UnauthenticatedFilter.java index 742072ca5..efa41a2d3 100644 --- a/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/filter/UnauthenticatedFilter.java +++ b/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/filter/UnauthenticatedFilter.java @@ -1,14 +1,14 @@ package com.amazonaws.serverless.proxy.spark.filter; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; diff --git a/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringLambdaContainerHandler.java b/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringLambdaContainerHandler.java index 22f7c17cd..5e56dba62 100644 --- a/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringLambdaContainerHandler.java +++ b/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringLambdaContainerHandler.java @@ -23,9 +23,9 @@ import org.springframework.web.context.ConfigurableWebApplicationContext; import org.springframework.web.servlet.DispatcherServlet; -import javax.servlet.Servlet; -import javax.servlet.ServletRegistration; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.Servlet; +import jakarta.servlet.ServletRegistration; +import jakarta.servlet.http.HttpServletRequest; import java.util.concurrent.CountDownLatch; diff --git a/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringProxyHandlerBuilder.java b/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringProxyHandlerBuilder.java index b1f35c809..5614b94df 100644 --- a/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringProxyHandlerBuilder.java +++ b/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringProxyHandlerBuilder.java @@ -18,7 +18,7 @@ import org.springframework.web.context.ConfigurableWebApplicationContext; import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequest; public class SpringProxyHandlerBuilder extends ServletLambdaContainerHandlerBuilder< RequestType, diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringAwsProxyTest.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringAwsProxyTest.java index 6c744f6b5..1101efc8c 100644 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringAwsProxyTest.java +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringAwsProxyTest.java @@ -21,19 +21,12 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.test.annotation.DirtiesContext; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.TestExecutionListeners; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.support.DependencyInjectionTestExecutionListener; -import org.springframework.test.context.web.WebAppConfiguration; import org.springframework.web.servlet.DispatcherServlet; -import javax.servlet.DispatcherType; -import javax.servlet.FilterRegistration; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.MediaType; +import jakarta.servlet.DispatcherType; +import jakarta.servlet.FilterRegistration; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.MediaType; import java.io.IOException; import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringServletContextTest.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringServletContextTest.java index cfc39b845..11b6c7c5f 100644 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringServletContextTest.java +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringServletContextTest.java @@ -17,8 +17,8 @@ import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; -import javax.servlet.DispatcherType; -import javax.servlet.FilterRegistration; +import jakarta.servlet.DispatcherType; +import jakarta.servlet.FilterRegistration; import java.util.EnumSet; diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/StaticAppProxyTest.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/StaticAppProxyTest.java index d2b74b26a..9e828119f 100644 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/StaticAppProxyTest.java +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/StaticAppProxyTest.java @@ -11,7 +11,7 @@ import org.junit.jupiter.api.Test; import org.springframework.http.HttpHeaders; -import javax.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MediaType; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.junit.jupiter.api.Assertions.assertEquals; diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/ContextResource.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/ContextResource.java index d52237566..8f7eaf2a0 100644 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/ContextResource.java +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/ContextResource.java @@ -17,13 +17,13 @@ import org.springframework.web.context.ServletContextAware; import org.springframework.web.servlet.config.annotation.EnableWebMvc; -import javax.servlet.ServletContext; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.validation.Valid; +import jakarta.servlet.ServletContext; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; import static org.springframework.core.annotation.AnnotatedElementUtils.findMergedAnnotation; diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/CustomHeaderFilter.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/CustomHeaderFilter.java index ca0030439..f6427db65 100644 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/CustomHeaderFilter.java +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/CustomHeaderFilter.java @@ -1,13 +1,13 @@ package com.amazonaws.serverless.proxy.spring.echoapp; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/EchoResource.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/EchoResource.java index ceb358bea..cfcc9f878 100644 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/EchoResource.java +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/EchoResource.java @@ -15,8 +15,8 @@ import org.springframework.web.multipart.commons.CommonsMultipartResolver; import org.springframework.web.servlet.config.annotation.EnableWebMvc; -import javax.servlet.ServletContext; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.ServletContext; +import jakarta.servlet.http.HttpServletRequest; import java.io.IOException; import java.net.URI; diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/EchoSpringAppConfig.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/EchoSpringAppConfig.java index a4d5f069c..cf4aa495e 100644 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/EchoSpringAppConfig.java +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/EchoSpringAppConfig.java @@ -24,7 +24,7 @@ public MockLambdaContext lambdaContext() { } @Bean - public javax.validation.Validator localValidatorFactoryBean() { + public jakarta.validation.Validator localValidatorFactoryBean() { return new LocalValidatorFactoryBean(); } } diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/UnauthenticatedFilter.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/UnauthenticatedFilter.java index ba16d905f..ac88119e0 100644 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/UnauthenticatedFilter.java +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/UnauthenticatedFilter.java @@ -1,14 +1,14 @@ package com.amazonaws.serverless.proxy.spring.echoapp; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/model/ValidatedUserModel.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/model/ValidatedUserModel.java index 56c157e83..1e5b83c37 100644 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/model/ValidatedUserModel.java +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/model/ValidatedUserModel.java @@ -3,7 +3,7 @@ import org.hibernate.validator.constraints.Email; import org.hibernate.validator.constraints.NotEmpty; -import javax.validation.constraints.Size; +import jakarta.validation.constraints.Size; public class ValidatedUserModel { @NotEmpty diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/extensibility/CustomServlet.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/extensibility/CustomServlet.java index 2b8604d3a..5c344b4d5 100644 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/extensibility/CustomServlet.java +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/extensibility/CustomServlet.java @@ -2,9 +2,9 @@ import org.springframework.context.ApplicationContext; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; public class CustomServlet extends HttpServlet { diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/extensibility/CustomServletTest.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/extensibility/CustomServletTest.java index dd3d3fd71..5959a8110 100644 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/extensibility/CustomServletTest.java +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/extensibility/CustomServletTest.java @@ -4,7 +4,7 @@ import com.amazonaws.serverless.proxy.internal.testutils.MockLambdaContext; import org.junit.jupiter.api.Test; -import javax.ws.rs.HttpMethod; +import jakarta.ws.rs.HttpMethod; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/extensibility/CustomSpringLambdaContainerHandler.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/extensibility/CustomSpringLambdaContainerHandler.java index 3ed872330..4e5fe2783 100644 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/extensibility/CustomSpringLambdaContainerHandler.java +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/extensibility/CustomSpringLambdaContainerHandler.java @@ -9,8 +9,8 @@ import com.amazonaws.serverless.proxy.spring.SpringLambdaContainerHandler; import org.springframework.web.context.ConfigurableWebApplicationContext; -import javax.servlet.ServletRegistration; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.ServletRegistration; +import jakarta.servlet.http.HttpServletRequest; public class CustomSpringLambdaContainerHandler extends SpringLambdaContainerHandler { diff --git a/aws-serverless-java-container-struts/src/main/java/com/amazonaws/serverless/proxy/struts/StrutsLambdaContainerHandler.java b/aws-serverless-java-container-struts/src/main/java/com/amazonaws/serverless/proxy/struts/StrutsLambdaContainerHandler.java index 09c460cfa..257de488c 100644 --- a/aws-serverless-java-container-struts/src/main/java/com/amazonaws/serverless/proxy/struts/StrutsLambdaContainerHandler.java +++ b/aws-serverless-java-container-struts/src/main/java/com/amazonaws/serverless/proxy/struts/StrutsLambdaContainerHandler.java @@ -35,10 +35,10 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.servlet.DispatcherType; -import javax.servlet.FilterRegistration; -import javax.servlet.Servlet; -import javax.servlet.http.HttpServletRequest; +import jakarta.servlet.DispatcherType; +import jakarta.servlet.FilterRegistration; +import jakarta.servlet.Servlet; +import jakarta.servlet.http.HttpServletRequest; import java.util.EnumSet; import java.util.concurrent.CountDownLatch; diff --git a/aws-serverless-java-container-struts/src/test/java/com/amazonaws/serverless/proxy/struts/StrutsAwsProxyTest.java b/aws-serverless-java-container-struts/src/test/java/com/amazonaws/serverless/proxy/struts/StrutsAwsProxyTest.java index f48547241..6d7e2a37f 100644 --- a/aws-serverless-java-container-struts/src/test/java/com/amazonaws/serverless/proxy/struts/StrutsAwsProxyTest.java +++ b/aws-serverless-java-container-struts/src/test/java/com/amazonaws/serverless/proxy/struts/StrutsAwsProxyTest.java @@ -28,7 +28,7 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.core.Response; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; diff --git a/aws-serverless-java-container-struts/src/test/java/com/amazonaws/serverless/proxy/struts/echoapp/EchoAction.java b/aws-serverless-java-container-struts/src/test/java/com/amazonaws/serverless/proxy/struts/echoapp/EchoAction.java index d64a54eca..ad6c63180 100644 --- a/aws-serverless-java-container-struts/src/test/java/com/amazonaws/serverless/proxy/struts/echoapp/EchoAction.java +++ b/aws-serverless-java-container-struts/src/test/java/com/amazonaws/serverless/proxy/struts/echoapp/EchoAction.java @@ -4,8 +4,8 @@ import org.apache.commons.io.IOUtils; import org.apache.struts2.ServletActionContext; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; diff --git a/aws-serverless-java-container-struts/src/test/java/com/amazonaws/serverless/proxy/struts/echoapp/EchoRequestInfoAction.java b/aws-serverless-java-container-struts/src/test/java/com/amazonaws/serverless/proxy/struts/echoapp/EchoRequestInfoAction.java index 554156e9d..e810f3197 100644 --- a/aws-serverless-java-container-struts/src/test/java/com/amazonaws/serverless/proxy/struts/echoapp/EchoRequestInfoAction.java +++ b/aws-serverless-java-container-struts/src/test/java/com/amazonaws/serverless/proxy/struts/echoapp/EchoRequestInfoAction.java @@ -5,8 +5,8 @@ import com.opensymphony.xwork2.ActionSupport; import org.apache.struts2.ServletActionContext; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import java.util.Enumeration; import java.util.HashMap; import java.util.Map; diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/src/main/java/resource/PingResource.java b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/src/main/java/resource/PingResource.java index 137ed0302..1c56254fd 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/src/main/java/resource/PingResource.java +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/src/main/java/resource/PingResource.java @@ -4,13 +4,13 @@ import java.util.Map; import java.util.HashMap; -import javax.ws.rs.Consumes; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; @Path("/ping") public class PingResource { diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java index 3f232ebc6..4a6b00b03 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java @@ -10,10 +10,10 @@ import org.junit.BeforeClass; import org.junit.Test; -import javax.ws.rs.HttpMethod; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.HttpMethod; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; import java.io.ByteArrayOutputStream; import java.io.IOException; diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java index 3f232ebc6..4a6b00b03 100644 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java +++ b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java @@ -10,10 +10,10 @@ import org.junit.BeforeClass; import org.junit.Test; -import javax.ws.rs.HttpMethod; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.HttpMethod; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; import java.io.ByteArrayOutputStream; import java.io.IOException; diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/src/main/java/SpringApiConfig.java b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/src/main/java/SpringApiConfig.java index 0982c6b04..83926b5dd 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/src/main/java/SpringApiConfig.java +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/src/main/java/SpringApiConfig.java @@ -11,8 +11,8 @@ import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter; import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; import ${groupId}.controller.PingController; diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java index 3f232ebc6..4a6b00b03 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java @@ -10,10 +10,10 @@ import org.junit.BeforeClass; import org.junit.Test; -import javax.ws.rs.HttpMethod; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.HttpMethod; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; import java.io.ByteArrayOutputStream; import java.io.IOException; diff --git a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java index 3f232ebc6..4a6b00b03 100644 --- a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java +++ b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java @@ -10,10 +10,10 @@ import org.junit.BeforeClass; import org.junit.Test; -import javax.ws.rs.HttpMethod; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.HttpMethod; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; import java.io.ByteArrayOutputStream; import java.io.IOException; diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java index 12fc9fc07..fd63840b5 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java @@ -12,10 +12,10 @@ import org.junit.BeforeClass; import org.junit.Test; -import javax.ws.rs.HttpMethod; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.HttpMethod; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; import java.io.ByteArrayOutputStream; import java.io.IOException; diff --git a/samples/jersey/pet-store/src/main/java/com/amazonaws/serverless/sample/jersey/PetsResource.java b/samples/jersey/pet-store/src/main/java/com/amazonaws/serverless/sample/jersey/PetsResource.java index 2d92510d7..c8ad7ebdd 100644 --- a/samples/jersey/pet-store/src/main/java/com/amazonaws/serverless/sample/jersey/PetsResource.java +++ b/samples/jersey/pet-store/src/main/java/com/amazonaws/serverless/sample/jersey/PetsResource.java @@ -15,9 +15,9 @@ import com.amazonaws.serverless.sample.jersey.model.Pet; import com.amazonaws.serverless.sample.jersey.model.PetData; -import javax.ws.rs.*; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.*; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; import java.util.UUID; @Path("/pets") diff --git a/samples/spark/pet-store/src/main/java/com/amazonaws/serverless/sample/spark/SparkResources.java b/samples/spark/pet-store/src/main/java/com/amazonaws/serverless/sample/spark/SparkResources.java index 7731a70b1..4794b7aec 100644 --- a/samples/spark/pet-store/src/main/java/com/amazonaws/serverless/sample/spark/SparkResources.java +++ b/samples/spark/pet-store/src/main/java/com/amazonaws/serverless/sample/spark/SparkResources.java @@ -5,7 +5,7 @@ import com.amazonaws.serverless.sample.spark.model.Pet; import com.amazonaws.serverless.sample.spark.model.PetData; -import javax.ws.rs.core.Response; +import jakarta.ws.rs.core.Response; import java.util.UUID; diff --git a/samples/spark/pet-store/src/main/java/com/amazonaws/serverless/sample/spark/StreamLambdaHandler.java b/samples/spark/pet-store/src/main/java/com/amazonaws/serverless/sample/spark/StreamLambdaHandler.java index 40ace9d33..e02499103 100644 --- a/samples/spark/pet-store/src/main/java/com/amazonaws/serverless/sample/spark/StreamLambdaHandler.java +++ b/samples/spark/pet-store/src/main/java/com/amazonaws/serverless/sample/spark/StreamLambdaHandler.java @@ -12,8 +12,8 @@ import spark.Spark; -import javax.servlet.DispatcherType; -import javax.servlet.FilterRegistration; +import jakarta.servlet.DispatcherType; +import jakarta.servlet.FilterRegistration; import java.io.IOException; import java.io.InputStream; diff --git a/samples/spark/pet-store/src/main/java/com/amazonaws/serverless/sample/spark/filter/CognitoIdentityFilter.java b/samples/spark/pet-store/src/main/java/com/amazonaws/serverless/sample/spark/filter/CognitoIdentityFilter.java index 3b0f5dd1f..e45370b0b 100644 --- a/samples/spark/pet-store/src/main/java/com/amazonaws/serverless/sample/spark/filter/CognitoIdentityFilter.java +++ b/samples/spark/pet-store/src/main/java/com/amazonaws/serverless/sample/spark/filter/CognitoIdentityFilter.java @@ -7,12 +7,12 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; import java.io.IOException; diff --git a/samples/spring/pet-store/src/main/java/com/amazonaws/serverless/sample/spring/PetStoreSpringAppConfig.java b/samples/spring/pet-store/src/main/java/com/amazonaws/serverless/sample/spring/PetStoreSpringAppConfig.java index 81179933c..5ac5403cd 100644 --- a/samples/spring/pet-store/src/main/java/com/amazonaws/serverless/sample/spring/PetStoreSpringAppConfig.java +++ b/samples/spring/pet-store/src/main/java/com/amazonaws/serverless/sample/spring/PetStoreSpringAppConfig.java @@ -22,8 +22,8 @@ import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter; import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; @Configuration diff --git a/samples/spring/pet-store/src/main/java/com/amazonaws/serverless/sample/spring/StreamLambdaHandler.java b/samples/spring/pet-store/src/main/java/com/amazonaws/serverless/sample/spring/StreamLambdaHandler.java index 71fb94cea..07675b3fe 100644 --- a/samples/spring/pet-store/src/main/java/com/amazonaws/serverless/sample/spring/StreamLambdaHandler.java +++ b/samples/spring/pet-store/src/main/java/com/amazonaws/serverless/sample/spring/StreamLambdaHandler.java @@ -10,8 +10,8 @@ import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestStreamHandler; -import javax.servlet.DispatcherType; -import javax.servlet.FilterRegistration; +import jakarta.servlet.DispatcherType; +import jakarta.servlet.FilterRegistration; import java.io.IOException; import java.io.InputStream; diff --git a/samples/spring/pet-store/src/main/java/com/amazonaws/serverless/sample/spring/filter/CognitoIdentityFilter.java b/samples/spring/pet-store/src/main/java/com/amazonaws/serverless/sample/spring/filter/CognitoIdentityFilter.java index d9eefdc92..ec4242b81 100644 --- a/samples/spring/pet-store/src/main/java/com/amazonaws/serverless/sample/spring/filter/CognitoIdentityFilter.java +++ b/samples/spring/pet-store/src/main/java/com/amazonaws/serverless/sample/spring/filter/CognitoIdentityFilter.java @@ -7,12 +7,12 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; import java.io.IOException; diff --git a/samples/springboot2/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot2/Application.java b/samples/springboot2/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot2/Application.java index d613fc073..aeb63a253 100644 --- a/samples/springboot2/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot2/Application.java +++ b/samples/springboot2/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot2/Application.java @@ -15,8 +15,8 @@ import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter; import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; @SpringBootApplication diff --git a/samples/springboot2/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot2/StreamLambdaHandler.java b/samples/springboot2/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot2/StreamLambdaHandler.java index 01ea96630..6df4b5ede 100644 --- a/samples/springboot2/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot2/StreamLambdaHandler.java +++ b/samples/springboot2/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot2/StreamLambdaHandler.java @@ -10,8 +10,8 @@ import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestStreamHandler; -import javax.servlet.DispatcherType; -import javax.servlet.FilterRegistration; +import jakarta.servlet.DispatcherType; +import jakarta.servlet.FilterRegistration; import java.io.IOException; import java.io.InputStream; diff --git a/samples/springboot2/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot2/filter/CognitoIdentityFilter.java b/samples/springboot2/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot2/filter/CognitoIdentityFilter.java index 5c3482e40..1cc92708b 100644 --- a/samples/springboot2/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot2/filter/CognitoIdentityFilter.java +++ b/samples/springboot2/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot2/filter/CognitoIdentityFilter.java @@ -7,12 +7,12 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.servlet.Filter; -import javax.servlet.FilterChain; -import javax.servlet.FilterConfig; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; import java.io.IOException; From 4db2388bfa9e2b81e30a6b4759f5f25268264448 Mon Sep 17 00:00:00 2001 From: Mbea Date: Sat, 1 Apr 2023 02:33:40 -0700 Subject: [PATCH 312/888] Update jersey.version to 3.11 to fix issues in JerseyHandlerFilter --- aws-serverless-java-container-jersey/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index ae8949859..6842a0d79 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -16,7 +16,7 @@ - 2.39.1 + 3.1.1 From 64721198723b63953f0430627d9c4370a53d6db0 Mon Sep 17 00:00:00 2001 From: Mbea Date: Sat, 1 Apr 2023 03:40:38 -0700 Subject: [PATCH 313/888] Upgrade jakarta.validation-api version to 3.0.2 to fix issue in UserData (cannot find symbol @NotBlank, @Email etc...) --- aws-serverless-java-container-springboot2/pom.xml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/aws-serverless-java-container-springboot2/pom.xml b/aws-serverless-java-container-springboot2/pom.xml index c955649d6..7e27942df 100644 --- a/aws-serverless-java-container-springboot2/pom.xml +++ b/aws-serverless-java-container-springboot2/pom.xml @@ -149,7 +149,7 @@ jakarta.validation jakarta.validation-api - 2.0.2 + 3.0.2 test @@ -175,6 +175,12 @@ jakarta.activation-api 2.1.0 + + jakarta.validation + jakarta.validation-api + 3.0.2 + test + From 8017ce6018a3a2dd0df641c655c9874ea11c2041 Mon Sep 17 00:00:00 2001 From: Mbea Date: Tue, 4 Apr 2023 21:58:02 -0700 Subject: [PATCH 314/888] Added jakarta.websocket-api 2.0.0 to fix java.lang.ExceptionInInitializerError in SecurityAppTest - Updated hibernate-validator version to 8.0.0.FINAL to fix failing test in ServletAppTest (jakarta.validation not working) - Updated Spring-core version to 6.0.7 to fix CVSS error --- aws-serverless-java-container-core/pom.xml | 12 +++++++ .../pom.xml | 33 ++++++++++--------- 2 files changed, 30 insertions(+), 15 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 7c2159d7c..0f2c13c55 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -99,10 +99,22 @@ + + + + + + +<<<<<<< HEAD org.apache.httpcomponents httpclient 4.5.14 +======= + org.apache.httpcomponents.client5 + httpclient5 + 5.2.1 +>>>>>>> 9d2d4d4 (Added jakarta.websocket-api 2.0.0 to fix java.lang.ExceptionInInitializerError in SecurityAppTest) test diff --git a/aws-serverless-java-container-springboot2/pom.xml b/aws-serverless-java-container-springboot2/pom.xml index 7e27942df..d98d44ca7 100644 --- a/aws-serverless-java-container-springboot2/pom.xml +++ b/aws-serverless-java-container-springboot2/pom.xml @@ -15,7 +15,7 @@ 1.10-SNAPSHOT - 6.0.5 + 6.0.7 3.0.4 6.0.2 17 @@ -146,30 +146,25 @@ test - - jakarta.validation - jakarta.validation-api - 3.0.2 - test - org.hibernate.validator hibernate-validator - 6.2.1.Final + 8.0.0.Final test + org.junit.jupiter junit-jupiter test - - - javax.activation - activation - 1.1.1 - test - + + + + + + + jakarta.activation jakarta.activation-api @@ -181,6 +176,14 @@ 3.0.2 test + + + jakarta.websocket + jakarta.websocket-api + 2.0.0 + provided + + From 1b6254e8cbe463f4f1293ccb7c2f94c160456421 Mon Sep 17 00:00:00 2001 From: Mbea Date: Wed, 5 Apr 2023 12:46:16 -0700 Subject: [PATCH 315/888] - Added jakarta-activation-api 2.1.0, jakarta.el-api 5.0.1 and org.glassfish:jakarta.el 5.0.0-M1 in Spring component's pom.xml -Updated the CommonsMultipartResolver to StandardServletMultipartResolver --- aws-serverless-java-container-spring/pom.xml | 30 +++++++++++-------- .../proxy/spring/echoapp/EchoResource.java | 6 ++-- 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 444b95be0..830c8002b 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -16,8 +16,8 @@ - 5.3.27 - 5.7.8 + 6.0.7 + 6.0.2 @@ -60,18 +60,23 @@ + + + + + + - javax.activation - activation - 1.1.1 - test + jakarta.activation + jakarta.activation-api + 2.1.0 org.hibernate.validator hibernate-validator - 6.2.1.Final + 8.0.0.Final test @@ -81,18 +86,19 @@ - javax.el - javax.el-api - 3.0.0 + jakarta.el + jakarta.el-api + 5.0.1 test org.glassfish - javax.el - 3.0.0 + jakarta.el + 5.0.0-M1 test + org.springframework.security spring-security-config diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/EchoResource.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/EchoResource.java index cfcc9f878..a6dd033a0 100644 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/EchoResource.java +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/EchoResource.java @@ -12,7 +12,7 @@ import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartResolver; -import org.springframework.web.multipart.commons.CommonsMultipartResolver; +import org.springframework.web.multipart.support.StandardServletMultipartResolver; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import jakarta.servlet.ServletContext; @@ -42,8 +42,8 @@ public class EchoResource { @Bean public MultipartResolver multipartResolver() { - CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(); - multipartResolver.setMaxUploadSize(1000000); + MultipartResolver multipartResolver = new StandardServletMultipartResolver(); + //multipartResolver.setMaxUploadSize(1000000); return multipartResolver; } From 3abb8fc4db9dbf073b8c6def6b1f0238b71f5d74 Mon Sep 17 00:00:00 2001 From: Mbea Date: Wed, 5 Apr 2023 13:51:43 -0700 Subject: [PATCH 316/888] - added jakarta.ws.rs-api 3.1.0 to pom.xml in Jersey component to fix tests failing in JerseyAwsProxyTest class with error (java.lang.NoClassDefFoundError: jakarta/ws/rs/core/EntityPart) --- aws-serverless-java-container-jersey/pom.xml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index 6842a0d79..ef4a43712 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -105,6 +105,13 @@ junit-jupiter test + + + jakarta.ws.rs + jakarta.ws.rs-api + 3.1.0 + + From 43179c08ba1664b628a87da065a517dba45b8296 Mon Sep 17 00:00:00 2001 From: Mbea Date: Thu, 6 Apr 2023 01:37:21 -0700 Subject: [PATCH 317/888] - excluded Spark and struts modules from the build - updated dependencies versions in Jersey, Spring and SpringBoot archetypes --- .../resources/archetype-resources/pom.xml | 3 +- .../resources/archetype-resources/pom.xml | 2 +- aws-serverless-springboot2-archetype/pom.xml | 80 --------- .../META-INF/maven/archetype-metadata.xml | 39 ----- .../resources/archetype-resources/README.md | 99 ----------- .../archetype-resources/build.gradle | 29 ---- .../resources/archetype-resources/pom.xml | 155 ------------------ .../archetype-resources/src/assembly/bin.xml | 27 --- .../src/main/java/Application.java | 24 --- .../src/main/java/StreamLambdaHandler.java | 39 ----- .../main/java/controller/PingController.java | 20 --- .../src/main/resources/application.properties | 3 - .../test/java/StreamLambdaHandlerTest.java | 90 ---------- .../archetype-resources/template.yml | 52 ------ .../projects/base/archetype.properties | 3 - .../src/test/resources/projects/base/goal.txt | 1 - pom.xml | 8 +- 17 files changed, 7 insertions(+), 667 deletions(-) delete mode 100644 aws-serverless-springboot2-archetype/pom.xml delete mode 100644 aws-serverless-springboot2-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml delete mode 100644 aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/README.md delete mode 100644 aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle delete mode 100644 aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml delete mode 100644 aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/src/assembly/bin.xml delete mode 100644 aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/src/main/java/Application.java delete mode 100644 aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/src/main/java/StreamLambdaHandler.java delete mode 100644 aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/src/main/java/controller/PingController.java delete mode 100644 aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/src/main/resources/application.properties delete mode 100644 aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java delete mode 100644 aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/template.yml delete mode 100644 aws-serverless-springboot2-archetype/src/test/resources/projects/base/archetype.properties delete mode 100644 aws-serverless-springboot2-archetype/src/test/resources/projects/base/goal.txt diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml index 1783f79a3..57dfdd6d7 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml @@ -14,7 +14,8 @@ 1.8 1.8 - 2.39.1 + + 3.1.1 2.15.0 diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index 3fbd51264..85e071a08 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 1.8 - 5.3.27 + 6.0.7 4.13.2 2.19.0 diff --git a/aws-serverless-springboot2-archetype/pom.xml b/aws-serverless-springboot2-archetype/pom.xml deleted file mode 100644 index 1e7279dbf..000000000 --- a/aws-serverless-springboot2-archetype/pom.xml +++ /dev/null @@ -1,80 +0,0 @@ - - 4.0.0 - - - com.amazonaws.serverless - aws-serverless-java-container - 1.10-SNAPSHOT - - - com.amazonaws.serverless.archetypes - aws-serverless-springboot2-archetype - 1.10-SNAPSHOT - maven-archetype - - - https://github.com/awslabs/aws-serverless-java-container.git - HEAD - - - - - The Apache Software License, Version 2.0 - http://www.apache.org/licenses/LICENSE-2.0.txt - repo - - - - - - - src/main/resources - true - - archetype-resources/pom.xml - archetype-resources/README.md - - - - src/main/resources - false - - archetype-resources/pom.xml - - - - - - - org.apache.maven.archetype - archetype-packaging - 3.0.1 - - - - - - - org.apache.maven.plugins - maven-resources-plugin - 3.1.0 - - \ - - - - org.apache.maven.plugins - maven-archetype-plugin - 3.0.1 - - - - integration-test - - - - - - - - diff --git a/aws-serverless-springboot2-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml b/aws-serverless-springboot2-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml deleted file mode 100644 index 5379692ba..000000000 --- a/aws-serverless-springboot2-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - src/main/java - - **/*.java - - - - src/main/resources - - **/*.properties - - - - src/test/java - - **/*.java - - - - src/assembly - - * - - - - - - template.yml - README.md - build.gradle - - - - \ No newline at end of file diff --git a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/README.md b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/README.md deleted file mode 100644 index 1017a83ad..000000000 --- a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/README.md +++ /dev/null @@ -1,99 +0,0 @@ -#set($resourceName = $artifactId) -#macro(replaceChar $originalName, $char) - #if($originalName.contains($char)) - #set($tokens = $originalName.split($char)) - #set($newResourceName = "") - #foreach($token in $tokens) - #set($newResourceName = $newResourceName + $token.substring(0,1).toUpperCase() + $token.substring(1).toLowerCase()) - #end - ${newResourceName} - #else - #set($newResourceName = $originalName.substring(0,1).toUpperCase() + $originalName.substring(1)) - ${newResourceName} - #end -#end -#set($resourceName = "#replaceChar($resourceName, '-')") -#set($resourceName = "#replaceChar($resourceName, '.')") -#set($resourceName = $resourceName.replaceAll("\n", "").trim()) -# \${artifactId} serverless API -The \${artifactId} project, created with [`aws-serverless-java-container`](https://github.com/awslabs/aws-serverless-java-container). - -The starter project defines a simple `/ping` resource that can accept `GET` requests with its tests. - -The project folder also includes a `template.yml` file. You can use this [SAM](https://github.com/awslabs/serverless-application-model) file to deploy the project to AWS Lambda and Amazon API Gateway or test in local with the [SAM CLI](https://github.com/awslabs/aws-sam-cli). - -#[[##]]# 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/) - -#[[##]]# Building the project -You can use the SAM CLI to quickly build the project -```bash -$ mvn archetype:generate -DartifactId=\${artifactId} -DarchetypeGroupId=com.amazonaws.serverless.archetypes -DarchetypeArtifactId=aws-serverless-jersey-archetype -DarchetypeVersion=${project.version} -DgroupId=\${groupId} -Dversion=\${version} -Dinteractive=false -$ cd \${artifactId} -$ sam build -Building resource '\${resourceName}Function' -Running JavaGradleWorkflow:GradleBuild -Running JavaGradleWorkflow:CopyArtifacts - -Build Succeeded - -Built Artifacts : .aws-sam/build -Built Template : .aws-sam/build/template.yaml - -Commands you can use next -========================= -[*] Invoke Function: sam local invoke -[*] Deploy: sam deploy --guided -``` - -#[[##]]# Testing locally with the SAM CLI - -From the project root folder - where the `template.yml` file is located - start the API with the SAM CLI. - -```bash -$ sam local start-api - -... -Mounting ${groupId}.StreamLambdaHandler::handleRequest (java11) at http://127.0.0.1:3000/{proxy+} [OPTIONS GET HEAD POST PUT DELETE PATCH] -... -``` - -Using a new shell, you can send a test ping request to your API: - -```bash -$ curl -s http://127.0.0.1:3000/ping | python -m json.tool - -{ - "pong": "Hello, World!" -} -``` - -#[[##]]# Deploying to AWS -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 -------------------------------------------------------------------------------------------------------------- -\${resourceName}Api - URL for application https://xxxxxxxxxx.execute-api.us-west-2.amazonaws.com/Prod/pets -------------------------------------------------------------------------------------------------------------- -``` - -Copy the `OutputValue` into a browser or use curl to test your first request: - -```bash -$ curl -s https://xxxxxxx.execute-api.us-west-2.amazonaws.com/Prod/ping | python -m json.tool - -{ - "pong": "Hello, World!" -} -``` diff --git a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle deleted file mode 100644 index d6946e7f0..000000000 --- a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/build.gradle +++ /dev/null @@ -1,29 +0,0 @@ -apply plugin: 'java' - -repositories { - jcenter() - mavenLocal() - mavenCentral() -} - -dependencies { - implementation ( - 'org.springframework.boot:spring-boot-starter-web:2.7.11', - 'com.amazonaws.serverless:aws-serverless-java-container-springboot2:[1.0,)', - 'io.symphonia:lambda-logging:1.0.3' - ) - - testImplementation("junit:junit:4.13.2") -} - -task buildZip(type: Zip) { - from compileJava - from processResources - into('lib') { - from(configurations.compileClasspath) { - exclude 'tomcat-embed-*' - } - } -} - -build.dependsOn buildZip diff --git a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml deleted file mode 100644 index 53404bdb1..000000000 --- a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/pom.xml +++ /dev/null @@ -1,155 +0,0 @@ -#set($dollar = '$') - - - 4.0.0 - - \${groupId} - \${artifactId} - \${version} - jar - - Serverless Spring Boot 2 API - https://github.com/awslabs/aws-serverless-java-container - - - org.springframework.boot - spring-boot-starter-parent - 2.7.11 - - - - 1.8 - 1.8 - - - - - com.amazonaws.serverless - aws-serverless-java-container-springboot2 - ${project.version} - - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - - junit - junit - 4.12 - test - - - - - - shaded-jar - - - - org.apache.maven.plugins - maven-shade-plugin - 3.2.4 - - false - - - - package - - shade - - - - - org.apache.tomcat.embed:* - - - - - - - - - - - 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 - - - ${dollar}{project.build.directory}${dollar}{file.separator}lib - runtime - - - - - - org.apache.maven.plugins - maven-assembly-plugin - 3.3.0 - - - zip-assembly - package - - single - - - ${dollar}{project.artifactId}-${dollar}{project.version} - - src${dollar}{file.separator}assembly${dollar}{file.separator}bin.xml - - false - - - - - - - - - diff --git a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/src/assembly/bin.xml b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/src/assembly/bin.xml deleted file mode 100644 index 1e085057d..000000000 --- a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/src/assembly/bin.xml +++ /dev/null @@ -1,27 +0,0 @@ - - lambda-package - - zip - - false - - - - ${project.build.directory}${file.separator}lib - lib - - tomcat-embed* - - - - - ${project.build.directory}${file.separator}classes - - ** - - ${file.separator} - - - \ No newline at end of file diff --git a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/src/main/java/Application.java b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/src/main/java/Application.java deleted file mode 100644 index 1b74086f7..000000000 --- a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/src/main/java/Application.java +++ /dev/null @@ -1,24 +0,0 @@ -#macro(loggingOff) - logging.level.root:OFF -#end -#set($logging = "#loggingOff()") -#set($logging = $logging.replaceAll("\n", "").trim()) -package ${groupId}; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.context.annotation.Import; - -import ${groupId}.controller.PingController; - - -@SpringBootApplication -// We use direct @Import instead of @ComponentScan to speed up cold starts -// @ComponentScan(basePackages = "${groupId}.controller") -@Import({ PingController.class }) -public class Application { - - public static void main(String[] args) { - SpringApplication.run(Application.class, args); - } -} \ No newline at end of file diff --git a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/src/main/java/StreamLambdaHandler.java b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/src/main/java/StreamLambdaHandler.java deleted file mode 100644 index dca9650d3..000000000 --- a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/src/main/java/StreamLambdaHandler.java +++ /dev/null @@ -1,39 +0,0 @@ -package ${groupId}; - - -import com.amazonaws.serverless.exceptions.ContainerInitializationException; -import com.amazonaws.serverless.proxy.model.AwsProxyRequest; -import com.amazonaws.serverless.proxy.model.AwsProxyResponse; -import com.amazonaws.serverless.proxy.spring.SpringBootLambdaContainerHandler; -import com.amazonaws.services.lambda.runtime.Context; -import com.amazonaws.services.lambda.runtime.RequestStreamHandler; - -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; - - -public class StreamLambdaHandler implements RequestStreamHandler { - private static SpringBootLambdaContainerHandler handler; - static { - try { - handler = SpringBootLambdaContainerHandler.getAwsProxyHandler(Application.class); - // For applications that take longer than 10 seconds to start, use the async builder: - // handler = new SpringBootProxyHandlerBuilder() - // .defaultProxy() - // .asyncInit() - // .springBootApplication(Application.class) - // .buildAndInitialize(); - } catch (ContainerInitializationException e) { - // if we fail here. We re-throw the exception to force another cold start - e.printStackTrace(); - throw new RuntimeException("Could not initialize Spring Boot application", e); - } - } - - @Override - public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) - throws IOException { - handler.proxyStream(inputStream, outputStream, context); - } -} \ No newline at end of file diff --git a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/src/main/java/controller/PingController.java b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/src/main/java/controller/PingController.java deleted file mode 100644 index 94f517f07..000000000 --- a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/src/main/java/controller/PingController.java +++ /dev/null @@ -1,20 +0,0 @@ -package ${groupId}.controller; - - -import org.springframework.web.bind.annotation.*; -import org.springframework.web.servlet.config.annotation.EnableWebMvc; - -import java.util.HashMap; -import java.util.Map; - - -@RestController -@EnableWebMvc -public class PingController { - @RequestMapping(path = "/ping", method = RequestMethod.GET) - public Map ping() { - Map pong = new HashMap<>(); - pong.put("pong", "Hello, World!"); - return pong; - } -} diff --git a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/src/main/resources/application.properties b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/src/main/resources/application.properties deleted file mode 100644 index ec1cb9792..000000000 --- a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/src/main/resources/application.properties +++ /dev/null @@ -1,3 +0,0 @@ -# Reduce logging level to make sure the application works with SAM local -# https://github.com/awslabs/aws-serverless-java-container/issues/134 -logging.level.root=WARN \ No newline at end of file diff --git a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java deleted file mode 100644 index 4a6b00b03..000000000 --- a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java +++ /dev/null @@ -1,90 +0,0 @@ -package ${groupId}; - - -import com.amazonaws.serverless.proxy.internal.LambdaContainerHandler; -import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; -import com.amazonaws.serverless.proxy.internal.testutils.MockLambdaContext; -import com.amazonaws.serverless.proxy.model.AwsProxyResponse; -import com.amazonaws.services.lambda.runtime.Context; - -import org.junit.BeforeClass; -import org.junit.Test; - -import jakarta.ws.rs.HttpMethod; -import jakarta.ws.rs.core.HttpHeaders; -import jakarta.ws.rs.core.MediaType; -import jakarta.ws.rs.core.Response; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; - -import static org.junit.Assert.*; - - -public class StreamLambdaHandlerTest { - - private static StreamLambdaHandler handler; - private static Context lambdaContext; - - @BeforeClass - public static void setUp() { - handler = new StreamLambdaHandler(); - lambdaContext = new MockLambdaContext(); - } - - @Test - public void ping_streamRequest_respondsWithHello() { - InputStream requestStream = new AwsProxyRequestBuilder("/ping", HttpMethod.GET) - .header(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON) - .buildStream(); - ByteArrayOutputStream responseStream = new ByteArrayOutputStream(); - - handle(requestStream, responseStream); - - AwsProxyResponse response = readResponse(responseStream); - assertNotNull(response); - assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode()); - - assertFalse(response.isBase64Encoded()); - - assertTrue(response.getBody().contains("pong")); - assertTrue(response.getBody().contains("Hello, World!")); - - assertTrue(response.getMultiValueHeaders().containsKey(HttpHeaders.CONTENT_TYPE)); - assertTrue(response.getMultiValueHeaders().getFirst(HttpHeaders.CONTENT_TYPE).startsWith(MediaType.APPLICATION_JSON)); - } - - @Test - public void invalidResource_streamRequest_responds404() { - InputStream requestStream = new AwsProxyRequestBuilder("/pong", HttpMethod.GET) - .header(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON) - .buildStream(); - ByteArrayOutputStream responseStream = new ByteArrayOutputStream(); - - handle(requestStream, responseStream); - - AwsProxyResponse response = readResponse(responseStream); - assertNotNull(response); - assertEquals(Response.Status.NOT_FOUND.getStatusCode(), response.getStatusCode()); - } - - private void handle(InputStream is, ByteArrayOutputStream os) { - try { - handler.handleRequest(is, os, lambdaContext); - } catch (IOException e) { - e.printStackTrace(); - fail(e.getMessage()); - } - } - - private AwsProxyResponse readResponse(ByteArrayOutputStream responseStream) { - try { - return LambdaContainerHandler.getObjectMapper().readValue(responseStream.toByteArray(), AwsProxyResponse.class); - } catch (IOException e) { - e.printStackTrace(); - fail("Error while parsing response: " + e.getMessage()); - } - return null; - } -} diff --git a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/template.yml b/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/template.yml deleted file mode 100644 index 8d8e0946a..000000000 --- a/aws-serverless-springboot2-archetype/src/main/resources/archetype-resources/template.yml +++ /dev/null @@ -1,52 +0,0 @@ -#set($resourceName = $artifactId) -#macro(replaceChar $originalName, $char) - #if($originalName.contains($char)) - #set($tokens = $originalName.split($char)) - #set($newResourceName = "") - #foreach($token in $tokens) - #set($newResourceName = $newResourceName + $token.substring(0,1).toUpperCase() + $token.substring(1).toLowerCase()) - #end - ${newResourceName} - #else - #set($newResourceName = $originalName.substring(0,1).toUpperCase() + $originalName.substring(1)) - ${newResourceName} - #end -#end -#set($resourceName = "#replaceChar($resourceName, '-')") -#set($resourceName = "#replaceChar($resourceName, '.')") -#set($resourceName = $resourceName.replaceAll("\n", "").trim()) -#macro(regionVar) - AWS::Region -#end -#set($awsRegion = "#regionVar()") -#set($awsRegion = $awsRegion.replaceAll("\n", "").trim()) -AWSTemplateFormatVersion: '2010-09-09' -Transform: AWS::Serverless-2016-10-31 -Description: AWS Serverless Spring Boot 2 API - ${groupId}::${artifactId} -Globals: - Api: - EndpointConfiguration: REGIONAL - -Resources: - ${resourceName}Function: - Type: AWS::Serverless::Function - Properties: - Handler: ${groupId}.StreamLambdaHandler::handleRequest - Runtime: java11 - CodeUri: . - MemorySize: 512 - Policies: AWSLambdaBasicExecutionRole - Timeout: 30 - Events: - ProxyResource: - Type: Api - Properties: - Path: /{proxy+} - Method: any - -Outputs: - ${resourceName}Api: - Description: URL for application - Value: !Sub 'https://${ServerlessRestApi}.execute-api.${${awsRegion}}.amazonaws.com/Prod/ping' - Export: - Name: ${resourceName}Api diff --git a/aws-serverless-springboot2-archetype/src/test/resources/projects/base/archetype.properties b/aws-serverless-springboot2-archetype/src/test/resources/projects/base/archetype.properties deleted file mode 100644 index 7df3bf6e1..000000000 --- a/aws-serverless-springboot2-archetype/src/test/resources/projects/base/archetype.properties +++ /dev/null @@ -1,3 +0,0 @@ -groupId=test.service -artifactId=springboot-archetype-test -version=1.0-SNAPSHOT diff --git a/aws-serverless-springboot2-archetype/src/test/resources/projects/base/goal.txt b/aws-serverless-springboot2-archetype/src/test/resources/projects/base/goal.txt deleted file mode 100644 index 597acc768..000000000 --- a/aws-serverless-springboot2-archetype/src/test/resources/projects/base/goal.txt +++ /dev/null @@ -1 +0,0 @@ -package \ No newline at end of file diff --git a/pom.xml b/pom.xml index 3bf6fbf0d..babeeb899 100644 --- a/pom.xml +++ b/pom.xml @@ -27,13 +27,13 @@ aws-serverless-java-container-core aws-serverless-java-container-jersey - aws-serverless-java-container-spark + aws-serverless-java-container-spring - aws-serverless-java-container-struts + aws-serverless-java-container-springboot2 - aws-serverless-struts-archetype + aws-serverless-jersey-archetype - aws-serverless-spark-archetype + aws-serverless-spring-archetype aws-serverless-springboot2-archetype From 7639de8eabb5bd26b15402e94e9f7ff338a17f1f Mon Sep 17 00:00:00 2001 From: Mbea Date: Thu, 6 Apr 2023 01:58:50 -0700 Subject: [PATCH 318/888] chore: removed unnecessary comments --- aws-serverless-java-container-core/pom.xml | 15 --------------- aws-serverless-java-container-spring/pom.xml | 7 ------- aws-serverless-java-container-springboot2/pom.xml | 11 ++--------- pom.xml | 4 ---- 4 files changed, 2 insertions(+), 35 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 0f2c13c55..32ff479c4 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -71,13 +71,6 @@ ${jackson.version} - - - org.apache.commons commons-fileupload2 @@ -89,7 +82,6 @@ 2.0.0 - org.apache.httpcomponents @@ -98,13 +90,6 @@ compile - - - - - - - <<<<<<< HEAD org.apache.httpcomponents diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 830c8002b..286117995 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -59,13 +59,6 @@ test - - - - - - - jakarta.activation jakarta.activation-api diff --git a/aws-serverless-java-container-springboot2/pom.xml b/aws-serverless-java-container-springboot2/pom.xml index d98d44ca7..dddbf5520 100644 --- a/aws-serverless-java-container-springboot2/pom.xml +++ b/aws-serverless-java-container-springboot2/pom.xml @@ -28,7 +28,6 @@ aws-serverless-java-container-core 1.10-SNAPSHOT - org.springframework spring-webflux @@ -158,13 +157,7 @@ junit-jupiter test - - - - - - - + jakarta.activation jakarta.activation-api @@ -176,7 +169,7 @@ 3.0.2 test - + jakarta.websocket jakarta.websocket-api diff --git a/pom.xml b/pom.xml index babeeb899..b3439903b 100644 --- a/pom.xml +++ b/pom.xml @@ -27,13 +27,9 @@ aws-serverless-java-container-core aws-serverless-java-container-jersey - aws-serverless-java-container-spring - aws-serverless-java-container-springboot2 - aws-serverless-jersey-archetype - aws-serverless-spring-archetype aws-serverless-springboot2-archetype From 51642dc16b0204dfb67773fb622934e931bdf2fa Mon Sep 17 00:00:00 2001 From: Mbea Date: Thu, 6 Apr 2023 09:58:08 -0700 Subject: [PATCH 319/888] Renamed springboot2 directory and module to springboot3 --- .../pom.xml | 2 +- .../proxy/spring/SpringBootLambdaContainerHandler.java | 0 .../serverless/proxy/spring/SpringBootProxyHandlerBuilder.java | 0 .../ServerlessReactiveServletEmbeddedServerFactory.java | 0 .../spring/embedded/ServerlessServletEmbeddedServerFactory.java | 0 .../com/amazonaws/serverless/proxy/spring/SecurityAppTest.java | 0 .../com/amazonaws/serverless/proxy/spring/ServletAppTest.java | 0 .../java/com/amazonaws/serverless/proxy/spring/SlowAppTest.java | 0 .../com/amazonaws/serverless/proxy/spring/WebFluxAppTest.java | 0 .../embedded/ServerlessServletEmbeddedServerFactoryTest.java | 0 .../serverless/proxy/spring/securityapp/LambdaHandler.java | 0 .../serverless/proxy/spring/securityapp/MessageController.java | 0 .../proxy/spring/securityapp/SecurityApplication.java | 0 .../serverless/proxy/spring/securityapp/SecurityConfig.java | 0 .../serverless/proxy/spring/servletapp/LambdaHandler.java | 0 .../serverless/proxy/spring/servletapp/LambdaStreamHandler.java | 0 .../serverless/proxy/spring/servletapp/MessageController.java | 0 .../serverless/proxy/spring/servletapp/MessageData.java | 0 .../serverless/proxy/spring/servletapp/ServletApplication.java | 0 .../amazonaws/serverless/proxy/spring/servletapp/UserData.java | 0 .../serverless/proxy/spring/slowapp/LambdaHandler.java | 0 .../serverless/proxy/spring/slowapp/MessageController.java | 0 .../serverless/proxy/spring/slowapp/SlowTestApplication.java | 0 .../serverless/proxy/spring/webfluxapp/LambdaHandler.java | 0 .../serverless/proxy/spring/webfluxapp/MessageController.java | 0 .../serverless/proxy/spring/webfluxapp/MessageData.java | 0 .../proxy/spring/webfluxapp/WebFluxTestApplication.java | 0 pom.xml | 2 +- 28 files changed, 2 insertions(+), 2 deletions(-) rename {aws-serverless-java-container-springboot2 => aws-serverless-java-container-springboot3}/pom.xml (99%) rename {aws-serverless-java-container-springboot2 => aws-serverless-java-container-springboot3}/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java (100%) rename {aws-serverless-java-container-springboot2 => aws-serverless-java-container-springboot3}/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootProxyHandlerBuilder.java (100%) rename {aws-serverless-java-container-springboot2 => aws-serverless-java-container-springboot3}/src/main/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessReactiveServletEmbeddedServerFactory.java (100%) rename {aws-serverless-java-container-springboot2 => aws-serverless-java-container-springboot3}/src/main/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactory.java (100%) rename {aws-serverless-java-container-springboot2 => aws-serverless-java-container-springboot3}/src/test/java/com/amazonaws/serverless/proxy/spring/SecurityAppTest.java (100%) rename {aws-serverless-java-container-springboot2 => aws-serverless-java-container-springboot3}/src/test/java/com/amazonaws/serverless/proxy/spring/ServletAppTest.java (100%) rename {aws-serverless-java-container-springboot2 => aws-serverless-java-container-springboot3}/src/test/java/com/amazonaws/serverless/proxy/spring/SlowAppTest.java (100%) rename {aws-serverless-java-container-springboot2 => aws-serverless-java-container-springboot3}/src/test/java/com/amazonaws/serverless/proxy/spring/WebFluxAppTest.java (100%) rename {aws-serverless-java-container-springboot2 => aws-serverless-java-container-springboot3}/src/test/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactoryTest.java (100%) rename {aws-serverless-java-container-springboot2 => aws-serverless-java-container-springboot3}/src/test/java/com/amazonaws/serverless/proxy/spring/securityapp/LambdaHandler.java (100%) rename {aws-serverless-java-container-springboot2 => aws-serverless-java-container-springboot3}/src/test/java/com/amazonaws/serverless/proxy/spring/securityapp/MessageController.java (100%) rename {aws-serverless-java-container-springboot2 => aws-serverless-java-container-springboot3}/src/test/java/com/amazonaws/serverless/proxy/spring/securityapp/SecurityApplication.java (100%) rename {aws-serverless-java-container-springboot2 => aws-serverless-java-container-springboot3}/src/test/java/com/amazonaws/serverless/proxy/spring/securityapp/SecurityConfig.java (100%) rename {aws-serverless-java-container-springboot2 => aws-serverless-java-container-springboot3}/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/LambdaHandler.java (100%) rename {aws-serverless-java-container-springboot2 => aws-serverless-java-container-springboot3}/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/LambdaStreamHandler.java (100%) rename {aws-serverless-java-container-springboot2 => aws-serverless-java-container-springboot3}/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/MessageController.java (100%) rename {aws-serverless-java-container-springboot2 => aws-serverless-java-container-springboot3}/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/MessageData.java (100%) rename {aws-serverless-java-container-springboot2 => aws-serverless-java-container-springboot3}/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/ServletApplication.java (100%) rename {aws-serverless-java-container-springboot2 => aws-serverless-java-container-springboot3}/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/UserData.java (100%) rename {aws-serverless-java-container-springboot2 => aws-serverless-java-container-springboot3}/src/test/java/com/amazonaws/serverless/proxy/spring/slowapp/LambdaHandler.java (100%) rename {aws-serverless-java-container-springboot2 => aws-serverless-java-container-springboot3}/src/test/java/com/amazonaws/serverless/proxy/spring/slowapp/MessageController.java (100%) rename {aws-serverless-java-container-springboot2 => aws-serverless-java-container-springboot3}/src/test/java/com/amazonaws/serverless/proxy/spring/slowapp/SlowTestApplication.java (100%) rename {aws-serverless-java-container-springboot2 => aws-serverless-java-container-springboot3}/src/test/java/com/amazonaws/serverless/proxy/spring/webfluxapp/LambdaHandler.java (100%) rename {aws-serverless-java-container-springboot2 => aws-serverless-java-container-springboot3}/src/test/java/com/amazonaws/serverless/proxy/spring/webfluxapp/MessageController.java (100%) rename {aws-serverless-java-container-springboot2 => aws-serverless-java-container-springboot3}/src/test/java/com/amazonaws/serverless/proxy/spring/webfluxapp/MessageData.java (100%) rename {aws-serverless-java-container-springboot2 => aws-serverless-java-container-springboot3}/src/test/java/com/amazonaws/serverless/proxy/spring/webfluxapp/WebFluxTestApplication.java (100%) diff --git a/aws-serverless-java-container-springboot2/pom.xml b/aws-serverless-java-container-springboot3/pom.xml similarity index 99% rename from aws-serverless-java-container-springboot2/pom.xml rename to aws-serverless-java-container-springboot3/pom.xml index dddbf5520..6f6679a1a 100644 --- a/aws-serverless-java-container-springboot2/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -8,7 +8,7 @@ 4.0.0 com.amazonaws.serverless - aws-serverless-java-container-springboot2 + aws-serverless-java-container-springboot3 AWS Serverless Java container support - SpringBoot 2 implementation Allows Java applications written for SpringBoot 2 to run in AWS Lambda https://aws.amazon.com/lambda diff --git a/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java similarity index 100% rename from aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java rename to aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java diff --git a/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootProxyHandlerBuilder.java b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootProxyHandlerBuilder.java similarity index 100% rename from aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootProxyHandlerBuilder.java rename to aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootProxyHandlerBuilder.java diff --git a/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessReactiveServletEmbeddedServerFactory.java b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessReactiveServletEmbeddedServerFactory.java similarity index 100% rename from aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessReactiveServletEmbeddedServerFactory.java rename to aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessReactiveServletEmbeddedServerFactory.java diff --git a/aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactory.java b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactory.java similarity index 100% rename from aws-serverless-java-container-springboot2/src/main/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactory.java rename to aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactory.java diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/SecurityAppTest.java b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/SecurityAppTest.java similarity index 100% rename from aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/SecurityAppTest.java rename to aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/SecurityAppTest.java diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/ServletAppTest.java b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/ServletAppTest.java similarity index 100% rename from aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/ServletAppTest.java rename to aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/ServletAppTest.java diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/SlowAppTest.java b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/SlowAppTest.java similarity index 100% rename from aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/SlowAppTest.java rename to aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/SlowAppTest.java diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/WebFluxAppTest.java b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/WebFluxAppTest.java similarity index 100% rename from aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/WebFluxAppTest.java rename to aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/WebFluxAppTest.java diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactoryTest.java b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactoryTest.java similarity index 100% rename from aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactoryTest.java rename to aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/embedded/ServerlessServletEmbeddedServerFactoryTest.java diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/securityapp/LambdaHandler.java b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/securityapp/LambdaHandler.java similarity index 100% rename from aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/securityapp/LambdaHandler.java rename to aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/securityapp/LambdaHandler.java diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/securityapp/MessageController.java b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/securityapp/MessageController.java similarity index 100% rename from aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/securityapp/MessageController.java rename to aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/securityapp/MessageController.java diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/securityapp/SecurityApplication.java b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/securityapp/SecurityApplication.java similarity index 100% rename from aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/securityapp/SecurityApplication.java rename to aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/securityapp/SecurityApplication.java diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/securityapp/SecurityConfig.java b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/securityapp/SecurityConfig.java similarity index 100% rename from aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/securityapp/SecurityConfig.java rename to aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/securityapp/SecurityConfig.java diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/LambdaHandler.java b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/LambdaHandler.java similarity index 100% rename from aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/LambdaHandler.java rename to aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/LambdaHandler.java diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/LambdaStreamHandler.java b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/LambdaStreamHandler.java similarity index 100% rename from aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/LambdaStreamHandler.java rename to aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/LambdaStreamHandler.java diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/MessageController.java b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/MessageController.java similarity index 100% rename from aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/MessageController.java rename to aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/MessageController.java diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/MessageData.java b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/MessageData.java similarity index 100% rename from aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/MessageData.java rename to aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/MessageData.java diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/ServletApplication.java b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/ServletApplication.java similarity index 100% rename from aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/ServletApplication.java rename to aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/ServletApplication.java diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/UserData.java b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/UserData.java similarity index 100% rename from aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/UserData.java rename to aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/UserData.java diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/slowapp/LambdaHandler.java b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/slowapp/LambdaHandler.java similarity index 100% rename from aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/slowapp/LambdaHandler.java rename to aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/slowapp/LambdaHandler.java diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/slowapp/MessageController.java b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/slowapp/MessageController.java similarity index 100% rename from aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/slowapp/MessageController.java rename to aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/slowapp/MessageController.java diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/slowapp/SlowTestApplication.java b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/slowapp/SlowTestApplication.java similarity index 100% rename from aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/slowapp/SlowTestApplication.java rename to aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/slowapp/SlowTestApplication.java diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/webfluxapp/LambdaHandler.java b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/webfluxapp/LambdaHandler.java similarity index 100% rename from aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/webfluxapp/LambdaHandler.java rename to aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/webfluxapp/LambdaHandler.java diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/webfluxapp/MessageController.java b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/webfluxapp/MessageController.java similarity index 100% rename from aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/webfluxapp/MessageController.java rename to aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/webfluxapp/MessageController.java diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/webfluxapp/MessageData.java b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/webfluxapp/MessageData.java similarity index 100% rename from aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/webfluxapp/MessageData.java rename to aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/webfluxapp/MessageData.java diff --git a/aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/webfluxapp/WebFluxTestApplication.java b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/webfluxapp/WebFluxTestApplication.java similarity index 100% rename from aws-serverless-java-container-springboot2/src/test/java/com/amazonaws/serverless/proxy/spring/webfluxapp/WebFluxTestApplication.java rename to aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/webfluxapp/WebFluxTestApplication.java diff --git a/pom.xml b/pom.xml index b3439903b..cbcfda7f4 100644 --- a/pom.xml +++ b/pom.xml @@ -28,7 +28,7 @@ aws-serverless-java-container-core aws-serverless-java-container-jersey aws-serverless-java-container-spring - aws-serverless-java-container-springboot2 + aws-serverless-java-container-springboot3 aws-serverless-jersey-archetype aws-serverless-spring-archetype aws-serverless-springboot2-archetype From dbdb614b167073c63834ed3f68db137c8578bde6 Mon Sep 17 00:00:00 2001 From: Mbea Date: Tue, 11 Apr 2023 10:22:15 -0700 Subject: [PATCH 320/888] fix: updated name and description in SpringBoot3 component pom.xml --- .../pom.xml | 4 +- aws-serverless-springboot3-archetype/pom.xml | 80 +++++++++ .../META-INF/maven/archetype-metadata.xml | 39 +++++ .../resources/archetype-resources/README.md | 99 +++++++++++ .../archetype-resources/build.gradle | 29 ++++ .../resources/archetype-resources/pom.xml | 155 ++++++++++++++++++ .../archetype-resources/src/assembly/bin.xml | 27 +++ .../src/main/java/Application.java | 24 +++ .../src/main/java/StreamLambdaHandler.java | 39 +++++ .../main/java/controller/PingController.java | 20 +++ .../src/main/resources/application.properties | 3 + .../test/java/StreamLambdaHandlerTest.java | 90 ++++++++++ .../archetype-resources/template.yml | 52 ++++++ .../projects/base/archetype.properties | 3 + .../src/test/resources/projects/base/goal.txt | 1 + pom.xml | 2 +- 16 files changed, 664 insertions(+), 3 deletions(-) create mode 100644 aws-serverless-springboot3-archetype/pom.xml create mode 100644 aws-serverless-springboot3-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml create mode 100644 aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/README.md create mode 100644 aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle create mode 100644 aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml create mode 100644 aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/src/assembly/bin.xml create mode 100644 aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/src/main/java/Application.java create mode 100644 aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/src/main/java/StreamLambdaHandler.java create mode 100644 aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/src/main/java/controller/PingController.java create mode 100644 aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/src/main/resources/application.properties create mode 100644 aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java create mode 100644 aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/template.yml create mode 100644 aws-serverless-springboot3-archetype/src/test/resources/projects/base/archetype.properties create mode 100644 aws-serverless-springboot3-archetype/src/test/resources/projects/base/goal.txt diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index 6f6679a1a..e810ecdf7 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -9,8 +9,8 @@ com.amazonaws.serverless aws-serverless-java-container-springboot3 - AWS Serverless Java container support - SpringBoot 2 implementation - Allows Java applications written for SpringBoot 2 to run in AWS Lambda + AWS Serverless Java container support - SpringBoot 3 implementation + Allows Java applications written for SpringBoot 3 to run in AWS Lambda https://aws.amazon.com/lambda 1.10-SNAPSHOT diff --git a/aws-serverless-springboot3-archetype/pom.xml b/aws-serverless-springboot3-archetype/pom.xml new file mode 100644 index 000000000..4003610a3 --- /dev/null +++ b/aws-serverless-springboot3-archetype/pom.xml @@ -0,0 +1,80 @@ + + 4.0.0 + + + com.amazonaws.serverless + aws-serverless-java-container + 1.10-SNAPSHOT + + + com.amazonaws.serverless.archetypes + aws-serverless-springboot3-archetype + 1.10-SNAPSHOT + maven-archetype + + + https://github.com/awslabs/aws-serverless-java-container.git + HEAD + + + + + The Apache Software License, Version 2.0 + http://www.apache.org/licenses/LICENSE-2.0.txt + repo + + + + + + + src/main/resources + true + + archetype-resources/pom.xml + archetype-resources/README.md + + + + src/main/resources + false + + archetype-resources/pom.xml + + + + + + + org.apache.maven.archetype + archetype-packaging + 3.0.1 + + + + + + + org.apache.maven.plugins + maven-resources-plugin + 3.1.0 + + \ + + + + org.apache.maven.plugins + maven-archetype-plugin + 3.0.1 + + + + integration-test + + + + + + + + diff --git a/aws-serverless-springboot3-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml b/aws-serverless-springboot3-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml new file mode 100644 index 000000000..5379692ba --- /dev/null +++ b/aws-serverless-springboot3-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -0,0 +1,39 @@ + + + + src/main/java + + **/*.java + + + + src/main/resources + + **/*.properties + + + + src/test/java + + **/*.java + + + + src/assembly + + * + + + + + + template.yml + README.md + build.gradle + + + + \ No newline at end of file diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/README.md b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/README.md new file mode 100644 index 000000000..1017a83ad --- /dev/null +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/README.md @@ -0,0 +1,99 @@ +#set($resourceName = $artifactId) +#macro(replaceChar $originalName, $char) + #if($originalName.contains($char)) + #set($tokens = $originalName.split($char)) + #set($newResourceName = "") + #foreach($token in $tokens) + #set($newResourceName = $newResourceName + $token.substring(0,1).toUpperCase() + $token.substring(1).toLowerCase()) + #end + ${newResourceName} + #else + #set($newResourceName = $originalName.substring(0,1).toUpperCase() + $originalName.substring(1)) + ${newResourceName} + #end +#end +#set($resourceName = "#replaceChar($resourceName, '-')") +#set($resourceName = "#replaceChar($resourceName, '.')") +#set($resourceName = $resourceName.replaceAll("\n", "").trim()) +# \${artifactId} serverless API +The \${artifactId} project, created with [`aws-serverless-java-container`](https://github.com/awslabs/aws-serverless-java-container). + +The starter project defines a simple `/ping` resource that can accept `GET` requests with its tests. + +The project folder also includes a `template.yml` file. You can use this [SAM](https://github.com/awslabs/serverless-application-model) file to deploy the project to AWS Lambda and Amazon API Gateway or test in local with the [SAM CLI](https://github.com/awslabs/aws-sam-cli). + +#[[##]]# 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/) + +#[[##]]# Building the project +You can use the SAM CLI to quickly build the project +```bash +$ mvn archetype:generate -DartifactId=\${artifactId} -DarchetypeGroupId=com.amazonaws.serverless.archetypes -DarchetypeArtifactId=aws-serverless-jersey-archetype -DarchetypeVersion=${project.version} -DgroupId=\${groupId} -Dversion=\${version} -Dinteractive=false +$ cd \${artifactId} +$ sam build +Building resource '\${resourceName}Function' +Running JavaGradleWorkflow:GradleBuild +Running JavaGradleWorkflow:CopyArtifacts + +Build Succeeded + +Built Artifacts : .aws-sam/build +Built Template : .aws-sam/build/template.yaml + +Commands you can use next +========================= +[*] Invoke Function: sam local invoke +[*] Deploy: sam deploy --guided +``` + +#[[##]]# Testing locally with the SAM CLI + +From the project root folder - where the `template.yml` file is located - start the API with the SAM CLI. + +```bash +$ sam local start-api + +... +Mounting ${groupId}.StreamLambdaHandler::handleRequest (java11) at http://127.0.0.1:3000/{proxy+} [OPTIONS GET HEAD POST PUT DELETE PATCH] +... +``` + +Using a new shell, you can send a test ping request to your API: + +```bash +$ curl -s http://127.0.0.1:3000/ping | python -m json.tool + +{ + "pong": "Hello, World!" +} +``` + +#[[##]]# Deploying to AWS +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 +------------------------------------------------------------------------------------------------------------- +\${resourceName}Api - URL for application https://xxxxxxxxxx.execute-api.us-west-2.amazonaws.com/Prod/pets +------------------------------------------------------------------------------------------------------------- +``` + +Copy the `OutputValue` into a browser or use curl to test your first request: + +```bash +$ curl -s https://xxxxxxx.execute-api.us-west-2.amazonaws.com/Prod/ping | python -m json.tool + +{ + "pong": "Hello, World!" +} +``` diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle new file mode 100644 index 000000000..36a13b5d7 --- /dev/null +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle @@ -0,0 +1,29 @@ +apply plugin: 'java' + +repositories { + jcenter() + mavenLocal() + mavenCentral() +} + +dependencies { + implementation ( + 'org.springframework.boot:spring-boot-starter-web:2.7.10', + 'com.amazonaws.serverless:aws-serverless-java-container-springboot2:[1.0,)', + 'io.symphonia:lambda-logging:1.0.3' + ) + + testImplementation("junit:junit:4.13.2") +} + +task buildZip(type: Zip) { + from compileJava + from processResources + into('lib') { + from(configurations.compileClasspath) { + exclude 'tomcat-embed-*' + } + } +} + +build.dependsOn buildZip diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml new file mode 100644 index 000000000..1489ddf24 --- /dev/null +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml @@ -0,0 +1,155 @@ +#set($dollar = '$') + + + 4.0.0 + + \${groupId} + \${artifactId} + \${version} + jar + + Serverless Spring Boot 2 API + https://github.com/awslabs/aws-serverless-java-container + + + org.springframework.boot + spring-boot-starter-parent + 3.0.4 + + + + 1.8 + 1.8 + + + + + com.amazonaws.serverless + aws-serverless-java-container-springboot2 + ${project.version} + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-tomcat + + + + + + junit + junit + 4.12 + test + + + + + + shaded-jar + + + + org.apache.maven.plugins + maven-shade-plugin + 3.2.4 + + false + + + + package + + shade + + + + + org.apache.tomcat.embed:* + + + + + + + + + + + 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 + + + ${dollar}{project.build.directory}${dollar}{file.separator}lib + runtime + + + + + + org.apache.maven.plugins + maven-assembly-plugin + 3.3.0 + + + zip-assembly + package + + single + + + ${dollar}{project.artifactId}-${dollar}{project.version} + + src${dollar}{file.separator}assembly${dollar}{file.separator}bin.xml + + false + + + + + + + + + diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/src/assembly/bin.xml b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/src/assembly/bin.xml new file mode 100644 index 000000000..1e085057d --- /dev/null +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/src/assembly/bin.xml @@ -0,0 +1,27 @@ + + lambda-package + + zip + + false + + + + ${project.build.directory}${file.separator}lib + lib + + tomcat-embed* + + + + + ${project.build.directory}${file.separator}classes + + ** + + ${file.separator} + + + \ No newline at end of file diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/src/main/java/Application.java b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/src/main/java/Application.java new file mode 100644 index 000000000..1b74086f7 --- /dev/null +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/src/main/java/Application.java @@ -0,0 +1,24 @@ +#macro(loggingOff) + logging.level.root:OFF +#end +#set($logging = "#loggingOff()") +#set($logging = $logging.replaceAll("\n", "").trim()) +package ${groupId}; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.Import; + +import ${groupId}.controller.PingController; + + +@SpringBootApplication +// We use direct @Import instead of @ComponentScan to speed up cold starts +// @ComponentScan(basePackages = "${groupId}.controller") +@Import({ PingController.class }) +public class Application { + + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } +} \ No newline at end of file diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/src/main/java/StreamLambdaHandler.java b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/src/main/java/StreamLambdaHandler.java new file mode 100644 index 000000000..dca9650d3 --- /dev/null +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/src/main/java/StreamLambdaHandler.java @@ -0,0 +1,39 @@ +package ${groupId}; + + +import com.amazonaws.serverless.exceptions.ContainerInitializationException; +import com.amazonaws.serverless.proxy.model.AwsProxyRequest; +import com.amazonaws.serverless.proxy.model.AwsProxyResponse; +import com.amazonaws.serverless.proxy.spring.SpringBootLambdaContainerHandler; +import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.RequestStreamHandler; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + + +public class StreamLambdaHandler implements RequestStreamHandler { + private static SpringBootLambdaContainerHandler handler; + static { + try { + handler = SpringBootLambdaContainerHandler.getAwsProxyHandler(Application.class); + // For applications that take longer than 10 seconds to start, use the async builder: + // handler = new SpringBootProxyHandlerBuilder() + // .defaultProxy() + // .asyncInit() + // .springBootApplication(Application.class) + // .buildAndInitialize(); + } catch (ContainerInitializationException e) { + // if we fail here. We re-throw the exception to force another cold start + e.printStackTrace(); + throw new RuntimeException("Could not initialize Spring Boot application", e); + } + } + + @Override + public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) + throws IOException { + handler.proxyStream(inputStream, outputStream, context); + } +} \ No newline at end of file diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/src/main/java/controller/PingController.java b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/src/main/java/controller/PingController.java new file mode 100644 index 000000000..94f517f07 --- /dev/null +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/src/main/java/controller/PingController.java @@ -0,0 +1,20 @@ +package ${groupId}.controller; + + +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; + +import java.util.HashMap; +import java.util.Map; + + +@RestController +@EnableWebMvc +public class PingController { + @RequestMapping(path = "/ping", method = RequestMethod.GET) + public Map ping() { + Map pong = new HashMap<>(); + pong.put("pong", "Hello, World!"); + return pong; + } +} diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/src/main/resources/application.properties b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/src/main/resources/application.properties new file mode 100644 index 000000000..ec1cb9792 --- /dev/null +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/src/main/resources/application.properties @@ -0,0 +1,3 @@ +# Reduce logging level to make sure the application works with SAM local +# https://github.com/awslabs/aws-serverless-java-container/issues/134 +logging.level.root=WARN \ No newline at end of file diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java new file mode 100644 index 000000000..4a6b00b03 --- /dev/null +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java @@ -0,0 +1,90 @@ +package ${groupId}; + + +import com.amazonaws.serverless.proxy.internal.LambdaContainerHandler; +import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; +import com.amazonaws.serverless.proxy.internal.testutils.MockLambdaContext; +import com.amazonaws.serverless.proxy.model.AwsProxyResponse; +import com.amazonaws.services.lambda.runtime.Context; + +import org.junit.BeforeClass; +import org.junit.Test; + +import jakarta.ws.rs.HttpMethod; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; + +import static org.junit.Assert.*; + + +public class StreamLambdaHandlerTest { + + private static StreamLambdaHandler handler; + private static Context lambdaContext; + + @BeforeClass + public static void setUp() { + handler = new StreamLambdaHandler(); + lambdaContext = new MockLambdaContext(); + } + + @Test + public void ping_streamRequest_respondsWithHello() { + InputStream requestStream = new AwsProxyRequestBuilder("/ping", HttpMethod.GET) + .header(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON) + .buildStream(); + ByteArrayOutputStream responseStream = new ByteArrayOutputStream(); + + handle(requestStream, responseStream); + + AwsProxyResponse response = readResponse(responseStream); + assertNotNull(response); + assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode()); + + assertFalse(response.isBase64Encoded()); + + assertTrue(response.getBody().contains("pong")); + assertTrue(response.getBody().contains("Hello, World!")); + + assertTrue(response.getMultiValueHeaders().containsKey(HttpHeaders.CONTENT_TYPE)); + assertTrue(response.getMultiValueHeaders().getFirst(HttpHeaders.CONTENT_TYPE).startsWith(MediaType.APPLICATION_JSON)); + } + + @Test + public void invalidResource_streamRequest_responds404() { + InputStream requestStream = new AwsProxyRequestBuilder("/pong", HttpMethod.GET) + .header(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON) + .buildStream(); + ByteArrayOutputStream responseStream = new ByteArrayOutputStream(); + + handle(requestStream, responseStream); + + AwsProxyResponse response = readResponse(responseStream); + assertNotNull(response); + assertEquals(Response.Status.NOT_FOUND.getStatusCode(), response.getStatusCode()); + } + + private void handle(InputStream is, ByteArrayOutputStream os) { + try { + handler.handleRequest(is, os, lambdaContext); + } catch (IOException e) { + e.printStackTrace(); + fail(e.getMessage()); + } + } + + private AwsProxyResponse readResponse(ByteArrayOutputStream responseStream) { + try { + return LambdaContainerHandler.getObjectMapper().readValue(responseStream.toByteArray(), AwsProxyResponse.class); + } catch (IOException e) { + e.printStackTrace(); + fail("Error while parsing response: " + e.getMessage()); + } + return null; + } +} diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/template.yml b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/template.yml new file mode 100644 index 000000000..8d8e0946a --- /dev/null +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/template.yml @@ -0,0 +1,52 @@ +#set($resourceName = $artifactId) +#macro(replaceChar $originalName, $char) + #if($originalName.contains($char)) + #set($tokens = $originalName.split($char)) + #set($newResourceName = "") + #foreach($token in $tokens) + #set($newResourceName = $newResourceName + $token.substring(0,1).toUpperCase() + $token.substring(1).toLowerCase()) + #end + ${newResourceName} + #else + #set($newResourceName = $originalName.substring(0,1).toUpperCase() + $originalName.substring(1)) + ${newResourceName} + #end +#end +#set($resourceName = "#replaceChar($resourceName, '-')") +#set($resourceName = "#replaceChar($resourceName, '.')") +#set($resourceName = $resourceName.replaceAll("\n", "").trim()) +#macro(regionVar) + AWS::Region +#end +#set($awsRegion = "#regionVar()") +#set($awsRegion = $awsRegion.replaceAll("\n", "").trim()) +AWSTemplateFormatVersion: '2010-09-09' +Transform: AWS::Serverless-2016-10-31 +Description: AWS Serverless Spring Boot 2 API - ${groupId}::${artifactId} +Globals: + Api: + EndpointConfiguration: REGIONAL + +Resources: + ${resourceName}Function: + Type: AWS::Serverless::Function + Properties: + Handler: ${groupId}.StreamLambdaHandler::handleRequest + Runtime: java11 + CodeUri: . + MemorySize: 512 + Policies: AWSLambdaBasicExecutionRole + Timeout: 30 + Events: + ProxyResource: + Type: Api + Properties: + Path: /{proxy+} + Method: any + +Outputs: + ${resourceName}Api: + Description: URL for application + Value: !Sub 'https://${ServerlessRestApi}.execute-api.${${awsRegion}}.amazonaws.com/Prod/ping' + Export: + Name: ${resourceName}Api diff --git a/aws-serverless-springboot3-archetype/src/test/resources/projects/base/archetype.properties b/aws-serverless-springboot3-archetype/src/test/resources/projects/base/archetype.properties new file mode 100644 index 000000000..7df3bf6e1 --- /dev/null +++ b/aws-serverless-springboot3-archetype/src/test/resources/projects/base/archetype.properties @@ -0,0 +1,3 @@ +groupId=test.service +artifactId=springboot-archetype-test +version=1.0-SNAPSHOT diff --git a/aws-serverless-springboot3-archetype/src/test/resources/projects/base/goal.txt b/aws-serverless-springboot3-archetype/src/test/resources/projects/base/goal.txt new file mode 100644 index 000000000..597acc768 --- /dev/null +++ b/aws-serverless-springboot3-archetype/src/test/resources/projects/base/goal.txt @@ -0,0 +1 @@ +package \ No newline at end of file diff --git a/pom.xml b/pom.xml index cbcfda7f4..08627db23 100644 --- a/pom.xml +++ b/pom.xml @@ -31,7 +31,7 @@ aws-serverless-java-container-springboot3 aws-serverless-jersey-archetype aws-serverless-spring-archetype - aws-serverless-springboot2-archetype + aws-serverless-springboot3-archetype From 578e3d7778248a9b176d50f9d4e6cb991c309842 Mon Sep 17 00:00:00 2001 From: Mbea Date: Fri, 14 Apr 2023 10:43:57 -0700 Subject: [PATCH 321/888] - Updated the pet-store samples - Updated some dependencies versions --- aws-serverless-java-container-core/pom.xml | 22 +++++++------------ .../internal/servlet/AwsServletContext.java | 18 +++++++-------- aws-serverless-java-container-spring/pom.xml | 7 +++--- .../pom.xml | 2 +- .../resources/archetype-resources/pom.xml | 2 +- samples/jersey/pet-store/pom.xml | 4 ++-- samples/quarkus/pet-store/pom.xml | 4 ++-- samples/spring/pet-store/pom.xml | 7 +++--- samples/spring/pet-store/template.yml | 2 +- .../pet-store/README.md | 0 .../pet-store/build.gradle | 0 .../pet-store/pom.xml | 11 +++++----- .../pet-store/src/assembly/bin.xml | 0 .../sample/springboot3}/Application.java | 0 .../springboot3}/StreamLambdaHandler.java | 0 .../controller/PetsController.java | 0 .../filter/CognitoIdentityFilter.java | 0 .../sample/springboot3}/model/Error.java | 0 .../sample/springboot3}/model/Pet.java | 0 .../sample/springboot3}/model/PetData.java | 0 .../pet-store/src/main/resources/logback.xml | 0 .../pet-store/template.yml | 4 ++-- 22 files changed, 38 insertions(+), 45 deletions(-) rename samples/{springboot2 => springboot3}/pet-store/README.md (100%) rename samples/{springboot2 => springboot3}/pet-store/build.gradle (100%) rename samples/{springboot2 => springboot3}/pet-store/pom.xml (96%) rename samples/{springboot2 => springboot3}/pet-store/src/assembly/bin.xml (100%) rename samples/{springboot2/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot2 => springboot3/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3}/Application.java (100%) rename samples/{springboot2/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot2 => springboot3/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3}/StreamLambdaHandler.java (100%) rename samples/{springboot2/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot2 => springboot3/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3}/controller/PetsController.java (100%) rename samples/{springboot2/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot2 => springboot3/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3}/filter/CognitoIdentityFilter.java (100%) rename samples/{springboot2/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot2 => springboot3/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3}/model/Error.java (100%) rename samples/{springboot2/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot2 => springboot3/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3}/model/Pet.java (100%) rename samples/{springboot2/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot2 => springboot3/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3}/model/PetData.java (100%) rename samples/{springboot2 => springboot3}/pet-store/src/main/resources/logback.xml (100%) rename samples/{springboot2 => springboot3}/pet-store/template.yml (90%) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 32ff479c4..0f0bf9516 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -16,7 +16,7 @@ - 2.1.1 + 3.1.0 5.0.0 @@ -47,14 +47,14 @@ jakarta.servlet jakarta.servlet-api - 5.0.0 + ${servlet.version} jakarta.ws.rs jakarta.ws.rs-api - 3.0.0-M1 + ${jaxrs.version} @@ -79,7 +79,7 @@ org.eclipse.angus angus-mail - 2.0.0 + 2.0.1 @@ -91,15 +91,9 @@ -<<<<<<< HEAD - org.apache.httpcomponents - httpclient - 4.5.14 -======= org.apache.httpcomponents.client5 httpclient5 5.2.1 ->>>>>>> 9d2d4d4 (Added jakarta.websocket-api 2.0.0 to fix java.lang.ExceptionInInitializerError in SecurityAppTest) test @@ -118,9 +112,9 @@ test - org.apache.httpcomponents - httpcore - 4.4.16 + org.apache.httpcomponents.core5 + httpcore5 + 5.2.1 compile true @@ -134,7 +128,7 @@ jakarta.activation jakarta.activation-api - 2.1.0 + 2.1.1 diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java index 4531b14ae..e1688c9fc 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java @@ -46,8 +46,8 @@ public class AwsServletContext //------------------------------------------------------------- // Constants - Public // ------------------------------------------------------------- - public static final int SERVLET_API_MAJOR_VERSION = 3; - public static final int SERVLET_API_MINOR_VERSION = 1; + public static final int SERVLET_API_MAJOR_VERSION = 5; + public static final int SERVLET_API_MINOR_VERSION = 0; public static final String SERVER_INFO = LambdaContainerHandler.SERVER_INFO + "/" + SERVLET_API_MAJOR_VERSION + "." + SERVLET_API_MINOR_VERSION; @@ -98,32 +98,32 @@ public String getContextPath() { @Override public void setResponseCharacterEncoding(String encoding) { - // do nothing; + throw new UnsupportedOperationException(); } @Override public String getResponseCharacterEncoding() { - return ""; + return null; } @Override public void setRequestCharacterEncoding(String encoding) { - // do nothing; + throw new UnsupportedOperationException(); } @Override public String getRequestCharacterEncoding() { - return ""; + return null; } @Override public void setSessionTimeout(int sessionTimeout) { - // do nothing; + throw new UnsupportedOperationException(); } @Override public int getSessionTimeout() { - return 1; + return 15; } @@ -379,7 +379,7 @@ public ServletRegistration.Dynamic addServlet(String s, Class @Override public ServletRegistration.Dynamic addJspFile(String s, String s1) { - return null; + throw new UnsupportedOperationException(); } diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 286117995..f1ae95db2 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -63,6 +63,7 @@ jakarta.activation jakarta.activation-api 2.1.0 + test @@ -86,9 +87,9 @@ - org.glassfish - jakarta.el - 5.0.0-M1 + org.glassfish.expressly + expressly + 5.0.0 test diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index e810ecdf7..08856cf54 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -16,7 +16,7 @@ 6.0.7 - 3.0.4 + 3.0.5 6.0.2 17 diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml index 1489ddf24..edb821900 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ org.springframework.boot spring-boot-starter-parent - 3.0.4 + 3.0.5 diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index f6b5bed42..2f0b8f567 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -26,8 +26,8 @@ 1.8 1.8 - 2.39.1 - 2.15.0 + 3.1.1 + 2.14.2 diff --git a/samples/quarkus/pet-store/pom.xml b/samples/quarkus/pet-store/pom.xml index 0147be882..5484ffade 100644 --- a/samples/quarkus/pet-store/pom.xml +++ b/samples/quarkus/pet-store/pom.xml @@ -8,8 +8,8 @@ 3.8.1 true - 1.8 - 1.8 + 17.0.6 + 17.0.6 UTF-8 UTF-8 1.0.1.Final diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index 73cf9dc1a..0b85ff945 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -24,9 +24,8 @@ - 1.8 - 1.8 - 5.3.27 + 17 + 6.0.7 4.13.2 2.19.0 @@ -35,7 +34,7 @@ com.amazonaws.serverless aws-serverless-java-container-spring - [1.9,) + [2.0,) diff --git a/samples/spring/pet-store/template.yml b/samples/spring/pet-store/template.yml index c485cf4c6..5a029f8ae 100644 --- a/samples/spring/pet-store/template.yml +++ b/samples/spring/pet-store/template.yml @@ -12,7 +12,7 @@ Resources: Type: AWS::Serverless::Function Properties: Handler: com.amazonaws.serverless.sample.spring.StreamLambdaHandler::handleRequest - Runtime: java11 + Runtime: java17 CodeUri: . MemorySize: 512 Policies: AWSLambdaBasicExecutionRole diff --git a/samples/springboot2/pet-store/README.md b/samples/springboot3/pet-store/README.md similarity index 100% rename from samples/springboot2/pet-store/README.md rename to samples/springboot3/pet-store/README.md diff --git a/samples/springboot2/pet-store/build.gradle b/samples/springboot3/pet-store/build.gradle similarity index 100% rename from samples/springboot2/pet-store/build.gradle rename to samples/springboot3/pet-store/build.gradle diff --git a/samples/springboot2/pet-store/pom.xml b/samples/springboot3/pet-store/pom.xml similarity index 96% rename from samples/springboot2/pet-store/pom.xml rename to samples/springboot3/pet-store/pom.xml index 534d565d7..dc1dcc36f 100644 --- a/samples/springboot2/pet-store/pom.xml +++ b/samples/springboot3/pet-store/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.amazonaws.serverless.sample - serverless-springboot2-example + serverless-springboot3-example 1.0-SNAPSHOT Spring Boot example for the aws-serverless-java-container library Simple pet store written with the Spring framework and Spring Boot @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 2.7.11 + 3.0.5 @@ -25,8 +25,7 @@ - 1.8 - 1.8 + 17 @@ -43,8 +42,8 @@ com.amazonaws.serverless - aws-serverless-java-container-springboot2 - [1.6,) + aws-serverless-java-container-springboot3 + [2.0,) diff --git a/samples/springboot2/pet-store/src/assembly/bin.xml b/samples/springboot3/pet-store/src/assembly/bin.xml similarity index 100% rename from samples/springboot2/pet-store/src/assembly/bin.xml rename to samples/springboot3/pet-store/src/assembly/bin.xml diff --git a/samples/springboot2/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot2/Application.java b/samples/springboot3/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/Application.java similarity index 100% rename from samples/springboot2/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot2/Application.java rename to samples/springboot3/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/Application.java diff --git a/samples/springboot2/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot2/StreamLambdaHandler.java b/samples/springboot3/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/StreamLambdaHandler.java similarity index 100% rename from samples/springboot2/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot2/StreamLambdaHandler.java rename to samples/springboot3/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/StreamLambdaHandler.java diff --git a/samples/springboot2/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot2/controller/PetsController.java b/samples/springboot3/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/controller/PetsController.java similarity index 100% rename from samples/springboot2/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot2/controller/PetsController.java rename to samples/springboot3/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/controller/PetsController.java diff --git a/samples/springboot2/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot2/filter/CognitoIdentityFilter.java b/samples/springboot3/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/filter/CognitoIdentityFilter.java similarity index 100% rename from samples/springboot2/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot2/filter/CognitoIdentityFilter.java rename to samples/springboot3/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/filter/CognitoIdentityFilter.java diff --git a/samples/springboot2/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot2/model/Error.java b/samples/springboot3/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/model/Error.java similarity index 100% rename from samples/springboot2/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot2/model/Error.java rename to samples/springboot3/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/model/Error.java diff --git a/samples/springboot2/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot2/model/Pet.java b/samples/springboot3/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/model/Pet.java similarity index 100% rename from samples/springboot2/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot2/model/Pet.java rename to samples/springboot3/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/model/Pet.java diff --git a/samples/springboot2/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot2/model/PetData.java b/samples/springboot3/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/model/PetData.java similarity index 100% rename from samples/springboot2/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot2/model/PetData.java rename to samples/springboot3/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/model/PetData.java diff --git a/samples/springboot2/pet-store/src/main/resources/logback.xml b/samples/springboot3/pet-store/src/main/resources/logback.xml similarity index 100% rename from samples/springboot2/pet-store/src/main/resources/logback.xml rename to samples/springboot3/pet-store/src/main/resources/logback.xml diff --git a/samples/springboot2/pet-store/template.yml b/samples/springboot3/pet-store/template.yml similarity index 90% rename from samples/springboot2/pet-store/template.yml rename to samples/springboot3/pet-store/template.yml index c7a17276f..ec78e3ebe 100644 --- a/samples/springboot2/pet-store/template.yml +++ b/samples/springboot3/pet-store/template.yml @@ -11,8 +11,8 @@ Resources: PetStoreFunction: Type: AWS::Serverless::Function Properties: - Handler: com.amazonaws.serverless.sample.springboot2.StreamLambdaHandler::handleRequest - Runtime: java11 + Handler: com.amazonaws.serverless.sample.springboot3.StreamLambdaHandler::handleRequest + Runtime: java17 CodeUri: . MemorySize: 1512 Policies: AWSLambdaBasicExecutionRole From d41e9c5ad9dbcb502bdc43cccb630b89c0f7a3d3 Mon Sep 17 00:00:00 2001 From: mbfreder Date: Mon, 17 Apr 2023 00:49:15 -0700 Subject: [PATCH 322/888] - moved to Servlet 6.0.0 - updated build.gradle files to be aligned to the Maven poms - moved all poms to 2.0-SNAPSHOT --- aws-serverless-java-container-core/pom.xml | 6 ++-- .../AwsHttpApiV2ProxyHttpServletRequest.java | 21 +++++++---- .../servlet/AwsHttpServletRequest.java | 1 - .../servlet/AwsHttpServletRequestWrapper.java | 25 +++++++------ .../servlet/AwsHttpServletResponse.java | 36 +++++++++---------- .../internal/servlet/AwsHttpSession.java | 31 ---------------- .../servlet/AwsProxyRequestDispatcher.java | 6 +--- .../internal/servlet/AwsServletContext.java | 35 +----------------- .../servlet/AwsFilterChainManagerTest.java | 4 +-- .../internal/servlet/AwsHttpSessionTest.java | 28 --------------- .../servlet/AwsServletContextTest.java | 5 ++- aws-serverless-java-container-jersey/pom.xml | 6 ++-- aws-serverless-java-container-spring/pom.xml | 8 ++--- .../pom.xml | 8 ++--- aws-serverless-jersey-archetype/pom.xml | 4 +-- aws-serverless-spring-archetype/pom.xml | 4 +-- aws-serverless-springboot3-archetype/pom.xml | 4 +-- .../resources/archetype-resources/pom.xml | 7 ++-- pom.xml | 2 +- samples/jersey/pet-store/build.gradle | 8 ++--- samples/jersey/pet-store/pom.xml | 4 +-- samples/micronaut/pet-store/build.gradle | 10 +++--- samples/quarkus/pet-store/pom.xml | 2 +- samples/spring/pet-store/build.gradle | 6 ++-- samples/spring/pet-store/pom.xml | 5 +-- samples/springboot3/pet-store/build.gradle | 4 +-- samples/springboot3/pet-store/pom.xml | 2 +- 27 files changed, 99 insertions(+), 183 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 0f0bf9516..645916e75 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -6,18 +6,18 @@ AWS Serverless Java container support - Core Allows Java applications written for a servlet container to run in AWS Lambda https://aws.amazon.com/lambda - 1.10-SNAPSHOT + 2.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.10-SNAPSHOT + 2.0-SNAPSHOT .. 3.1.0 - 5.0.0 + 6.0.0 diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2ProxyHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2ProxyHttpServletRequest.java index d81105bd5..85c8d8c12 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2ProxyHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2ProxyHttpServletRequest.java @@ -428,12 +428,6 @@ public RequestDispatcher getRequestDispatcher(String s) { return getServletContext().getRequestDispatcher(s); } - @Override - public String getRealPath(String s) { - // we are in an archive on a remote server - return null; - } - @Override public int getRemotePort() { return 0; @@ -480,6 +474,21 @@ public AsyncContext getAsyncContext() { return asyncContext; } + @Override + public String getRequestId() { + return null; + } + + @Override + public String getProtocolRequestId() { + return null; + } + + @Override + public ServletConnection getServletConnection() { + return null; + } + private MultiValuedTreeMap parseRawQueryString(String qs) { if (qs == null || "".equals(qs.trim())) { return new MultiValuedTreeMap<>(); diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java index 358ccdfba..99b2782c5 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java @@ -179,7 +179,6 @@ public boolean isRequestedSessionIdFromURL() { return false; } - //------------------------------------------------------------- // Implementation - ServletRequest //------------------------------------------------------------- diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestWrapper.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestWrapper.java index d87b707ec..00c7d77d7 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestWrapper.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestWrapper.java @@ -177,11 +177,6 @@ public boolean isRequestedSessionIdFromURL() { return originalRequest.isRequestedSessionIdFromURL(); } - @Override - public boolean isRequestedSessionIdFromUrl() { - return originalRequest.isRequestedSessionIdFromUrl(); - } - @Override public boolean authenticate(HttpServletResponse httpServletResponse) throws IOException, ServletException { return originalRequest.authenticate(httpServletResponse); @@ -343,11 +338,6 @@ public RequestDispatcher getRequestDispatcher(String s) { return originalRequest.getRequestDispatcher(s); } - @Override - public String getRealPath(String s) { - return originalRequest.getRealPath(s); - } - @Override public int getRemotePort() { return originalRequest.getRemotePort(); @@ -402,4 +392,19 @@ public AsyncContext getAsyncContext() { public DispatcherType getDispatcherType() { return originalRequest.getDispatcherType(); } + + @Override + public String getRequestId() { + return null; + } + + @Override + public String getProtocolRequestId() { + return null; + } + + @Override + public ServletConnection getServletConnection() { + return null; + } } diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponse.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponse.java index 814958dfa..e325b50d5 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponse.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponse.java @@ -152,24 +152,24 @@ public String encodeRedirectURL(String s) { } - @Override - @Deprecated - public String encodeUrl(String s) { - return this.encodeURL(s); - } +// @Override +// @Deprecated +// public String encodeUrl(String s) { +// return this.encodeURL(s); +// } - @Override - @Deprecated - public String encodeRedirectUrl(String s) { - return this.encodeRedirectURL(s); - } +// @Override +// @Deprecated +// public String encodeRedirectUrl(String s) { +// return this.encodeRedirectURL(s); +// } @Override public void sendError(int i, String s) throws IOException { request.setAttribute(AwsHttpServletRequest.DISPATCHER_TYPE_ATTRIBUTE, DispatcherType.ERROR); - setStatus(i, s); + setStatus(i); flushBuffer(); } @@ -259,13 +259,13 @@ public void setStatus(int i) { } - @Override - @Deprecated - public void setStatus(int i, String s) { - if (!canSetHeader()) return; - statusCode = i; - statusMessage = s; - } +// @Override +// @Deprecated +// public void setStatus(int i, String s) { +// if (!canSetHeader()) return; +// statusCode = i; +// statusMessage = s; +// } @Override diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpSession.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpSession.java index eb1f728f9..2163320da 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpSession.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpSession.java @@ -17,7 +17,6 @@ import jakarta.servlet.ServletContext; import jakarta.servlet.http.HttpSession; -import jakarta.servlet.http.HttpSessionContext; import java.time.Instant; import java.util.Collections; @@ -87,60 +86,30 @@ public int getMaxInactiveInterval() { return maxInactiveInterval; } - @Override - @Deprecated - public HttpSessionContext getSessionContext() { - throw new UnsupportedOperationException("Session context is deprecated and no longer supported"); - } - @Override public Object getAttribute(String name) { touch(); return attributes.get(name); } - @Override - @Deprecated - public Object getValue(String name) { - throw new UnsupportedOperationException("Session values are deprecated and not supported"); - } - @Override public Enumeration getAttributeNames() { touch(); return Collections.enumeration(attributes.keySet()); } - @Override - @Deprecated - public String[] getValueNames() { - throw new UnsupportedOperationException("Session values are deprecated and not supported"); - } - @Override public void setAttribute(String name, Object value) { touch(); attributes.put(name, value); } - @Override - @Deprecated - public void putValue(String name, Object value) { - throw new UnsupportedOperationException("Session values are deprecated and not supported"); - } - @Override public void removeAttribute(String name) { touch(); attributes.remove(name); } - @Override - @Deprecated - public void removeValue(String name) { - throw new UnsupportedOperationException("Session values are deprecated and not supported"); - } - @Override public void invalidate() { valid = false; diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyRequestDispatcher.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyRequestDispatcher.java index 5ed2ccf44..1d2f3e3ca 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyRequestDispatcher.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyRequestDispatcher.java @@ -80,7 +80,7 @@ public void forward(ServletRequest servletRequest, ServletResponse servletRespon } if (isNamedDispatcher) { - lambdaContainerHandler.doFilter((HttpServletRequest) servletRequest, (HttpServletResponse) servletResponse, getServlet(dispatchTo)); + lambdaContainerHandler.doFilter((HttpServletRequest) servletRequest, (HttpServletResponse) servletResponse, getServlet((HttpServletRequest)servletRequest)); return; } @@ -149,8 +149,4 @@ private Servlet getServlet(HttpServletRequest req) { return ((AwsServletContext)lambdaContainerHandler.getServletContext()).getServletForPath(req.getPathInfo()); } - private Servlet getServlet(String servletName) throws ServletException { - return ((AwsServletContext)lambdaContainerHandler.getServletContext()).getServlet(servletName); - } - } diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java index e1688c9fc..cd84f8504 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java @@ -123,7 +123,7 @@ public void setSessionTimeout(int sessionTimeout) { @Override public int getSessionTimeout() { - return 15; + return 0; } @@ -206,13 +206,6 @@ public RequestDispatcher getNamedDispatcher(String s) { return new AwsProxyRequestDispatcher(s, true, containerHandler); } - - @Override - @Deprecated - public Servlet getServlet(String s) throws ServletException { - return servletRegistrations.get(s).getServlet(); - } - public Servlet getServletForPath(String path) { String[] pathParts = path.split("/"); for (AwsServletRegistration reg : servletRegistrations.values()) { @@ -238,38 +231,12 @@ public Servlet getServletForPath(String path) { return null; } - - @Override - @Deprecated - public Enumeration getServlets() { - return Collections.enumeration(servletRegistrations.entrySet().stream() - .map((e) -> { - return e.getValue().getServlet(); - } ) - .collect(Collectors.toList())); - } - - - @Override - @Deprecated - public Enumeration getServletNames() { - return Collections.enumeration(servletRegistrations.keySet()); - } - - @Override public void log(String s) { log.info(SecurityUtils.encode(s)); } - @Override - @Deprecated - public void log(Exception e, String s) { - log.error(SecurityUtils.encode(s), e); - } - - @Override public void log(String s, Throwable throwable) { log.error(SecurityUtils.encode(s), throwable); diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsFilterChainManagerTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsFilterChainManagerTest.java index 7e7fba49b..1a51b5581 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsFilterChainManagerTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsFilterChainManagerTest.java @@ -229,11 +229,11 @@ void filterChain_executeMultipleFilters_expectRunEachTime() { @Test void filterChain_multipleServlets_callsCorrectServlet() throws IOException, ServletException { - MockServlet servlet1 = (MockServlet) servletContext.getServlet(SERVLET1_NAME); + MockServlet servlet1 = (MockServlet) ((AwsServletRegistration) servletContext.getServletRegistration(SERVLET1_NAME)).getServlet(); ServletConfig servlet1Config = ((AwsServletRegistration) servletContext.getServletRegistration(SERVLET1_NAME)).getServletConfig(); servlet1.init(servlet1Config); - MockServlet servlet2 = (MockServlet) servletContext.getServlet(SERVLET2_NAME); + MockServlet servlet2 = (MockServlet) ((AwsServletRegistration) servletContext.getServletRegistration(SERVLET2_NAME)).getServlet(); ServletConfig servlet2Config = ((AwsServletRegistration) servletContext.getServletRegistration(SERVLET2_NAME)).getServletConfig(); servlet2.init(servlet2Config); diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpSessionTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpSessionTest.java index 77dd4bd32..bcca83dda 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpSessionTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpSessionTest.java @@ -34,34 +34,6 @@ void new_creationTimePopulatedCorrectly() { assertEquals(session.getLastAccessedTime(), session.getCreationTime()); } - @Test - void values_throwsUnsupportedOperationException() { - int exCount = 0; - AwsHttpSession sess = new AwsHttpSession("id"); - - try { - sess.putValue("test", "test"); - } catch (UnsupportedOperationException e) { - exCount++; - } - try { - sess.removeValue("test"); - } catch (UnsupportedOperationException e) { - exCount++; - } - try { - sess.getValue("test"); - } catch (UnsupportedOperationException e) { - exCount++; - } - try { - sess.getValueNames(); - } catch (UnsupportedOperationException e) { - exCount++; - } - assertEquals(4, exCount); - } - @Test void attributes_dataStoredCorrectly() throws InterruptedException { AwsHttpSession sess = new AwsHttpSession("id"); diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContextTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContextTest.java index 5817527e2..ed84462a5 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContextTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContextTest.java @@ -217,9 +217,8 @@ void servletMappings_expectCorrectServlet() { void addServlet_callsDefaultConstructor() throws ServletException { AwsServletContext ctx = new AwsServletContext(null); ctx.addServlet("srv1", TestServlet.class); - assertNotNull(ctx.getServlet("srv1")); - assertNotNull(ctx.getServletRegistration("srv1")); - assertEquals("", ((TestServlet)ctx.getServlet("srv1")).getId()); + assertNotNull(((AwsServletRegistration) ctx.getServletRegistration("srv1")).getServlet()); + assertEquals("", ((TestServlet)((AwsServletRegistration) ctx.getServletRegistration("srv1")).getServlet()).getId()); } @Test diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index ef4a43712..e94af8030 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Jersey implementation Allows Java applications written for Jersey to run in AWS Lambda https://aws.amazon.com/lambda - 1.10-SNAPSHOT + 2.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.10-SNAPSHOT + 2.0-SNAPSHOT .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.10-SNAPSHOT + 2.0-SNAPSHOT com.fasterxml.jackson.core diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index f1ae95db2..8cf77bb25 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -6,17 +6,17 @@ AWS Serverless Java container support - Spring implementation Allows Java applications written for the Spring framework to run in AWS Lambda https://aws.amazon.com/lambda - 1.10-SNAPSHOT + 2.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.10-SNAPSHOT + 2.0-SNAPSHOT .. - 6.0.7 + 6.0.8 6.0.2 @@ -25,7 +25,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.10-SNAPSHOT + 2.0-SNAPSHOT diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index 08856cf54..34557c57a 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -3,7 +3,7 @@ aws-serverless-java-container com.amazonaws.serverless - 1.10-SNAPSHOT + 2.0-SNAPSHOT 4.0.0 @@ -12,10 +12,10 @@ AWS Serverless Java container support - SpringBoot 3 implementation Allows Java applications written for SpringBoot 3 to run in AWS Lambda https://aws.amazon.com/lambda - 1.10-SNAPSHOT + 2.0-SNAPSHOT - 6.0.7 + 6.0.8 3.0.5 6.0.2 17 @@ -26,7 +26,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.10-SNAPSHOT + 2.0-SNAPSHOT org.springframework diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index c13c05869..6df742a57 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -4,12 +4,12 @@ com.amazonaws.serverless aws-serverless-java-container - 1.10-SNAPSHOT + 2.0-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-jersey-archetype - 1.10-SNAPSHOT + 2.0-SNAPSHOT maven-archetype diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index 83dc79743..396f5e798 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -4,12 +4,12 @@ com.amazonaws.serverless aws-serverless-java-container - 1.10-SNAPSHOT + 2.0-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-spring-archetype - 1.10-SNAPSHOT + 2.0-SNAPSHOT maven-archetype diff --git a/aws-serverless-springboot3-archetype/pom.xml b/aws-serverless-springboot3-archetype/pom.xml index 4003610a3..040f43536 100644 --- a/aws-serverless-springboot3-archetype/pom.xml +++ b/aws-serverless-springboot3-archetype/pom.xml @@ -4,12 +4,12 @@ com.amazonaws.serverless aws-serverless-java-container - 1.10-SNAPSHOT + 2.0-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-springboot3-archetype - 1.10-SNAPSHOT + 2.0-SNAPSHOT maven-archetype diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml index edb821900..fd770a9b4 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml @@ -10,7 +10,7 @@ \${version} jar - Serverless Spring Boot 2 API + Serverless Spring Boot 3 API https://github.com/awslabs/aws-serverless-java-container @@ -20,14 +20,13 @@ - 1.8 - 1.8 + 17 com.amazonaws.serverless - aws-serverless-java-container-springboot2 + aws-serverless-java-container-springboot3 ${project.version} diff --git a/pom.xml b/pom.xml index 08627db23..1dca94c7c 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazonaws.serverless aws-serverless-java-container pom - 1.10-SNAPSHOT + 2.0-SNAPSHOT AWS Serverless Java container A Java framework to run Spring, Spring Boot, Jersey, Spark, and Struts applications inside AWS Lambda https://github.com/awslabs/aws-serverless-java-container diff --git a/samples/jersey/pet-store/build.gradle b/samples/jersey/pet-store/build.gradle index b32dc8ef8..5b073ebe1 100644 --- a/samples/jersey/pet-store/build.gradle +++ b/samples/jersey/pet-store/build.gradle @@ -7,18 +7,18 @@ repositories { dependencies { implementation ( - 'com.amazonaws.serverless:aws-serverless-java-container-jersey:[1.9,)', - 'com.fasterxml.jackson.core:jackson-databind:2.15.0', + 'com.amazonaws.serverless:aws-serverless-java-container-jersey:[2.0,)', + 'com.fasterxml.jackson.core:jackson-databind:2.14.2', 'io.symphonia:lambda-logging:1.0.3' ) - implementation("org.glassfish.jersey.media:jersey-media-json-jackson:2.39.1") { + implementation("org.glassfish.jersey.media:jersey-media-json-jackson:3.1.1") { exclude group: 'com.fasterxml.jackson.core', module: "jackson-annotations" exclude group: 'com.fasterxml.jackson.core', module: "jackson-databind" exclude group: 'com.fasterxml.jackson.core', module: "jackson-core" } - implementation("org.glassfish.jersey.inject:jersey-hk2:2.39.1") { + implementation("org.glassfish.jersey.inject:jersey-hk2:3.1.1") { exclude group: 'javax.inject', module: "javax.inject" } } diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index 2f0b8f567..0505d04f7 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -6,7 +6,7 @@ com.amazonaws.serverless.sample serverless-jersey-example - 1.0-SNAPSHOT + 2.0-SNAPSHOT Jersey example for the aws-serverless-java-container library Simple pet store written in Jersey https://aws.amazon.com/lambda/ @@ -34,7 +34,7 @@ com.amazonaws.serverless aws-serverless-java-container-jersey - [1.9,) + [2.0,) diff --git a/samples/micronaut/pet-store/build.gradle b/samples/micronaut/pet-store/build.gradle index 6282d2d2c..b262a4699 100644 --- a/samples/micronaut/pet-store/build.gradle +++ b/samples/micronaut/pet-store/build.gradle @@ -1,10 +1,10 @@ plugins { id "java" - id "com.github.johnrengelman.shadow" version "5.0.0" + id "com.github.johnrengelman.shadow" version "8.1.1" id "application" id "net.ltgt.apt-eclipse" version "0.21" - id "org.springframework.boot" version "2.1.12.RELEASE" - id "io.spring.dependency-management" version "1.0.6.RELEASE" + id "org.springframework.boot" version "3.0.5" + id "io.spring.dependency-management" version "1.1.0" } version "0.1" @@ -53,8 +53,8 @@ dependencies { // spring support implementation("org.springframework.boot:spring-boot-starter-web") - runtime("io.micronaut.spring:micronaut-spring-boot:1.0.1") - runtime("io.micronaut.spring:micronaut-spring-web:1.0.1") + runtime("io.micronaut.spring:micronaut-spring-boot:5.0.0-M1") + runtime("io.micronaut.spring:micronaut-spring-web:5.0.0-M1") } test.classpath += configurations.developmentOnly diff --git a/samples/quarkus/pet-store/pom.xml b/samples/quarkus/pet-store/pom.xml index 5484ffade..13229ee5d 100644 --- a/samples/quarkus/pet-store/pom.xml +++ b/samples/quarkus/pet-store/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.amazonaws.serverless.sample serverless-quarkus-example - 1.0-SNAPSHOT + 2.0-SNAPSHOT 3.8.1 true diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index 759aa0610..46a7df708 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -7,9 +7,9 @@ repositories { dependencies { implementation ( - 'org.springframework:spring-webmvc:5.3.27', - 'org.springframework:spring-context:5.3.27', - 'com.amazonaws.serverless:aws-serverless-java-container-spring:[1.0,)', + 'org.springframework:spring-webmvc:6.0.7', + 'org.springframework:spring-context:6.0.7', + 'com.amazonaws.serverless:aws-serverless-java-container-spring:[2.0,)', 'org.apache.logging.log4j:log4j-core:2.19.0', 'org.apache.logging.log4j:log4j-api:2.19.0', 'org.apache.logging.log4j:log4j-slf4j-impl:2.19.0', diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index 0b85ff945..2194cee2d 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -6,7 +6,7 @@ com.amazonaws.serverless.sample serverless-spring-example - 1.0-SNAPSHOT + 2.0-SNAPSHOT Spring example for the aws-serverless-java-container library Simple pet store written with the Spring framework https://aws.amazon.com/lambda/ @@ -24,10 +24,11 @@ - 17 6.0.7 4.13.2 2.19.0 + 17.0.6 + 17.0.6 diff --git a/samples/springboot3/pet-store/build.gradle b/samples/springboot3/pet-store/build.gradle index 60affd722..37ba61a59 100644 --- a/samples/springboot3/pet-store/build.gradle +++ b/samples/springboot3/pet-store/build.gradle @@ -8,10 +8,10 @@ repositories { dependencies { implementation ( - implementation('org.springframework.boot:spring-boot-starter-web:2.7.11') { + implementation('org.springframework.boot:spring-boot-starter-web:3.0.5') { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat' }, - 'com.amazonaws.serverless:aws-serverless-java-container-springboot2:[1.4,)', + 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:[2.0,)', 'io.symphonia:lambda-logging:1.0.3' ) testImplementation("junit:junit") diff --git a/samples/springboot3/pet-store/pom.xml b/samples/springboot3/pet-store/pom.xml index dc1dcc36f..3f0f283ad 100644 --- a/samples/springboot3/pet-store/pom.xml +++ b/samples/springboot3/pet-store/pom.xml @@ -5,7 +5,7 @@ com.amazonaws.serverless.sample serverless-springboot3-example - 1.0-SNAPSHOT + 2.0-SNAPSHOT Spring Boot example for the aws-serverless-java-container library Simple pet store written with the Spring framework and Spring Boot https://aws.amazon.com/lambda/ From 4b1a7b4c7eb76eb36186e927828e448b86e4ab23 Mon Sep 17 00:00:00 2001 From: mbfreder Date: Thu, 20 Apr 2023 09:12:17 -0700 Subject: [PATCH 323/888] Removed java-9 profiles along with the old com.sun.activation:jakarta.activation dependency. --- aws-serverless-java-container-core/pom.xml | 22 ----------------- .../AwsHttpApiV2ProxyHttpServletRequest.java | 4 ++-- .../servlet/AwsHttpServletRequestWrapper.java | 4 ++-- .../servlet/AwsHttpServletResponse.java | 24 ------------------- .../servlet/AwsProxyRequestDispatcher.java | 2 +- .../internal/servlet/AwsServletContext.java | 2 +- aws-serverless-java-container-spring/pom.xml | 2 +- .../pom.xml | 1 - 8 files changed, 7 insertions(+), 54 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 645916e75..ad00d2ef8 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -125,11 +125,6 @@ 6.0.2 test - - jakarta.activation - jakarta.activation-api - 2.1.1 - @@ -226,21 +221,4 @@ - - - - java9-plus - - [9,) - - - - com.sun.activation - jakarta.activation - 1.2.2 - - - - - diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2ProxyHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2ProxyHttpServletRequest.java index 85c8d8c12..bdf11b819 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2ProxyHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2ProxyHttpServletRequest.java @@ -476,12 +476,12 @@ public AsyncContext getAsyncContext() { @Override public String getRequestId() { - return null; + return request.getRequestContext().getRequestId(); } @Override public String getProtocolRequestId() { - return null; + return ""; } @Override diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestWrapper.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestWrapper.java index 00c7d77d7..3817e7971 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestWrapper.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestWrapper.java @@ -395,12 +395,12 @@ public DispatcherType getDispatcherType() { @Override public String getRequestId() { - return null; + return originalRequest.getRequestId(); } @Override public String getProtocolRequestId() { - return null; + return ""; } @Override diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponse.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponse.java index e325b50d5..c46af7a9b 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponse.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponse.java @@ -152,20 +152,6 @@ public String encodeRedirectURL(String s) { } -// @Override -// @Deprecated -// public String encodeUrl(String s) { -// return this.encodeURL(s); -// } - - -// @Override -// @Deprecated -// public String encodeRedirectUrl(String s) { -// return this.encodeRedirectURL(s); -// } - - @Override public void sendError(int i, String s) throws IOException { request.setAttribute(AwsHttpServletRequest.DISPATCHER_TYPE_ATTRIBUTE, DispatcherType.ERROR); @@ -258,16 +244,6 @@ public void setStatus(int i) { statusCode = i; } - -// @Override -// @Deprecated -// public void setStatus(int i, String s) { -// if (!canSetHeader()) return; -// statusCode = i; -// statusMessage = s; -// } - - @Override public int getStatus() { return (statusCode <= 0?SC_OK:statusCode); diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyRequestDispatcher.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyRequestDispatcher.java index 1d2f3e3ca..f314ba0d0 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyRequestDispatcher.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyRequestDispatcher.java @@ -80,7 +80,7 @@ public void forward(ServletRequest servletRequest, ServletResponse servletRespon } if (isNamedDispatcher) { - lambdaContainerHandler.doFilter((HttpServletRequest) servletRequest, (HttpServletResponse) servletResponse, getServlet((HttpServletRequest)servletRequest)); + lambdaContainerHandler.doFilter((HttpServletRequest) servletRequest, (HttpServletResponse) servletResponse, ((AwsServletRegistration)servletRequest.getServletContext().getServletRegistration(dispatchTo)).getServlet()); return; } diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java index cd84f8504..634f44ff1 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java @@ -46,7 +46,7 @@ public class AwsServletContext //------------------------------------------------------------- // Constants - Public // ------------------------------------------------------------- - public static final int SERVLET_API_MAJOR_VERSION = 5; + public static final int SERVLET_API_MAJOR_VERSION = 6; public static final int SERVLET_API_MINOR_VERSION = 0; public static final String SERVER_INFO = LambdaContainerHandler.SERVER_INFO + "/" + SERVLET_API_MAJOR_VERSION + "." + SERVLET_API_MINOR_VERSION; diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 8cf77bb25..5fe784a4f 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -62,7 +62,7 @@ jakarta.activation jakarta.activation-api - 2.1.0 + 2.1.1 test diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index 34557c57a..c20fab9f3 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -18,7 +18,6 @@ 6.0.8 3.0.5 6.0.2 - 17 From 980ebfa13166b0993b95481c28707c5be9f76e72 Mon Sep 17 00:00:00 2001 From: mbfreder Date: Mon, 24 Apr 2023 14:25:33 -0700 Subject: [PATCH 324/888] chore(deps): Updated sample apps --- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/build.gradle | 6 +++--- pom.xml | 2 +- samples/jersey/pet-store/build.gradle | 2 +- samples/jersey/pet-store/pom.xml | 2 +- samples/jersey/pet-store/template.yml | 2 +- samples/quarkus/pet-store/pom.xml | 4 ++-- 7 files changed, 10 insertions(+), 10 deletions(-) diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle index 949112fcf..b1ddfd4a4 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle @@ -7,7 +7,7 @@ repositories { dependencies { implementation ( - 'com.amazonaws.serverless:aws-serverless-java-container-jersey:[1.9,)', + 'com.amazonaws.serverless:aws-serverless-java-container-jersey:[2.0,)', 'com.fasterxml.jackson.core:jackson-databind:2.15.0', 'io.symphonia:lambda-logging:1.0.3' ) diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index 66093c4b1..7aedaf58a 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -7,9 +7,9 @@ repositories { dependencies { implementation ( - 'org.springframework:spring-webmvc:5.3.27', - 'org.springframework:spring-context:5.3.27', - 'com.amazonaws.serverless:aws-serverless-java-container-spring:[1.0,)', + 'org.springframework:spring-webmvc:6.0.8', + 'org.springframework:spring-context:6.0.8', + 'com.amazonaws.serverless:aws-serverless-java-container-spring:[2.0,)', 'org.apache.logging.log4j:log4j-core:2.19.0', 'org.apache.logging.log4j:log4j-api:2.19.0', 'org.apache.logging.log4j:log4j-slf4j-impl:2.19.0', diff --git a/pom.xml b/pom.xml index 1dca94c7c..2c97633a8 100644 --- a/pom.xml +++ b/pom.xml @@ -38,7 +38,7 @@ https://github.com/awslabs/aws-serverless-java-container scm:git:https://github.com/awslabs/aws-serverless-java-container.git HEAD - + diff --git a/samples/jersey/pet-store/build.gradle b/samples/jersey/pet-store/build.gradle index 5b073ebe1..11ad779d6 100644 --- a/samples/jersey/pet-store/build.gradle +++ b/samples/jersey/pet-store/build.gradle @@ -8,7 +8,7 @@ repositories { dependencies { implementation ( 'com.amazonaws.serverless:aws-serverless-java-container-jersey:[2.0,)', - 'com.fasterxml.jackson.core:jackson-databind:2.14.2', + 'com.fasterxml.jackson.core:jackson-databind:2.15.0', 'io.symphonia:lambda-logging:1.0.3' ) diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index 0505d04f7..58511ca20 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -27,7 +27,7 @@ 1.8 1.8 3.1.1 - 2.14.2 + 2.15.0 diff --git a/samples/jersey/pet-store/template.yml b/samples/jersey/pet-store/template.yml index f715064c4..a3fd2bfa0 100644 --- a/samples/jersey/pet-store/template.yml +++ b/samples/jersey/pet-store/template.yml @@ -12,7 +12,7 @@ Resources: Type: AWS::Serverless::Function Properties: Handler: com.amazonaws.serverless.sample.jersey.StreamLambdaHandler::handleRequest - Runtime: java11 + Runtime: java17 CodeUri: . MemorySize: 512 Policies: AWSLambdaBasicExecutionRole diff --git a/samples/quarkus/pet-store/pom.xml b/samples/quarkus/pet-store/pom.xml index 13229ee5d..d13958adc 100644 --- a/samples/quarkus/pet-store/pom.xml +++ b/samples/quarkus/pet-store/pom.xml @@ -8,8 +8,8 @@ 3.8.1 true - 17.0.6 - 17.0.6 + 17 + 17 UTF-8 UTF-8 1.0.1.Final From 57c712a224401a23a7520780eb1d62cd1a90e00a Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Tue, 25 Apr 2023 12:06:19 +0200 Subject: [PATCH 325/888] chore: modify CI build for 2.x --- .../continuous-integration-workflow.yml | 88 +++++++++---------- 1 file changed, 43 insertions(+), 45 deletions(-) diff --git a/.github/workflows/continuous-integration-workflow.yml b/.github/workflows/continuous-integration-workflow.yml index 4942f3564..c77801214 100644 --- a/.github/workflows/continuous-integration-workflow.yml +++ b/.github/workflows/continuous-integration-workflow.yml @@ -24,25 +24,25 @@ jobs: - uses: actions/checkout@v3 - name: Build latest run: ./gha_build.sh jersey true true - - name: Set up JDK 8 - uses: actions/setup-java@v3 - with: - distribution: 'corretto' - java-version: 8 - - name: Build Jersey 2.27 - run: ./gha_build.sh jersey false false -Djersey.version=2.27 - - name: Build Jersey 2.28 - run: ./gha_build.sh jersey false false -Djersey.version=2.28 - - name: Build Jersey 2.29 - run: ./gha_build.sh jersey false false -Djersey.version=2.29.1 +# - name: Set up JDK 8 +# uses: actions/setup-java@v3 +# with: +# distribution: 'corretto' +# java-version: 8 +# - name: Build Jersey 2.27 +# run: ./gha_build.sh jersey false false -Djersey.version=2.27 +# - name: Build Jersey 2.28 +# run: ./gha_build.sh jersey false false -Djersey.version=2.28 +# - name: Build Jersey 2.29 +# run: ./gha_build.sh jersey false false -Djersey.version=2.29.1 - build_spark: - name: Build and test Spark - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - name: Build latest - run: ./gha_build.sh spark true true +# build_spark: +# name: Build and test Spark +# runs-on: ubuntu-latest +# steps: +# - uses: actions/checkout@v3 +# - name: Build latest +# run: ./gha_build.sh spark true true build_spring: name: Build and test Spring & SpringBoot @@ -50,37 +50,35 @@ jobs: steps: - uses: actions/checkout@v3 - name: Build latest - # we reduce the minCoverage for this run because it will skip the SpringBoot 1.5 tests since they are no longer compatible with - # Spring core 5.2 and above. SpringBoot 1.5 is deprecated - run: ./gha_build.sh spring true true -Djacoco.minCoverage=0.4 - - name: Build Spring 5.0 - run: ./gha_build.sh spring false false -Dspring.version=5.0.20.RELEASE -Dspring-security.version=5.0.19.RELEASE -Ddependency-check.skip=true - - name: Build Spring 5.1 - run: ./gha_build.sh spring false false -Dspring.version=5.1.20.RELEASE -Dspring-security.version=5.1.13.RELEASE -Ddependency-check.skip=true - - name: Build Spring 5.2 - run: ./gha_build.sh spring false false -Dspring.version=5.2.21.RELEASE -Dspring-security.version=5.2.15.RELEASE -Ddependency-check.skip=true + run: ./gha_build.sh spring true true +# - name: Build Spring 5.0 +# run: ./gha_build.sh spring false false -Dspring.version=5.0.20.RELEASE -Dspring-security.version=5.0.19.RELEASE -Ddependency-check.skip=true +# - name: Build Spring 5.1 +# run: ./gha_build.sh spring false false -Dspring.version=5.1.20.RELEASE -Dspring-security.version=5.1.13.RELEASE -Ddependency-check.skip=true +# - name: Build Spring 5.2 +# run: ./gha_build.sh spring false false -Dspring.version=5.2.21.RELEASE -Dspring-security.version=5.2.15.RELEASE -Ddependency-check.skip=true - build_springboot2: - name: Build and test SpringBoot 2 + build_springboot3: + name: Build and test SpringBoot 3 runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Build latest - run: ./gha_build.sh springboot2 true true + run: ./gha_build.sh springboot3 true true # https://github.com/spring-projects/spring-boot/wiki/Supported-Versions - - name: Build Spring Boot 2.2 - run: ./gha_build.sh springboot2 false false -Dspringboot.version=2.2.13.RELEASE -Dspring.version=5.2.15.RELEASE -Dspringsecurity.version=5.2.8.RELEASE -Ddependency-check.skip=true - - name: Build Spring Boot 2.3 - run: ./gha_build.sh springboot2 false false -Dspringboot.version=2.3.12.RELEASE -Dspring.version=5.2.15.RELEASE -Dspringsecurity.version=5.3.9.RELEASE -Ddependency-check.skip=true - - name: Build Spring Boot 2.4 - run: ./gha_build.sh springboot2 false false -Dspringboot.version=2.4.13 -Dspring.version=5.3.13 -Dspringsecurity.version=5.4.9 -Ddependency-check.skip=true - - name: Build Spring Boot 2.5 - run: ./gha_build.sh springboot2 false false -Dspringboot.version=2.5.14 -Dspring.version=5.3.20 -Dspringsecurity.version=5.5.8 -Ddependency-check.skip=true +# - name: Build Spring Boot 2.2 +# run: ./gha_build.sh springboot2 false false -Dspringboot.version=2.2.13.RELEASE -Dspring.version=5.2.15.RELEASE -Dspringsecurity.version=5.2.8.RELEASE -Ddependency-check.skip=true +# - name: Build Spring Boot 2.3 +# run: ./gha_build.sh springboot2 false false -Dspringboot.version=2.3.12.RELEASE -Dspring.version=5.2.15.RELEASE -Dspringsecurity.version=5.3.9.RELEASE -Ddependency-check.skip=true +# - name: Build Spring Boot 2.4 +# run: ./gha_build.sh springboot2 false false -Dspringboot.version=2.4.13 -Dspring.version=5.3.13 -Dspringsecurity.version=5.4.9 -Ddependency-check.skip=true +# - name: Build Spring Boot 2.5 +# run: ./gha_build.sh springboot2 false false -Dspringboot.version=2.5.14 -Dspring.version=5.3.20 -Dspringsecurity.version=5.5.8 -Ddependency-check.skip=true - build_struts2: - name: Build and test Struts - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - name: Build latest - run: ./gha_build.sh struts true true +# build_struts2: +# name: Build and test Struts +# runs-on: ubuntu-latest +# steps: +# - uses: actions/checkout@v3 +# - name: Build latest +# run: ./gha_build.sh struts true true From 0f40e3a51c7bd45acff5771b1f76e974a76105ca Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Tue, 25 Apr 2023 12:12:10 +0200 Subject: [PATCH 326/888] chore: modify CI build for 2.x to use Corretto 17 --- .../continuous-integration-workflow.yml | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/.github/workflows/continuous-integration-workflow.yml b/.github/workflows/continuous-integration-workflow.yml index c77801214..5728e10b0 100644 --- a/.github/workflows/continuous-integration-workflow.yml +++ b/.github/workflows/continuous-integration-workflow.yml @@ -13,6 +13,11 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 + - name: Set up JDK 17 + uses: actions/setup-java@v3 + with: + distribution: 'corretto' + java-version: 17 - name: Build latest run: mvn -q clean install working-directory: ./aws-serverless-java-container-core @@ -22,6 +27,11 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 + - name: Set up JDK 17 + uses: actions/setup-java@v3 + with: + distribution: 'corretto' + java-version: 17 - name: Build latest run: ./gha_build.sh jersey true true # - name: Set up JDK 8 @@ -49,6 +59,11 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 + - name: Set up JDK 17 + uses: actions/setup-java@v3 + with: + distribution: 'corretto' + java-version: 17 - name: Build latest run: ./gha_build.sh spring true true # - name: Build Spring 5.0 @@ -63,6 +78,11 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 + - name: Set up JDK 17 + uses: actions/setup-java@v3 + with: + distribution: 'corretto' + java-version: 17 - name: Build latest run: ./gha_build.sh springboot3 true true # https://github.com/spring-projects/spring-boot/wiki/Supported-Versions From 54befe7d43923c3462786ed75d4f76e8b84f3f45 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Tue, 25 Apr 2023 12:21:24 +0200 Subject: [PATCH 327/888] chore: modify CI build for 2.x to no longer build with Gradle 5 as additional test --- gha_build.sh | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/gha_build.sh b/gha_build.sh index 9d0001ca4..036ac4bee 100755 --- a/gha_build.sh +++ b/gha_build.sh @@ -31,7 +31,7 @@ function archetype { cd ${WORKING_DIR}/${ARCHETYPE_NAME} && mvn -q clean install ARCHETYPE_TEST_DIR=${WORKING_DIR}/$1_archetype_test mkdir -p ${ARCHETYPE_TEST_DIR} - cd ${ARCHETYPE_TEST_DIR} && mvn archetype:generate -DgroupId=my.service -DartifactId=${PROJ_NAME} -Dversion=1.0-SNAPSHOT \ + cd ${ARCHETYPE_TEST_DIR} && mvn archetype:generate -DgroupId=my.service -DartifactId=${PROJ_NAME} -Dversion=2.0-SNAPSHOT \ -DarchetypeGroupId=com.amazonaws.serverless.archetypes \ -DarchetypeArtifactId=${ARCHETYPE_NAME} \ -DarchetypeCatalog=local \ @@ -51,10 +51,10 @@ function archetype { if [[ "$?" -ne 0 ]]; then exit 1 fi - cd ${ARCHETYPE_TEST_DIR}/${PROJ_NAME} && ./gradlew wrapper --gradle-version 5.0 - if [[ "$?" -ne 0 ]]; then - exit 1 - fi +# cd ${ARCHETYPE_TEST_DIR}/${PROJ_NAME} && ./gradlew wrapper --gradle-version 5.0 +# if [[ "$?" -ne 0 ]]; then +# exit 1 +# fi cd ${ARCHETYPE_TEST_DIR}/${PROJ_NAME} && ./gradlew -q clean build if [[ "$?" -ne 0 ]]; then exit 1 @@ -72,10 +72,10 @@ function sample { if [[ "$?" -ne 0 ]]; then exit 1 fi - cd ${SAMPLE_FOLDER} && ./gradlew wrapper --gradle-version 5.0 - if [[ "$?" -ne 0 ]]; then - exit 1 - fi +# cd ${SAMPLE_FOLDER} && ./gradlew wrapper --gradle-version 5.0 +# if [[ "$?" -ne 0 ]]; then +# exit 1 +# fi cd ${SAMPLE_FOLDER} && ./gradlew -q clean build if [[ "$?" -ne 0 ]]; then exit 1 From 22510fcfee417f5492f6b4a144f9e3f162324f34 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Tue, 25 Apr 2023 13:26:17 +0200 Subject: [PATCH 328/888] feat: Support Jakarta EE along with Spring Boot 3 support - build fixes --- aws-serverless-java-container-core/pom.xml | 2 +- aws-serverless-java-container-spring/pom.xml | 2 +- aws-serverless-java-container-springboot3/pom.xml | 4 ++-- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 4 ++-- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/jersey/pet-store/build.gradle | 2 +- samples/jersey/pet-store/pom.xml | 2 +- samples/spring/pet-store/build.gradle | 6 +++--- samples/spring/pet-store/pom.xml | 8 ++++---- samples/springboot3/pet-store/build.gradle | 4 ++-- samples/springboot3/pet-store/pom.xml | 4 ++-- 14 files changed, 23 insertions(+), 23 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index ad00d2ef8..a530a49c6 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -122,7 +122,7 @@ org.springframework.security spring-security-web - 6.0.2 + 6.0.3 test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 5fe784a4f..af8d73f3c 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -17,7 +17,7 @@ 6.0.8 - 6.0.2 + 6.0.3 diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index c20fab9f3..63113f19f 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -16,8 +16,8 @@ 6.0.8 - 3.0.5 - 6.0.2 + 3.0.6 + 6.0.3 diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle index b1ddfd4a4..022d3e53c 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle @@ -7,7 +7,7 @@ repositories { dependencies { implementation ( - 'com.amazonaws.serverless:aws-serverless-java-container-jersey:[2.0,)', + 'com.amazonaws.serverless:aws-serverless-java-container-jersey:[2.0-SNAPSHOT,)', 'com.fasterxml.jackson.core:jackson-databind:2.15.0', 'io.symphonia:lambda-logging:1.0.3' ) diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index 7aedaf58a..307af9c8b 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -9,7 +9,7 @@ dependencies { implementation ( 'org.springframework:spring-webmvc:6.0.8', 'org.springframework:spring-context:6.0.8', - 'com.amazonaws.serverless:aws-serverless-java-container-spring:[2.0,)', + 'com.amazonaws.serverless:aws-serverless-java-container-spring:[2.0-SNAPSHOT,)', 'org.apache.logging.log4j:log4j-core:2.19.0', 'org.apache.logging.log4j:log4j-api:2.19.0', 'org.apache.logging.log4j:log4j-slf4j-impl:2.19.0', diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index 85e071a08..80348e59b 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 1.8 - 6.0.7 + 6.0.8 4.13.2 2.19.0 diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle index 36a13b5d7..d8baa549a 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle @@ -8,8 +8,8 @@ repositories { dependencies { implementation ( - 'org.springframework.boot:spring-boot-starter-web:2.7.10', - 'com.amazonaws.serverless:aws-serverless-java-container-springboot2:[1.0,)', + 'org.springframework.boot:spring-boot-starter-web:3.0.6', + 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:[2.0-SNAPSHOT,)', 'io.symphonia:lambda-logging:1.0.3' ) diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml index fd770a9b4..d841a7230 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ org.springframework.boot spring-boot-starter-parent - 3.0.5 + 3.0.6 diff --git a/samples/jersey/pet-store/build.gradle b/samples/jersey/pet-store/build.gradle index 11ad779d6..6ff7cdd10 100644 --- a/samples/jersey/pet-store/build.gradle +++ b/samples/jersey/pet-store/build.gradle @@ -7,7 +7,7 @@ repositories { dependencies { implementation ( - 'com.amazonaws.serverless:aws-serverless-java-container-jersey:[2.0,)', + 'com.amazonaws.serverless:aws-serverless-java-container-jersey:[2.0-SNAPSHOT,)', 'com.fasterxml.jackson.core:jackson-databind:2.15.0', 'io.symphonia:lambda-logging:1.0.3' ) diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index 58511ca20..7846c163c 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -34,7 +34,7 @@ com.amazonaws.serverless aws-serverless-java-container-jersey - [2.0,) + [2.0-SNAPSHOT,) diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index 46a7df708..0a056aca4 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -7,9 +7,9 @@ repositories { dependencies { implementation ( - 'org.springframework:spring-webmvc:6.0.7', - 'org.springframework:spring-context:6.0.7', - 'com.amazonaws.serverless:aws-serverless-java-container-spring:[2.0,)', + 'org.springframework:spring-webmvc:6.0.8', + 'org.springframework:spring-context:6.0.8', + 'com.amazonaws.serverless:aws-serverless-java-container-spring:[2.0-SNAPSHOT,)', 'org.apache.logging.log4j:log4j-core:2.19.0', 'org.apache.logging.log4j:log4j-api:2.19.0', 'org.apache.logging.log4j:log4j-slf4j-impl:2.19.0', diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index 2194cee2d..4562e4444 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -24,18 +24,18 @@ - 6.0.7 + 6.0.8 4.13.2 2.19.0 - 17.0.6 - 17.0.6 + 17 + 17 com.amazonaws.serverless aws-serverless-java-container-spring - [2.0,) + [2.0-SNAPSHOT,) diff --git a/samples/springboot3/pet-store/build.gradle b/samples/springboot3/pet-store/build.gradle index 37ba61a59..fe2712924 100644 --- a/samples/springboot3/pet-store/build.gradle +++ b/samples/springboot3/pet-store/build.gradle @@ -8,10 +8,10 @@ repositories { dependencies { implementation ( - implementation('org.springframework.boot:spring-boot-starter-web:3.0.5') { + implementation('org.springframework.boot:spring-boot-starter-web:3.0.6') { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat' }, - 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:[2.0,)', + 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:[2.0-SNAPSHOT,)', 'io.symphonia:lambda-logging:1.0.3' ) testImplementation("junit:junit") diff --git a/samples/springboot3/pet-store/pom.xml b/samples/springboot3/pet-store/pom.xml index 3f0f283ad..5b455458f 100644 --- a/samples/springboot3/pet-store/pom.xml +++ b/samples/springboot3/pet-store/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 3.0.5 + 3.0.6 @@ -43,7 +43,7 @@ com.amazonaws.serverless aws-serverless-java-container-springboot3 - [2.0,) + [2.0-SNAPSHOT,) From e075be80de0a73219fd7ef2ce3947634f4cf0e05 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Tue, 25 Apr 2023 13:38:19 +0200 Subject: [PATCH 329/888] chore: modify CI build for 2.x - fix naming --- .github/workflows/continuous-integration-workflow.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/continuous-integration-workflow.yml b/.github/workflows/continuous-integration-workflow.yml index 5728e10b0..2374a45bc 100644 --- a/.github/workflows/continuous-integration-workflow.yml +++ b/.github/workflows/continuous-integration-workflow.yml @@ -55,7 +55,7 @@ jobs: # run: ./gha_build.sh spark true true build_spring: - name: Build and test Spring & SpringBoot + name: Build and test Spring runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 From e82ba5743e6e0285f0a60b2c3776b576e37f1ecd Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Tue, 25 Apr 2023 16:14:18 +0200 Subject: [PATCH 330/888] feat: Support Jakarta EE along with Spring Boot 3 support - build fixes --- .../src/main/resources/archetype-resources/build.gradle | 5 ++--- .../src/main/resources/archetype-resources/build.gradle | 1 - 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle index 022d3e53c..4f7bda47e 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle @@ -9,16 +9,15 @@ dependencies { implementation ( 'com.amazonaws.serverless:aws-serverless-java-container-jersey:[2.0-SNAPSHOT,)', 'com.fasterxml.jackson.core:jackson-databind:2.15.0', - 'io.symphonia:lambda-logging:1.0.3' ) - implementation("org.glassfish.jersey.media:jersey-media-json-jackson:2.39.1") { + implementation("org.glassfish.jersey.media:jersey-media-json-jackson:3.1.1") { exclude group: 'com.fasterxml.jackson.core', module: "jackson-annotations" exclude group: 'com.fasterxml.jackson.core', module: "jackson-databind" exclude group: 'com.fasterxml.jackson.core', module: "jackson-core" } - implementation("org.glassfish.jersey.inject:jersey-hk2:2.39.1") { + implementation("org.glassfish.jersey.inject:jersey-hk2:3.1.1") { exclude group: 'javax.inject', module: "javax.inject" } diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle index d8baa549a..45e6ba1b2 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle @@ -10,7 +10,6 @@ dependencies { implementation ( 'org.springframework.boot:spring-boot-starter-web:3.0.6', 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:[2.0-SNAPSHOT,)', - 'io.symphonia:lambda-logging:1.0.3' ) testImplementation("junit:junit:4.13.2") From c4c4f2eac4a365cdbe6cba24bb9353a940b163e9 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Tue, 25 Apr 2023 16:36:04 +0200 Subject: [PATCH 331/888] chore: create dependabot.yml --- .github/dependabot.yml | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 000000000..6c2be00af --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,23 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for all configuration options: +# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates + +version: 2 +updates: + - package-ecosystem: maven + directory: "/" + schedule: + interval: "weekly" + - package-ecosystem: maven + directory: "/samples/spring/pet-store" + schedule: + interval: "weekly" + - package-ecosystem: maven + directory: "/samples/springboot3/pet-store" + schedule: + interval: "weekly" + - package-ecosystem: maven + directory: "/samples/jersey/pet-store" + schedule: + interval: "weekly" From 07550d1a466347dcd3e7a2727ad33a2db44fc614 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 25 Apr 2023 14:36:19 +0000 Subject: [PATCH 332/888] chore(deps): bump maven-install-plugin in /samples/springboot3/pet-store Bumps [maven-install-plugin](https://github.com/apache/maven-install-plugin) from 3.0.0-M1 to 3.1.1. - [Release notes](https://github.com/apache/maven-install-plugin/releases) - [Commits](https://github.com/apache/maven-install-plugin/compare/maven-install-plugin-3.0.0-M1...maven-install-plugin-3.1.1) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-install-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- samples/springboot3/pet-store/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/springboot3/pet-store/pom.xml b/samples/springboot3/pet-store/pom.xml index 5b455458f..45937355d 100644 --- a/samples/springboot3/pet-store/pom.xml +++ b/samples/springboot3/pet-store/pom.xml @@ -107,7 +107,7 @@ org.apache.maven.plugins maven-install-plugin - 3.0.0-M1 + 3.1.1 true From 3a0d7b4cccb8cb09f98ed477d6e4c5974a7bbf70 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 25 Apr 2023 14:36:22 +0000 Subject: [PATCH 333/888] chore(deps-dev): bump mockito-core from 4.11.0 to 5.3.1 Bumps [mockito-core](https://github.com/mockito/mockito) from 4.11.0 to 5.3.1. - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](https://github.com/mockito/mockito/compare/v4.11.0...v5.3.1) --- updated-dependencies: - dependency-name: org.mockito:mockito-core dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 2c97633a8..f3083b41f 100644 --- a/pom.xml +++ b/pom.xml @@ -81,7 +81,7 @@ 2.15.0 2.0.7 5.9.2 - 4.11.0 + 5.3.1 1.3 UTF-8 From 55d0f9c1797c95916b69336c846bc581291717b5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 25 Apr 2023 14:36:23 +0000 Subject: [PATCH 334/888] chore(deps): bump maven-dependency-plugin Bumps [maven-dependency-plugin](https://github.com/apache/maven-dependency-plugin) from 3.2.0 to 3.5.0. - [Release notes](https://github.com/apache/maven-dependency-plugin/releases) - [Commits](https://github.com/apache/maven-dependency-plugin/compare/maven-dependency-plugin-3.2.0...maven-dependency-plugin-3.5.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-dependency-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- samples/springboot3/pet-store/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/springboot3/pet-store/pom.xml b/samples/springboot3/pet-store/pom.xml index 5b455458f..38562ebcf 100644 --- a/samples/springboot3/pet-store/pom.xml +++ b/samples/springboot3/pet-store/pom.xml @@ -116,7 +116,7 @@ org.apache.maven.plugins maven-dependency-plugin - 3.2.0 + 3.5.0 copy-dependencies From 7c43a2c5945f3717bdd78f67eece579fa54597b5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 25 Apr 2023 14:36:26 +0000 Subject: [PATCH 335/888] chore(deps): bump jacoco-maven-plugin from 0.8.8 to 0.8.10 Bumps [jacoco-maven-plugin](https://github.com/jacoco/jacoco) from 0.8.8 to 0.8.10. - [Release notes](https://github.com/jacoco/jacoco/releases) - [Commits](https://github.com/jacoco/jacoco/compare/v0.8.8...v0.8.10) --- updated-dependencies: - dependency-name: org.jacoco:jacoco-maven-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 2c97633a8..058e3c260 100644 --- a/pom.xml +++ b/pom.xml @@ -234,7 +234,7 @@ org.jacoco jacoco-maven-plugin - 0.8.8 + 0.8.10 From 92a0079f6e16b4981e6a2dc91d93033234af2c2e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 25 Apr 2023 14:36:26 +0000 Subject: [PATCH 336/888] chore(deps): bump maven-jar-plugin in /samples/springboot3/pet-store Bumps [maven-jar-plugin](https://github.com/apache/maven-jar-plugin) from 3.2.0 to 3.3.0. - [Release notes](https://github.com/apache/maven-jar-plugin/releases) - [Commits](https://github.com/apache/maven-jar-plugin/compare/maven-jar-plugin-3.2.0...maven-jar-plugin-3.3.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-jar-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- samples/springboot3/pet-store/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/springboot3/pet-store/pom.xml b/samples/springboot3/pet-store/pom.xml index 5b455458f..18f93447d 100644 --- a/samples/springboot3/pet-store/pom.xml +++ b/samples/springboot3/pet-store/pom.xml @@ -96,7 +96,7 @@ org.apache.maven.plugins maven-jar-plugin - 3.2.0 + 3.3.0 default-jar From 593076b7f78fa17911ebfe310344e2488f33f5f1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 25 Apr 2023 14:36:29 +0000 Subject: [PATCH 337/888] chore(deps): bump maven-assembly-plugin Bumps [maven-assembly-plugin](https://github.com/apache/maven-assembly-plugin) from 3.3.0 to 3.5.0. - [Release notes](https://github.com/apache/maven-assembly-plugin/releases) - [Commits](https://github.com/apache/maven-assembly-plugin/compare/maven-assembly-plugin-3.3.0...maven-assembly-plugin-3.5.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-assembly-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- samples/springboot3/pet-store/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/springboot3/pet-store/pom.xml b/samples/springboot3/pet-store/pom.xml index 5b455458f..9686aa4e0 100644 --- a/samples/springboot3/pet-store/pom.xml +++ b/samples/springboot3/pet-store/pom.xml @@ -134,7 +134,7 @@ org.apache.maven.plugins maven-assembly-plugin - 3.3.0 + 3.5.0 zip-assembly From 795843ca68923add8cecfbf06138c240afb2ded2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 25 Apr 2023 14:36:29 +0000 Subject: [PATCH 338/888] chore(deps): bump maven-assembly-plugin in /samples/jersey/pet-store Bumps [maven-assembly-plugin](https://github.com/apache/maven-assembly-plugin) from 3.3.0 to 3.5.0. - [Release notes](https://github.com/apache/maven-assembly-plugin/releases) - [Commits](https://github.com/apache/maven-assembly-plugin/compare/maven-assembly-plugin-3.3.0...maven-assembly-plugin-3.5.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-assembly-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- samples/jersey/pet-store/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index 7846c163c..4e9ca7847 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -157,7 +157,7 @@ org.apache.maven.plugins maven-assembly-plugin - 3.3.0 + 3.5.0 zip-assembly From 485b51d76b04710d7b9c46c0ab0f21b1207de42f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 25 Apr 2023 14:36:33 +0000 Subject: [PATCH 339/888] chore(deps): bump maven-install-plugin in /samples/jersey/pet-store Bumps [maven-install-plugin](https://github.com/apache/maven-install-plugin) from 3.0.0-M1 to 3.1.1. - [Release notes](https://github.com/apache/maven-install-plugin/releases) - [Commits](https://github.com/apache/maven-install-plugin/compare/maven-install-plugin-3.0.0-M1...maven-install-plugin-3.1.1) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-install-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- samples/jersey/pet-store/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index 7846c163c..044299bf6 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -130,7 +130,7 @@ org.apache.maven.plugins maven-install-plugin - 3.0.0-M1 + 3.1.1 true From 7e70451ba08f856c284551ebe9a0d0048b695520 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 25 Apr 2023 14:36:37 +0000 Subject: [PATCH 340/888] chore(deps): bump maven-jar-plugin in /samples/jersey/pet-store Bumps [maven-jar-plugin](https://github.com/apache/maven-jar-plugin) from 3.2.0 to 3.3.0. - [Release notes](https://github.com/apache/maven-jar-plugin/releases) - [Commits](https://github.com/apache/maven-jar-plugin/compare/maven-jar-plugin-3.2.0...maven-jar-plugin-3.3.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-jar-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- samples/jersey/pet-store/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index 7846c163c..a30a1d530 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -119,7 +119,7 @@ org.apache.maven.plugins maven-jar-plugin - 3.2.0 + 3.3.0 default-jar From 76a9348a97973ed2865d1ab0ed63325814dc28de Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 25 Apr 2023 14:36:38 +0000 Subject: [PATCH 341/888] chore(deps): bump maven-install-plugin in /samples/spring/pet-store Bumps [maven-install-plugin](https://github.com/apache/maven-install-plugin) from 3.0.0-M1 to 3.1.1. - [Release notes](https://github.com/apache/maven-install-plugin/releases) - [Commits](https://github.com/apache/maven-install-plugin/compare/maven-install-plugin-3.0.0-M1...maven-install-plugin-3.1.1) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-install-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- samples/spring/pet-store/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index 4562e4444..2c062a991 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -153,7 +153,7 @@ org.apache.maven.plugins maven-install-plugin - 3.0.0-M1 + 3.1.1 true From e34558c48bc7ea841a7f96eceff255a713a7e1fb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 25 Apr 2023 14:36:40 +0000 Subject: [PATCH 342/888] chore(deps): bump maven-dependency-plugin in /samples/jersey/pet-store Bumps [maven-dependency-plugin](https://github.com/apache/maven-dependency-plugin) from 3.2.0 to 3.5.0. - [Release notes](https://github.com/apache/maven-dependency-plugin/releases) - [Commits](https://github.com/apache/maven-dependency-plugin/compare/maven-dependency-plugin-3.2.0...maven-dependency-plugin-3.5.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-dependency-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- samples/jersey/pet-store/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index 7846c163c..94d3ebfaa 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -139,7 +139,7 @@ org.apache.maven.plugins maven-dependency-plugin - 3.2.0 + 3.5.0 copy-dependencies From 39987ed573d2415fb86156e0c2fbe69f4d852765 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 25 Apr 2023 14:36:42 +0000 Subject: [PATCH 343/888] chore(deps): bump maven-assembly-plugin in /samples/spring/pet-store Bumps [maven-assembly-plugin](https://github.com/apache/maven-assembly-plugin) from 3.3.0 to 3.5.0. - [Release notes](https://github.com/apache/maven-assembly-plugin/releases) - [Commits](https://github.com/apache/maven-assembly-plugin/compare/maven-assembly-plugin-3.3.0...maven-assembly-plugin-3.5.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-assembly-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- samples/spring/pet-store/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index 4562e4444..ebd952de9 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -180,7 +180,7 @@ org.apache.maven.plugins maven-assembly-plugin - 3.3.0 + 3.5.0 zip-assembly From c17a7b6f94ee77b39662fe9badbbf4c1e517b8e9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 25 Apr 2023 14:36:48 +0000 Subject: [PATCH 344/888] chore(deps): bump maven-dependency-plugin in /samples/spring/pet-store Bumps [maven-dependency-plugin](https://github.com/apache/maven-dependency-plugin) from 3.2.0 to 3.5.0. - [Release notes](https://github.com/apache/maven-dependency-plugin/releases) - [Commits](https://github.com/apache/maven-dependency-plugin/compare/maven-dependency-plugin-3.2.0...maven-dependency-plugin-3.5.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-dependency-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- samples/spring/pet-store/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index 4562e4444..1c4b83298 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -162,7 +162,7 @@ org.apache.maven.plugins maven-dependency-plugin - 3.2.0 + 3.5.0 copy-dependencies From 65cc0dab53c0b935058835e0bbfae0c582773c9e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 25 Apr 2023 14:37:51 +0000 Subject: [PATCH 345/888] chore(deps): bump maven-enforcer-plugin from 3.0.0-M1 to 3.3.0 Bumps [maven-enforcer-plugin](https://github.com/apache/maven-enforcer) from 3.0.0-M1 to 3.3.0. - [Release notes](https://github.com/apache/maven-enforcer/releases) - [Commits](https://github.com/apache/maven-enforcer/compare/enforcer-3.0.0-M1...enforcer-3.3.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-enforcer-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 2c97633a8..e46456d23 100644 --- a/pom.xml +++ b/pom.xml @@ -161,7 +161,7 @@ org.apache.maven.plugins maven-enforcer-plugin - 3.0.0-M1 + 3.3.0 enforce From b1667272f206fbfb75ae229d5669c0f453d1a0f4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 25 Apr 2023 14:37:55 +0000 Subject: [PATCH 346/888] chore(deps): bump spotbugs-maven-plugin from 4.7.3.0 to 4.7.3.4 Bumps [spotbugs-maven-plugin](https://github.com/spotbugs/spotbugs-maven-plugin) from 4.7.3.0 to 4.7.3.4. - [Release notes](https://github.com/spotbugs/spotbugs-maven-plugin/releases) - [Commits](https://github.com/spotbugs/spotbugs-maven-plugin/compare/spotbugs-maven-plugin-4.7.3.0...spotbugs-maven-plugin-4.7.3.4) --- updated-dependencies: - dependency-name: com.github.spotbugs:spotbugs-maven-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 2c97633a8..4a4268931 100644 --- a/pom.xml +++ b/pom.xml @@ -205,7 +205,7 @@ com.github.spotbugs spotbugs-maven-plugin - 4.7.3.0 + 4.7.3.4 - com.google.code.findbugs - annotations - 3.0.1 + com.github.spotbugs + spotbugs-annotations + 4.7.3 provided From f5b12534f46e39d72e27cf8fbc633162d688da26 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 25 Apr 2023 15:17:47 +0000 Subject: [PATCH 348/888] chore(deps): bump maven-jar-plugin in /samples/spring/pet-store Bumps [maven-jar-plugin](https://github.com/apache/maven-jar-plugin) from 3.2.0 to 3.3.0. - [Release notes](https://github.com/apache/maven-jar-plugin/releases) - [Commits](https://github.com/apache/maven-jar-plugin/compare/maven-jar-plugin-3.2.0...maven-jar-plugin-3.3.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-jar-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- samples/spring/pet-store/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index 3d27acc9c..6f76c7a63 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -142,7 +142,7 @@ org.apache.maven.plugins maven-jar-plugin - 3.2.0 + 3.3.0 default-jar From de3ff82ee0a9dc97774314f6420c800d1d1a8adc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 25 Apr 2023 15:17:48 +0000 Subject: [PATCH 349/888] chore(deps): bump archetype-packaging from 3.0.1 to 3.2.1 Bumps [archetype-packaging](https://github.com/apache/maven-archetype) from 3.0.1 to 3.2.1. - [Release notes](https://github.com/apache/maven-archetype/releases) - [Commits](https://github.com/apache/maven-archetype/compare/maven-archetype-3.0.1...maven-archetype-3.2.1) --- updated-dependencies: - dependency-name: org.apache.maven.archetype:archetype-packaging dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- aws-serverless-jersey-archetype/pom.xml | 2 +- aws-serverless-spring-archetype/pom.xml | 2 +- aws-serverless-springboot3-archetype/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index 6df742a57..329e92dbf 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -48,7 +48,7 @@ org.apache.maven.archetype archetype-packaging - 3.0.1 + 3.2.1 diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index 396f5e798..97bc6ee3e 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -48,7 +48,7 @@ org.apache.maven.archetype archetype-packaging - 3.0.1 + 3.2.1 diff --git a/aws-serverless-springboot3-archetype/pom.xml b/aws-serverless-springboot3-archetype/pom.xml index 040f43536..344aa9863 100644 --- a/aws-serverless-springboot3-archetype/pom.xml +++ b/aws-serverless-springboot3-archetype/pom.xml @@ -48,7 +48,7 @@ org.apache.maven.archetype archetype-packaging - 3.0.1 + 3.2.1 From ad630e104cc2b5d64abbcb73ba568c043cd29b8b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 25 Apr 2023 15:17:53 +0000 Subject: [PATCH 350/888] chore(deps): bump maven-javadoc-plugin from 3.3.0 to 3.5.0 Bumps [maven-javadoc-plugin](https://github.com/apache/maven-javadoc-plugin) from 3.3.0 to 3.5.0. - [Release notes](https://github.com/apache/maven-javadoc-plugin/releases) - [Commits](https://github.com/apache/maven-javadoc-plugin/compare/maven-javadoc-plugin-3.3.0...maven-javadoc-plugin-3.5.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-javadoc-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index ca454100a..33934a0af 100644 --- a/pom.xml +++ b/pom.xml @@ -188,7 +188,7 @@ org.apache.maven.plugins maven-javadoc-plugin - 3.3.0 + 3.5.0 From 44a59d7f3a989991c0ad116e1251ba752657db8e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 25 Apr 2023 15:17:59 +0000 Subject: [PATCH 351/888] chore(deps): bump maven-archetype-plugin from 3.0.1 to 3.2.1 Bumps [maven-archetype-plugin](https://github.com/apache/maven-archetype) from 3.0.1 to 3.2.1. - [Release notes](https://github.com/apache/maven-archetype/releases) - [Commits](https://github.com/apache/maven-archetype/compare/maven-archetype-3.0.1...maven-archetype-3.2.1) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-archetype-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- aws-serverless-jersey-archetype/pom.xml | 2 +- aws-serverless-spring-archetype/pom.xml | 2 +- aws-serverless-springboot3-archetype/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index 6df742a57..a2e991f39 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -65,7 +65,7 @@ org.apache.maven.plugins maven-archetype-plugin - 3.0.1 + 3.2.1 diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index 396f5e798..7fe877b9e 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -66,7 +66,7 @@ org.apache.maven.plugins maven-archetype-plugin - 3.0.1 + 3.2.1 diff --git a/aws-serverless-springboot3-archetype/pom.xml b/aws-serverless-springboot3-archetype/pom.xml index 040f43536..94dbcbba2 100644 --- a/aws-serverless-springboot3-archetype/pom.xml +++ b/aws-serverless-springboot3-archetype/pom.xml @@ -65,7 +65,7 @@ org.apache.maven.plugins maven-archetype-plugin - 3.0.1 + 3.2.1 From 8198040713e7e2f61c4af1ae0ce17d8ac1577f69 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 25 Apr 2023 15:18:10 +0000 Subject: [PATCH 352/888] chore(deps): bump dependency-check-maven from 8.1.2 to 8.2.1 Bumps [dependency-check-maven](https://github.com/jeremylong/DependencyCheck) from 8.1.2 to 8.2.1. - [Release notes](https://github.com/jeremylong/DependencyCheck/releases) - [Changelog](https://github.com/jeremylong/DependencyCheck/blob/main/CHANGELOG.md) - [Commits](https://github.com/jeremylong/DependencyCheck/compare/v8.1.2...v8.2.1) --- updated-dependencies: - dependency-name: org.owasp:dependency-check-maven dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index ca454100a..fb1317591 100644 --- a/pom.xml +++ b/pom.xml @@ -77,7 +77,7 @@ 0.7 - 8.1.2 + 8.2.1 2.15.0 2.0.7 5.9.2 From 1cc6a13d122f9039922db4cd99a19e7b5daee08c Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Tue, 25 Apr 2023 20:54:16 +0200 Subject: [PATCH 353/888] feat: Support Jakarta EE along with Spring Boot 3 support - fixed sample --- .../serverless/sample/springboot3/Application.java | 4 ++-- .../serverless/sample/springboot3/StreamLambdaHandler.java | 4 ++-- .../sample/springboot3/controller/PetsController.java | 6 +++--- .../sample/springboot3/filter/CognitoIdentityFilter.java | 4 ++-- .../serverless/sample/springboot3/model/Error.java | 2 +- .../amazonaws/serverless/sample/springboot3/model/Pet.java | 2 +- .../serverless/sample/springboot3/model/PetData.java | 2 +- 7 files changed, 12 insertions(+), 12 deletions(-) diff --git a/samples/springboot3/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/Application.java b/samples/springboot3/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/Application.java index aeb63a253..c576521f1 100644 --- a/samples/springboot3/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/Application.java +++ b/samples/springboot3/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/Application.java @@ -1,6 +1,6 @@ -package com.amazonaws.serverless.sample.springboot2; +package com.amazonaws.serverless.sample.springboot3; -import com.amazonaws.serverless.sample.springboot2.controller.PetsController; +import com.amazonaws.serverless.sample.springboot3.controller.PetsController; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.SpringApplication; diff --git a/samples/springboot3/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/StreamLambdaHandler.java b/samples/springboot3/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/StreamLambdaHandler.java index 6df4b5ede..7f329357a 100644 --- a/samples/springboot3/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/StreamLambdaHandler.java +++ b/samples/springboot3/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/StreamLambdaHandler.java @@ -1,4 +1,4 @@ -package com.amazonaws.serverless.sample.springboot2; +package com.amazonaws.serverless.sample.springboot3; import com.amazonaws.serverless.exceptions.ContainerInitializationException; @@ -6,7 +6,7 @@ import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.serverless.proxy.model.AwsProxyResponse; import com.amazonaws.serverless.proxy.spring.SpringBootLambdaContainerHandler; -import com.amazonaws.serverless.sample.springboot2.filter.CognitoIdentityFilter; +import com.amazonaws.serverless.sample.springboot3.filter.CognitoIdentityFilter; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestStreamHandler; diff --git a/samples/springboot3/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/controller/PetsController.java b/samples/springboot3/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/controller/PetsController.java index bbf69b084..680e629d3 100644 --- a/samples/springboot3/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/controller/PetsController.java +++ b/samples/springboot3/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/controller/PetsController.java @@ -10,12 +10,12 @@ * OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions * and limitations under the License. */ -package com.amazonaws.serverless.sample.springboot2.controller; +package com.amazonaws.serverless.sample.springboot3.controller; -import com.amazonaws.serverless.sample.springboot2.model.Pet; -import com.amazonaws.serverless.sample.springboot2.model.PetData; +import com.amazonaws.serverless.sample.springboot3.model.Pet; +import com.amazonaws.serverless.sample.springboot3.model.PetData; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; diff --git a/samples/springboot3/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/filter/CognitoIdentityFilter.java b/samples/springboot3/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/filter/CognitoIdentityFilter.java index 1cc92708b..d6ccae765 100644 --- a/samples/springboot3/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/filter/CognitoIdentityFilter.java +++ b/samples/springboot3/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/filter/CognitoIdentityFilter.java @@ -1,4 +1,4 @@ -package com.amazonaws.serverless.sample.springboot2.filter; +package com.amazonaws.serverless.sample.springboot3.filter; import com.amazonaws.serverless.proxy.RequestReader; @@ -20,7 +20,7 @@ /** * Simple Filter implementation that looks for a Cognito identity id in the API Gateway request context * and stores the value in a request attribute. The filter is registered with aws-serverless-java-container - * in the onStartup method from the {@link com.amazonaws.serverless.sample.springboot2.StreamLambdaHandler} class. + * in the onStartup method from the {@link com.amazonaws.serverless.sample.springboot3.StreamLambdaHandler} class. */ public class CognitoIdentityFilter implements Filter { public static final String COGNITO_IDENTITY_ATTRIBUTE = "com.amazonaws.serverless.cognitoId"; diff --git a/samples/springboot3/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/model/Error.java b/samples/springboot3/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/model/Error.java index a2278ed02..320f21582 100644 --- a/samples/springboot3/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/model/Error.java +++ b/samples/springboot3/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/model/Error.java @@ -10,7 +10,7 @@ * OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions * and limitations under the License. */ -package com.amazonaws.serverless.sample.springboot2.model; +package com.amazonaws.serverless.sample.springboot3.model; public class Error { private String message; diff --git a/samples/springboot3/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/model/Pet.java b/samples/springboot3/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/model/Pet.java index ee9a1e029..4f0c4ba8e 100644 --- a/samples/springboot3/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/model/Pet.java +++ b/samples/springboot3/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/model/Pet.java @@ -10,7 +10,7 @@ * OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions * and limitations under the License. */ -package com.amazonaws.serverless.sample.springboot2.model; +package com.amazonaws.serverless.sample.springboot3.model; import java.util.Date; diff --git a/samples/springboot3/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/model/PetData.java b/samples/springboot3/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/model/PetData.java index 34a324211..68ea3c18b 100644 --- a/samples/springboot3/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/model/PetData.java +++ b/samples/springboot3/pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/model/PetData.java @@ -10,7 +10,7 @@ * OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions * and limitations under the License. */ -package com.amazonaws.serverless.sample.springboot2.model; +package com.amazonaws.serverless.sample.springboot3.model; import java.util.ArrayList; From 5a8297ee368e000605d4489b78b952d0aa04eeac Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Tue, 25 Apr 2023 21:25:24 +0200 Subject: [PATCH 354/888] feat: Support Jakarta EE along with Spring Boot 3 support - requestwrapper should delegate to original request --- .../proxy/internal/servlet/AwsHttpServletRequestWrapper.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestWrapper.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestWrapper.java index 3817e7971..58d7282ba 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestWrapper.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestWrapper.java @@ -400,11 +400,11 @@ public String getRequestId() { @Override public String getProtocolRequestId() { - return ""; + return originalRequest.getProtocolRequestId(); } @Override public ServletConnection getServletConnection() { - return null; + return originalRequest.getServletConnection(); } } From 63f1ac561a434c70e14fec70190b2ac3fe141ad8 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Tue, 25 Apr 2023 21:44:08 +0200 Subject: [PATCH 355/888] feat: Support Jakarta EE along with Spring Boot 3 support - dependency cleanup --- aws-serverless-java-container-springboot3/pom.xml | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index 63113f19f..159e90235 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -157,11 +157,6 @@ test - - jakarta.activation - jakarta.activation-api - 2.1.0 - jakarta.validation jakarta.validation-api @@ -173,7 +168,7 @@ jakarta.websocket jakarta.websocket-api 2.0.0 - provided + test From a70a5a6769ab022a7abab3731639dbbf2fb7e93d Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Tue, 25 Apr 2023 21:46:13 +0200 Subject: [PATCH 356/888] chore: add gradle samples to dependabot config --- .github/dependabot.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 6c2be00af..81c896308 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -13,11 +13,23 @@ updates: directory: "/samples/spring/pet-store" schedule: interval: "weekly" + - package-ecosystem: gradle + directory: "/samples/spring/pet-store" + schedule: + interval: "weekly" - package-ecosystem: maven directory: "/samples/springboot3/pet-store" schedule: interval: "weekly" + - package-ecosystem: gradle + directory: "/samples/springboot3/pet-store" + schedule: + interval: "weekly" - package-ecosystem: maven directory: "/samples/jersey/pet-store" schedule: interval: "weekly" + - package-ecosystem: gradle + directory: "/samples/jersey/pet-store" + schedule: + interval: "weekly" From 5d2d2bc68546a0655ff81b103bf886e55b80e1cd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 25 Apr 2023 19:46:32 +0000 Subject: [PATCH 357/888] chore(deps): bump maven-resources-plugin from 3.1.0 to 3.3.1 Bumps [maven-resources-plugin](https://github.com/apache/maven-resources-plugin) from 3.1.0 to 3.3.1. - [Release notes](https://github.com/apache/maven-resources-plugin/releases) - [Commits](https://github.com/apache/maven-resources-plugin/compare/maven-resources-plugin-3.1.0...maven-resources-plugin-3.3.1) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-resources-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- aws-serverless-jersey-archetype/pom.xml | 2 +- aws-serverless-spring-archetype/pom.xml | 2 +- aws-serverless-springboot3-archetype/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index 091bf5852..51c855ac6 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -57,7 +57,7 @@ org.apache.maven.plugins maven-resources-plugin - 3.1.0 + 3.3.1 \ diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index 70a4acc45..3a17f1676 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -57,7 +57,7 @@ org.apache.maven.plugins maven-resources-plugin - 3.1.0 + 3.3.1 \ diff --git a/aws-serverless-springboot3-archetype/pom.xml b/aws-serverless-springboot3-archetype/pom.xml index fd409e780..21e176026 100644 --- a/aws-serverless-springboot3-archetype/pom.xml +++ b/aws-serverless-springboot3-archetype/pom.xml @@ -57,7 +57,7 @@ org.apache.maven.plugins maven-resources-plugin - 3.1.0 + 3.3.1 \ From 65929975a90cadf1b30d3630031db0de0251cc40 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 25 Apr 2023 19:46:43 +0000 Subject: [PATCH 358/888] chore(deps-dev): bump jakarta.websocket-api from 2.0.0 to 2.1.0 Bumps [jakarta.websocket-api](https://github.com/eclipse-ee4j/websocket-api) from 2.0.0 to 2.1.0. - [Release notes](https://github.com/eclipse-ee4j/websocket-api/releases) - [Changelog](https://github.com/jakartaee/websocket/blob/master/websocket-1.1-changes.txt) - [Commits](https://github.com/eclipse-ee4j/websocket-api/commits) --- updated-dependencies: - dependency-name: jakarta.websocket:jakarta.websocket-api dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- aws-serverless-java-container-springboot3/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index 159e90235..411b16da9 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -167,7 +167,7 @@ jakarta.websocket jakarta.websocket-api - 2.0.0 + 2.1.0 test From 901cc9779ce090e3795803204154cd7e6e086c15 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Tue, 25 Apr 2023 21:48:39 +0200 Subject: [PATCH 359/888] chore(deps): Update log4j version to 2.20.0 --- .../src/main/resources/archetype-resources/build.gradle | 6 +++--- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 6 +++--- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/spring/pet-store/build.gradle | 6 +++--- samples/spring/pet-store/pom.xml | 2 +- samples/struts/pet-store/build.gradle | 4 ++-- samples/struts/pet-store/pom.xml | 2 +- 8 files changed, 15 insertions(+), 15 deletions(-) diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index 307af9c8b..65aad2359 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -10,9 +10,9 @@ dependencies { 'org.springframework:spring-webmvc:6.0.8', 'org.springframework:spring-context:6.0.8', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[2.0-SNAPSHOT,)', - 'org.apache.logging.log4j:log4j-core:2.19.0', - 'org.apache.logging.log4j:log4j-api:2.19.0', - 'org.apache.logging.log4j:log4j-slf4j-impl:2.19.0', + 'org.apache.logging.log4j:log4j-core:2.20.0', + 'org.apache.logging.log4j:log4j-api:2.20.0', + 'org.apache.logging.log4j:log4j-slf4j-impl:2.20.0', 'com.fasterxml.jackson.core:jackson-databind:2.15.0', 'com.amazonaws:aws-lambda-java-log4j2:1.5.1', ) diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index 80348e59b..e7cd2ba0c 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -18,7 +18,7 @@ 1.8 6.0.8 4.13.2 - 2.19.0 + 2.20.0 diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle index 83e8e8bb0..ebd3b1b67 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle @@ -36,9 +36,9 @@ dependencies { implementation ('org.hibernate.validator:hibernate-validator:6.1.7.Final') implementation ('com.fasterxml.jackson.core:jackson-databind:2.15.0') implementation ('com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.15.0') - implementation ('org.apache.logging.log4j:log4j-core:2.19.0') - implementation ('org.apache.logging.log4j:log4j-api:2.19.0') - implementation ('org.apache.logging.log4j:log4j-slf4j-impl:2.19.0') + implementation ('org.apache.logging.log4j:log4j-core:2.20.0') + implementation ('org.apache.logging.log4j:log4j-api:2.20.0') + implementation ('org.apache.logging.log4j:log4j-slf4j-impl:2.20.0') implementation ('com.amazonaws:aws-lambda-java-log4j2:1.5.1') testImplementation('junit:junit:4.13.2') diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml index c7aafda35..8029323dd 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml @@ -18,7 +18,7 @@ 6.1.2 2.15.0 4.13.2 - 2.19.0 + 2.20.0 diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index 0a056aca4..de5a543b6 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -10,9 +10,9 @@ dependencies { 'org.springframework:spring-webmvc:6.0.8', 'org.springframework:spring-context:6.0.8', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[2.0-SNAPSHOT,)', - 'org.apache.logging.log4j:log4j-core:2.19.0', - 'org.apache.logging.log4j:log4j-api:2.19.0', - 'org.apache.logging.log4j:log4j-slf4j-impl:2.19.0', + 'org.apache.logging.log4j:log4j-core:2.20.0', + 'org.apache.logging.log4j:log4j-api:2.20.0', + 'org.apache.logging.log4j:log4j-slf4j-impl:2.20.0', 'com.fasterxml.jackson.core:jackson-databind:2.15.0', 'com.amazonaws:aws-lambda-java-log4j2:1.5.1', ) diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index 6f76c7a63..0d21b90e0 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -26,7 +26,7 @@ 6.0.8 4.13.2 - 2.19.0 + 2.20.0 17 17 diff --git a/samples/struts/pet-store/build.gradle b/samples/struts/pet-store/build.gradle index bd4738f0f..2daa12596 100644 --- a/samples/struts/pet-store/build.gradle +++ b/samples/struts/pet-store/build.gradle @@ -24,8 +24,8 @@ dependencies { 'javax.el:javax.el-api:3.0.0', 'com.fasterxml.jackson.core:jackson-databind:2.15.0', 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.15.0', - 'org.apache.logging.log4j:log4j-core:2.19.0', - 'org.apache.logging.log4j:log4j-api:2.19.0', + 'org.apache.logging.log4j:log4j-core:2.20.0', + 'org.apache.logging.log4j:log4j-api:2.20.0', 'com.amazonaws:aws-lambda-java-log4j2:1.5.1', ) } diff --git a/samples/struts/pet-store/pom.xml b/samples/struts/pet-store/pom.xml index 2a90ffc05..58d630fc5 100644 --- a/samples/struts/pet-store/pom.xml +++ b/samples/struts/pet-store/pom.xml @@ -29,7 +29,7 @@ 6.1.2 2.15.0 4.13.2 - 2.19.0 + 2.20.0 From 9bc0af81c11e2bf5a5c84afece0f06d7c9f780b5 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Wed, 26 Apr 2023 09:17:43 +0200 Subject: [PATCH 360/888] chore(deps): Update maven-shaded-log4j-transformer config --- .../src/main/resources/archetype-resources/pom.xml | 11 +++++------ samples/spring/pet-store/pom.xml | 11 +++++------ 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index e7cd2ba0c..a0b1bf4e8 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -94,7 +94,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.2.4 + 3.4.1 package @@ -102,10 +102,9 @@ shade - false + implementation="io.github.edwgiz.log4j.maven.plugins.shade.transformer.Log4j2PluginCacheFileTransformer"> @@ -113,9 +112,9 @@ - com.github.edwgiz - maven-shade-plugin.log4j2-cachefile-transformer - 2.8.1 + io.github.edwgiz + log4j-maven-shade-plugin-extensions + 2.20.0 diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index 0d21b90e0..6500914f6 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -103,7 +103,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.2.4 + 3.4.1 package @@ -111,10 +111,9 @@ shade - false + implementation="io.github.edwgiz.log4j.maven.plugins.shade.transformer.Log4j2PluginCacheFileTransformer"> @@ -122,9 +121,9 @@ - com.github.edwgiz - maven-shade-plugin.log4j2-cachefile-transformer - 2.8.1 + io.github.edwgiz + log4j-maven-shade-plugin-extensions + 2.20.0 From 2aea94f4233b92d10b95bdbd1d7e269f198fe1c3 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Wed, 26 Apr 2023 09:26:35 +0200 Subject: [PATCH 361/888] chore(deps): Update plugins versions in samples and archetypes --- .../src/main/resources/archetype-resources/pom.xml | 10 +++++----- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/pom.xml | 6 +++--- .../src/main/resources/archetype-resources/pom.xml | 8 ++++---- samples/jersey/pet-store/pom.xml | 2 +- samples/spark/pet-store/pom.xml | 2 +- samples/springboot3/pet-store/pom.xml | 4 ++-- 7 files changed, 17 insertions(+), 17 deletions(-) diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml index 57dfdd6d7..5fa0be4f9 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml @@ -81,7 +81,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.2.4 + 3.4.1 false @@ -108,7 +108,7 @@ org.apache.maven.plugins maven-jar-plugin - 3.2.0 + 3.3.0 default-jar @@ -119,7 +119,7 @@ org.apache.maven.plugins maven-install-plugin - 3.0.0-M1 + 3.1.1 true @@ -128,7 +128,7 @@ org.apache.maven.plugins maven-dependency-plugin - 3.2.0 + 3.5.0 copy-dependencies @@ -146,7 +146,7 @@ org.apache.maven.plugins maven-assembly-plugin - 3.3.0 + 3.5.0 zip-assembly diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml index 358bbd5ec..5e9ea5e33 100644 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml @@ -108,7 +108,7 @@ org.apache.maven.plugins maven-install-plugin - 3.0.0-M1 + 3.1.1 true diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index a0b1bf4e8..3e27a514e 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -132,7 +132,7 @@ org.apache.maven.plugins maven-jar-plugin - 3.2.0 + 3.3.0 default-jar @@ -143,7 +143,7 @@ org.apache.maven.plugins maven-install-plugin - 3.0.0-M1 + 3.1.1 true @@ -152,7 +152,7 @@ org.apache.maven.plugins maven-dependency-plugin - 3.2.0 + 3.5.0 copy-dependencies diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml index d841a7230..ffbb37fcf 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml @@ -57,7 +57,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.2.4 + 3.4.1 false @@ -102,7 +102,7 @@ org.apache.maven.plugins maven-install-plugin - 3.0.0-M1 + 3.1.1 true @@ -111,7 +111,7 @@ org.apache.maven.plugins maven-dependency-plugin - 3.2.0 + 3.5.0 copy-dependencies @@ -129,7 +129,7 @@ org.apache.maven.plugins maven-assembly-plugin - 3.3.0 + 3.5.0 zip-assembly diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index cac128b36..487499845 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -92,7 +92,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.2.4 + 3.4.1 false diff --git a/samples/spark/pet-store/pom.xml b/samples/spark/pet-store/pom.xml index e2d89cb30..e2bbd2280 100644 --- a/samples/spark/pet-store/pom.xml +++ b/samples/spark/pet-store/pom.xml @@ -120,7 +120,7 @@ org.apache.maven.plugins maven-install-plugin - 3.0.0-M1 + 3.1.1 true diff --git a/samples/springboot3/pet-store/pom.xml b/samples/springboot3/pet-store/pom.xml index 0810d02f5..1d4b4f6ec 100644 --- a/samples/springboot3/pet-store/pom.xml +++ b/samples/springboot3/pet-store/pom.xml @@ -62,7 +62,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.2.4 + 3.4.1 false @@ -96,7 +96,7 @@ org.apache.maven.plugins maven-jar-plugin - 3.3.0 + 3.2.0 default-jar From 510e49da476b0b6a2aadbf0ceddfc2414bafb82f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 26 Apr 2023 08:02:03 +0000 Subject: [PATCH 362/888] chore(deps): bump maven-jar-plugin in /samples/springboot3/pet-store Bumps [maven-jar-plugin](https://github.com/apache/maven-jar-plugin) from 3.2.0 to 3.3.0. - [Release notes](https://github.com/apache/maven-jar-plugin/releases) - [Commits](https://github.com/apache/maven-jar-plugin/compare/maven-jar-plugin-3.2.0...maven-jar-plugin-3.3.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-jar-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- samples/springboot3/pet-store/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/springboot3/pet-store/pom.xml b/samples/springboot3/pet-store/pom.xml index 1d4b4f6ec..69445d349 100644 --- a/samples/springboot3/pet-store/pom.xml +++ b/samples/springboot3/pet-store/pom.xml @@ -96,7 +96,7 @@ org.apache.maven.plugins maven-jar-plugin - 3.2.0 + 3.3.0 default-jar From ba10f811e4d4f1ec4c4f29e33d77253ef03c8c44 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 26 Apr 2023 08:02:07 +0000 Subject: [PATCH 363/888] chore(deps): bump junit-bom from 5.9.2 to 5.9.3 Bumps [junit-bom](https://github.com/junit-team/junit5) from 5.9.2 to 5.9.3. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.9.2...r5.9.3) --- updated-dependencies: - dependency-name: org.junit:junit-bom dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index bc5baf04c..5c8a4edd4 100644 --- a/pom.xml +++ b/pom.xml @@ -80,7 +80,7 @@ 8.2.1 2.15.0 2.0.7 - 5.9.2 + 5.9.3 5.3.1 1.3 UTF-8 From 8a05c04980c19f85bf84ec7c64499a1f77e15d10 Mon Sep 17 00:00:00 2001 From: mbfreder Date: Thu, 27 Apr 2023 10:14:13 -0700 Subject: [PATCH 364/888] feat: Support Jakarta EE along with Spring Boot 3 support - update Springboot3 sample app's README --- samples/springboot3/pet-store/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/samples/springboot3/pet-store/README.md b/samples/springboot3/pet-store/README.md index 8e15b3773..fb3fab3b0 100644 --- a/samples/springboot3/pet-store/README.md +++ b/samples/springboot3/pet-store/README.md @@ -1,5 +1,5 @@ -# Serverless Spring Boot 2 example -A basic pet store written with the [Spring Boot 2 framework](https://projects.spring.io/spring-boot/). The `StreamLambdaHandler` object is the main entry point for Lambda. +# Serverless Spring Boot 3 example +A basic pet store written with the [Spring Boot 3 framework](https://projects.spring.io/spring-boot/). 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. From 8ed5650c69ebecc2bdda867519c0214636b5789d Mon Sep 17 00:00:00 2001 From: Artur Signell Date: Mon, 6 Feb 2023 11:30:15 +0200 Subject: [PATCH 365/888] Load using the application class loader Fixes #506 --- .../serverless/proxy/internal/servlet/AwsServletContext.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java index 44ec701ee..1732cfe22 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java @@ -519,9 +519,7 @@ public JspConfigDescriptor getJspConfigDescriptor() { @Override public ClassLoader getClassLoader() { - // for the time being we return the default class loader. We may want to let developers override this int the - // future. - return ClassLoader.getSystemClassLoader(); + return getClass().getClassLoader(); } From 5a3238d6ddf926f5433fc79b67f8a8647329e7dc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 May 2023 04:56:57 +0000 Subject: [PATCH 366/888] chore(deps-dev): bump jakarta.activation-api from 2.1.1 to 2.1.2 Bumps [jakarta.activation-api](https://github.com/jakartaee/jaf-api) from 2.1.1 to 2.1.2. - [Release notes](https://github.com/jakartaee/jaf-api/releases) - [Commits](https://github.com/jakartaee/jaf-api/compare/2.1.1...2.1.2) --- updated-dependencies: - dependency-name: jakarta.activation:jakarta.activation-api dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- aws-serverless-java-container-spring/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index af8d73f3c..fd0425b4f 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -62,7 +62,7 @@ jakarta.activation jakarta.activation-api - 2.1.1 + 2.1.2 test From ca25123411bbee02841567fc79c1b509df096660 Mon Sep 17 00:00:00 2001 From: Renato Valenzuela Date: Tue, 2 May 2023 21:33:53 +0000 Subject: [PATCH 367/888] chore(deps-dev): add jakarta-websocket-client-api Needed to upgrade `jakarta.websocket-api` to 2.1.0, because: - "Removed the copy of the jakarta.websocket.* classes from the jakarta.websocket-api jar" [1] [1] https://github.com/jakartaee/websocket/blob/ca41696e7d7a48d4f74d1546e0f006a2e82d657d/spec/src/main/asciidoc/WebSocket.adoc#a1-changes-between-21-and-20 --- aws-serverless-java-container-springboot3/pom.xml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index 411b16da9..27aa39496 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -171,6 +171,13 @@ test + + jakarta.websocket + jakarta.websocket-client-api + 2.1.0 + test + + From 7b047ae3184196cf2d1119a529f862a3fc33de99 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 May 2023 04:56:56 +0000 Subject: [PATCH 368/888] chore(deps): bump maven-gpg-plugin from 3.0.1 to 3.1.0 Bumps [maven-gpg-plugin](https://github.com/apache/maven-gpg-plugin) from 3.0.1 to 3.1.0. - [Commits](https://github.com/apache/maven-gpg-plugin/compare/maven-gpg-plugin-3.0.1...maven-gpg-plugin-3.1.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-gpg-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 5c8a4edd4..f885a41ff 100644 --- a/pom.xml +++ b/pom.xml @@ -253,7 +253,7 @@ org.apache.maven.plugins maven-gpg-plugin - 3.0.1 + 3.1.0 sign-artifacts From c5b67532bd7a211b41f8da767c1e41c414836b7e Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Tue, 9 May 2023 16:11:06 +0200 Subject: [PATCH 369/888] chore: Remove outdated Micronaut and Quarkus sample code --- README.md | 6 +- samples/micronaut/pet-store/Dockerfile | 24 --- samples/micronaut/pet-store/README.md | 74 --------- samples/micronaut/pet-store/build.gradle | 77 ---------- samples/micronaut/pet-store/docker-build.sh | 25 ---- samples/micronaut/pet-store/gradle.properties | 1 - samples/micronaut/pet-store/micronaut-cli.yml | 5 - samples/micronaut/pet-store/sam-local.sh | 4 - samples/micronaut/pet-store/sam-native.yaml | 30 ---- samples/micronaut/pet-store/scripts/bootstrap | 3 - .../pet-store/scripts/graalvm-build.sh | 9 -- samples/micronaut/pet-store/settings.gradle | 1 - .../amazonaws/micronaut/demo/Application.java | 17 --- .../micronaut/demo/PetsController.java | 79 ---------- .../amazonaws/micronaut/demo/model/Pet.java | 61 -------- .../micronaut/demo/model/PetData.java | 114 -------------- .../native-image.properties | 4 - .../src/main/resources/application.yml | 6 - .../pet-store/src/main/resources/logback.xml | 15 -- samples/quarkus/pet-store/README.md | 68 --------- samples/quarkus/pet-store/pom.xml | 141 ------------------ samples/quarkus/pet-store/sam.native.yaml | 36 ----- .../quarkus/pet-store/src/assembly/zip.xml | 17 --- .../sample/quarkus/PetsController.java | 63 -------- .../serverless/sample/quarkus/model/Pet.java | 50 ------- .../sample/quarkus/model/PetData.java | 102 ------------- .../src/main/resources/application.properties | 4 - 27 files changed, 4 insertions(+), 1032 deletions(-) delete mode 100644 samples/micronaut/pet-store/Dockerfile delete mode 100644 samples/micronaut/pet-store/README.md delete mode 100644 samples/micronaut/pet-store/build.gradle delete mode 100755 samples/micronaut/pet-store/docker-build.sh delete mode 100644 samples/micronaut/pet-store/gradle.properties delete mode 100644 samples/micronaut/pet-store/micronaut-cli.yml delete mode 100755 samples/micronaut/pet-store/sam-local.sh delete mode 100644 samples/micronaut/pet-store/sam-native.yaml delete mode 100755 samples/micronaut/pet-store/scripts/bootstrap delete mode 100755 samples/micronaut/pet-store/scripts/graalvm-build.sh delete mode 100644 samples/micronaut/pet-store/settings.gradle delete mode 100644 samples/micronaut/pet-store/src/main/java/com/amazonaws/micronaut/demo/Application.java delete mode 100644 samples/micronaut/pet-store/src/main/java/com/amazonaws/micronaut/demo/PetsController.java delete mode 100644 samples/micronaut/pet-store/src/main/java/com/amazonaws/micronaut/demo/model/Pet.java delete mode 100644 samples/micronaut/pet-store/src/main/java/com/amazonaws/micronaut/demo/model/PetData.java delete mode 100644 samples/micronaut/pet-store/src/main/resources/META-INF/native-image/graal.spring.demo/graal-spring-demo-application/native-image.properties delete mode 100644 samples/micronaut/pet-store/src/main/resources/application.yml delete mode 100644 samples/micronaut/pet-store/src/main/resources/logback.xml delete mode 100644 samples/quarkus/pet-store/README.md delete mode 100644 samples/quarkus/pet-store/pom.xml delete mode 100644 samples/quarkus/pet-store/sam.native.yaml delete mode 100644 samples/quarkus/pet-store/src/assembly/zip.xml delete mode 100644 samples/quarkus/pet-store/src/main/java/com/amazonaws/serverless/sample/quarkus/PetsController.java delete mode 100644 samples/quarkus/pet-store/src/main/java/com/amazonaws/serverless/sample/quarkus/model/Pet.java delete mode 100644 samples/quarkus/pet-store/src/main/java/com/amazonaws/serverless/sample/quarkus/model/PetData.java delete mode 100644 samples/quarkus/pet-store/src/main/resources/application.properties diff --git a/README.md b/README.md index 895313892..9c483ae27 100644 --- a/README.md +++ b/README.md @@ -17,8 +17,6 @@ Follow the quick start guides in [our wiki](https://github.com/awslabs/aws-serve * [Jersey quick start](https://github.com/awslabs/aws-serverless-java-container/wiki/Quick-start---Jersey) * [Spark quick start](https://github.com/awslabs/aws-serverless-java-container/wiki/Quick-start---Spark) -* Micronaut [documentation](https://guides.micronaut.io/micronaut-function-aws-lambda/guide/index.html) and [demo](https://github.com/awslabs/aws-serverless-java-container/tree/master/samples/micronaut/pet-store) (outdated! - needs to be updated to latest Micronaut version) - Below is the most basic AWS Lambda handler example that launches a Spring application. You can also take a look at the [samples](https://github.com/awslabs/aws-serverless-java-container/tree/master/samples) in this repository, our main wiki page includes a [step-by-step guide](https://github.com/awslabs/aws-serverless-java-container/wiki#deploying-the-sample-applications) on how to deploy the various sample applications using Maven and [SAM](https://github.com/awslabs/serverless-application-model). ```java @@ -52,3 +50,7 @@ public class StreamLambdaHandler implements RequestStreamHandler { ### Videos - [Spring on AWS Lambda](https://www.youtube.com/watch?v=A1rYiHTy9Lg&list=PLCOG9xkUD90IDm9tcY-5nMK6X6g8SD-Sz) YouTube Playlist from [@plantpowerjames](https://twitter.com/plantpowerjames) + +### Java samples with different frameworks + +- [Dagger, Micronaut, Quarkus, Spring Boot](https://github.com/aws-samples/serverless-java-frameworks-samples/) \ No newline at end of file diff --git a/samples/micronaut/pet-store/Dockerfile b/samples/micronaut/pet-store/Dockerfile deleted file mode 100644 index 6bb80136e..000000000 --- a/samples/micronaut/pet-store/Dockerfile +++ /dev/null @@ -1,24 +0,0 @@ -FROM amazonlinux:2017.03.1.20170812 as graalvm -# install graal to amazon linux. -ENV LANG=en_US.UTF-8 - -RUN yum install -y gcc gcc-c++ libc6-dev zlib1g-dev curl bash zlib zlib-devel zip \ -# && yum install -y libcxx libcxx-devel llvm-toolset-7 \ - && rm -rf /var/cache/yum - - -ENV GRAAL_VERSION 19.2.0.1 -ENV GRAAL_FILENAME graalvm-ce-linux-amd64-${GRAAL_VERSION}.tar.gz - -RUN curl -4 -L https://github.com/oracle/graal/releases/download/vm-${GRAAL_VERSION}/graalvm-ce-linux-amd64-${GRAAL_VERSION}.tar.gz -o /tmp/${GRAAL_FILENAME} - -RUN tar -zxvf /tmp/${GRAAL_FILENAME} -C /tmp \ - && mv /tmp/graalvm-ce-${GRAAL_VERSION} /usr/lib/graalvm - -RUN rm -rf /tmp/* -RUN /usr/lib/graalvm/bin/gu install native-image -ADD scripts/graalvm-build.sh /usr/local/bin/ -RUN chmod +x /usr/local/bin/graalvm-build.sh -VOLUME ["/func"] -WORKDIR /func -ENTRYPOINT ["/usr/local/bin/graalvm-build.sh"] \ No newline at end of file diff --git a/samples/micronaut/pet-store/README.md b/samples/micronaut/pet-store/README.md deleted file mode 100644 index fc5793a59..000000000 --- a/samples/micronaut/pet-store/README.md +++ /dev/null @@ -1,74 +0,0 @@ -# Micronaut Native Pet store example - -The [Micronaut framework](https://micronaut.io/) is compatible with Spring's annotations and makes it easy to use [GraalVM](https://www.graalvm.org/) to build application images into native binaries. Further, Micronaut includes builtin support for AWS Lambda. - -This demo application shows how to use Micronaut to compile our standard pet store example, using Spring annotations, into a native binary with GraalVM and execute it in AWS Lambda. To run this demo, you will need to have [Gradle](https://gradle.org/) installed as well as [Docker](https://www.docker.com/) to run the GraalVM build. - -With all the pre-requisites installed including: - -* JDK 8 or above -* Gradle 5.6.x - -You should be able to build a native image of the application by running the `docker-build.sh` from the repository's root. - -```bash -$ ./docker-build.sh -``` - -The build process will perform the following tasks: -1. Use gradle to compile the application -2. Create a `native-image` folder in the current directory -3. Check if a Docker image called `graalvm-lambda-build` exists on the local machine. If not, create it using the `Dockerfile` in the root of the repository -4. Run the docker image to execute the GraalVM build process - -The output of the build is an executable file called `server` and a deployable zip called `function.zip` in the `native-image` folder: - -```bash -$ ls -lh native-image/ -total 75M --rwxr-xr-x 1 user user 36 Oct 1 16:01 bootstrap --rw-r--r-- 1 user user 18M Oct 1 16:01 function.zip --rwxr-xr-x 1 user user 57M Oct 1 16:01 server -``` - -To run the lambda locally, you can utilize the SAM cli by running `./sam-local.sh`. This should start up the listeners in the `PetsController`, and you can test locally with your preferred http client. - -For example, to test the GET /pets endpoint via curl: -```bash -curl localhost:3000/pets -``` - -You should see JSON output of pets. - -To deploy the application to AWS Lambda you can use the pre-configured `sam-native.yaml` file included in the repo. Using the AWS or SAM CLI, run the following commands: - -```bash -$ aws cloudformation package --template-file sam-native.yaml \ - --output-template-file packaged-sam.yaml \ - --s3-bucket -Uploading to d3e2617f3c8c2e8ca78e35a0dc856884 18553505 / 18553505.0 (100.00%) -Successfully packaged artifacts and wrote output template to file packaged-sam.yaml. -Execute the following command to deploy the packaged template -aws cloudformation deploy --template-file /workspace/graal-spring-demo/packaged-sam.yaml --stack-name - - -$ aws cloudformation deploy --template-file ./packaged-sam.yaml --stack-name MicronautGraalVmDemo --capabilities CAPABILITY_IAM - -Waiting for changeset to be created.. -Waiting for stack create/update to complete -Successfully created/updated stack - MicronautGraalVmDemo -``` - -You can use the AWS CLI to get the API endpoint generated by the deployment process: - -```bash -aws cloudformation describe-stacks --stack-name MicronautGraalVmDemo --query Stacks[0].Outputs[0].OutputValue -"https://xxxxxxxxxx.execute-api.xx-xxxx-1.amazonaws.com/Prod/pets" -``` - -Make a test request to the API endpoint using curl or your preferred http client. - -For example, to check the GET /pets endpoint via curl: -```bash -curl https://xxxxxxxxxx.execute-api.xx-xxxx-1.amazonaws.com/Prod/pets -``` diff --git a/samples/micronaut/pet-store/build.gradle b/samples/micronaut/pet-store/build.gradle deleted file mode 100644 index b262a4699..000000000 --- a/samples/micronaut/pet-store/build.gradle +++ /dev/null @@ -1,77 +0,0 @@ -plugins { - id "java" - id "com.github.johnrengelman.shadow" version "8.1.1" - id "application" - id "net.ltgt.apt-eclipse" version "0.21" - id "org.springframework.boot" version "3.0.5" - id "io.spring.dependency-management" version "1.1.0" -} - -version "0.1" -group "graal.spring.demo" - -repositories { - mavenCentral() - maven { url "https://jcenter.bintray.com" } -} - -configurations { - // for dependencies that are needed for development only - developmentOnly -} - -dependencies { - annotationProcessor platform("io.micronaut:micronaut-bom:$micronautVersion") - annotationProcessor "io.micronaut:micronaut-graal" - annotationProcessor "io.micronaut:micronaut-inject-java" - annotationProcessor "io.micronaut:micronaut-validation" - annotationProcessor "io.micronaut.spring:micronaut-spring-boot" - annotationProcessor "io.micronaut.spring:micronaut-spring-boot-annotation" - annotationProcessor "io.micronaut.spring:micronaut-spring-web-annotation" - testAnnotationProcessor "io.micronaut.spring:micronaut-spring-web-annotation" - - compileOnly "com.oracle.substratevm:svm" - implementation platform("io.micronaut:micronaut-bom:$micronautVersion") - implementation "io.micronaut:micronaut-http-client" - implementation "io.micronaut:micronaut-inject" - implementation "io.micronaut:micronaut-validation" - implementation "io.micronaut:micronaut-runtime" - implementation("io.micronaut.aws:micronaut-function-aws-custom-runtime:1.3.2") { - exclude group: "com.fasterxml.jackson.module", module: "jackson-module-afterburner" - } - implementation("io.micronaut.aws:micronaut-function-aws-api-proxy:1.3.2") { - exclude group: "com.fasterxml.jackson.module", module: "jackson-module-afterburner" - } - developmentOnly "io.micronaut:micronaut-http-server-netty" - runtimeOnly "ch.qos.logback:logback-classic:1.2.3" - testAnnotationProcessor platform("io.micronaut:micronaut-bom:$micronautVersion") - testAnnotationProcessor "io.micronaut:micronaut-inject-java" - testImplementation platform("io.micronaut:micronaut-bom:$micronautVersion") - testImplementation "org.junit.jupiter:junit-jupiter-api" - testImplementation "io.micronaut.test:micronaut-test-junit5" - testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine" - - // spring support - implementation("org.springframework.boot:spring-boot-starter-web") - runtime("io.micronaut.spring:micronaut-spring-boot:5.0.0-M1") - runtime("io.micronaut.spring:micronaut-spring-web:5.0.0-M1") -} - -test.classpath += configurations.developmentOnly - -mainClassName = "graal.spring.demo.Application" -// use JUnit 5 platform -test { - useJUnitPlatform() -} - -shadowJar { - mergeServiceFiles() -} - -run.classpath += configurations.developmentOnly -run.jvmArgs('-noverify', '-XX:TieredStopAtLevel=1', '-Dcom.sun.management.jmxremote') -tasks.withType(JavaCompile){ - options.encoding = "UTF-8" - options.compilerArgs.add('-parameters') -} diff --git a/samples/micronaut/pet-store/docker-build.sh b/samples/micronaut/pet-store/docker-build.sh deleted file mode 100755 index 41a644cc0..000000000 --- a/samples/micronaut/pet-store/docker-build.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash -DOCKER_IMAGE_NAME=graalvm-lambda-build - -if [[ -d "${PWD}/native-image" ]]; then - rm -rf native-image/* -fi - -gradle clean build --info - -if [[ $? -ne 0 ]]; then - echo "Gradle build failed" - exit 1 -fi - -mkdir -p ${PWD}/native-image - -if [[ "$(docker images -q ${DOCKER_IMAGE_NAME} 2> /dev/null)" == "" ]]; then - docker build . -t ${DOCKER_IMAGE_NAME} -fi - -docker run --rm -v ${PWD}:/func ${DOCKER_IMAGE_NAME} - -if [[ -f "${PWD}/native-image/function.zip" ]]; then - echo "The function is ready to deploy in the ./native-image/function.zip file. Use the sam-native.yaml template to set up your Lambda function and API" -fi diff --git a/samples/micronaut/pet-store/gradle.properties b/samples/micronaut/pet-store/gradle.properties deleted file mode 100644 index 04c818602..000000000 --- a/samples/micronaut/pet-store/gradle.properties +++ /dev/null @@ -1 +0,0 @@ -micronautVersion=1.2.3 \ No newline at end of file diff --git a/samples/micronaut/pet-store/micronaut-cli.yml b/samples/micronaut/pet-store/micronaut-cli.yml deleted file mode 100644 index 262c35c06..000000000 --- a/samples/micronaut/pet-store/micronaut-cli.yml +++ /dev/null @@ -1,5 +0,0 @@ -profile: service -defaultPackage: com.amazonaws.micronaut.demo ---- -testFramework: junit -sourceLanguage: java \ No newline at end of file diff --git a/samples/micronaut/pet-store/sam-local.sh b/samples/micronaut/pet-store/sam-local.sh deleted file mode 100755 index 0c82b8511..000000000 --- a/samples/micronaut/pet-store/sam-local.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh - -./docker-build.sh -sam local start-api -t sam-native.yaml \ No newline at end of file diff --git a/samples/micronaut/pet-store/sam-native.yaml b/samples/micronaut/pet-store/sam-native.yaml deleted file mode 100644 index 76a08d1ec..000000000 --- a/samples/micronaut/pet-store/sam-native.yaml +++ /dev/null @@ -1,30 +0,0 @@ -AWSTemplateFormatVersion: '2010-09-09' -Transform: AWS::Serverless-2016-10-31 -Description: AWS Serverless Micronaut API - graal.spring.demo::graal-spring-demo -Globals: - Api: - EndpointConfiguration: REGIONAL -Resources: - GraalVMApiService: - Type: AWS::Serverless::Function - Properties: - Handler: not.used.in.provided.runtime - Runtime: provided - CodeUri: native-image/function.zip - MemorySize: 512 - Policies: AWSLambdaBasicExecutionRole - Tracing: Active - Timeout: 15 - Events: - GetResource: - Type: Api - Properties: - Path: /{proxy+} - Method: any - -Outputs: - MicronautNativeServiceApi: - Description: URL for application - Value: !Sub 'https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/pets' - Export: - Name: MicronautNativeServiceApi diff --git a/samples/micronaut/pet-store/scripts/bootstrap b/samples/micronaut/pet-store/scripts/bootstrap deleted file mode 100755 index f10361a21..000000000 --- a/samples/micronaut/pet-store/scripts/bootstrap +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -set -euo pipefail -./server \ No newline at end of file diff --git a/samples/micronaut/pet-store/scripts/graalvm-build.sh b/samples/micronaut/pet-store/scripts/graalvm-build.sh deleted file mode 100755 index 44b8b2603..000000000 --- a/samples/micronaut/pet-store/scripts/graalvm-build.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh -echo "Startin GraalVM build" -/usr/lib/graalvm/bin/native-image -H:+TraceClassInitialization --initialize-at-build-time=reactor.core.publisher.Mono --initialize-at-build-time=reactor.core.publisher.Flux --no-fallback --no-server -cp /func/build/libs/pet-store-*-all.jar -rm -rf /func/native-image/* - -chmod 755 /func/server -mv /func/server /func/native-image/server -cp /func/scripts/bootstrap /func/native-image/bootstrap -cd /func/native-image && zip -j function.zip bootstrap server diff --git a/samples/micronaut/pet-store/settings.gradle b/samples/micronaut/pet-store/settings.gradle deleted file mode 100644 index a6e417eb2..000000000 --- a/samples/micronaut/pet-store/settings.gradle +++ /dev/null @@ -1 +0,0 @@ -rootProject.name="pet-store" \ No newline at end of file diff --git a/samples/micronaut/pet-store/src/main/java/com/amazonaws/micronaut/demo/Application.java b/samples/micronaut/pet-store/src/main/java/com/amazonaws/micronaut/demo/Application.java deleted file mode 100644 index 0340d5c42..000000000 --- a/samples/micronaut/pet-store/src/main/java/com/amazonaws/micronaut/demo/Application.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.amazonaws.micronaut.demo; - -import org.springframework.boot.autoconfigure.SpringBootApplication; - -import ch.qos.logback.classic.Level; -import ch.qos.logback.classic.Logger; -import io.micronaut.runtime.Micronaut; - -@SpringBootApplication -public class Application { - - public static void main(String[] args) { - Logger rootLogger = (ch.qos.logback.classic.Logger)org.slf4j.LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME); - rootLogger.setLevel(Level.TRACE); - Micronaut.run(Application.class); - } -} \ No newline at end of file diff --git a/samples/micronaut/pet-store/src/main/java/com/amazonaws/micronaut/demo/PetsController.java b/samples/micronaut/pet-store/src/main/java/com/amazonaws/micronaut/demo/PetsController.java deleted file mode 100644 index a0d43e617..000000000 --- a/samples/micronaut/pet-store/src/main/java/com/amazonaws/micronaut/demo/PetsController.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance - * with the License. A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file 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 com.amazonaws.micronaut.demo; - -import com.amazonaws.micronaut.demo.model.Pet; -import com.amazonaws.micronaut.demo.model.PetData; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; -import org.springframework.web.servlet.config.annotation.EnableWebMvc; - -import javax.annotation.Nullable; -import java.security.Principal; -import java.util.Optional; -import java.util.UUID; - -@RestController -@EnableWebMvc -public class PetsController { - - private PetData petData; - - @Autowired - public PetsController(PetData data) { - petData = data; - } - - @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, @Nullable 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; - } - - @RequestMapping(path = "/pets/{petId}", method = RequestMethod.GET) - public Pet getPet(@RequestParam("petId") String petId) { - 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/samples/micronaut/pet-store/src/main/java/com/amazonaws/micronaut/demo/model/Pet.java b/samples/micronaut/pet-store/src/main/java/com/amazonaws/micronaut/demo/model/Pet.java deleted file mode 100644 index 3f0328ee5..000000000 --- a/samples/micronaut/pet-store/src/main/java/com/amazonaws/micronaut/demo/model/Pet.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance - * with the License. A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file 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 com.amazonaws.micronaut.demo.model; - -import com.fasterxml.jackson.annotation.JsonFormat; -import com.fasterxml.jackson.annotation.JsonProperty; -import io.micronaut.core.annotation.Introspected; - -import java.util.Date; - -@Introspected -public class Pet { - private String id; - private String breed; - private String name; - private Date dateOfBirth; - - @JsonProperty("petId") - 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; - } - - @JsonFormat(pattern = "YYYY-mm-dd") - public Date getDateOfBirth() { - return dateOfBirth; - } - - public void setDateOfBirth(Date dateOfBirth) { - this.dateOfBirth = dateOfBirth; - } -} diff --git a/samples/micronaut/pet-store/src/main/java/com/amazonaws/micronaut/demo/model/PetData.java b/samples/micronaut/pet-store/src/main/java/com/amazonaws/micronaut/demo/model/PetData.java deleted file mode 100644 index f7bc03c46..000000000 --- a/samples/micronaut/pet-store/src/main/java/com/amazonaws/micronaut/demo/model/PetData.java +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance - * with the License. A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file 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 com.amazonaws.micronaut.demo.model; - -import org.springframework.stereotype.Component; - -import java.util.*; -import java.util.concurrent.ThreadLocalRandom; - -@Component -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 List getBreeds() { - return breeds; - } - - public List getNames() { - return names; - } - - public String getRandomBreed() { - return breeds.get(ThreadLocalRandom.current().nextInt(0, breeds.size() - 1)); - } - - public String getRandomName() { - return names.get(ThreadLocalRandom.current().nextInt(0, names.size() - 1)); - } - - public 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/samples/micronaut/pet-store/src/main/resources/META-INF/native-image/graal.spring.demo/graal-spring-demo-application/native-image.properties b/samples/micronaut/pet-store/src/main/resources/META-INF/native-image/graal.spring.demo/graal-spring-demo-application/native-image.properties deleted file mode 100644 index fd9f904ee..000000000 --- a/samples/micronaut/pet-store/src/main/resources/META-INF/native-image/graal.spring.demo/graal-spring-demo-application/native-image.properties +++ /dev/null @@ -1,4 +0,0 @@ -Args = -H:IncludeResources=application.yml|log4j2.xml \ - -H:Name=server \ - -H:-AllowVMInspection \ - -H:Class=io.micronaut.function.aws.runtime.MicronautLambdaRuntime \ No newline at end of file diff --git a/samples/micronaut/pet-store/src/main/resources/application.yml b/samples/micronaut/pet-store/src/main/resources/application.yml deleted file mode 100644 index c16e60c1d..000000000 --- a/samples/micronaut/pet-store/src/main/resources/application.yml +++ /dev/null @@ -1,6 +0,0 @@ -micronaut: - application: - name: pet-store -jackson: - serialization: - indentOutput: true \ No newline at end of file diff --git a/samples/micronaut/pet-store/src/main/resources/logback.xml b/samples/micronaut/pet-store/src/main/resources/logback.xml deleted file mode 100644 index 6010eb523..000000000 --- a/samples/micronaut/pet-store/src/main/resources/logback.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - true - - - %cyan(%d{HH:mm:ss.SSS}) %gray([%thread]) %highlight(%-5level) %magenta(%logger{36}) - %msg%n - - - - - - - diff --git a/samples/quarkus/pet-store/README.md b/samples/quarkus/pet-store/README.md deleted file mode 100644 index 3ff1371d7..000000000 --- a/samples/quarkus/pet-store/README.md +++ /dev/null @@ -1,68 +0,0 @@ -# Quarkus Native Pet store example - -The [Quarkus framework](https://quarkus.io/) is compatible with Spring's annotations and makes it easy to use [GraalVM](https://www.graalvm.org/) to build application images into native binaries. Further, Micronaut includes builtin support for AWS Lambda. - -This demo application shows how to use Quarkus to compile our standard pet store example, using Spring annotations, into a native binary with GraalVM and execute it in AWS Lambda. To run this demo, you will need to have [Maven](https://maven.apache.org/) installed as well as [Docker](https://www.docker.com/) to build GraalVM native image. - -With all the pre-requisites installed including: - -* JDK 8 or above -* Maven 3.5.x - -You should be able to build a native image of the application by running mvn from the repository's root. - -```bash -$ mvn clean install -Pnative -``` - -The output of the build is a deployable zip called `function.zip` in the `target` folder. - -To run the lambda locally, you can utilize the SAM cli. This should start up the listeners in the `PetsController`, and you can test locally with your preferred http client. - -```bash -sam local start-api -t sam.native.yaml -``` - -For example, to test the GET /pets endpoint via curl: -```bash -curl localhost:3000/pets -``` - -You should see JSON output of pets. - -To deploy the application to AWS Lambda you can use the pre-configured `sam-native.yaml` file included in the repo. Using the AWS or SAM CLI, run the following commands: - -```bash -sam deploy -g -t sam.native.yaml -``` - -You should see the stack deployed successfully: - -```bash -Stack quarkus-sample-pet-store outputs: -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -OutputKey-Description OutputValue -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -PetStoreNativeApi - URL for application https://xxxxxxxxxx.execute-api.xx-xxxx-1.amazonaws.com/Prod/ -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - -Successfully created/updated stack - quarkus-sample-pet-store in xx-xxxx-1 - -``` - -Make a test request to the API endpoint using curl or your preferred http client. - -For example, to check the GET /pets endpoint via curl: -```bash -curl https://xxxxxxxxxx.execute-api.xx-xxxx-1.amazonaws.com/Prod/pets -``` - -Finally, there’s an environment variable that must be set for native GraalVM deployments. If you look at sam.native.yaml you’ll see this: - -```bash - Environment: - Variables: - DISABLE_SIGNAL_HANDLERS: true -``` - -This environment variable resolves some incompatibilites between GraalVM and the Amazon Lambda Custom Runtime environment. \ No newline at end of file diff --git a/samples/quarkus/pet-store/pom.xml b/samples/quarkus/pet-store/pom.xml deleted file mode 100644 index d13958adc..000000000 --- a/samples/quarkus/pet-store/pom.xml +++ /dev/null @@ -1,141 +0,0 @@ - - - 4.0.0 - com.amazonaws.serverless.sample - serverless-quarkus-example - 2.0-SNAPSHOT - - 3.8.1 - true - 17 - 17 - UTF-8 - UTF-8 - 1.0.1.Final - quarkus-universe-bom - io.quarkus - 1.0.1.Final - 2.22.1 - - - - - ${quarkus.platform.group-id} - ${quarkus.platform.artifact-id} - ${quarkus.platform.version} - pom - import - - - - - - io.quarkus - quarkus-resteasy - - - io.quarkus - quarkus-amazon-lambda-http - - - io.quarkus - quarkus-spring-web - - - io.quarkus - quarkus-junit5 - test - - - io.rest-assured - rest-assured - test - - - - - - io.quarkus - quarkus-maven-plugin - ${quarkus-plugin.version} - - - - build - - - - - - maven-compiler-plugin - ${compiler-plugin.version} - - - maven-surefire-plugin - ${surefire-plugin.version} - - - org.jboss.logmanager.LogManager - - - - - - - - native - - - native - - - - - - maven-failsafe-plugin - ${surefire-plugin.version} - - - - integration-test - verify - - - - ${project.build.directory}/${project.build.finalName}-runner - - - - - - - org.apache.maven.plugins - maven-assembly-plugin - 3.1.0 - - - zip-assembly - package - - single - - - function - - src/assembly/zip.xml - - false - false - - - - - - - - native - - - - diff --git a/samples/quarkus/pet-store/sam.native.yaml b/samples/quarkus/pet-store/sam.native.yaml deleted file mode 100644 index 54ca55d07..000000000 --- a/samples/quarkus/pet-store/sam.native.yaml +++ /dev/null @@ -1,36 +0,0 @@ - AWSTemplateFormatVersion: '2010-09-09' - Transform: AWS::Serverless-2016-10-31 - Description: AWS Serverless Quarkus HTTP - com.amazon.quarkus.demo::pet-store - Globals: - Api: - EndpointConfiguration: REGIONAL - BinaryMediaTypes: - - "*/*" - - Resources: - PetStoreNativeFunction: - Type: AWS::Serverless::Function - Properties: - Handler: not.used.in.provided.runtime - Runtime: provided - CodeUri: target/function.zip - MemorySize: 128 - Policies: AWSLambdaBasicExecutionRole - Tracing: Active - Timeout: 15 - Environment: - Variables: - DISABLE_SIGNAL_HANDLERS: true - Events: - GetResource: - Type: Api - Properties: - Path: /{proxy+} - Method: any - - Outputs: - PetStoreNativeApi: - Description: URL for application - Value: !Sub 'https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/' - Export: - Name: PetStoreNativeApi diff --git a/samples/quarkus/pet-store/src/assembly/zip.xml b/samples/quarkus/pet-store/src/assembly/zip.xml deleted file mode 100644 index ce2cb6421..000000000 --- a/samples/quarkus/pet-store/src/assembly/zip.xml +++ /dev/null @@ -1,17 +0,0 @@ - - lambda-package - - zip - - false - - - ${project.build.directory}${file.separator}${artifactId}-${version}-runner - / - bootstrap - 755 - - - diff --git a/samples/quarkus/pet-store/src/main/java/com/amazonaws/serverless/sample/quarkus/PetsController.java b/samples/quarkus/pet-store/src/main/java/com/amazonaws/serverless/sample/quarkus/PetsController.java deleted file mode 100644 index 571887850..000000000 --- a/samples/quarkus/pet-store/src/main/java/com/amazonaws/serverless/sample/quarkus/PetsController.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.amazonaws.serverless.sample.quarkus; - -import com.amazonaws.serverless.sample.quarkus.model.Pet; -import com.amazonaws.serverless.sample.quarkus.model.PetData; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; - -import java.util.Optional; -import java.util.UUID; - -@RestController -public class PetsController { - - private PetData petData; - - @Autowired - public PetsController(PetData data) { - petData = data; - } - - @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) { - 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; - } - - @RequestMapping(path = "/pets/{petId}", method = RequestMethod.GET) - public Pet getPet(@RequestParam("petId") String petId) { - 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/samples/quarkus/pet-store/src/main/java/com/amazonaws/serverless/sample/quarkus/model/Pet.java b/samples/quarkus/pet-store/src/main/java/com/amazonaws/serverless/sample/quarkus/model/Pet.java deleted file mode 100644 index 475213362..000000000 --- a/samples/quarkus/pet-store/src/main/java/com/amazonaws/serverless/sample/quarkus/model/Pet.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.amazonaws.serverless.sample.quarkus.model; - -import com.fasterxml.jackson.annotation.JsonFormat; -import com.fasterxml.jackson.annotation.JsonProperty; -import io.quarkus.runtime.annotations.RegisterForReflection; - -import java.util.Date; - -@RegisterForReflection -public class Pet { - private String id; - private String breed; - private String name; - private Date dateOfBirth; - - @JsonProperty("petId") - 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; - } - - @JsonFormat(pattern = "YYYY-mm-dd") - public Date getDateOfBirth() { - return dateOfBirth; - } - - public void setDateOfBirth(Date dateOfBirth) { - this.dateOfBirth = dateOfBirth; - } - -} diff --git a/samples/quarkus/pet-store/src/main/java/com/amazonaws/serverless/sample/quarkus/model/PetData.java b/samples/quarkus/pet-store/src/main/java/com/amazonaws/serverless/sample/quarkus/model/PetData.java deleted file mode 100644 index 90b837d0d..000000000 --- a/samples/quarkus/pet-store/src/main/java/com/amazonaws/serverless/sample/quarkus/model/PetData.java +++ /dev/null @@ -1,102 +0,0 @@ -package com.amazonaws.serverless.sample.quarkus.model; - -import org.springframework.stereotype.Component; - -import java.util.*; -import java.util.concurrent.ThreadLocalRandom; - -@Component -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 List getBreeds() { - return breeds; - } - - public List getNames() { - return names; - } - - public String getRandomBreed() { - return breeds.get(ThreadLocalRandom.current().nextInt(0, breeds.size() - 1)); - } - - public String getRandomName() { - return names.get(ThreadLocalRandom.current().nextInt(0, names.size() - 1)); - } - - public 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/samples/quarkus/pet-store/src/main/resources/application.properties b/samples/quarkus/pet-store/src/main/resources/application.properties deleted file mode 100644 index ee9b09c98..000000000 --- a/samples/quarkus/pet-store/src/main/resources/application.properties +++ /dev/null @@ -1,4 +0,0 @@ -quarkus.native.container-build=true -quarkus.native.container-runtime=docker -quarkus.native.builder-image=quay.io/quarkus/ubi-quarkus-native-image:19.2.1 -quarkus.log.level=INFO \ No newline at end of file From d0fc7b564d3278896d26af85d4c301c45a9f3e7c Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 19 May 2023 06:04:58 +0200 Subject: [PATCH 370/888] chore(deps): Update Spring dependencies (framework to 6.0.9, security to 6.1.0, boot to 3.1.0) --- aws-serverless-java-container-core/pom.xml | 2 +- aws-serverless-java-container-spring/pom.xml | 4 ++-- aws-serverless-java-container-springboot3/pom.xml | 6 +++--- .../src/main/resources/archetype-resources/build.gradle | 4 ++-- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/spring/pet-store/build.gradle | 4 ++-- samples/spring/pet-store/pom.xml | 2 +- samples/springboot3/pet-store/build.gradle | 2 +- samples/springboot3/pet-store/pom.xml | 2 +- 11 files changed, 16 insertions(+), 16 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index a530a49c6..9b0a5f4b2 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -122,7 +122,7 @@ org.springframework.security spring-security-web - 6.0.3 + 6.1.0 test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index fd0425b4f..f4eb8376a 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -16,8 +16,8 @@ - 6.0.8 - 6.0.3 + 6.0.9 + 6.1.0 diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index 27aa39496..a36ebb3a3 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -15,9 +15,9 @@ 2.0-SNAPSHOT - 6.0.8 - 3.0.6 - 6.0.3 + 6.0.9 + 3.1.0 + 6.1.0 diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index 65aad2359..713a3cdf5 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -7,8 +7,8 @@ repositories { dependencies { implementation ( - 'org.springframework:spring-webmvc:6.0.8', - 'org.springframework:spring-context:6.0.8', + 'org.springframework:spring-webmvc:6.0.9', + 'org.springframework:spring-context:6.0.9', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[2.0-SNAPSHOT,)', 'org.apache.logging.log4j:log4j-core:2.20.0', 'org.apache.logging.log4j:log4j-api:2.20.0', diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index 3e27a514e..16b928407 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 1.8 - 6.0.8 + 6.0.9 4.13.2 2.20.0 diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle index 45e6ba1b2..f5f769dc6 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle @@ -8,7 +8,7 @@ repositories { dependencies { implementation ( - 'org.springframework.boot:spring-boot-starter-web:3.0.6', + 'org.springframework.boot:spring-boot-starter-web:3.1.0', 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:[2.0-SNAPSHOT,)', ) diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml index ffbb37fcf..ddb9fdb45 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ org.springframework.boot spring-boot-starter-parent - 3.0.6 + 3.1.0 diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index de5a543b6..124c92539 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -7,8 +7,8 @@ repositories { dependencies { implementation ( - 'org.springframework:spring-webmvc:6.0.8', - 'org.springframework:spring-context:6.0.8', + 'org.springframework:spring-webmvc:6.0.9', + 'org.springframework:spring-context:6.0.9', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[2.0-SNAPSHOT,)', 'org.apache.logging.log4j:log4j-core:2.20.0', 'org.apache.logging.log4j:log4j-api:2.20.0', diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index 6500914f6..c08616f6e 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -24,7 +24,7 @@ - 6.0.8 + 6.0.9 4.13.2 2.20.0 17 diff --git a/samples/springboot3/pet-store/build.gradle b/samples/springboot3/pet-store/build.gradle index fe2712924..763fbea9e 100644 --- a/samples/springboot3/pet-store/build.gradle +++ b/samples/springboot3/pet-store/build.gradle @@ -8,7 +8,7 @@ repositories { dependencies { implementation ( - implementation('org.springframework.boot:spring-boot-starter-web:3.0.6') { + implementation('org.springframework.boot:spring-boot-starter-web:3.1.0') { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat' }, 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:[2.0-SNAPSHOT,)', diff --git a/samples/springboot3/pet-store/pom.xml b/samples/springboot3/pet-store/pom.xml index 69445d349..85c31455b 100644 --- a/samples/springboot3/pet-store/pom.xml +++ b/samples/springboot3/pet-store/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 3.0.6 + 3.1.0 From 660dd8dbf88298bf31cc604b574ac283f2558fa2 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 19 May 2023 06:28:56 +0200 Subject: [PATCH 371/888] fix: remove symphonia-logging for now as it is no longer maintained (#496) --- .../src/main/resources/archetype-resources/build.gradle | 1 - samples/jersey/pet-store/build.gradle | 1 - samples/jersey/pet-store/pom.xml | 7 ------- samples/spark/pet-store/build.gradle | 1 - samples/spark/pet-store/pom.xml | 7 ------- samples/springboot3/pet-store/build.gradle | 1 - samples/springboot3/pet-store/pom.xml | 7 ------- 7 files changed, 25 deletions(-) diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle index 73adc7fed..b7d4672b6 100644 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle @@ -10,7 +10,6 @@ dependencies { 'com.sparkjava:spark-core:2.9.4', 'com.amazonaws.serverless:aws-serverless-java-container-spark:[1.0,)', 'com.fasterxml.jackson.core:jackson-databind:2.15.0', - 'io.symphonia:lambda-logging:1.0.3' ) testImplementation("junit:junit:4.13.2") diff --git a/samples/jersey/pet-store/build.gradle b/samples/jersey/pet-store/build.gradle index 6ff7cdd10..d12cb4226 100644 --- a/samples/jersey/pet-store/build.gradle +++ b/samples/jersey/pet-store/build.gradle @@ -9,7 +9,6 @@ dependencies { implementation ( 'com.amazonaws.serverless:aws-serverless-java-container-jersey:[2.0-SNAPSHOT,)', 'com.fasterxml.jackson.core:jackson-databind:2.15.0', - 'io.symphonia:lambda-logging:1.0.3' ) implementation("org.glassfish.jersey.media:jersey-media-json-jackson:3.1.1") { diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index 487499845..86c8eef6c 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -75,13 +75,6 @@ ${jackson.version} - - - io.symphonia - lambda-logging - 1.0.3 - - diff --git a/samples/spark/pet-store/build.gradle b/samples/spark/pet-store/build.gradle index 78b700c35..69b1ccf94 100644 --- a/samples/spark/pet-store/build.gradle +++ b/samples/spark/pet-store/build.gradle @@ -10,7 +10,6 @@ dependencies { 'com.sparkjava:spark-core:2.9.4', 'com.amazonaws.serverless:aws-serverless-java-container-spark:[1.0,)', 'com.fasterxml.jackson.core:jackson-databind:2.15.0', - 'io.symphonia:lambda-logging:1.0.3' ) } diff --git a/samples/spark/pet-store/pom.xml b/samples/spark/pet-store/pom.xml index e2bbd2280..99e63df53 100644 --- a/samples/spark/pet-store/pom.xml +++ b/samples/spark/pet-store/pom.xml @@ -50,13 +50,6 @@ jackson-databind ${jackson.version} - - - - io.symphonia - lambda-logging - 1.0.3 - diff --git a/samples/springboot3/pet-store/build.gradle b/samples/springboot3/pet-store/build.gradle index 763fbea9e..eed20ae1a 100644 --- a/samples/springboot3/pet-store/build.gradle +++ b/samples/springboot3/pet-store/build.gradle @@ -12,7 +12,6 @@ dependencies { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat' }, 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:[2.0-SNAPSHOT,)', - 'io.symphonia:lambda-logging:1.0.3' ) testImplementation("junit:junit") } diff --git a/samples/springboot3/pet-store/pom.xml b/samples/springboot3/pet-store/pom.xml index 85c31455b..b58483d77 100644 --- a/samples/springboot3/pet-store/pom.xml +++ b/samples/springboot3/pet-store/pom.xml @@ -45,13 +45,6 @@ aws-serverless-java-container-springboot3 [2.0-SNAPSHOT,) - - - - io.symphonia - lambda-logging - 1.0.3 - From 34a922fac121dafa193768a762b586a5d783f40d Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 19 May 2023 06:49:37 +0200 Subject: [PATCH 372/888] chore: cleanup Gradle files --- .../src/main/resources/archetype-resources/build.gradle | 1 - samples/springboot3/pet-store/build.gradle | 2 -- 2 files changed, 3 deletions(-) diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle index f5f769dc6..460f0f33f 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle @@ -1,7 +1,6 @@ apply plugin: 'java' repositories { - jcenter() mavenLocal() mavenCentral() } diff --git a/samples/springboot3/pet-store/build.gradle b/samples/springboot3/pet-store/build.gradle index eed20ae1a..216fc83ec 100644 --- a/samples/springboot3/pet-store/build.gradle +++ b/samples/springboot3/pet-store/build.gradle @@ -1,7 +1,6 @@ apply plugin: 'java' repositories { - jcenter() mavenLocal() mavenCentral() } @@ -13,7 +12,6 @@ dependencies { }, 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:[2.0-SNAPSHOT,)', ) - testImplementation("junit:junit") } task buildZip(type: Zip) { From f51f957df0f0160932eb4e525cb81feb6e285f28 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 19 May 2023 06:53:28 +0200 Subject: [PATCH 373/888] feat: Support Jakarta EE along with Spring Boot 3 support - java17 runtime should be used --- .../src/main/resources/archetype-resources/template.yml | 2 +- .../src/main/resources/archetype-resources/template.yml | 2 +- .../src/main/resources/archetype-resources/template.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/template.yml b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/template.yml index e6e7e59b3..d8c3cca35 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/template.yml +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/template.yml @@ -32,7 +32,7 @@ Resources: Type: AWS::Serverless::Function Properties: Handler: ${groupId}.StreamLambdaHandler::handleRequest - Runtime: java11 + Runtime: java17 CodeUri: . MemorySize: 512 Policies: AWSLambdaBasicExecutionRole diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/template.yml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/template.yml index 1c919d023..ec933bc7f 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/template.yml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/template.yml @@ -32,7 +32,7 @@ Resources: Type: AWS::Serverless::Function Properties: Handler: ${groupId}.StreamLambdaHandler::handleRequest - Runtime: java11 + Runtime: java17 CodeUri: . MemorySize: 512 Policies: AWSLambdaBasicExecutionRole diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/template.yml b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/template.yml index 8d8e0946a..183b64d24 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/template.yml +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/template.yml @@ -32,7 +32,7 @@ Resources: Type: AWS::Serverless::Function Properties: Handler: ${groupId}.StreamLambdaHandler::handleRequest - Runtime: java11 + Runtime: java17 CodeUri: . MemorySize: 512 Policies: AWSLambdaBasicExecutionRole From 79cf55d470edfdbcc6fd03cce65e0dfdbcdfc960 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 19 May 2023 08:19:34 +0200 Subject: [PATCH 374/888] test: move some testutil classes to test-jar (related to #394) --- aws-serverless-java-container-core/pom.xml | 16 +++++++++++++--- .../testutils/AwsProxyRequestBuilder.java | 0 .../testutils/MockLambdaConsoleLogger.java | 0 .../internal/testutils/MockLambdaContext.java | 0 .../proxy/internal/testutils/MockServlet.java | 0 aws-serverless-java-container-jersey/pom.xml | 8 ++++++++ aws-serverless-java-container-spring/pom.xml | 8 ++++++++ .../pom.xml | 8 ++++++++ .../resources/archetype-resources/build.gradle | 1 + .../main/resources/archetype-resources/pom.xml | 10 +++++++++- .../resources/archetype-resources/build.gradle | 1 + .../main/resources/archetype-resources/pom.xml | 12 ++++++++++-- .../resources/archetype-resources/build.gradle | 1 + .../main/resources/archetype-resources/pom.xml | 8 ++++++++ .../resources/archetype-resources/build.gradle | 1 + .../main/resources/archetype-resources/pom.xml | 10 +++++++++- .../resources/archetype-resources/build.gradle | 1 + .../main/resources/archetype-resources/pom.xml | 8 ++++++++ 18 files changed, 86 insertions(+), 7 deletions(-) rename aws-serverless-java-container-core/src/{main => test}/java/com/amazonaws/serverless/proxy/internal/testutils/AwsProxyRequestBuilder.java (100%) rename aws-serverless-java-container-core/src/{main => test}/java/com/amazonaws/serverless/proxy/internal/testutils/MockLambdaConsoleLogger.java (100%) rename aws-serverless-java-container-core/src/{main => test}/java/com/amazonaws/serverless/proxy/internal/testutils/MockLambdaContext.java (100%) rename aws-serverless-java-container-core/src/{main => test}/java/com/amazonaws/serverless/proxy/internal/testutils/MockServlet.java (100%) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 9b0a5f4b2..f4c89c4e2 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -115,9 +115,7 @@ org.apache.httpcomponents.core5 httpcore5 5.2.1 - compile - true + test org.springframework.security @@ -129,6 +127,18 @@ + + org.apache.maven.plugins + maven-jar-plugin + 3.3.0 + + + + test-jar + + + + org.apache.maven.plugins maven-surefire-plugin diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/testutils/AwsProxyRequestBuilder.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/testutils/AwsProxyRequestBuilder.java similarity index 100% rename from aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/testutils/AwsProxyRequestBuilder.java rename to aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/testutils/AwsProxyRequestBuilder.java diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/testutils/MockLambdaConsoleLogger.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/testutils/MockLambdaConsoleLogger.java similarity index 100% rename from aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/testutils/MockLambdaConsoleLogger.java rename to aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/testutils/MockLambdaConsoleLogger.java diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/testutils/MockLambdaContext.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/testutils/MockLambdaContext.java similarity index 100% rename from aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/testutils/MockLambdaContext.java rename to aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/testutils/MockLambdaContext.java diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/testutils/MockServlet.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/testutils/MockServlet.java similarity index 100% rename from aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/testutils/MockServlet.java rename to aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/testutils/MockServlet.java diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index e94af8030..5467c1ed5 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -32,6 +32,14 @@ + + com.amazonaws.serverless + aws-serverless-java-container-core + 2.0-SNAPSHOT + tests + test-jar + test + diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index f4eb8376a..8ce88a59e 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -27,6 +27,14 @@ aws-serverless-java-container-core 2.0-SNAPSHOT + + com.amazonaws.serverless + aws-serverless-java-container-core + 2.0-SNAPSHOT + tests + test-jar + test + diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index a36ebb3a3..f358dd8fb 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -27,6 +27,14 @@ aws-serverless-java-container-core 2.0-SNAPSHOT + + com.amazonaws.serverless + aws-serverless-java-container-core + 2.0-SNAPSHOT + tests + test-jar + test + org.springframework spring-webflux diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle index 4f7bda47e..0421ac5b0 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle @@ -21,6 +21,7 @@ dependencies { exclude group: 'javax.inject', module: "javax.inject" } + testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") testImplementation("junit:junit:4.13.2") } diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml index 5fa0be4f9..738639ce7 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml @@ -25,6 +25,14 @@ aws-serverless-java-container-jersey ${project.version} + + com.amazonaws.serverless + aws-serverless-java-container-core + ${project.version} + tests + test-jar + test + org.glassfish.jersey.media @@ -68,7 +76,7 @@ junit junit - 4.12 + 4.13.2 test diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle index b7d4672b6..420550dd8 100644 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle @@ -12,6 +12,7 @@ dependencies { 'com.fasterxml.jackson.core:jackson-databind:2.15.0', ) + testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") testImplementation("junit:junit:4.13.2") } diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml index 5e9ea5e33..3c4910a5d 100644 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml @@ -17,7 +17,7 @@ 1.8 1.8 2.15.0 - 2.9.1 + 2.9.4 @@ -26,6 +26,14 @@ aws-serverless-java-container-spark ${project.version} + + com.amazonaws.serverless + aws-serverless-java-container-core + ${project.version} + tests + test-jar + test + com.sparkjava @@ -42,7 +50,7 @@ junit junit - 4.12 + 4.13.2 test diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index 713a3cdf5..89d2e99aa 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -17,6 +17,7 @@ dependencies { 'com.amazonaws:aws-lambda-java-log4j2:1.5.1', ) + testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") testImplementation("junit:junit:4.13.2") } diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index 16b928407..f3f283cfa 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -27,6 +27,14 @@ aws-serverless-java-container-spring ${project.version} + + com.amazonaws.serverless + aws-serverless-java-container-core + ${project.version} + tests + test-jar + test + org.springframework diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle index 460f0f33f..2c8bf5ca1 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle @@ -11,6 +11,7 @@ dependencies { 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:[2.0-SNAPSHOT,)', ) + testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") testImplementation("junit:junit:4.13.2") } diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml index ddb9fdb45..9bb3ee083 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml @@ -29,6 +29,14 @@ aws-serverless-java-container-springboot3 ${project.version} + + com.amazonaws.serverless + aws-serverless-java-container-core + ${project.version} + tests + test-jar + test + org.springframework.boot @@ -44,7 +52,7 @@ junit junit - 4.12 + 4.13.2 test diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle index ebd3b1b67..0ff8c3a13 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle @@ -41,6 +41,7 @@ dependencies { implementation ('org.apache.logging.log4j:log4j-slf4j-impl:2.20.0') implementation ('com.amazonaws:aws-lambda-java-log4j2:1.5.1') + testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") testImplementation('junit:junit:4.13.2') testImplementation('org.apache.struts:struts2-junit-plugin:6.1.2') { exclude group: 'org.apache.struts', module: 'struts2-core' diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml index 8029323dd..8bce22dfd 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml @@ -27,6 +27,14 @@ aws-serverless-java-container-struts ${project.version} + + com.amazonaws.serverless + aws-serverless-java-container-core + ${project.version} + tests + test-jar + test + org.apache.struts From 1792d599baef22d06149b809544995132012cb76 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 19 May 2023 09:14:13 +0200 Subject: [PATCH 375/888] chore: cleanup pom files --- aws-serverless-java-container-core/pom.xml | 21 -------------------- aws-serverless-java-container-jersey/pom.xml | 5 ----- aws-serverless-java-container-spark/pom.xml | 1 - aws-serverless-java-container-spring/pom.xml | 3 --- aws-serverless-java-container-struts/pom.xml | 1 - pom.xml | 4 ---- samples/spark/pet-store/pom.xml | 2 -- 7 files changed, 37 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index f4c89c4e2..23fe75c56 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -36,35 +36,30 @@ - com.amazonaws aws-lambda-java-core 1.2.2 - jakarta.servlet jakarta.servlet-api ${servlet.version} - jakarta.ws.rs jakarta.ws.rs-api ${jaxrs.version} - com.fasterxml.jackson.core jackson-databind ${jackson.version} - com.fasterxml.jackson.module jackson-module-afterburner @@ -82,7 +77,6 @@ 2.0.1 - org.apache.httpcomponents httpmime @@ -96,21 +90,6 @@ 5.2.1 test - - org.junit.jupiter - junit-jupiter-api - test - - - org.junit.jupiter - junit-jupiter-engine - test - - - org.junit.jupiter - junit-jupiter-params - test - org.apache.httpcomponents.core5 httpcore5 diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index 5467c1ed5..f7f7476de 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -41,7 +41,6 @@ test - org.glassfish.jersey.core jersey-server @@ -62,7 +61,6 @@ - commons-codec commons-codec @@ -70,7 +68,6 @@ test - com.fasterxml.jackson.core jackson-databind @@ -79,7 +76,6 @@ test - org.glassfish.jersey.media jersey-media-json-jackson @@ -113,7 +109,6 @@ junit-jupiter test - jakarta.ws.rs jakarta.ws.rs-api diff --git a/aws-serverless-java-container-spark/pom.xml b/aws-serverless-java-container-spark/pom.xml index f5ea6b868..90ce0e273 100644 --- a/aws-serverless-java-container-spark/pom.xml +++ b/aws-serverless-java-container-spark/pom.xml @@ -27,7 +27,6 @@ 1.10-SNAPSHOT - com.sparkjava spark-core diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 8ce88a59e..d5fe921ed 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -36,7 +36,6 @@ test - org.springframework spring-webmvc @@ -44,7 +43,6 @@ true - org.springframework spring-test @@ -52,7 +50,6 @@ test - commons-codec commons-codec diff --git a/aws-serverless-java-container-struts/pom.xml b/aws-serverless-java-container-struts/pom.xml index 1c628e943..30e68b0b1 100644 --- a/aws-serverless-java-container-struts/pom.xml +++ b/aws-serverless-java-container-struts/pom.xml @@ -57,7 +57,6 @@ - commons-codec commons-codec diff --git a/pom.xml b/pom.xml index f885a41ff..e5cfc7d6d 100644 --- a/pom.xml +++ b/pom.xml @@ -87,7 +87,6 @@ - org.junit.jupiter junit-jupiter-api @@ -104,14 +103,12 @@ test - org.slf4j slf4j-api ${slf4j.version} - org.slf4j slf4j-simple @@ -119,7 +116,6 @@ test - org.mockito mockito-core diff --git a/samples/spark/pet-store/pom.xml b/samples/spark/pet-store/pom.xml index 99e63df53..5eef72f4f 100644 --- a/samples/spark/pet-store/pom.xml +++ b/samples/spark/pet-store/pom.xml @@ -37,14 +37,12 @@ [1.6,) - com.sparkjava spark-core ${spark.version} - com.fasterxml.jackson.core jackson-databind From 48784a1f10eb28ef52a86b6af4d0a835f9c201e7 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 19 May 2023 09:59:43 +0200 Subject: [PATCH 376/888] chore(deps): Update Jackson dependency to 2.15.1 --- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/build.gradle | 4 ++-- .../src/main/resources/archetype-resources/pom.xml | 2 +- pom.xml | 2 +- samples/jersey/pet-store/build.gradle | 2 +- samples/jersey/pet-store/pom.xml | 2 +- samples/spark/pet-store/build.gradle | 2 +- samples/spark/pet-store/pom.xml | 2 +- samples/spring/pet-store/build.gradle | 2 +- samples/struts/pet-store/build.gradle | 4 ++-- samples/struts/pet-store/pom.xml | 2 +- 15 files changed, 17 insertions(+), 17 deletions(-) diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle index 0421ac5b0..8dc113dd2 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle @@ -8,7 +8,7 @@ repositories { dependencies { implementation ( 'com.amazonaws.serverless:aws-serverless-java-container-jersey:[2.0-SNAPSHOT,)', - 'com.fasterxml.jackson.core:jackson-databind:2.15.0', + 'com.fasterxml.jackson.core:jackson-databind:2.15.1', ) implementation("org.glassfish.jersey.media:jersey-media-json-jackson:3.1.1") { diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml index 738639ce7..74148382c 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 3.1.1 - 2.15.0 + 2.15.1 diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle index 420550dd8..3cd7c716c 100644 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle @@ -9,7 +9,7 @@ dependencies { implementation ( 'com.sparkjava:spark-core:2.9.4', 'com.amazonaws.serverless:aws-serverless-java-container-spark:[1.0,)', - 'com.fasterxml.jackson.core:jackson-databind:2.15.0', + 'com.fasterxml.jackson.core:jackson-databind:2.15.1', ) testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml index 3c4910a5d..a09d35556 100644 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 1.8 - 2.15.0 + 2.15.1 2.9.4 diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index 89d2e99aa..693cd2ab0 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -13,7 +13,7 @@ dependencies { 'org.apache.logging.log4j:log4j-core:2.20.0', 'org.apache.logging.log4j:log4j-api:2.20.0', 'org.apache.logging.log4j:log4j-slf4j-impl:2.20.0', - 'com.fasterxml.jackson.core:jackson-databind:2.15.0', + 'com.fasterxml.jackson.core:jackson-databind:2.15.1', 'com.amazonaws:aws-lambda-java-log4j2:1.5.1', ) diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle index 0ff8c3a13..6e3237854 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle @@ -34,8 +34,8 @@ dependencies { exclude group: 'org.apache.logging.log4j', module: 'log4j-api' } implementation ('org.hibernate.validator:hibernate-validator:6.1.7.Final') - implementation ('com.fasterxml.jackson.core:jackson-databind:2.15.0') - implementation ('com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.15.0') + implementation ('com.fasterxml.jackson.core:jackson-databind:2.15.1') + implementation ('com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.15.1') implementation ('org.apache.logging.log4j:log4j-core:2.20.0') implementation ('org.apache.logging.log4j:log4j-api:2.20.0') implementation ('org.apache.logging.log4j:log4j-slf4j-impl:2.20.0') diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml index 8bce22dfd..e26888928 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 1.8 6.1.2 - 2.15.0 + 2.15.1 4.13.2 2.20.0 diff --git a/pom.xml b/pom.xml index e5cfc7d6d..48536ab5e 100644 --- a/pom.xml +++ b/pom.xml @@ -78,7 +78,7 @@ 0.7 8.2.1 - 2.15.0 + 2.15.1 2.0.7 5.9.3 5.3.1 diff --git a/samples/jersey/pet-store/build.gradle b/samples/jersey/pet-store/build.gradle index d12cb4226..64562ddd1 100644 --- a/samples/jersey/pet-store/build.gradle +++ b/samples/jersey/pet-store/build.gradle @@ -8,7 +8,7 @@ repositories { dependencies { implementation ( 'com.amazonaws.serverless:aws-serverless-java-container-jersey:[2.0-SNAPSHOT,)', - 'com.fasterxml.jackson.core:jackson-databind:2.15.0', + 'com.fasterxml.jackson.core:jackson-databind:2.15.1', ) implementation("org.glassfish.jersey.media:jersey-media-json-jackson:3.1.1") { diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index 86c8eef6c..3fb17ea55 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -27,7 +27,7 @@ 1.8 1.8 3.1.1 - 2.15.0 + 2.15.1 diff --git a/samples/spark/pet-store/build.gradle b/samples/spark/pet-store/build.gradle index 69b1ccf94..840e71163 100644 --- a/samples/spark/pet-store/build.gradle +++ b/samples/spark/pet-store/build.gradle @@ -9,7 +9,7 @@ dependencies { implementation ( 'com.sparkjava:spark-core:2.9.4', 'com.amazonaws.serverless:aws-serverless-java-container-spark:[1.0,)', - 'com.fasterxml.jackson.core:jackson-databind:2.15.0', + 'com.fasterxml.jackson.core:jackson-databind:2.15.1', ) } diff --git a/samples/spark/pet-store/pom.xml b/samples/spark/pet-store/pom.xml index 5eef72f4f..dc49e00ee 100644 --- a/samples/spark/pet-store/pom.xml +++ b/samples/spark/pet-store/pom.xml @@ -26,7 +26,7 @@ 1.8 1.8 - 2.15.0 + 2.15.1 2.9.1 diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index 124c92539..f92b56bc7 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -13,7 +13,7 @@ dependencies { 'org.apache.logging.log4j:log4j-core:2.20.0', 'org.apache.logging.log4j:log4j-api:2.20.0', 'org.apache.logging.log4j:log4j-slf4j-impl:2.20.0', - 'com.fasterxml.jackson.core:jackson-databind:2.15.0', + 'com.fasterxml.jackson.core:jackson-databind:2.15.1', 'com.amazonaws:aws-lambda-java-log4j2:1.5.1', ) } diff --git a/samples/struts/pet-store/build.gradle b/samples/struts/pet-store/build.gradle index 2daa12596..a146276a8 100644 --- a/samples/struts/pet-store/build.gradle +++ b/samples/struts/pet-store/build.gradle @@ -22,8 +22,8 @@ dependencies { 'org.hibernate.validator:hibernate-validator:6.1.7.Final', 'org.glassfish:javax.el:3.0.0', 'javax.el:javax.el-api:3.0.0', - 'com.fasterxml.jackson.core:jackson-databind:2.15.0', - 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.15.0', + 'com.fasterxml.jackson.core:jackson-databind:2.15.1', + 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.15.1', 'org.apache.logging.log4j:log4j-core:2.20.0', 'org.apache.logging.log4j:log4j-api:2.20.0', 'com.amazonaws:aws-lambda-java-log4j2:1.5.1', diff --git a/samples/struts/pet-store/pom.xml b/samples/struts/pet-store/pom.xml index 58d630fc5..1ec2bb4a9 100644 --- a/samples/struts/pet-store/pom.xml +++ b/samples/struts/pet-store/pom.xml @@ -27,7 +27,7 @@ 1.8 1.8 6.1.2 - 2.15.0 + 2.15.1 4.13.2 2.20.0 From 127333144998c5a23bc48551d29e02012ab9ea12 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 19 May 2023 10:31:02 +0200 Subject: [PATCH 377/888] chore(deps): Update Jersey dependency to 3.1.2 --- aws-serverless-java-container-jersey/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 4 ++-- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/jersey/pet-store/build.gradle | 4 ++-- samples/jersey/pet-store/pom.xml | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index f7f7476de..d8645134a 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -16,7 +16,7 @@ - 3.1.1 + 3.1.2 diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle index 8dc113dd2..bf493c5bb 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle @@ -11,13 +11,13 @@ dependencies { 'com.fasterxml.jackson.core:jackson-databind:2.15.1', ) - implementation("org.glassfish.jersey.media:jersey-media-json-jackson:3.1.1") { + implementation("org.glassfish.jersey.media:jersey-media-json-jackson:3.1.2") { exclude group: 'com.fasterxml.jackson.core', module: "jackson-annotations" exclude group: 'com.fasterxml.jackson.core', module: "jackson-databind" exclude group: 'com.fasterxml.jackson.core', module: "jackson-core" } - implementation("org.glassfish.jersey.inject:jersey-hk2:3.1.1") { + implementation("org.glassfish.jersey.inject:jersey-hk2:3.1.2") { exclude group: 'javax.inject', module: "javax.inject" } diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml index 74148382c..8dde5e32f 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml @@ -15,7 +15,7 @@ 1.8 1.8 - 3.1.1 + 3.1.2 2.15.1 diff --git a/samples/jersey/pet-store/build.gradle b/samples/jersey/pet-store/build.gradle index 64562ddd1..bc4742cd8 100644 --- a/samples/jersey/pet-store/build.gradle +++ b/samples/jersey/pet-store/build.gradle @@ -11,13 +11,13 @@ dependencies { 'com.fasterxml.jackson.core:jackson-databind:2.15.1', ) - implementation("org.glassfish.jersey.media:jersey-media-json-jackson:3.1.1") { + implementation("org.glassfish.jersey.media:jersey-media-json-jackson:3.1.2") { exclude group: 'com.fasterxml.jackson.core', module: "jackson-annotations" exclude group: 'com.fasterxml.jackson.core', module: "jackson-databind" exclude group: 'com.fasterxml.jackson.core', module: "jackson-core" } - implementation("org.glassfish.jersey.inject:jersey-hk2:3.1.1") { + implementation("org.glassfish.jersey.inject:jersey-hk2:3.1.2") { exclude group: 'javax.inject', module: "javax.inject" } } diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index 3fb17ea55..585fb9d2e 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -26,7 +26,7 @@ 1.8 1.8 - 3.1.1 + 3.1.2 2.15.1 From c95180d8dd0aef5af3235462d073738566b5eed6 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 19 May 2023 10:56:42 +0200 Subject: [PATCH 378/888] chore: Maven plugin updates --- aws-serverless-java-container-core/pom.xml | 3 +- aws-serverless-java-container-jersey/pom.xml | 3 +- aws-serverless-java-container-spark/pom.xml | 3 +- aws-serverless-java-container-spring/pom.xml | 3 +- .../pom.xml | 3 +- aws-serverless-java-container-struts/pom.xml | 1 - pom.xml | 42 ++++++++++++++++++- 7 files changed, 46 insertions(+), 12 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 23fe75c56..3f8ba0819 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -121,9 +121,8 @@ org.apache.maven.plugins maven-surefire-plugin - 2.22.2 - always + false diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index d8645134a..eccc0fb07 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -166,9 +166,8 @@ org.apache.maven.plugins maven-surefire-plugin - 2.22.2 - always + false diff --git a/aws-serverless-java-container-spark/pom.xml b/aws-serverless-java-container-spark/pom.xml index 90ce0e273..7243a43d9 100644 --- a/aws-serverless-java-container-spark/pom.xml +++ b/aws-serverless-java-container-spark/pom.xml @@ -88,9 +88,8 @@ org.apache.maven.plugins maven-surefire-plugin - 2.22.2 - always + false diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index d5fe921ed..f5f539091 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -209,9 +209,8 @@ org.apache.maven.plugins maven-surefire-plugin - 2.22.2 - always + false diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index f358dd8fb..87cf8d7e9 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -239,9 +239,8 @@ org.apache.maven.plugins maven-surefire-plugin - 2.22.2 - always + false diff --git a/aws-serverless-java-container-struts/pom.xml b/aws-serverless-java-container-struts/pom.xml index 30e68b0b1..73a174c6c 100644 --- a/aws-serverless-java-container-struts/pom.xml +++ b/aws-serverless-java-container-struts/pom.xml @@ -161,7 +161,6 @@ org.apache.maven.plugins maven-surefire-plugin - 2.22.2 false diff --git a/pom.xml b/pom.xml index 48536ab5e..5dc367525 100644 --- a/pom.xml +++ b/pom.xml @@ -151,6 +151,12 @@ + + + org.apache.maven.plugins + maven-enforcer-plugin + + @@ -163,6 +169,9 @@ + + 3.6 + @@ -174,6 +183,7 @@ org.apache.maven.plugins maven-compiler-plugin + 3.11.0 1.8 1.8 @@ -186,10 +196,40 @@ maven-javadoc-plugin 3.5.0 - + + org.apache.maven.plugins + maven-surefire-plugin + 3.0.0 + + + org.apache.maven.plugins + maven-clean-plugin + 3.2.0 + + + org.apache.maven.plugins + maven-jar-plugin + 3.3.0 + + + org.apache.maven.plugins + maven-resources-plugin + 3.3.1 + + + org.apache.maven.plugins + maven-deploy-plugin + 3.1.1 + + + org.apache.maven.plugins + maven-install-plugin + 3.1.1 + org.apache.maven.plugins maven-release-plugin + 3.0.0 clean verify install true From 0601ce7438400594e05b16ecce376952b7860317 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 19 May 2023 11:02:01 +0200 Subject: [PATCH 379/888] chore: remove old OWASP suppressions --- aws-serverless-java-container-core/pom.xml | 3 -- aws-serverless-java-container-jersey/pom.xml | 3 -- aws-serverless-java-container-spark/pom.xml | 3 -- aws-serverless-java-container-spring/pom.xml | 3 -- .../pom.xml | 3 -- aws-serverless-java-container-struts/pom.xml | 3 -- owasp-suppression.xml | 35 ------------------- 7 files changed, 53 deletions(-) delete mode 100644 owasp-suppression.xml diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 3f8ba0819..ff6e4b710 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -193,9 +193,6 @@ ${dependencyCheck.version} true - - ${project.basedir}/../owasp-suppression.xml - 7 false diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index eccc0fb07..4ae4c7320 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -192,9 +192,6 @@ ${dependencyCheck.version} true - - ${project.basedir}/../owasp-suppression.xml - 7 false diff --git a/aws-serverless-java-container-spark/pom.xml b/aws-serverless-java-container-spark/pom.xml index 7243a43d9..3a5547ea5 100644 --- a/aws-serverless-java-container-spark/pom.xml +++ b/aws-serverless-java-container-spark/pom.xml @@ -114,9 +114,6 @@ ${dependencyCheck.version} true - - ${project.basedir}/../owasp-suppression.xml - 7 false diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index f5f539091..b83b4742b 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -235,9 +235,6 @@ ${dependencyCheck.version} true - - ${project.basedir}/../owasp-suppression.xml - 7 false diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index 87cf8d7e9..5349fc532 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -265,9 +265,6 @@ ${dependencyCheck.version} true - - ${project.basedir}/../owasp-suppression.xml - 7 false diff --git a/aws-serverless-java-container-struts/pom.xml b/aws-serverless-java-container-struts/pom.xml index 73a174c6c..ee1784d78 100644 --- a/aws-serverless-java-container-struts/pom.xml +++ b/aws-serverless-java-container-struts/pom.xml @@ -187,9 +187,6 @@ ${dependencyCheck.version} true - - ${project.basedir}/../owasp-suppression.xml - 7 false diff --git a/owasp-suppression.xml b/owasp-suppression.xml deleted file mode 100644 index 83fde5815..000000000 --- a/owasp-suppression.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - cpe:/a:amazon_aws_project:amazon_aws:7.x-1.2::~~~drupal~~ - - - - cpe:/a:restful_web_services_project:restful_web_services:7.x-2.1::~~~drupal~~ - - - - ^pkg:maven/org\.springframework/spring.*$ - CVE-2016-1000027 - - \ No newline at end of file From e11700a70ad08d04ab5e9dc716372eb13bbace5e Mon Sep 17 00:00:00 2001 From: Artur Signell Date: Fri, 3 Feb 2023 16:00:43 +0200 Subject: [PATCH 380/888] fix: Provide correct mime type for javascript and css The correct mimetype for javascript is a requirement when loading javascript modules# --- .../proxy/internal/servlet/AwsServletContext.java | 7 ++++++- .../proxy/internal/servlet/AwsServletContextTest.java | 7 +++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java index 1531315e9..3ffca36bf 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java @@ -167,7 +167,12 @@ public String getMimeType(String s) { if (mimeTypes == null) { mimeTypes = new MimetypesFileTypeMap(); } - + if (s.endsWith(".css")) { + return "text/css"; + } + if (s.endsWith(".js")) { + return "application/javascript"; + } // TODO: The getContentType method of the MimetypesFileTypeMap returns application/octet-stream // instead of null when the type cannot be found. We should replace with an implementation that // loads the System mime types ($JAVA_HOME/lib/mime.types diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContextTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContextTest.java index ed84462a5..4d61f428e 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContextTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContextTest.java @@ -65,6 +65,13 @@ void getMimeType_mimeTypeOfCorrectFile_expectMime() { mimeType = ctx.getMimeType("file://" + tmpFilePath); assertEquals("text/plain", mimeType); } + @Test + void getMimeType_mimeTypeOfJavascript_expectApplicationJavascript() { + String tmpFilePath = TMP_DIR + "some.js"; + AwsServletContext ctx = new AwsServletContext(null); + String mimeType = ctx.getMimeType(tmpFilePath); + assertEquals("application/javascript", mimeType); + } @Test void getMimeType_unknownExtension_expectAppOctetStream() { From 7d2a74c405eb89a390bfdad2c1f4b49c4987b9f2 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 6 Feb 2023 11:24:21 +0100 Subject: [PATCH 381/888] fix: provide more accurate result for content type --- .../internal/servlet/AwsServletContext.java | 36 +++++++++++++------ .../servlet/AwsServletContextTest.java | 2 +- 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java index 3ffca36bf..0374c7a08 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java @@ -27,10 +27,14 @@ import jakarta.activation.MimetypesFileTypeMap; import java.io.File; +import java.io.IOException; import java.io.InputStream; import java.net.MalformedURLException; import java.net.URISyntaxException; import java.net.URL; +import java.nio.file.Files; +import java.nio.file.InvalidPathException; +import java.nio.file.Paths; import java.util.*; import java.util.stream.Collectors; @@ -160,23 +164,33 @@ public int getEffectiveMinorVersion() { @Override @SuppressFBWarnings("PATH_TRAVERSAL_IN") // suppressing because we are using the getValidFilePath - public String getMimeType(String s) { - if (s == null || !s.contains(".")) { + public String getMimeType(String file) { + if (file == null || !file.contains(".")) { return null; } + String mimeType = null; + try { + mimeType = Files.probeContentType(Paths.get(file)); + } catch (IOException | InvalidPathException e) { + log("unable to probe for content type, will use fallback", e); + } + + // MimetypesFileTypeMap is kept for backwards compatibility, remove in 2.0 if (mimeTypes == null) { mimeTypes = new MimetypesFileTypeMap(); } - if (s.endsWith(".css")) { - return "text/css"; + String backwardsCompatibleMimeType = mimeTypes.getContentType(file); + // The getContentType method of the MimetypesFileTypeMap + // returns MimetypesFileTypeMap.defaultType = application/octet-stream + // instead of null when the type cannot be found. + if (mimeType == null || (backwardsCompatibleMimeType != null && !backwardsCompatibleMimeType.equals(mimeType) + && !MediaType.APPLICATION_OCTET_STREAM.equals(backwardsCompatibleMimeType))) { + log("using type " + backwardsCompatibleMimeType + " from MimetypesFileTypeMap for " + file + + " instead of " + mimeType + " for backwards compatibility"); + mimeType = backwardsCompatibleMimeType; } - if (s.endsWith(".js")) { - return "application/javascript"; - } - // TODO: The getContentType method of the MimetypesFileTypeMap returns application/octet-stream - // instead of null when the type cannot be found. We should replace with an implementation that - // loads the System mime types ($JAVA_HOME/lib/mime.types - return mimeTypes.getContentType(s); + + return mimeType; } diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContextTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContextTest.java index 4d61f428e..04209e402 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContextTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContextTest.java @@ -70,7 +70,7 @@ void getMimeType_mimeTypeOfJavascript_expectApplicationJavascript() { String tmpFilePath = TMP_DIR + "some.js"; AwsServletContext ctx = new AwsServletContext(null); String mimeType = ctx.getMimeType(tmpFilePath); - assertEquals("application/javascript", mimeType); + assertEquals("text/javascript", mimeType); } @Test From 332a8c5f1e98727ce00c3275bd7c5c200bf23577 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Wed, 8 Feb 2023 16:38:41 +0100 Subject: [PATCH 382/888] fix: provide more accurate result for content type (another try as Files.probeContentType returns null on Lambda) --- .../internal/servlet/AwsServletContext.java | 38 ++++++++++--------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java index 0374c7a08..46328ee70 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java @@ -27,14 +27,11 @@ import jakarta.activation.MimetypesFileTypeMap; import java.io.File; -import java.io.IOException; import java.io.InputStream; import java.net.MalformedURLException; import java.net.URISyntaxException; import java.net.URL; -import java.nio.file.Files; -import java.nio.file.InvalidPathException; -import java.nio.file.Paths; +import java.net.URLConnection; import java.util.*; import java.util.stream.Collectors; @@ -168,26 +165,31 @@ public String getMimeType(String file) { if (file == null || !file.contains(".")) { return null; } - String mimeType = null; - try { - mimeType = Files.probeContentType(Paths.get(file)); - } catch (IOException | InvalidPathException e) { - log("unable to probe for content type, will use fallback", e); - } - // MimetypesFileTypeMap is kept for backwards compatibility, remove in 2.0 + // this implementation would be nice but returns null on Lambda +// try { +// mimeType = Files.probeContentType(Paths.get(file)); +// } catch (IOException | InvalidPathException e) { +// log("unable to probe for content type, will use fallback", e); +// } + if (mimeTypes == null) { mimeTypes = new MimetypesFileTypeMap(); } - String backwardsCompatibleMimeType = mimeTypes.getContentType(file); + String mimeType = mimeTypes.getContentType(file); + // The getContentType method of the MimetypesFileTypeMap // returns MimetypesFileTypeMap.defaultType = application/octet-stream - // instead of null when the type cannot be found. - if (mimeType == null || (backwardsCompatibleMimeType != null && !backwardsCompatibleMimeType.equals(mimeType) - && !MediaType.APPLICATION_OCTET_STREAM.equals(backwardsCompatibleMimeType))) { - log("using type " + backwardsCompatibleMimeType + " from MimetypesFileTypeMap for " + file - + " instead of " + mimeType + " for backwards compatibility"); - mimeType = backwardsCompatibleMimeType; + // instead of null when the type cannot be found. trying to improve the result... + if (mimeType == null || MediaType.APPLICATION_OCTET_STREAM.equals(mimeType)) { + try { + String mimeTypeGuess = URLConnection.guessContentTypeFromName(new File(file).getName()); + if (mimeTypeGuess !=null) { + mimeType = mimeTypeGuess; + } + } catch (Exception e) { + log("couldn't find a better contentType than " + mimeType + " for file " + file, e); + } } return mimeType; From 0c0650edcdf2486868b91d473c7f0434daeccb0f Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 19 May 2023 11:14:24 +0200 Subject: [PATCH 383/888] fix: for 2.0 we return null instead of application/octet-stream if content type cannot be resolved (as per servlet-api docs), a fix to make probeContentType work in Lambda execution environment is being worked on by the Lambda service team --- aws-serverless-java-container-core/pom.xml | 5 ---- .../internal/servlet/AwsServletContext.java | 29 ++++++++----------- .../servlet/AwsServletContextTest.java | 4 +-- 3 files changed, 14 insertions(+), 24 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index ff6e4b710..21f73ae99 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -71,11 +71,6 @@ commons-fileupload2 2.0-SNAPSHOT - - org.eclipse.angus - angus-mail - 2.0.1 - org.apache.httpcomponents diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java index 46328ee70..5211e68df 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java @@ -17,23 +17,25 @@ import com.amazonaws.serverless.proxy.internal.SecurityUtils; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; -import jakarta.activation.spi.MimeTypeRegistryProvider; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; import jakarta.servlet.*; import jakarta.servlet.ServletContext; import jakarta.servlet.descriptor.JspConfigDescriptor; -import jakarta.activation.MimetypesFileTypeMap; import java.io.File; +import java.io.IOException; import java.io.InputStream; import java.net.MalformedURLException; import java.net.URISyntaxException; import java.net.URL; import java.net.URLConnection; +import java.nio.file.Files; +import java.nio.file.InvalidPathException; +import java.nio.file.Paths; import java.util.*; -import java.util.stream.Collectors; /** @@ -61,7 +63,6 @@ public class AwsServletContext private Map initParameters; private AwsLambdaServletContainerHandler containerHandler; private Logger log = LoggerFactory.getLogger(AwsServletContext.class); - private MimetypesFileTypeMap mimeTypes; // lazily loaded in the getMimeType method //------------------------------------------------------------- @@ -166,22 +167,16 @@ public String getMimeType(String file) { return null; } - // this implementation would be nice but returns null on Lambda -// try { -// mimeType = Files.probeContentType(Paths.get(file)); -// } catch (IOException | InvalidPathException e) { -// log("unable to probe for content type, will use fallback", e); -// } + String mimeType = null; - if (mimeTypes == null) { - mimeTypes = new MimetypesFileTypeMap(); + // may not work on Lambda until mailcap package is present https://github.com/awslabs/aws-serverless-java-container/pull/504 + try { + mimeType = Files.probeContentType(Paths.get(file)); + } catch (IOException | InvalidPathException e) { + log("unable to probe for content type, will use fallback", e); } - String mimeType = mimeTypes.getContentType(file); - // The getContentType method of the MimetypesFileTypeMap - // returns MimetypesFileTypeMap.defaultType = application/octet-stream - // instead of null when the type cannot be found. trying to improve the result... - if (mimeType == null || MediaType.APPLICATION_OCTET_STREAM.equals(mimeType)) { + if (mimeType == null) { try { String mimeTypeGuess = URLConnection.guessContentTypeFromName(new File(file).getName()); if (mimeTypeGuess !=null) { diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContextTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContextTest.java index 04209e402..58d0b0542 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContextTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContextTest.java @@ -74,10 +74,10 @@ void getMimeType_mimeTypeOfJavascript_expectApplicationJavascript() { } @Test - void getMimeType_unknownExtension_expectAppOctetStream() { + void getMimeType_unknownExtension_expectNull() { AwsServletContext ctx = new AwsServletContext(null); String mimeType = ctx.getMimeType("myfile.unkext"); - assertEquals("application/octet-stream", mimeType); + assertNull(mimeType); } From 04d8509172ebf17fcfdad5952c154175ae2dba6f Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 19 May 2023 13:37:54 +0200 Subject: [PATCH 384/888] test: move to Apache HTTP Client 5 for testing --- aws-serverless-java-container-core/pom.xml | 19 ------------------- .../internal/LambdaContainerHandlerTest.java | 2 +- .../AwsProxyHttpServletRequestFormTest.java | 10 +++++----- .../testutils/AwsProxyRequestBuilder.java | 15 ++++++++------- .../archetype-resources/build.gradle | 1 + .../resources/archetype-resources/pom.xml | 6 ++++++ .../archetype-resources/build.gradle | 1 + .../resources/archetype-resources/pom.xml | 6 ++++++ .../archetype-resources/build.gradle | 1 + .../resources/archetype-resources/pom.xml | 6 ++++++ .../archetype-resources/build.gradle | 1 + .../resources/archetype-resources/pom.xml | 6 ++++++ .../archetype-resources/build.gradle | 1 + .../resources/archetype-resources/pom.xml | 6 ++++++ pom.xml | 7 +++++++ 15 files changed, 56 insertions(+), 32 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 21f73ae99..9d8b5a138 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -72,25 +72,6 @@ 2.0-SNAPSHOT - - org.apache.httpcomponents - httpmime - 4.5.14 - compile - - - - org.apache.httpcomponents.client5 - httpclient5 - 5.2.1 - test - - - org.apache.httpcomponents.core5 - httpcore5 - 5.2.1 - test - org.springframework.security spring-security-web diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/LambdaContainerHandlerTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/LambdaContainerHandlerTest.java index 98b45fd1b..d6af5112e 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/LambdaContainerHandlerTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/LambdaContainerHandlerTest.java @@ -10,7 +10,7 @@ import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.serverless.proxy.model.AwsProxyResponse; import com.amazonaws.services.lambda.runtime.Context; -import org.apache.http.impl.execchain.RequestAbortedException; +import org.apache.hc.client5.http.impl.classic.RequestAbortedException; import org.junit.jupiter.api.Test; import jakarta.servlet.http.HttpServletRequest; diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestFormTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestFormTest.java index 07a2f410e..79bfa6cd3 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestFormTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestFormTest.java @@ -5,9 +5,9 @@ import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; import org.apache.commons.io.IOUtils; -import org.apache.http.HttpEntity; -import org.apache.http.entity.ContentType; -import org.apache.http.entity.mime.MultipartEntityBuilder; +import org.apache.hc.core5.http.ContentType; +import org.apache.hc.core5.http.HttpEntity; +import org.apache.hc.client5.http.entity.mime.MultipartEntityBuilder;; import org.junit.jupiter.api.Test; import jakarta.servlet.ServletException; @@ -71,7 +71,7 @@ void postForm_getParam_getEncodedFullValue() { void postForm_getParts_parsing() { try { AwsProxyRequest proxyRequest = new AwsProxyRequestBuilder("/form", "POST") - .header(MULTIPART_FORM_DATA.getContentType().getName(), MULTIPART_FORM_DATA.getContentType().getValue()) + .header(HttpHeaders.CONTENT_TYPE, MULTIPART_FORM_DATA.getContentType()) //.header(formData.getContentEncoding().getName(), formData.getContentEncoding().getValue()) .body(IOUtils.toString(MULTIPART_FORM_DATA.getContent(), Charset.defaultCharset())) .build(); @@ -90,7 +90,7 @@ void postForm_getParts_parsing() { void multipart_getParts_binary() { try { AwsProxyRequest proxyRequest = new AwsProxyRequestBuilder("/form", "POST") - .header(MULTIPART_BINARY_DATA.getContentType().getName(), MULTIPART_BINARY_DATA.getContentType().getValue()) + .header(HttpHeaders.CONTENT_TYPE, MULTIPART_BINARY_DATA.getContentType()) .header(HttpHeaders.CONTENT_LENGTH, MULTIPART_BINARY_DATA.getContentLength() + "") .binaryBody(MULTIPART_BINARY_DATA.getContent()) .build(); diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/testutils/AwsProxyRequestBuilder.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/testutils/AwsProxyRequestBuilder.java index adcebb89d..9df66a891 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/testutils/AwsProxyRequestBuilder.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/testutils/AwsProxyRequestBuilder.java @@ -18,10 +18,11 @@ import com.fasterxml.jackson.core.JsonProcessingException; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import org.apache.commons.io.IOUtils; -import org.apache.http.HttpEntity; -import org.apache.http.entity.mime.MultipartEntityBuilder; -import org.apache.http.entity.mime.content.ByteArrayBody; -import org.apache.http.entity.mime.content.StringBody; +import org.apache.hc.core5.http.ContentType; +import org.apache.hc.core5.http.HttpEntity; +import org.apache.hc.client5.http.entity.mime.MultipartEntityBuilder; +import org.apache.hc.client5.http.entity.mime.ByteArrayBody; +import org.apache.hc.client5.http.entity.mime.StringBody; import jakarta.ws.rs.core.HttpHeaders; import jakarta.ws.rs.core.MediaType; @@ -162,7 +163,7 @@ public AwsProxyRequestBuilder formFilePart(String fieldName, String fileName, by return this; } - public AwsProxyRequestBuilder formFieldPart(String fieldName, String fieldValue) + public AwsProxyRequestBuilder formTextFieldPart(String fieldName, String fieldValue) throws IOException { if (request.getMultiValueHeaders() == null) { request.setMultiValueHeaders(new Headers()); @@ -170,7 +171,7 @@ public AwsProxyRequestBuilder formFieldPart(String fieldName, String fieldValue) if (multipartBuilder == null) { multipartBuilder = MultipartEntityBuilder.create(); } - multipartBuilder.addPart(fieldName, new StringBody(fieldValue)); + multipartBuilder.addPart(fieldName, new StringBody(fieldValue, ContentType.TEXT_PLAIN)); buildMultipartBody(); return this; } @@ -188,7 +189,7 @@ private void buildMultipartBody() request.setBody(Base64.getMimeEncoder().encodeToString(finalBuffer)); request.setIsBase64Encoded(true); this.request.setMultiValueHeaders(new Headers()); - header(HttpHeaders.CONTENT_TYPE, bodyEntity.getContentType().getValue()); + header(HttpHeaders.CONTENT_TYPE, bodyEntity.getContentType()); header(HttpHeaders.CONTENT_LENGTH, bodyEntity.getContentLength() + ""); } diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle index bf493c5bb..3b18be4cf 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle @@ -22,6 +22,7 @@ dependencies { } testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") + testImplementation("org.apache.httpcomponents.client5:httpclient5:5.2.1") testImplementation("junit:junit:4.13.2") } diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml index 8dde5e32f..4196c83e4 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml @@ -33,6 +33,12 @@ test-jar test + + org.apache.httpcomponents.client5 + httpclient5 + 5.2.1 + test + org.glassfish.jersey.media diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle index 3cd7c716c..b2d0dbe0f 100644 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle @@ -13,6 +13,7 @@ dependencies { ) testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") + testImplementation("org.apache.httpcomponents.client5:httpclient5:5.2.1") testImplementation("junit:junit:4.13.2") } diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml index a09d35556..a4281cde3 100644 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml @@ -34,6 +34,12 @@ test-jar test + + org.apache.httpcomponents.client5 + httpclient5 + 5.2.1 + test + com.sparkjava diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index 693cd2ab0..45f39c264 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -18,6 +18,7 @@ dependencies { ) testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") + testImplementation("org.apache.httpcomponents.client5:httpclient5:5.2.1") testImplementation("junit:junit:4.13.2") } diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index f3f283cfa..d7e6e5637 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -35,6 +35,12 @@ test-jar test + + org.apache.httpcomponents.client5 + httpclient5 + 5.2.1 + test + org.springframework diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle index 2c8bf5ca1..94897b2d6 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle @@ -12,6 +12,7 @@ dependencies { ) testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") + testImplementation("org.apache.httpcomponents.client5:httpclient5:5.2.1") testImplementation("junit:junit:4.13.2") } diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml index 9bb3ee083..745498e5e 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml @@ -37,6 +37,12 @@ test-jar test + + org.apache.httpcomponents.client5 + httpclient5 + 5.2.1 + test + org.springframework.boot diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle index 6e3237854..71f270097 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle @@ -42,6 +42,7 @@ dependencies { implementation ('com.amazonaws:aws-lambda-java-log4j2:1.5.1') testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") + testImplementation("org.apache.httpcomponents.client5:httpclient5:5.2.1") testImplementation('junit:junit:4.13.2') testImplementation('org.apache.struts:struts2-junit-plugin:6.1.2') { exclude group: 'org.apache.struts', module: 'struts2-core' diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml index e26888928..bb558e1cb 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml @@ -35,6 +35,12 @@ test-jar test + + org.apache.httpcomponents.client5 + httpclient5 + 5.2.1 + test + org.apache.struts diff --git a/pom.xml b/pom.xml index 5dc367525..84dd89610 100644 --- a/pom.xml +++ b/pom.xml @@ -116,6 +116,13 @@ test + + org.apache.httpcomponents.client5 + httpclient5 + 5.2.1 + test + + org.mockito mockito-core From 9c05f8527b7cc50f8be88b09feea2b81590606ce Mon Sep 17 00:00:00 2001 From: mbfreder Date: Fri, 28 Apr 2023 14:22:26 -0700 Subject: [PATCH 385/888] refactor: temporarily removing fileupload support until release version is available (https://issues.apache.org/jira/browse/FILEUPLOAD-309) --- aws-serverless-java-container-core/pom.xml | 6 +-- .../servlet/AwsHttpServletRequest.java | 39 +------------------ .../AwsProxyHttpServletRequestFormTest.java | 6 ++- .../testutils/AwsProxyRequestBuilder.java | 7 +--- .../proxy/jersey/JerseyParamEncodingTest.java | 1 + .../proxy/spring/SpringAwsProxyTest.java | 2 + 6 files changed, 13 insertions(+), 48 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 9d8b5a138..26bafa9a3 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -67,9 +67,9 @@ - org.apache.commons - commons-fileupload2 - 2.0-SNAPSHOT + commons-io + commons-io + 2.11.0 diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java index 99b2782c5..44fd84a96 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java @@ -22,11 +22,6 @@ import com.amazonaws.serverless.proxy.model.MultiValuedTreeMap; import com.amazonaws.services.lambda.runtime.Context; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; -import org.apache.commons.fileupload2.FileItem; -import org.apache.commons.fileupload2.FileUploadException; -import org.apache.commons.fileupload2.disk.DiskFileItemFactory; -import org.apache.commons.fileupload2.jaksrvlt.JakSrvltFileUpload; -import org.apache.commons.io.FilenameUtils; import org.apache.commons.io.IOUtils; import org.apache.commons.io.input.NullInputStream; import org.slf4j.Logger; @@ -508,39 +503,7 @@ protected Map> getFormUrlEncodedParametersMap() { @SuppressFBWarnings({"FILE_UPLOAD_FILENAME", "WEAK_FILENAMEUTILS"}) protected Map getMultipartFormParametersMap() { - if (multipartFormParameters != null) { - return multipartFormParameters; - } - if (!JakSrvltFileUpload.isMultipartContent(this)) { // isMultipartContent also checks the content type - multipartFormParameters = new HashMap<>(); - return multipartFormParameters; - } - Timer.start("SERVLET_REQUEST_GET_MULTIPART_PARAMS"); - multipartFormParameters = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); - - JakSrvltFileUpload upload = new JakSrvltFileUpload(new DiskFileItemFactory()); - - try { - List items = upload.parseRequest(this); - for (FileItem item : items) { - String fileName = FilenameUtils.getName(item.getName()); - AwsProxyRequestPart newPart = new AwsProxyRequestPart(item.get()); - newPart.setName(item.getFieldName()); - newPart.setSubmittedFileName(fileName); - newPart.setContentType(item.getContentType()); - newPart.setSize(item.getSize()); - item.getHeaders().getHeaderNames().forEachRemaining(h -> { - newPart.addHeader(h, item.getHeaders().getHeader(h)); - }); - - multipartFormParameters.put(item.getFieldName(), newPart); - } - } catch (FileUploadException e) { - Timer.stop("SERVLET_REQUEST_GET_MULTIPART_PARAMS"); - log.error("Could not read multipart upload file", e); - } - Timer.stop("SERVLET_REQUEST_GET_MULTIPART_PARAMS"); - return multipartFormParameters; + throw new UnsupportedOperationException(); } protected String[] getQueryParamValues(MultiValuedTreeMap qs, String key, boolean isCaseSensitive) { diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestFormTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestFormTest.java index 79bfa6cd3..efe32ba2a 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestFormTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestFormTest.java @@ -7,7 +7,8 @@ import org.apache.commons.io.IOUtils; import org.apache.hc.core5.http.ContentType; import org.apache.hc.core5.http.HttpEntity; -import org.apache.hc.client5.http.entity.mime.MultipartEntityBuilder;; +import org.apache.hc.client5.http.entity.mime.MultipartEntityBuilder; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import jakarta.servlet.ServletException; @@ -51,6 +52,7 @@ public class AwsProxyHttpServletRequestFormTest { .build(); private static final String ENCODED_FORM_ENTITY = PART_KEY_1 + "=" + ENCODED_VALUE + "&" + PART_KEY_2 + "=" + PART_VALUE_2; + @Disabled("Disabled until new release of commons-fileupload based on Jakarta APIs") @Test void postForm_getParam_getEncodedFullValue() { try { @@ -67,6 +69,7 @@ void postForm_getParam_getEncodedFullValue() { } } + @Disabled("Disabled until new release of commons-fileupload based on Jakarta APIs") @Test void postForm_getParts_parsing() { try { @@ -86,6 +89,7 @@ void postForm_getParts_parsing() { } } + @Disabled("Disabled until new release of commons-fileupload based on Jakarta APIs") @Test void multipart_getParts_binary() { try { diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/testutils/AwsProxyRequestBuilder.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/testutils/AwsProxyRequestBuilder.java index 9df66a891..725fada8f 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/testutils/AwsProxyRequestBuilder.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/testutils/AwsProxyRequestBuilder.java @@ -155,12 +155,7 @@ public AwsProxyRequestBuilder form(String key, String value) { } public AwsProxyRequestBuilder formFilePart(String fieldName, String fileName, byte[] content) throws IOException { - if (multipartBuilder == null) { - multipartBuilder = MultipartEntityBuilder.create(); - } - multipartBuilder.addPart(fieldName, new ByteArrayBody(content, fileName)); - buildMultipartBody(); - return this; + throw new UnsupportedOperationException(); } public AwsProxyRequestBuilder formTextFieldPart(String fieldName, String fieldValue) diff --git a/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyParamEncodingTest.java b/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyParamEncodingTest.java index 9dc1ab32a..6c575da6c 100644 --- a/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyParamEncodingTest.java +++ b/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyParamEncodingTest.java @@ -263,6 +263,7 @@ void queryParam_listOfString_expectCorrectLength(String reqType) { validateSingleValueModel(resp, "3"); } + @Disabled("Disabled until new release of commons-fileupload based on Jakarta APIs") @MethodSource("data") @ParameterizedTest void multipart_getFileSize_expectCorrectLength(String reqType) diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringAwsProxyTest.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringAwsProxyTest.java index 1101efc8c..f78d43812 100644 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringAwsProxyTest.java +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringAwsProxyTest.java @@ -19,6 +19,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.commons.codec.binary.Base64; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; import org.springframework.web.servlet.DispatcherServlet; @@ -468,6 +469,7 @@ void contextPath_generateLink_returnsCorrectPath(String reqType) { SpringLambdaContainerHandler.getContainerConfig().setUseStageAsServletContext(false); } + @Disabled("Disabled until new release of commons-fileupload based on Jakarta APIs") @MethodSource("data") @ParameterizedTest void multipart_getFileName_returnsCorrectFileName(String reqType) From ac04f4c0044bcdc8810663730bdf1d196fbd45ea Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 19 May 2023 13:57:43 +0200 Subject: [PATCH 386/888] chore(deps): Update Commons IO dependency to 2.12.0 --- aws-serverless-java-container-core/pom.xml | 2 +- aws-serverless-java-container-struts/pom.xml | 5 ----- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 26bafa9a3..0da33fdd1 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -69,7 +69,7 @@ commons-io commons-io - 2.11.0 + 2.12.0 diff --git a/aws-serverless-java-container-struts/pom.xml b/aws-serverless-java-container-struts/pom.xml index ee1784d78..d38edb3c9 100644 --- a/aws-serverless-java-container-struts/pom.xml +++ b/aws-serverless-java-container-struts/pom.xml @@ -94,11 +94,6 @@ - - commons-io - commons-io - 2.11.0 - org.apache.commons commons-text From c8c62f4f6abf40bb554d98bdb3dc6f7d8ff77470 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 19 May 2023 14:32:58 +0200 Subject: [PATCH 387/888] chore: Use Corretto 17 for release builds --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 64ec8e2d5..7ff2bea79 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -23,7 +23,7 @@ jobs: uses: actions/setup-java@v3 with: distribution: 'corretto' - java-version: 8 + java-version: 17 server-id: sonatype-nexus-staging server-username: MAVEN_USERNAME server-password: MAVEN_PASSWORD From 411214de82c9c838a0d7b550a14dd093e6b356b3 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 19 May 2023 15:29:33 +0200 Subject: [PATCH 388/888] chore: Maven release plugin configuration --- pom.xml | 2 -- 1 file changed, 2 deletions(-) diff --git a/pom.xml b/pom.xml index 84dd89610..1dd7c8afb 100644 --- a/pom.xml +++ b/pom.xml @@ -238,8 +238,6 @@ maven-release-plugin 3.0.0 - clean verify install - true chore: release - From 0e13fda7746c1e5256eae275507ebd6356e14a9d Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 19 May 2023 15:39:48 +0200 Subject: [PATCH 389/888] chore: Maven release plugin configuration --- pom.xml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 1dd7c8afb..5931bd956 100644 --- a/pom.xml +++ b/pom.xml @@ -236,8 +236,10 @@ org.apache.maven.plugins maven-release-plugin - 3.0.0 + 2.5.3 + clean verify install + true chore: release - From 21eeec525ab4fef6958e157cce8e8a4a7d0a3ca0 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 19 May 2023 16:01:40 +0200 Subject: [PATCH 390/888] chore: Maven release plugin configuration (avoid archetype integ tests run twice) --- aws-serverless-jersey-archetype/pom.xml | 7 ------- aws-serverless-spring-archetype/pom.xml | 7 ------- aws-serverless-springboot3-archetype/pom.xml | 7 ------- pom.xml | 3 ++- 4 files changed, 2 insertions(+), 22 deletions(-) diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index 51c855ac6..315007019 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -66,13 +66,6 @@ org.apache.maven.plugins maven-archetype-plugin 3.2.1 - - - - integration-test - - - diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index 3a17f1676..178e0de01 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -67,13 +67,6 @@ org.apache.maven.plugins maven-archetype-plugin 3.2.1 - - - - integration-test - - - diff --git a/aws-serverless-springboot3-archetype/pom.xml b/aws-serverless-springboot3-archetype/pom.xml index 21e176026..62efb1a20 100644 --- a/aws-serverless-springboot3-archetype/pom.xml +++ b/aws-serverless-springboot3-archetype/pom.xml @@ -66,13 +66,6 @@ org.apache.maven.plugins maven-archetype-plugin 3.2.1 - - - - integration-test - - - diff --git a/pom.xml b/pom.xml index 5931bd956..592f43b40 100644 --- a/pom.xml +++ b/pom.xml @@ -236,11 +236,12 @@ org.apache.maven.plugins maven-release-plugin - 2.5.3 + 3.0.0 clean verify install true chore: release - + true From 2fdb951dd3300de9f2d7ef1a23544098e8d96013 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 19 May 2023 16:14:25 +0200 Subject: [PATCH 391/888] chore: Maven release plugin configuration (downgrade maven-archetype-plugin to fix integ-tests) --- aws-serverless-jersey-archetype/pom.xml | 9 ++++++++- aws-serverless-spring-archetype/pom.xml | 9 ++++++++- aws-serverless-springboot3-archetype/pom.xml | 9 ++++++++- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index 315007019..d2bace461 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -65,7 +65,14 @@ org.apache.maven.plugins maven-archetype-plugin - 3.2.1 + 3.0.1 + + + + integration-test + + + diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index 178e0de01..6f5f2d7d6 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -66,7 +66,14 @@ org.apache.maven.plugins maven-archetype-plugin - 3.2.1 + 3.0.1 + + + + integration-test + + + diff --git a/aws-serverless-springboot3-archetype/pom.xml b/aws-serverless-springboot3-archetype/pom.xml index 62efb1a20..09c1617be 100644 --- a/aws-serverless-springboot3-archetype/pom.xml +++ b/aws-serverless-springboot3-archetype/pom.xml @@ -65,7 +65,14 @@ org.apache.maven.plugins maven-archetype-plugin - 3.2.1 + 3.0.1 + + + + integration-test + + + From 49cd3204b61605729de6d9364e5bb6b400555e69 Mon Sep 17 00:00:00 2001 From: deki Date: Fri, 19 May 2023 14:22:34 +0000 Subject: [PATCH 392/888] chore: release - prepare release aws-serverless-java-container-2.0.0-M1 --- aws-serverless-java-container-core/pom.xml | 4 ++-- aws-serverless-java-container-jersey/pom.xml | 8 ++++---- aws-serverless-java-container-spring/pom.xml | 8 ++++---- aws-serverless-java-container-springboot3/pom.xml | 8 ++++---- aws-serverless-jersey-archetype/pom.xml | 6 +++--- aws-serverless-spring-archetype/pom.xml | 6 +++--- aws-serverless-springboot3-archetype/pom.xml | 6 +++--- pom.xml | 4 ++-- 8 files changed, 25 insertions(+), 25 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 0da33fdd1..819cce1d6 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Core Allows Java applications written for a servlet container to run in AWS Lambda https://aws.amazon.com/lambda - 2.0-SNAPSHOT + 2.0.0-M1 com.amazonaws.serverless aws-serverless-java-container - 2.0-SNAPSHOT + 2.0.0-M1 .. diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index 4ae4c7320..b54d00011 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Jersey implementation Allows Java applications written for Jersey to run in AWS Lambda https://aws.amazon.com/lambda - 2.0-SNAPSHOT + 2.0.0-M1 com.amazonaws.serverless aws-serverless-java-container - 2.0-SNAPSHOT + 2.0.0-M1 .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.0-SNAPSHOT + 2.0.0-M1 com.fasterxml.jackson.core @@ -35,7 +35,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.0-SNAPSHOT + 2.0.0-M1 tests test-jar test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index b83b4742b..fb7ac7423 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spring implementation Allows Java applications written for the Spring framework to run in AWS Lambda https://aws.amazon.com/lambda - 2.0-SNAPSHOT + 2.0.0-M1 com.amazonaws.serverless aws-serverless-java-container - 2.0-SNAPSHOT + 2.0.0-M1 .. @@ -25,12 +25,12 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.0-SNAPSHOT + 2.0.0-M1 com.amazonaws.serverless aws-serverless-java-container-core - 2.0-SNAPSHOT + 2.0.0-M1 tests test-jar test diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index 5349fc532..89a7d24d6 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -3,7 +3,7 @@ aws-serverless-java-container com.amazonaws.serverless - 2.0-SNAPSHOT + 2.0.0-M1 4.0.0 @@ -12,7 +12,7 @@ AWS Serverless Java container support - SpringBoot 3 implementation Allows Java applications written for SpringBoot 3 to run in AWS Lambda https://aws.amazon.com/lambda - 2.0-SNAPSHOT + 2.0.0-M1 6.0.9 @@ -25,12 +25,12 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.0-SNAPSHOT + 2.0.0-M1 com.amazonaws.serverless aws-serverless-java-container-core - 2.0-SNAPSHOT + 2.0.0-M1 tests test-jar test diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index d2bace461..7e21a9d2a 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.0-SNAPSHOT + 2.0.0-M1 com.amazonaws.serverless.archetypes aws-serverless-jersey-archetype - 2.0-SNAPSHOT + 2.0.0-M1 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-2.0.0-M1 diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index 6f5f2d7d6..e6026b8a9 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.0-SNAPSHOT + 2.0.0-M1 com.amazonaws.serverless.archetypes aws-serverless-spring-archetype - 2.0-SNAPSHOT + 2.0.0-M1 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-2.0.0-M1 diff --git a/aws-serverless-springboot3-archetype/pom.xml b/aws-serverless-springboot3-archetype/pom.xml index 09c1617be..abf8a9a5a 100644 --- a/aws-serverless-springboot3-archetype/pom.xml +++ b/aws-serverless-springboot3-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.0-SNAPSHOT + 2.0.0-M1 com.amazonaws.serverless.archetypes aws-serverless-springboot3-archetype - 2.0-SNAPSHOT + 2.0.0-M1 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-2.0.0-M1 diff --git a/pom.xml b/pom.xml index 592f43b40..a2185f054 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazonaws.serverless aws-serverless-java-container pom - 2.0-SNAPSHOT + 2.0.0-M1 AWS Serverless Java container A Java framework to run Spring, Spring Boot, Jersey, Spark, and Struts applications inside AWS Lambda https://github.com/awslabs/aws-serverless-java-container @@ -37,7 +37,7 @@ https://github.com/awslabs/aws-serverless-java-container scm:git:https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-2.0.0-M1 From 6271330c1bcaa6bcf250e4d08febb50cc71f8252 Mon Sep 17 00:00:00 2001 From: deki Date: Fri, 19 May 2023 14:22:36 +0000 Subject: [PATCH 393/888] chore: release - prepare for next development iteration --- aws-serverless-java-container-core/pom.xml | 4 ++-- aws-serverless-java-container-jersey/pom.xml | 8 ++++---- aws-serverless-java-container-spring/pom.xml | 8 ++++---- aws-serverless-java-container-springboot3/pom.xml | 8 ++++---- aws-serverless-jersey-archetype/pom.xml | 6 +++--- aws-serverless-spring-archetype/pom.xml | 6 +++--- aws-serverless-springboot3-archetype/pom.xml | 6 +++--- pom.xml | 4 ++-- 8 files changed, 25 insertions(+), 25 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 819cce1d6..3693ded88 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Core Allows Java applications written for a servlet container to run in AWS Lambda https://aws.amazon.com/lambda - 2.0.0-M1 + 2.0.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 2.0.0-M1 + 2.0.0-SNAPSHOT .. diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index b54d00011..d4e9f42a8 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Jersey implementation Allows Java applications written for Jersey to run in AWS Lambda https://aws.amazon.com/lambda - 2.0.0-M1 + 2.0.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 2.0.0-M1 + 2.0.0-SNAPSHOT .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.0.0-M1 + 2.0.0-SNAPSHOT com.fasterxml.jackson.core @@ -35,7 +35,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.0.0-M1 + 2.0.0-SNAPSHOT tests test-jar test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index fb7ac7423..c734576a4 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spring implementation Allows Java applications written for the Spring framework to run in AWS Lambda https://aws.amazon.com/lambda - 2.0.0-M1 + 2.0.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 2.0.0-M1 + 2.0.0-SNAPSHOT .. @@ -25,12 +25,12 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.0.0-M1 + 2.0.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container-core - 2.0.0-M1 + 2.0.0-SNAPSHOT tests test-jar test diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index 89a7d24d6..8e7d42a04 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -3,7 +3,7 @@ aws-serverless-java-container com.amazonaws.serverless - 2.0.0-M1 + 2.0.0-SNAPSHOT 4.0.0 @@ -12,7 +12,7 @@ AWS Serverless Java container support - SpringBoot 3 implementation Allows Java applications written for SpringBoot 3 to run in AWS Lambda https://aws.amazon.com/lambda - 2.0.0-M1 + 2.0.0-SNAPSHOT 6.0.9 @@ -25,12 +25,12 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.0.0-M1 + 2.0.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container-core - 2.0.0-M1 + 2.0.0-SNAPSHOT tests test-jar test diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index 7e21a9d2a..e328fee77 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.0.0-M1 + 2.0.0-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-jersey-archetype - 2.0.0-M1 + 2.0.0-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-2.0.0-M1 + HEAD diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index e6026b8a9..747ff0838 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.0.0-M1 + 2.0.0-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-spring-archetype - 2.0.0-M1 + 2.0.0-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-2.0.0-M1 + HEAD diff --git a/aws-serverless-springboot3-archetype/pom.xml b/aws-serverless-springboot3-archetype/pom.xml index abf8a9a5a..8f478b223 100644 --- a/aws-serverless-springboot3-archetype/pom.xml +++ b/aws-serverless-springboot3-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.0.0-M1 + 2.0.0-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-springboot3-archetype - 2.0.0-M1 + 2.0.0-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-2.0.0-M1 + HEAD diff --git a/pom.xml b/pom.xml index a2185f054..55d546b05 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazonaws.serverless aws-serverless-java-container pom - 2.0.0-M1 + 2.0.0-SNAPSHOT AWS Serverless Java container A Java framework to run Spring, Spring Boot, Jersey, Spark, and Struts applications inside AWS Lambda https://github.com/awslabs/aws-serverless-java-container @@ -37,7 +37,7 @@ https://github.com/awslabs/aws-serverless-java-container scm:git:https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-2.0.0-M1 + HEAD From d04202ecaafe3663540e792cbede96c0ac224bbe Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 19 May 2023 16:35:44 +0200 Subject: [PATCH 394/888] chore: set next version to 2.0.0-SNAPSHOT (although Spark/ Struts are currently not being build for 2.x) --- aws-serverless-java-container-spark/pom.xml | 6 +++--- aws-serverless-java-container-struts/pom.xml | 6 +++--- aws-serverless-spark-archetype/pom.xml | 4 ++-- aws-serverless-struts-archetype/pom.xml | 4 ++-- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/aws-serverless-java-container-spark/pom.xml b/aws-serverless-java-container-spark/pom.xml index 3a5547ea5..8dd1abe28 100644 --- a/aws-serverless-java-container-spark/pom.xml +++ b/aws-serverless-java-container-spark/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spark implementation Allows Java applications written for Spark to run in AWS Lambda https://aws.amazon.com/lambda - 1.10-SNAPSHOT + 2.0.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.10-SNAPSHOT + 2.0.0-SNAPSHOT .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.10-SNAPSHOT + 2.0.0-SNAPSHOT diff --git a/aws-serverless-java-container-struts/pom.xml b/aws-serverless-java-container-struts/pom.xml index d38edb3c9..4f1c10b7f 100644 --- a/aws-serverless-java-container-struts/pom.xml +++ b/aws-serverless-java-container-struts/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Struts implementation Allows Java applications written for the Struts framework to run in AWS Lambda https://aws.amazon.com/lambda - 1.10-SNAPSHOT + 2.0.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 1.10-SNAPSHOT + 2.0.0-SNAPSHOT @@ -23,7 +23,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 1.10-SNAPSHOT + 2.0.0-SNAPSHOT diff --git a/aws-serverless-spark-archetype/pom.xml b/aws-serverless-spark-archetype/pom.xml index ca3ad3952..90dcabf45 100644 --- a/aws-serverless-spark-archetype/pom.xml +++ b/aws-serverless-spark-archetype/pom.xml @@ -4,12 +4,12 @@ com.amazonaws.serverless aws-serverless-java-container - 1.10-SNAPSHOT + 2.0.0-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-spark-archetype - 1.10-SNAPSHOT + 2.0.0-SNAPSHOT maven-archetype diff --git a/aws-serverless-struts-archetype/pom.xml b/aws-serverless-struts-archetype/pom.xml index b91cfa4bd..1d0e078af 100644 --- a/aws-serverless-struts-archetype/pom.xml +++ b/aws-serverless-struts-archetype/pom.xml @@ -4,12 +4,12 @@ com.amazonaws.serverless aws-serverless-java-container - 1.10-SNAPSHOT + 2.0.0-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-struts-archetype - 1.10-SNAPSHOT + 2.0.0-SNAPSHOT maven-archetype From a1eaf0d06aa53e520c8683f34a5600cee75db40c Mon Sep 17 00:00:00 2001 From: deki Date: Fri, 19 May 2023 14:58:38 +0000 Subject: [PATCH 395/888] chore: release - prepare release aws-serverless-java-container-2.0.0-M1 --- aws-serverless-java-container-core/pom.xml | 4 ++-- aws-serverless-java-container-jersey/pom.xml | 8 ++++---- aws-serverless-java-container-spring/pom.xml | 8 ++++---- aws-serverless-java-container-springboot3/pom.xml | 8 ++++---- aws-serverless-jersey-archetype/pom.xml | 6 +++--- aws-serverless-spring-archetype/pom.xml | 6 +++--- aws-serverless-springboot3-archetype/pom.xml | 6 +++--- pom.xml | 4 ++-- 8 files changed, 25 insertions(+), 25 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 3693ded88..819cce1d6 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Core Allows Java applications written for a servlet container to run in AWS Lambda https://aws.amazon.com/lambda - 2.0.0-SNAPSHOT + 2.0.0-M1 com.amazonaws.serverless aws-serverless-java-container - 2.0.0-SNAPSHOT + 2.0.0-M1 .. diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index d4e9f42a8..b54d00011 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Jersey implementation Allows Java applications written for Jersey to run in AWS Lambda https://aws.amazon.com/lambda - 2.0.0-SNAPSHOT + 2.0.0-M1 com.amazonaws.serverless aws-serverless-java-container - 2.0.0-SNAPSHOT + 2.0.0-M1 .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.0.0-SNAPSHOT + 2.0.0-M1 com.fasterxml.jackson.core @@ -35,7 +35,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.0.0-SNAPSHOT + 2.0.0-M1 tests test-jar test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index c734576a4..fb7ac7423 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spring implementation Allows Java applications written for the Spring framework to run in AWS Lambda https://aws.amazon.com/lambda - 2.0.0-SNAPSHOT + 2.0.0-M1 com.amazonaws.serverless aws-serverless-java-container - 2.0.0-SNAPSHOT + 2.0.0-M1 .. @@ -25,12 +25,12 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.0.0-SNAPSHOT + 2.0.0-M1 com.amazonaws.serverless aws-serverless-java-container-core - 2.0.0-SNAPSHOT + 2.0.0-M1 tests test-jar test diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index 8e7d42a04..89a7d24d6 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -3,7 +3,7 @@ aws-serverless-java-container com.amazonaws.serverless - 2.0.0-SNAPSHOT + 2.0.0-M1 4.0.0 @@ -12,7 +12,7 @@ AWS Serverless Java container support - SpringBoot 3 implementation Allows Java applications written for SpringBoot 3 to run in AWS Lambda https://aws.amazon.com/lambda - 2.0.0-SNAPSHOT + 2.0.0-M1 6.0.9 @@ -25,12 +25,12 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.0.0-SNAPSHOT + 2.0.0-M1 com.amazonaws.serverless aws-serverless-java-container-core - 2.0.0-SNAPSHOT + 2.0.0-M1 tests test-jar test diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index e328fee77..7e21a9d2a 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.0.0-SNAPSHOT + 2.0.0-M1 com.amazonaws.serverless.archetypes aws-serverless-jersey-archetype - 2.0.0-SNAPSHOT + 2.0.0-M1 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-2.0.0-M1 diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index 747ff0838..e6026b8a9 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.0.0-SNAPSHOT + 2.0.0-M1 com.amazonaws.serverless.archetypes aws-serverless-spring-archetype - 2.0.0-SNAPSHOT + 2.0.0-M1 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-2.0.0-M1 diff --git a/aws-serverless-springboot3-archetype/pom.xml b/aws-serverless-springboot3-archetype/pom.xml index 8f478b223..abf8a9a5a 100644 --- a/aws-serverless-springboot3-archetype/pom.xml +++ b/aws-serverless-springboot3-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.0.0-SNAPSHOT + 2.0.0-M1 com.amazonaws.serverless.archetypes aws-serverless-springboot3-archetype - 2.0.0-SNAPSHOT + 2.0.0-M1 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-2.0.0-M1 diff --git a/pom.xml b/pom.xml index 55d546b05..a2185f054 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazonaws.serverless aws-serverless-java-container pom - 2.0.0-SNAPSHOT + 2.0.0-M1 AWS Serverless Java container A Java framework to run Spring, Spring Boot, Jersey, Spark, and Struts applications inside AWS Lambda https://github.com/awslabs/aws-serverless-java-container @@ -37,7 +37,7 @@ https://github.com/awslabs/aws-serverless-java-container scm:git:https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-2.0.0-M1 From 5fb45c1f77a8ad687b6f6921f79f350ed5bc26f0 Mon Sep 17 00:00:00 2001 From: deki Date: Fri, 19 May 2023 14:58:41 +0000 Subject: [PATCH 396/888] chore: release - prepare for next development iteration --- aws-serverless-java-container-core/pom.xml | 4 ++-- aws-serverless-java-container-jersey/pom.xml | 8 ++++---- aws-serverless-java-container-spring/pom.xml | 8 ++++---- aws-serverless-java-container-springboot3/pom.xml | 8 ++++---- aws-serverless-jersey-archetype/pom.xml | 6 +++--- aws-serverless-spring-archetype/pom.xml | 6 +++--- aws-serverless-springboot3-archetype/pom.xml | 6 +++--- pom.xml | 4 ++-- 8 files changed, 25 insertions(+), 25 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 819cce1d6..3693ded88 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Core Allows Java applications written for a servlet container to run in AWS Lambda https://aws.amazon.com/lambda - 2.0.0-M1 + 2.0.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 2.0.0-M1 + 2.0.0-SNAPSHOT .. diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index b54d00011..d4e9f42a8 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Jersey implementation Allows Java applications written for Jersey to run in AWS Lambda https://aws.amazon.com/lambda - 2.0.0-M1 + 2.0.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 2.0.0-M1 + 2.0.0-SNAPSHOT .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.0.0-M1 + 2.0.0-SNAPSHOT com.fasterxml.jackson.core @@ -35,7 +35,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.0.0-M1 + 2.0.0-SNAPSHOT tests test-jar test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index fb7ac7423..c734576a4 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spring implementation Allows Java applications written for the Spring framework to run in AWS Lambda https://aws.amazon.com/lambda - 2.0.0-M1 + 2.0.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 2.0.0-M1 + 2.0.0-SNAPSHOT .. @@ -25,12 +25,12 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.0.0-M1 + 2.0.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container-core - 2.0.0-M1 + 2.0.0-SNAPSHOT tests test-jar test diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index 89a7d24d6..8e7d42a04 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -3,7 +3,7 @@ aws-serverless-java-container com.amazonaws.serverless - 2.0.0-M1 + 2.0.0-SNAPSHOT 4.0.0 @@ -12,7 +12,7 @@ AWS Serverless Java container support - SpringBoot 3 implementation Allows Java applications written for SpringBoot 3 to run in AWS Lambda https://aws.amazon.com/lambda - 2.0.0-M1 + 2.0.0-SNAPSHOT 6.0.9 @@ -25,12 +25,12 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.0.0-M1 + 2.0.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container-core - 2.0.0-M1 + 2.0.0-SNAPSHOT tests test-jar test diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index 7e21a9d2a..e328fee77 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.0.0-M1 + 2.0.0-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-jersey-archetype - 2.0.0-M1 + 2.0.0-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-2.0.0-M1 + HEAD diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index e6026b8a9..747ff0838 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.0.0-M1 + 2.0.0-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-spring-archetype - 2.0.0-M1 + 2.0.0-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-2.0.0-M1 + HEAD diff --git a/aws-serverless-springboot3-archetype/pom.xml b/aws-serverless-springboot3-archetype/pom.xml index abf8a9a5a..8f478b223 100644 --- a/aws-serverless-springboot3-archetype/pom.xml +++ b/aws-serverless-springboot3-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.0.0-M1 + 2.0.0-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-springboot3-archetype - 2.0.0-M1 + 2.0.0-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-2.0.0-M1 + HEAD diff --git a/pom.xml b/pom.xml index a2185f054..55d546b05 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazonaws.serverless aws-serverless-java-container pom - 2.0.0-M1 + 2.0.0-SNAPSHOT AWS Serverless Java container A Java framework to run Spring, Spring Boot, Jersey, Spark, and Struts applications inside AWS Lambda https://github.com/awslabs/aws-serverless-java-container @@ -37,7 +37,7 @@ https://github.com/awslabs/aws-serverless-java-container scm:git:https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-2.0.0-M1 + HEAD From 482a36270eb91c70b170a2f84585f566089df1a4 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 19 May 2023 16:48:43 +0200 Subject: [PATCH 397/888] chore: Maven release plugin configuration --- pom.xml | 34 +++++++++++++++++++++++++++------- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/pom.xml b/pom.xml index 55d546b05..dbc784417 100644 --- a/pom.xml +++ b/pom.xml @@ -238,6 +238,7 @@ maven-release-plugin 3.0.0 + serverless-java-container-release clean verify install true chore: release - @@ -285,13 +286,7 @@ - release-sign-artifacts - - - performRelease - true - - + serverless-java-container-release @@ -308,6 +303,31 @@ + + org.apache.maven.plugins + maven-javadoc-plugin + + + attach-javadocs + + jar + + + + + + org.apache.maven.plugins + maven-source-plugin + 3.2.1 + + + attach-sources + + jar-no-fork + + + + From 4782761e7fb0553d6f5ba3e18bf542ec90704c21 Mon Sep 17 00:00:00 2001 From: deki Date: Fri, 19 May 2023 15:19:58 +0000 Subject: [PATCH 398/888] chore: release - prepare release aws-serverless-java-container-2.0.0-M1 --- aws-serverless-java-container-core/pom.xml | 4 ++-- aws-serverless-java-container-jersey/pom.xml | 8 ++++---- aws-serverless-java-container-spring/pom.xml | 8 ++++---- aws-serverless-java-container-springboot3/pom.xml | 8 ++++---- aws-serverless-jersey-archetype/pom.xml | 6 +++--- aws-serverless-spring-archetype/pom.xml | 6 +++--- aws-serverless-springboot3-archetype/pom.xml | 6 +++--- pom.xml | 4 ++-- 8 files changed, 25 insertions(+), 25 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 3693ded88..819cce1d6 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Core Allows Java applications written for a servlet container to run in AWS Lambda https://aws.amazon.com/lambda - 2.0.0-SNAPSHOT + 2.0.0-M1 com.amazonaws.serverless aws-serverless-java-container - 2.0.0-SNAPSHOT + 2.0.0-M1 .. diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index d4e9f42a8..b54d00011 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Jersey implementation Allows Java applications written for Jersey to run in AWS Lambda https://aws.amazon.com/lambda - 2.0.0-SNAPSHOT + 2.0.0-M1 com.amazonaws.serverless aws-serverless-java-container - 2.0.0-SNAPSHOT + 2.0.0-M1 .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.0.0-SNAPSHOT + 2.0.0-M1 com.fasterxml.jackson.core @@ -35,7 +35,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.0.0-SNAPSHOT + 2.0.0-M1 tests test-jar test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index c734576a4..fb7ac7423 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spring implementation Allows Java applications written for the Spring framework to run in AWS Lambda https://aws.amazon.com/lambda - 2.0.0-SNAPSHOT + 2.0.0-M1 com.amazonaws.serverless aws-serverless-java-container - 2.0.0-SNAPSHOT + 2.0.0-M1 .. @@ -25,12 +25,12 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.0.0-SNAPSHOT + 2.0.0-M1 com.amazonaws.serverless aws-serverless-java-container-core - 2.0.0-SNAPSHOT + 2.0.0-M1 tests test-jar test diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index 8e7d42a04..89a7d24d6 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -3,7 +3,7 @@ aws-serverless-java-container com.amazonaws.serverless - 2.0.0-SNAPSHOT + 2.0.0-M1 4.0.0 @@ -12,7 +12,7 @@ AWS Serverless Java container support - SpringBoot 3 implementation Allows Java applications written for SpringBoot 3 to run in AWS Lambda https://aws.amazon.com/lambda - 2.0.0-SNAPSHOT + 2.0.0-M1 6.0.9 @@ -25,12 +25,12 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.0.0-SNAPSHOT + 2.0.0-M1 com.amazonaws.serverless aws-serverless-java-container-core - 2.0.0-SNAPSHOT + 2.0.0-M1 tests test-jar test diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index e328fee77..7e21a9d2a 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.0.0-SNAPSHOT + 2.0.0-M1 com.amazonaws.serverless.archetypes aws-serverless-jersey-archetype - 2.0.0-SNAPSHOT + 2.0.0-M1 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-2.0.0-M1 diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index 747ff0838..e6026b8a9 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.0.0-SNAPSHOT + 2.0.0-M1 com.amazonaws.serverless.archetypes aws-serverless-spring-archetype - 2.0.0-SNAPSHOT + 2.0.0-M1 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-2.0.0-M1 diff --git a/aws-serverless-springboot3-archetype/pom.xml b/aws-serverless-springboot3-archetype/pom.xml index 8f478b223..abf8a9a5a 100644 --- a/aws-serverless-springboot3-archetype/pom.xml +++ b/aws-serverless-springboot3-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.0.0-SNAPSHOT + 2.0.0-M1 com.amazonaws.serverless.archetypes aws-serverless-springboot3-archetype - 2.0.0-SNAPSHOT + 2.0.0-M1 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-2.0.0-M1 diff --git a/pom.xml b/pom.xml index dbc784417..3dadc5ed1 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazonaws.serverless aws-serverless-java-container pom - 2.0.0-SNAPSHOT + 2.0.0-M1 AWS Serverless Java container A Java framework to run Spring, Spring Boot, Jersey, Spark, and Struts applications inside AWS Lambda https://github.com/awslabs/aws-serverless-java-container @@ -37,7 +37,7 @@ https://github.com/awslabs/aws-serverless-java-container scm:git:https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-2.0.0-M1 From 379f48bc32078d3a7a29063927012a00cd8b375f Mon Sep 17 00:00:00 2001 From: deki Date: Fri, 19 May 2023 15:20:00 +0000 Subject: [PATCH 399/888] chore: release - prepare for next development iteration --- aws-serverless-java-container-core/pom.xml | 4 ++-- aws-serverless-java-container-jersey/pom.xml | 8 ++++---- aws-serverless-java-container-spring/pom.xml | 8 ++++---- aws-serverless-java-container-springboot3/pom.xml | 8 ++++---- aws-serverless-jersey-archetype/pom.xml | 6 +++--- aws-serverless-spring-archetype/pom.xml | 6 +++--- aws-serverless-springboot3-archetype/pom.xml | 6 +++--- pom.xml | 4 ++-- 8 files changed, 25 insertions(+), 25 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 819cce1d6..3693ded88 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Core Allows Java applications written for a servlet container to run in AWS Lambda https://aws.amazon.com/lambda - 2.0.0-M1 + 2.0.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 2.0.0-M1 + 2.0.0-SNAPSHOT .. diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index b54d00011..d4e9f42a8 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Jersey implementation Allows Java applications written for Jersey to run in AWS Lambda https://aws.amazon.com/lambda - 2.0.0-M1 + 2.0.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 2.0.0-M1 + 2.0.0-SNAPSHOT .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.0.0-M1 + 2.0.0-SNAPSHOT com.fasterxml.jackson.core @@ -35,7 +35,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.0.0-M1 + 2.0.0-SNAPSHOT tests test-jar test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index fb7ac7423..c734576a4 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spring implementation Allows Java applications written for the Spring framework to run in AWS Lambda https://aws.amazon.com/lambda - 2.0.0-M1 + 2.0.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 2.0.0-M1 + 2.0.0-SNAPSHOT .. @@ -25,12 +25,12 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.0.0-M1 + 2.0.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container-core - 2.0.0-M1 + 2.0.0-SNAPSHOT tests test-jar test diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index 89a7d24d6..8e7d42a04 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -3,7 +3,7 @@ aws-serverless-java-container com.amazonaws.serverless - 2.0.0-M1 + 2.0.0-SNAPSHOT 4.0.0 @@ -12,7 +12,7 @@ AWS Serverless Java container support - SpringBoot 3 implementation Allows Java applications written for SpringBoot 3 to run in AWS Lambda https://aws.amazon.com/lambda - 2.0.0-M1 + 2.0.0-SNAPSHOT 6.0.9 @@ -25,12 +25,12 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.0.0-M1 + 2.0.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container-core - 2.0.0-M1 + 2.0.0-SNAPSHOT tests test-jar test diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index 7e21a9d2a..e328fee77 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.0.0-M1 + 2.0.0-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-jersey-archetype - 2.0.0-M1 + 2.0.0-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-2.0.0-M1 + HEAD diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index e6026b8a9..747ff0838 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.0.0-M1 + 2.0.0-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-spring-archetype - 2.0.0-M1 + 2.0.0-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-2.0.0-M1 + HEAD diff --git a/aws-serverless-springboot3-archetype/pom.xml b/aws-serverless-springboot3-archetype/pom.xml index abf8a9a5a..8f478b223 100644 --- a/aws-serverless-springboot3-archetype/pom.xml +++ b/aws-serverless-springboot3-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.0.0-M1 + 2.0.0-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-springboot3-archetype - 2.0.0-M1 + 2.0.0-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-2.0.0-M1 + HEAD diff --git a/pom.xml b/pom.xml index 3dadc5ed1..dbc784417 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazonaws.serverless aws-serverless-java-container pom - 2.0.0-M1 + 2.0.0-SNAPSHOT AWS Serverless Java container A Java framework to run Spring, Spring Boot, Jersey, Spark, and Struts applications inside AWS Lambda https://github.com/awslabs/aws-serverless-java-container @@ -37,7 +37,7 @@ https://github.com/awslabs/aws-serverless-java-container scm:git:https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-2.0.0-M1 + HEAD From 02321c4cff616554c7266a843d494b9e8a523bd0 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 19 May 2023 17:30:26 +0200 Subject: [PATCH 400/888] refactor: reintegrate fileupload support This reverts commit 9c05f852 --- aws-serverless-java-container-core/pom.xml | 6 +-- .../servlet/AwsHttpServletRequest.java | 39 ++++++++++++++++++- .../AwsProxyHttpServletRequestFormTest.java | 4 -- .../testutils/AwsProxyRequestBuilder.java | 7 +++- .../proxy/jersey/JerseyParamEncodingTest.java | 1 - .../proxy/spring/SpringAwsProxyTest.java | 2 - 6 files changed, 47 insertions(+), 12 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 3693ded88..6fedd2e11 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -67,9 +67,9 @@ - commons-io - commons-io - 2.12.0 + org.apache.commons + commons-fileupload2 + 2.0-SNAPSHOT diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java index 44fd84a96..99b2782c5 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java @@ -22,6 +22,11 @@ import com.amazonaws.serverless.proxy.model.MultiValuedTreeMap; import com.amazonaws.services.lambda.runtime.Context; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; +import org.apache.commons.fileupload2.FileItem; +import org.apache.commons.fileupload2.FileUploadException; +import org.apache.commons.fileupload2.disk.DiskFileItemFactory; +import org.apache.commons.fileupload2.jaksrvlt.JakSrvltFileUpload; +import org.apache.commons.io.FilenameUtils; import org.apache.commons.io.IOUtils; import org.apache.commons.io.input.NullInputStream; import org.slf4j.Logger; @@ -503,7 +508,39 @@ protected Map> getFormUrlEncodedParametersMap() { @SuppressFBWarnings({"FILE_UPLOAD_FILENAME", "WEAK_FILENAMEUTILS"}) protected Map getMultipartFormParametersMap() { - throw new UnsupportedOperationException(); + if (multipartFormParameters != null) { + return multipartFormParameters; + } + if (!JakSrvltFileUpload.isMultipartContent(this)) { // isMultipartContent also checks the content type + multipartFormParameters = new HashMap<>(); + return multipartFormParameters; + } + Timer.start("SERVLET_REQUEST_GET_MULTIPART_PARAMS"); + multipartFormParameters = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); + + JakSrvltFileUpload upload = new JakSrvltFileUpload(new DiskFileItemFactory()); + + try { + List items = upload.parseRequest(this); + for (FileItem item : items) { + String fileName = FilenameUtils.getName(item.getName()); + AwsProxyRequestPart newPart = new AwsProxyRequestPart(item.get()); + newPart.setName(item.getFieldName()); + newPart.setSubmittedFileName(fileName); + newPart.setContentType(item.getContentType()); + newPart.setSize(item.getSize()); + item.getHeaders().getHeaderNames().forEachRemaining(h -> { + newPart.addHeader(h, item.getHeaders().getHeader(h)); + }); + + multipartFormParameters.put(item.getFieldName(), newPart); + } + } catch (FileUploadException e) { + Timer.stop("SERVLET_REQUEST_GET_MULTIPART_PARAMS"); + log.error("Could not read multipart upload file", e); + } + Timer.stop("SERVLET_REQUEST_GET_MULTIPART_PARAMS"); + return multipartFormParameters; } protected String[] getQueryParamValues(MultiValuedTreeMap qs, String key, boolean isCaseSensitive) { diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestFormTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestFormTest.java index efe32ba2a..989066328 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestFormTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestFormTest.java @@ -8,7 +8,6 @@ import org.apache.hc.core5.http.ContentType; import org.apache.hc.core5.http.HttpEntity; import org.apache.hc.client5.http.entity.mime.MultipartEntityBuilder; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import jakarta.servlet.ServletException; @@ -52,7 +51,6 @@ public class AwsProxyHttpServletRequestFormTest { .build(); private static final String ENCODED_FORM_ENTITY = PART_KEY_1 + "=" + ENCODED_VALUE + "&" + PART_KEY_2 + "=" + PART_VALUE_2; - @Disabled("Disabled until new release of commons-fileupload based on Jakarta APIs") @Test void postForm_getParam_getEncodedFullValue() { try { @@ -69,7 +67,6 @@ void postForm_getParam_getEncodedFullValue() { } } - @Disabled("Disabled until new release of commons-fileupload based on Jakarta APIs") @Test void postForm_getParts_parsing() { try { @@ -89,7 +86,6 @@ void postForm_getParts_parsing() { } } - @Disabled("Disabled until new release of commons-fileupload based on Jakarta APIs") @Test void multipart_getParts_binary() { try { diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/testutils/AwsProxyRequestBuilder.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/testutils/AwsProxyRequestBuilder.java index 725fada8f..9df66a891 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/testutils/AwsProxyRequestBuilder.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/testutils/AwsProxyRequestBuilder.java @@ -155,7 +155,12 @@ public AwsProxyRequestBuilder form(String key, String value) { } public AwsProxyRequestBuilder formFilePart(String fieldName, String fileName, byte[] content) throws IOException { - throw new UnsupportedOperationException(); + if (multipartBuilder == null) { + multipartBuilder = MultipartEntityBuilder.create(); + } + multipartBuilder.addPart(fieldName, new ByteArrayBody(content, fileName)); + buildMultipartBody(); + return this; } public AwsProxyRequestBuilder formTextFieldPart(String fieldName, String fieldValue) diff --git a/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyParamEncodingTest.java b/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyParamEncodingTest.java index 6c575da6c..9dc1ab32a 100644 --- a/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyParamEncodingTest.java +++ b/aws-serverless-java-container-jersey/src/test/java/com/amazonaws/serverless/proxy/jersey/JerseyParamEncodingTest.java @@ -263,7 +263,6 @@ void queryParam_listOfString_expectCorrectLength(String reqType) { validateSingleValueModel(resp, "3"); } - @Disabled("Disabled until new release of commons-fileupload based on Jakarta APIs") @MethodSource("data") @ParameterizedTest void multipart_getFileSize_expectCorrectLength(String reqType) diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringAwsProxyTest.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringAwsProxyTest.java index f78d43812..1101efc8c 100644 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringAwsProxyTest.java +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringAwsProxyTest.java @@ -19,7 +19,6 @@ import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.commons.codec.binary.Base64; import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; import org.springframework.web.servlet.DispatcherServlet; @@ -469,7 +468,6 @@ void contextPath_generateLink_returnsCorrectPath(String reqType) { SpringLambdaContainerHandler.getContainerConfig().setUseStageAsServletContext(false); } - @Disabled("Disabled until new release of commons-fileupload based on Jakarta APIs") @MethodSource("data") @ParameterizedTest void multipart_getFileName_returnsCorrectFileName(String reqType) From a1054e9be5e3ad43fcf761c0e21c5bcf3d906bb5 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 19 May 2023 20:32:06 +0200 Subject: [PATCH 401/888] doc: add Spring Boot 3 quick start to README --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 9c483ae27..33622db3d 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,7 @@ Currently the following versions are maintained: Follow the quick start guides in [our wiki](https://github.com/awslabs/aws-serverless-java-container/wiki) to integrate Serverless Java Container with your project: * [Spring quick start](https://github.com/awslabs/aws-serverless-java-container/wiki/Quick-start---Spring) * [Spring Boot 2 quick start](https://github.com/awslabs/aws-serverless-java-container/wiki/Quick-start---Spring-Boot2) +* [Spring Boot 3 quick start](https://github.com/awslabs/aws-serverless-java-container/wiki/Quick-start---Spring-Boot3) * [Apache Struts quick start](https://github.com/awslabs/aws-serverless-java-container/wiki/Quick-start---Struts) * [Jersey quick start](https://github.com/awslabs/aws-serverless-java-container/wiki/Quick-start---Jersey) * [Spark quick start](https://github.com/awslabs/aws-serverless-java-container/wiki/Quick-start---Spark) From 46312b7e765a2a8db90401c4b5021b8ae47cbd61 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 19 May 2023 18:37:00 +0000 Subject: [PATCH 402/888] chore(deps): bump maven-surefire-plugin from 3.0.0 to 3.1.0 Bumps [maven-surefire-plugin](https://github.com/apache/maven-surefire) from 3.0.0 to 3.1.0. - [Release notes](https://github.com/apache/maven-surefire/releases) - [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.0.0...surefire-3.1.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-surefire-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index dbc784417..0745c0a37 100644 --- a/pom.xml +++ b/pom.xml @@ -206,7 +206,7 @@ org.apache.maven.plugins maven-surefire-plugin - 3.0.0 + 3.1.0 org.apache.maven.plugins From da6af0f08ff5f2416cd7abfac4b681aa3ecaecfc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 May 2023 04:56:53 +0000 Subject: [PATCH 403/888] chore(deps): bump maven-source-plugin from 3.2.1 to 3.3.0 Bumps [maven-source-plugin](https://github.com/apache/maven-source-plugin) from 3.2.1 to 3.3.0. - [Commits](https://github.com/apache/maven-source-plugin/compare/maven-source-plugin-3.2.1...maven-source-plugin-3.3.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-source-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index dbc784417..eb5ef3953 100644 --- a/pom.xml +++ b/pom.xml @@ -318,7 +318,7 @@ org.apache.maven.plugins maven-source-plugin - 3.2.1 + 3.3.0 attach-sources From 25c58d8297af593e7fefad2338ba90cfd8c384ee Mon Sep 17 00:00:00 2001 From: Salman Date: Mon, 22 May 2023 23:54:36 +0200 Subject: [PATCH 404/888] junit version changed --- .../archetype-resources/build.gradle | 3 ++- .../resources/archetype-resources/pom.xml | 20 +++++++++++++++---- .../test/java/StreamLambdaHandlerTest.java | 8 ++++---- 3 files changed, 22 insertions(+), 9 deletions(-) diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle index 3b18be4cf..1f27cfcba 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle @@ -23,7 +23,8 @@ dependencies { testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") testImplementation("org.apache.httpcomponents.client5:httpclient5:5.2.1") - testImplementation("junit:junit:4.13.2") + testImplementation(platform('org.junit:junit-bom:5.9.3')) + testImplementation('org.junit.jupiter:junit-jupiter') } task buildZip(type: Zip) { diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml index 4196c83e4..25ba806b3 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml @@ -1,4 +1,4 @@ -#set($dollar = '$') + 4.0.0 @@ -17,6 +17,7 @@ 3.1.2 2.15.1 + 5.9.3 @@ -80,13 +81,24 @@ - junit - junit - 4.13.2 + org.junit.jupiter + junit-jupiter test + + + + org.junit + junit-bom + ${junit.version} + import + pom + + + + shaded-jar diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java index 4a6b00b03..53db9b161 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java @@ -7,8 +7,8 @@ import com.amazonaws.serverless.proxy.model.AwsProxyResponse; import com.amazonaws.services.lambda.runtime.Context; -import org.junit.BeforeClass; -import org.junit.Test; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; import jakarta.ws.rs.HttpMethod; import jakarta.ws.rs.core.HttpHeaders; @@ -19,7 +19,7 @@ import java.io.IOException; import java.io.InputStream; -import static org.junit.Assert.*; +import static org.junit.jupiter.api.Assertions.*; public class StreamLambdaHandlerTest { @@ -27,7 +27,7 @@ public class StreamLambdaHandlerTest { private static StreamLambdaHandler handler; private static Context lambdaContext; - @BeforeClass + @BeforeAll public static void setUp() { handler = new StreamLambdaHandler(); lambdaContext = new MockLambdaContext(); From 5a77b5def4329d2175eac14c382335c2f70d6a6d Mon Sep 17 00:00:00 2001 From: Salman Date: Wed, 24 May 2023 00:26:25 +0200 Subject: [PATCH 405/888] junit version changed for other archetypes and test classes --- .../archetype-resources/build.gradle | 8 ++++++-- .../resources/archetype-resources/pom.xml | 2 +- .../archetype-resources/build.gradle | 7 ++++++- .../resources/archetype-resources/pom.xml | 18 +++++++++++++++--- .../test/java/StreamLambdaHandlerTest.java | 9 ++++----- .../archetype-resources/build.gradle | 7 ++++++- .../resources/archetype-resources/pom.xml | 19 +++++++++++++++---- .../test/java/StreamLambdaHandlerTest.java | 8 ++++---- .../archetype-resources/build.gradle | 7 ++++++- .../resources/archetype-resources/pom.xml | 18 +++++++++++++++--- .../test/java/StreamLambdaHandlerTest.java | 9 ++++----- .../archetype-resources/build.gradle | 7 ++++++- .../resources/archetype-resources/pom.xml | 19 +++++++++++++++---- .../test/java/StreamLambdaHandlerTest.java | 9 ++++----- 14 files changed, 107 insertions(+), 40 deletions(-) diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle index 1f27cfcba..2b4c85b79 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle @@ -23,8 +23,8 @@ dependencies { testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") testImplementation("org.apache.httpcomponents.client5:httpclient5:5.2.1") - testImplementation(platform('org.junit:junit-bom:5.9.3')) - testImplementation('org.junit.jupiter:junit-jupiter') + testImplementation(platform("org.junit:junit-bom:5.9.3")) + testImplementation("org.junit.jupiter:junit-jupiter") } task buildZip(type: Zip) { @@ -35,4 +35,8 @@ task buildZip(type: Zip) { } } +test { + useJUnitPlatform() +} + build.dependsOn buildZip diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml index 25ba806b3..ea7661066 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml @@ -1,4 +1,4 @@ - +#set($dollar = '$') 4.0.0 diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle index b2d0dbe0f..6c27a2dd6 100644 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle @@ -14,7 +14,8 @@ dependencies { testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") testImplementation("org.apache.httpcomponents.client5:httpclient5:5.2.1") - testImplementation("junit:junit:4.13.2") + testImplementation(platform("org.junit:junit-bom:5.9.3")) + testImplementation("org.junit.jupiter:junit-jupiter") } task buildZip(type: Zip) { @@ -32,4 +33,8 @@ task buildZip(type: Zip) { } } +test { + useJUnitPlatform() +} + build.dependsOn buildZip diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml index a4281cde3..afa8a6a5c 100644 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml @@ -18,6 +18,7 @@ 1.8 2.15.1 2.9.4 + 5.9.3 @@ -54,13 +55,24 @@ - junit - junit - 4.13.2 + org.junit.jupiter + junit-jupiter test + + + + org.junit + junit-bom + ${junit.version} + import + pom + + + + shaded-jar diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java index 4a6b00b03..26d5360bf 100644 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java +++ b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java @@ -7,8 +7,8 @@ import com.amazonaws.serverless.proxy.model.AwsProxyResponse; import com.amazonaws.services.lambda.runtime.Context; -import org.junit.BeforeClass; -import org.junit.Test; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; import jakarta.ws.rs.HttpMethod; import jakarta.ws.rs.core.HttpHeaders; @@ -19,15 +19,14 @@ import java.io.IOException; import java.io.InputStream; -import static org.junit.Assert.*; - +import static org.junit.jupiter.api.Assertions.*; public class StreamLambdaHandlerTest { private static StreamLambdaHandler handler; private static Context lambdaContext; - @BeforeClass + @BeforeAll public static void setUp() { handler = new StreamLambdaHandler(); lambdaContext = new MockLambdaContext(); diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index 45f39c264..5d3bd4f43 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -19,7 +19,8 @@ dependencies { testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") testImplementation("org.apache.httpcomponents.client5:httpclient5:5.2.1") - testImplementation("junit:junit:4.13.2") + testImplementation(platform("org.junit:junit-bom:5.9.3")) + testImplementation("org.junit.jupiter:junit-jupiter") } task buildZip(type: Zip) { @@ -30,4 +31,8 @@ task buildZip(type: Zip) { } } +test { + useJUnitPlatform() +} + build.dependsOn buildZip diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index d7e6e5637..614d6b6d7 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -17,7 +17,7 @@ 1.8 1.8 6.0.9 - 4.13.2 + 5.9.3 2.20.0 @@ -92,14 +92,25 @@ - junit - junit - \${junit.version} + org.junit.jupiter + junit-jupiter test + + + + org.junit + junit-bom + ${junit.version} + import + pom + + + + shaded-jar diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java index 4a6b00b03..53db9b161 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java @@ -7,8 +7,8 @@ import com.amazonaws.serverless.proxy.model.AwsProxyResponse; import com.amazonaws.services.lambda.runtime.Context; -import org.junit.BeforeClass; -import org.junit.Test; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; import jakarta.ws.rs.HttpMethod; import jakarta.ws.rs.core.HttpHeaders; @@ -19,7 +19,7 @@ import java.io.IOException; import java.io.InputStream; -import static org.junit.Assert.*; +import static org.junit.jupiter.api.Assertions.*; public class StreamLambdaHandlerTest { @@ -27,7 +27,7 @@ public class StreamLambdaHandlerTest { private static StreamLambdaHandler handler; private static Context lambdaContext; - @BeforeClass + @BeforeAll public static void setUp() { handler = new StreamLambdaHandler(); lambdaContext = new MockLambdaContext(); diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle index 94897b2d6..0daf12985 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle @@ -13,7 +13,8 @@ dependencies { testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") testImplementation("org.apache.httpcomponents.client5:httpclient5:5.2.1") - testImplementation("junit:junit:4.13.2") + testImplementation(platform("org.junit:junit-bom:5.9.3")) + testImplementation("org.junit.jupiter:junit-jupiter") } task buildZip(type: Zip) { @@ -26,4 +27,8 @@ task buildZip(type: Zip) { } } +test { + useJUnitPlatform() +} + build.dependsOn buildZip diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml index 745498e5e..7ded34e43 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml @@ -21,6 +21,7 @@ 17 + 5.9.3 @@ -56,13 +57,24 @@ - junit - junit - 4.13.2 + org.junit.jupiter + junit-jupiter test + + + + org.junit + junit-bom + ${junit.version} + import + pom + + + + shaded-jar diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java index 4a6b00b03..26d5360bf 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java @@ -7,8 +7,8 @@ import com.amazonaws.serverless.proxy.model.AwsProxyResponse; import com.amazonaws.services.lambda.runtime.Context; -import org.junit.BeforeClass; -import org.junit.Test; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; import jakarta.ws.rs.HttpMethod; import jakarta.ws.rs.core.HttpHeaders; @@ -19,15 +19,14 @@ import java.io.IOException; import java.io.InputStream; -import static org.junit.Assert.*; - +import static org.junit.jupiter.api.Assertions.*; public class StreamLambdaHandlerTest { private static StreamLambdaHandler handler; private static Context lambdaContext; - @BeforeClass + @BeforeAll public static void setUp() { handler = new StreamLambdaHandler(); lambdaContext = new MockLambdaContext(); diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle index 71f270097..de4af4974 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle @@ -43,7 +43,8 @@ dependencies { testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") testImplementation("org.apache.httpcomponents.client5:httpclient5:5.2.1") - testImplementation('junit:junit:4.13.2') + testImplementation(platform("org.junit:junit-bom:5.9.3")) + testImplementation("org.junit.jupiter:junit-jupiter") testImplementation('org.apache.struts:struts2-junit-plugin:6.1.2') { exclude group: 'org.apache.struts', module: 'struts2-core' } @@ -57,4 +58,8 @@ task buildZip(type: Zip) { } } +test { + useJUnitPlatform() +} + build.dependsOn buildZip diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml index bb558e1cb..021fbd3cb 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml @@ -17,7 +17,7 @@ 1.8 6.1.2 2.15.1 - 4.13.2 + 5.9.3 2.20.0 @@ -134,13 +134,24 @@ - junit - junit - \${junit.version} + org.junit.jupiter + junit-jupiter test + + + + org.junit + junit-bom + ${junit.version} + import + pom + + + + diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java index fd63840b5..875867778 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java @@ -9,8 +9,8 @@ import com.amazonaws.serverless.proxy.struts.StrutsLambdaHandler; -import org.junit.BeforeClass; -import org.junit.Test; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; import jakarta.ws.rs.HttpMethod; import jakarta.ws.rs.core.HttpHeaders; @@ -21,15 +21,14 @@ import java.io.IOException; import java.io.InputStream; -import static org.junit.Assert.*; - +import static org.junit.jupiter.api.Assertions.*; public class StreamLambdaHandlerTest { private static StrutsLambdaHandler handler; private static Context lambdaContext; - @BeforeClass + @BeforeAll public static void setUp() { handler = new StrutsLambdaHandler(); lambdaContext = new MockLambdaContext(); From da9fc8194e1c8fd1f7393c340c3ff5452f231dd4 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 26 May 2023 16:27:03 +0200 Subject: [PATCH 406/888] chore(deps): Update maven-assembly-plugin to 3.6.0 --- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/jersey/pet-store/pom.xml | 2 +- samples/spark/pet-store/pom.xml | 2 +- samples/spring/pet-store/pom.xml | 2 +- samples/springboot3/pet-store/pom.xml | 2 +- samples/struts/pet-store/pom.xml | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml index ea7661066..e625d8fc0 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml @@ -172,7 +172,7 @@ org.apache.maven.plugins maven-assembly-plugin - 3.5.0 + 3.6.0 zip-assembly diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index 614d6b6d7..fbe609008 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -195,7 +195,7 @@ org.apache.maven.plugins maven-assembly-plugin - 3.3.0 + 3.6.0 zip-assembly diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml index 7ded34e43..2cf94de41 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml @@ -155,7 +155,7 @@ org.apache.maven.plugins maven-assembly-plugin - 3.5.0 + 3.6.0 zip-assembly diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml index 021fbd3cb..d8c4e6964 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml @@ -157,7 +157,7 @@ org.apache.maven.plugins maven-assembly-plugin - 3.3.0 + 3.6.0 src/main/assembly/dist.xml diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index 585fb9d2e..31c068c33 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -150,7 +150,7 @@ org.apache.maven.plugins maven-assembly-plugin - 3.5.0 + 3.6.0 zip-assembly diff --git a/samples/spark/pet-store/pom.xml b/samples/spark/pet-store/pom.xml index dc49e00ee..785642251 100644 --- a/samples/spark/pet-store/pom.xml +++ b/samples/spark/pet-store/pom.xml @@ -138,7 +138,7 @@ org.apache.maven.plugins maven-assembly-plugin - 3.3.0 + 3.6.0 zip-assembly diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index c08616f6e..ee061e2a1 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -179,7 +179,7 @@ org.apache.maven.plugins maven-assembly-plugin - 3.5.0 + 3.6.0 zip-assembly diff --git a/samples/springboot3/pet-store/pom.xml b/samples/springboot3/pet-store/pom.xml index b58483d77..fd5a76d8c 100644 --- a/samples/springboot3/pet-store/pom.xml +++ b/samples/springboot3/pet-store/pom.xml @@ -127,7 +127,7 @@ org.apache.maven.plugins maven-assembly-plugin - 3.5.0 + 3.6.0 zip-assembly diff --git a/samples/struts/pet-store/pom.xml b/samples/struts/pet-store/pom.xml index 1ec2bb4a9..723131629 100644 --- a/samples/struts/pet-store/pom.xml +++ b/samples/struts/pet-store/pom.xml @@ -148,7 +148,7 @@ org.apache.maven.plugins maven-assembly-plugin - 3.3.0 + 3.6.0 src/main/assembly/dist.xml From 013babd8465b7fe5b2c35e12094d5465a9997242 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Tue, 30 May 2023 09:42:21 +0200 Subject: [PATCH 407/888] chore(deps): Update maven-dependency-plugin to 3.6.0 --- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/jersey/pet-store/pom.xml | 2 +- samples/spark/pet-store/pom.xml | 2 +- samples/spring/pet-store/pom.xml | 2 +- samples/springboot3/pet-store/pom.xml | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml index e625d8fc0..31f5a2f1c 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml @@ -154,7 +154,7 @@ org.apache.maven.plugins maven-dependency-plugin - 3.5.0 + 3.6.0 copy-dependencies diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml index afa8a6a5c..942de07b1 100644 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml @@ -143,7 +143,7 @@ org.apache.maven.plugins maven-dependency-plugin - 3.2.0 + 3.6.0 copy-dependencies diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index fbe609008..4150f629f 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -177,7 +177,7 @@ org.apache.maven.plugins maven-dependency-plugin - 3.5.0 + 3.6.0 copy-dependencies diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml index 2cf94de41..d5b1d7953 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml @@ -137,7 +137,7 @@ org.apache.maven.plugins maven-dependency-plugin - 3.5.0 + 3.6.0 copy-dependencies diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index 31c068c33..3c953f445 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -132,7 +132,7 @@ org.apache.maven.plugins maven-dependency-plugin - 3.5.0 + 3.6.0 copy-dependencies diff --git a/samples/spark/pet-store/pom.xml b/samples/spark/pet-store/pom.xml index 785642251..71ad04bfb 100644 --- a/samples/spark/pet-store/pom.xml +++ b/samples/spark/pet-store/pom.xml @@ -120,7 +120,7 @@ org.apache.maven.plugins maven-dependency-plugin - 3.2.0 + 3.6.0 copy-dependencies diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index ee061e2a1..9958e007c 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -161,7 +161,7 @@ org.apache.maven.plugins maven-dependency-plugin - 3.5.0 + 3.6.0 copy-dependencies diff --git a/samples/springboot3/pet-store/pom.xml b/samples/springboot3/pet-store/pom.xml index fd5a76d8c..ba3edc696 100644 --- a/samples/springboot3/pet-store/pom.xml +++ b/samples/springboot3/pet-store/pom.xml @@ -109,7 +109,7 @@ org.apache.maven.plugins maven-dependency-plugin - 3.5.0 + 3.6.0 copy-dependencies From de7714c4e75127a81496f68f06e5a843f5b80453 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 5 Jun 2023 04:56:41 +0000 Subject: [PATCH 408/888] chore(deps): bump maven-release-plugin from 3.0.0 to 3.0.1 Bumps [maven-release-plugin](https://github.com/apache/maven-release) from 3.0.0 to 3.0.1. - [Release notes](https://github.com/apache/maven-release/releases) - [Commits](https://github.com/apache/maven-release/compare/maven-release-3.0.0...maven-release-3.0.1) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-release-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 753c3b6af..4fa0f10ac 100644 --- a/pom.xml +++ b/pom.xml @@ -236,7 +236,7 @@ org.apache.maven.plugins maven-release-plugin - 3.0.0 + 3.0.1 serverless-java-container-release clean verify install From e29d8bae830fe15365e08ce08deb2b0a9fddbe9a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Jun 2023 04:57:26 +0000 Subject: [PATCH 409/888] chore(deps): bump maven-surefire-plugin from 3.1.0 to 3.1.2 Bumps [maven-surefire-plugin](https://github.com/apache/maven-surefire) from 3.1.0 to 3.1.2. - [Release notes](https://github.com/apache/maven-surefire/releases) - [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.1.0...surefire-3.1.2) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-surefire-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 753c3b6af..4a49b226b 100644 --- a/pom.xml +++ b/pom.xml @@ -206,7 +206,7 @@ org.apache.maven.plugins maven-surefire-plugin - 3.1.0 + 3.1.2 org.apache.maven.plugins From 9e367e515db08ab40aa36a76a78cc86b1cd4d084 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Tue, 13 Jun 2023 08:10:19 +0200 Subject: [PATCH 410/888] chore(deps): use latest Commons Fileupload SNAPSHOT --- aws-serverless-java-container-core/pom.xml | 4 ++-- .../proxy/internal/servlet/AwsHttpServletRequest.java | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 6fedd2e11..4b217850c 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -68,8 +68,8 @@ org.apache.commons - commons-fileupload2 - 2.0-SNAPSHOT + commons-fileupload2-jakarta + 2.0.0-SNAPSHOT diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java index 99b2782c5..06786f7fb 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java @@ -25,7 +25,7 @@ import org.apache.commons.fileupload2.FileItem; import org.apache.commons.fileupload2.FileUploadException; import org.apache.commons.fileupload2.disk.DiskFileItemFactory; -import org.apache.commons.fileupload2.jaksrvlt.JakSrvltFileUpload; +import org.apache.commons.fileupload2.jakarta.JakartaServletFileUpload; import org.apache.commons.io.FilenameUtils; import org.apache.commons.io.IOUtils; import org.apache.commons.io.input.NullInputStream; @@ -511,14 +511,14 @@ protected Map getMultipartFormParametersMap() { if (multipartFormParameters != null) { return multipartFormParameters; } - if (!JakSrvltFileUpload.isMultipartContent(this)) { // isMultipartContent also checks the content type + if (!JakartaServletFileUpload.isMultipartContent(this)) { // isMultipartContent also checks the content type multipartFormParameters = new HashMap<>(); return multipartFormParameters; } Timer.start("SERVLET_REQUEST_GET_MULTIPART_PARAMS"); multipartFormParameters = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); - JakSrvltFileUpload upload = new JakSrvltFileUpload(new DiskFileItemFactory()); + JakartaServletFileUpload upload = new JakartaServletFileUpload(DiskFileItemFactory.builder().get()); try { List items = upload.parseRequest(this); From a49bd6539dcdc5dfd53c1a11e7a1b30bda5542cf Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Tue, 13 Jun 2023 12:56:01 +0200 Subject: [PATCH 411/888] fix: as per Servlet spec getSession() creates a session if none exists (see https://stackoverflow.com/a/75471488/3156607) --- .../proxy/internal/servlet/AwsHttpServletRequest.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java index 06786f7fb..e69bb0cd4 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java @@ -144,11 +144,13 @@ public HttpSession getSession(boolean b) { } + /** + * as per Servlet spec this method creates a session if none exists + * @return exisiting or new http session + */ @Override public HttpSession getSession() { - log.debug("Trying to access session. Lambda functions are stateless and should not rely on the session"); - // as per Servlet spec this method should create a session if none exists, so we should change it to getSession(true) in the future - return this.session; + return getSession(true); } From 54659f05a86186482c7e41cb338ca4f1b73e8c1a Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Tue, 13 Jun 2023 14:08:05 +0200 Subject: [PATCH 412/888] chore(deps): Update Jackson dependency to 2.15.2 --- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/build.gradle | 4 ++-- .../src/main/resources/archetype-resources/pom.xml | 2 +- pom.xml | 2 +- samples/jersey/pet-store/build.gradle | 2 +- samples/jersey/pet-store/pom.xml | 2 +- samples/spark/pet-store/build.gradle | 2 +- samples/spark/pet-store/pom.xml | 2 +- samples/spring/pet-store/build.gradle | 2 +- samples/struts/pet-store/build.gradle | 4 ++-- samples/struts/pet-store/pom.xml | 2 +- 15 files changed, 17 insertions(+), 17 deletions(-) diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle index 2b4c85b79..28c81422b 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle @@ -8,7 +8,7 @@ repositories { dependencies { implementation ( 'com.amazonaws.serverless:aws-serverless-java-container-jersey:[2.0-SNAPSHOT,)', - 'com.fasterxml.jackson.core:jackson-databind:2.15.1', + 'com.fasterxml.jackson.core:jackson-databind:2.15.2', ) implementation("org.glassfish.jersey.media:jersey-media-json-jackson:3.1.2") { diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml index 31f5a2f1c..e4b248019 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 3.1.2 - 2.15.1 + 2.15.2 5.9.3 diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle index 6c27a2dd6..d198e93b0 100644 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle @@ -9,7 +9,7 @@ dependencies { implementation ( 'com.sparkjava:spark-core:2.9.4', 'com.amazonaws.serverless:aws-serverless-java-container-spark:[1.0,)', - 'com.fasterxml.jackson.core:jackson-databind:2.15.1', + 'com.fasterxml.jackson.core:jackson-databind:2.15.2', ) testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml index 942de07b1..56038d396 100644 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 1.8 - 2.15.1 + 2.15.2 2.9.4 5.9.3 diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index 5d3bd4f43..ec1354e7d 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -13,7 +13,7 @@ dependencies { 'org.apache.logging.log4j:log4j-core:2.20.0', 'org.apache.logging.log4j:log4j-api:2.20.0', 'org.apache.logging.log4j:log4j-slf4j-impl:2.20.0', - 'com.fasterxml.jackson.core:jackson-databind:2.15.1', + 'com.fasterxml.jackson.core:jackson-databind:2.15.2', 'com.amazonaws:aws-lambda-java-log4j2:1.5.1', ) diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle index de4af4974..126ccc530 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle @@ -34,8 +34,8 @@ dependencies { exclude group: 'org.apache.logging.log4j', module: 'log4j-api' } implementation ('org.hibernate.validator:hibernate-validator:6.1.7.Final') - implementation ('com.fasterxml.jackson.core:jackson-databind:2.15.1') - implementation ('com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.15.1') + implementation ('com.fasterxml.jackson.core:jackson-databind:2.15.2') + implementation ('com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.15.2') implementation ('org.apache.logging.log4j:log4j-core:2.20.0') implementation ('org.apache.logging.log4j:log4j-api:2.20.0') implementation ('org.apache.logging.log4j:log4j-slf4j-impl:2.20.0') diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml index d8c4e6964..0a9b32bf3 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 1.8 6.1.2 - 2.15.1 + 2.15.2 5.9.3 2.20.0 diff --git a/pom.xml b/pom.xml index 89ad3396e..3a6edf223 100644 --- a/pom.xml +++ b/pom.xml @@ -78,7 +78,7 @@ 0.7 8.2.1 - 2.15.1 + 2.15.2 2.0.7 5.9.3 5.3.1 diff --git a/samples/jersey/pet-store/build.gradle b/samples/jersey/pet-store/build.gradle index bc4742cd8..3bd7dff51 100644 --- a/samples/jersey/pet-store/build.gradle +++ b/samples/jersey/pet-store/build.gradle @@ -8,7 +8,7 @@ repositories { dependencies { implementation ( 'com.amazonaws.serverless:aws-serverless-java-container-jersey:[2.0-SNAPSHOT,)', - 'com.fasterxml.jackson.core:jackson-databind:2.15.1', + 'com.fasterxml.jackson.core:jackson-databind:2.15.2', ) implementation("org.glassfish.jersey.media:jersey-media-json-jackson:3.1.2") { diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index 3c953f445..c7c4a687f 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -27,7 +27,7 @@ 1.8 1.8 3.1.2 - 2.15.1 + 2.15.2 diff --git a/samples/spark/pet-store/build.gradle b/samples/spark/pet-store/build.gradle index 840e71163..2d0dfaea0 100644 --- a/samples/spark/pet-store/build.gradle +++ b/samples/spark/pet-store/build.gradle @@ -9,7 +9,7 @@ dependencies { implementation ( 'com.sparkjava:spark-core:2.9.4', 'com.amazonaws.serverless:aws-serverless-java-container-spark:[1.0,)', - 'com.fasterxml.jackson.core:jackson-databind:2.15.1', + 'com.fasterxml.jackson.core:jackson-databind:2.15.2', ) } diff --git a/samples/spark/pet-store/pom.xml b/samples/spark/pet-store/pom.xml index 71ad04bfb..025640202 100644 --- a/samples/spark/pet-store/pom.xml +++ b/samples/spark/pet-store/pom.xml @@ -26,7 +26,7 @@ 1.8 1.8 - 2.15.1 + 2.15.2 2.9.1 diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index f92b56bc7..fb6c82f62 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -13,7 +13,7 @@ dependencies { 'org.apache.logging.log4j:log4j-core:2.20.0', 'org.apache.logging.log4j:log4j-api:2.20.0', 'org.apache.logging.log4j:log4j-slf4j-impl:2.20.0', - 'com.fasterxml.jackson.core:jackson-databind:2.15.1', + 'com.fasterxml.jackson.core:jackson-databind:2.15.2', 'com.amazonaws:aws-lambda-java-log4j2:1.5.1', ) } diff --git a/samples/struts/pet-store/build.gradle b/samples/struts/pet-store/build.gradle index a146276a8..182cedd30 100644 --- a/samples/struts/pet-store/build.gradle +++ b/samples/struts/pet-store/build.gradle @@ -22,8 +22,8 @@ dependencies { 'org.hibernate.validator:hibernate-validator:6.1.7.Final', 'org.glassfish:javax.el:3.0.0', 'javax.el:javax.el-api:3.0.0', - 'com.fasterxml.jackson.core:jackson-databind:2.15.1', - 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.15.1', + 'com.fasterxml.jackson.core:jackson-databind:2.15.2', + 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.15.2', 'org.apache.logging.log4j:log4j-core:2.20.0', 'org.apache.logging.log4j:log4j-api:2.20.0', 'com.amazonaws:aws-lambda-java-log4j2:1.5.1', diff --git a/samples/struts/pet-store/pom.xml b/samples/struts/pet-store/pom.xml index 723131629..e2d963b70 100644 --- a/samples/struts/pet-store/pom.xml +++ b/samples/struts/pet-store/pom.xml @@ -27,7 +27,7 @@ 1.8 1.8 6.1.2 - 2.15.1 + 2.15.2 4.13.2 2.20.0 From 7098a4840124a0a1a5af6fa24d777754d01ab3bf Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Thu, 15 Jun 2023 07:19:28 +0200 Subject: [PATCH 413/888] chore(deps): Update Struts dependency to 6.1.2.1 (CVE-2023-34149) --- aws-serverless-java-container-struts/pom.xml | 2 +- .../main/resources/archetype-resources/build.gradle | 10 +++++----- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/struts/pet-store/build.gradle | 8 ++++---- samples/struts/pet-store/pom.xml | 2 +- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/aws-serverless-java-container-struts/pom.xml b/aws-serverless-java-container-struts/pom.xml index 4f1c10b7f..37df0f2a8 100644 --- a/aws-serverless-java-container-struts/pom.xml +++ b/aws-serverless-java-container-struts/pom.xml @@ -15,7 +15,7 @@ - 6.1.2 + 6.1.2.1 diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle index 126ccc530..5c5dc0db4 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle @@ -18,19 +18,19 @@ dependencies { exclude group: 'org.apache.logging.log4j', module: 'log4j-api' exclude group: 'org.apache.logging.log4j', module: 'log4j-to-slf4j' } - implementation ('org.apache.struts:struts2-convention-plugin:6.1.2') { + implementation ('org.apache.struts:struts2-convention-plugin:6.1.2.1') { exclude group: 'org.apache.struts', module: 'struts2-core' } - implementation ('org.apache.struts:struts2-rest-plugin:6.1.2') { + implementation ('org.apache.struts:struts2-rest-plugin:6.1.2.1') { exclude group: 'org.apache.struts', module: 'struts2-core' } - implementation ('org.apache.struts:struts2-bean-validation-plugin:6.1.2') { + implementation ('org.apache.struts:struts2-bean-validation-plugin:6.1.2.1') { exclude group: 'org.apache.struts', module: 'struts2-core' } implementation ('com.jgeppert.struts2:struts2-aws-lambda-support-plugin:1.4.2') { exclude group: 'org.apache.struts', module: 'struts2-core' } - implementation ('org.apache.struts:struts2-core:6.1.2') { + implementation ('org.apache.struts:struts2-core:6.1.2.1') { exclude group: 'org.apache.logging.log4j', module: 'log4j-api' } implementation ('org.hibernate.validator:hibernate-validator:6.1.7.Final') @@ -45,7 +45,7 @@ dependencies { testImplementation("org.apache.httpcomponents.client5:httpclient5:5.2.1") testImplementation(platform("org.junit:junit-bom:5.9.3")) testImplementation("org.junit.jupiter:junit-jupiter") - testImplementation('org.apache.struts:struts2-junit-plugin:6.1.2') { + testImplementation('org.apache.struts:struts2-junit-plugin:6.1.2.1') { exclude group: 'org.apache.struts', module: 'struts2-core' } } diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml index 0a9b32bf3..8c3d30e7c 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml @@ -15,7 +15,7 @@ 1.8 1.8 - 6.1.2 + 6.1.2.1 2.15.2 5.9.3 2.20.0 diff --git a/samples/struts/pet-store/build.gradle b/samples/struts/pet-store/build.gradle index 182cedd30..b428d9847 100644 --- a/samples/struts/pet-store/build.gradle +++ b/samples/struts/pet-store/build.gradle @@ -14,10 +14,10 @@ configurations { dependencies { implementation ( 'com.amazonaws.serverless:aws-serverless-java-container-struts:[1.9,)', - 'org.apache.struts:struts2-convention-plugin:6.1.2', - 'org.apache.struts:struts2-rest-plugin:6.1.2', - 'org.apache.struts:struts2-bean-validation-plugin:6.1.2', - 'org.apache.struts:struts2-junit-plugin:6.1.2', + 'org.apache.struts:struts2-convention-plugin:6.1.2.1', + 'org.apache.struts:struts2-rest-plugin:6.1.2.1', + 'org.apache.struts:struts2-bean-validation-plugin:6.1.2.1', + 'org.apache.struts:struts2-junit-plugin:6.1.2.1', 'com.jgeppert.struts2:struts2-aws-lambda-support-plugin:1.4.2', 'org.hibernate.validator:hibernate-validator:6.1.7.Final', 'org.glassfish:javax.el:3.0.0', diff --git a/samples/struts/pet-store/pom.xml b/samples/struts/pet-store/pom.xml index e2d963b70..80dff8fdd 100644 --- a/samples/struts/pet-store/pom.xml +++ b/samples/struts/pet-store/pom.xml @@ -26,7 +26,7 @@ 1.8 1.8 - 6.1.2 + 6.1.2.1 2.15.2 4.13.2 2.20.0 From c767944c47c5b4adb334ad925e3c4efd5a1a0e97 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 19 Jun 2023 10:20:55 +0200 Subject: [PATCH 414/888] chore(deps): use latest Commons Fileupload SNAPSHOT --- .../proxy/internal/servlet/AwsHttpServletRequest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java index e69bb0cd4..df6627cbd 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java @@ -22,9 +22,9 @@ import com.amazonaws.serverless.proxy.model.MultiValuedTreeMap; import com.amazonaws.services.lambda.runtime.Context; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; -import org.apache.commons.fileupload2.FileItem; -import org.apache.commons.fileupload2.FileUploadException; -import org.apache.commons.fileupload2.disk.DiskFileItemFactory; +import org.apache.commons.fileupload2.core.FileItem; +import org.apache.commons.fileupload2.core.FileUploadException; +import org.apache.commons.fileupload2.core.disk.DiskFileItemFactory; import org.apache.commons.fileupload2.jakarta.JakartaServletFileUpload; import org.apache.commons.io.FilenameUtils; import org.apache.commons.io.IOUtils; From 3103dc6212c0e3563a56c6482df4f403c1c1889f Mon Sep 17 00:00:00 2001 From: Oleg Zhurakousky Date: Wed, 14 Jun 2023 14:10:28 +0200 Subject: [PATCH 415/888] GH-577 Ensure listeners are notified after dispatch Resolves #577 --- .../serverless/proxy/internal/servlet/AwsAsyncContext.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContext.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContext.java index 4a46a70fa..7e3642ef0 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContext.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContext.java @@ -74,8 +74,8 @@ public void dispatch() { throw new IllegalStateException("Dispatching already started"); } dispatched.set(true); - notifyListeners(NotificationType.START_ASYNC, null); handler.doFilter(req, res, ((AwsServletContext)req.getServletContext()).getServletForPath(req.getRequestURI())); + notifyListeners(NotificationType.START_ASYNC, null); } catch (ServletException | IOException e) { notifyListeners(NotificationType.ERROR, e); } From 55be6718a78b56ca08bafc59c5796a57a5267882 Mon Sep 17 00:00:00 2001 From: Oleg Zhurakousky Date: Thu, 22 Jun 2023 15:09:14 +0200 Subject: [PATCH 416/888] Add test --- .../servlet/AwsHttpServletResponse.java | 4 ++++ .../proxy/spring/ServletAppTest.java | 11 ++++++++++ .../spring/servletapp/MessageController.java | 20 +++++++++++++++++++ 3 files changed, 35 insertions(+) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponse.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponse.java index c46af7a9b..f82d062a7 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponse.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponse.java @@ -322,6 +322,10 @@ public void write(int b) throws IOException { } } + @Override + public void flush() throws IOException { + flushBuffer(); + } @Override public void close() diff --git a/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/ServletAppTest.java b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/ServletAppTest.java index aacf5444c..b87c80ce6 100644 --- a/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/ServletAppTest.java +++ b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/ServletAppTest.java @@ -38,6 +38,17 @@ public void initServletAppTest(String reqType) { handler = new LambdaHandler(type); } + @MethodSource("data") + @ParameterizedTest + void asyncRequest(String reqType) { + initServletAppTest(reqType); + AwsProxyRequestBuilder req = new AwsProxyRequestBuilder("/async", "POST") + .json() + .body("{\"name\":\"bob\"}"); + AwsProxyResponse resp = handler.handleRequest(req, lambdaContext); + assertEquals("{\"name\":\"BOB\"}", resp.getBody()); + } + @MethodSource("data") @ParameterizedTest void helloRequest_respondsWithSingleMessage(String reqType) { diff --git a/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/MessageController.java b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/MessageController.java index 927822a4e..a40d2c206 100644 --- a/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/MessageController.java +++ b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/MessageController.java @@ -5,9 +5,13 @@ import org.springframework.http.ResponseEntity; import org.springframework.validation.Errors; import org.springframework.web.bind.annotation.*; +import org.springframework.web.context.request.async.DeferredResult; import org.springframework.web.server.ResponseStatusException; import jakarta.validation.Valid; +import reactor.core.publisher.Mono; + +import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -18,6 +22,22 @@ public class MessageController { public static final String UTF8_RESPONSE = "öüäß фрыцшщ"; public static final String EX_MESSAGE = "404 exception message"; + + @RequestMapping(path="/hi", method=RequestMethod.GET, produces = {"text/plain"}) + public Mono hi() { + return Mono.just(HELLO_MESSAGE); + } + + @SuppressWarnings({ "unchecked", "rawtypes" }) + @RequestMapping(path = "/async", method = RequestMethod.POST) + @ResponseBody + public DeferredResult> asyncResult(@RequestBody Map value) { + DeferredResult result = new DeferredResult<>(); + result.setResult(Collections.singletonMap("name", value.get("name").toUpperCase())); + return result; + } + + @RequestMapping(path="/hello", method=RequestMethod.GET, produces = {"text/plain"}) public String hello() { return HELLO_MESSAGE; From 58df143c3032e076f2266b16e14e4ff14ff79830 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Thu, 22 Jun 2023 16:34:45 +0200 Subject: [PATCH 417/888] chore(deps): Update Spring dependencies (framework to 6.0.10, security to 6.1.1, boot to 3.1.1) --- aws-serverless-java-container-spring/pom.xml | 4 ++-- aws-serverless-java-container-springboot3/pom.xml | 6 +++--- .../src/main/resources/archetype-resources/build.gradle | 4 ++-- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/spring/pet-store/build.gradle | 4 ++-- samples/spring/pet-store/pom.xml | 2 +- samples/springboot3/pet-store/build.gradle | 2 +- samples/springboot3/pet-store/pom.xml | 2 +- 10 files changed, 15 insertions(+), 15 deletions(-) diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index c734576a4..9f01bd60f 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -16,8 +16,8 @@ - 6.0.9 - 6.1.0 + 6.0.10 + 6.1.1 diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index 8e7d42a04..a6a0e1880 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -15,9 +15,9 @@ 2.0.0-SNAPSHOT - 6.0.9 - 3.1.0 - 6.1.0 + 6.0.10 + 3.1.1 + 6.1.1 diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index ec1354e7d..7c14db0dd 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -7,8 +7,8 @@ repositories { dependencies { implementation ( - 'org.springframework:spring-webmvc:6.0.9', - 'org.springframework:spring-context:6.0.9', + 'org.springframework:spring-webmvc:6.0.10', + 'org.springframework:spring-context:6.0.10', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[2.0-SNAPSHOT,)', 'org.apache.logging.log4j:log4j-core:2.20.0', 'org.apache.logging.log4j:log4j-api:2.20.0', diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index 4150f629f..8c1ff6466 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 1.8 - 6.0.9 + 6.0.10 5.9.3 2.20.0 diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle index 0daf12985..6de5e677e 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle @@ -7,7 +7,7 @@ repositories { dependencies { implementation ( - 'org.springframework.boot:spring-boot-starter-web:3.1.0', + 'org.springframework.boot:spring-boot-starter-web:3.1.1', 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:[2.0-SNAPSHOT,)', ) diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml index d5b1d7953..17772cddd 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ org.springframework.boot spring-boot-starter-parent - 3.1.0 + 3.1.1 diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index fb6c82f62..82048da2b 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -7,8 +7,8 @@ repositories { dependencies { implementation ( - 'org.springframework:spring-webmvc:6.0.9', - 'org.springframework:spring-context:6.0.9', + 'org.springframework:spring-webmvc:6.0.10', + 'org.springframework:spring-context:6.0.10', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[2.0-SNAPSHOT,)', 'org.apache.logging.log4j:log4j-core:2.20.0', 'org.apache.logging.log4j:log4j-api:2.20.0', diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index 9958e007c..ff6e2c939 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -24,7 +24,7 @@ - 6.0.9 + 6.0.10 4.13.2 2.20.0 17 diff --git a/samples/springboot3/pet-store/build.gradle b/samples/springboot3/pet-store/build.gradle index 216fc83ec..6d0270f40 100644 --- a/samples/springboot3/pet-store/build.gradle +++ b/samples/springboot3/pet-store/build.gradle @@ -7,7 +7,7 @@ repositories { dependencies { implementation ( - implementation('org.springframework.boot:spring-boot-starter-web:3.1.0') { + implementation('org.springframework.boot:spring-boot-starter-web:3.1.1') { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat' }, 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:[2.0-SNAPSHOT,)', diff --git a/samples/springboot3/pet-store/pom.xml b/samples/springboot3/pet-store/pom.xml index ba3edc696..8a0053fdd 100644 --- a/samples/springboot3/pet-store/pom.xml +++ b/samples/springboot3/pet-store/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 3.1.0 + 3.1.1 From 1a85422619ab1fe8a942a3035c3c1037c9b0b334 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Thu, 22 Jun 2023 16:40:14 +0200 Subject: [PATCH 418/888] chore(deps): remove old Junit dependency from sample (unused) --- samples/spring/pet-store/pom.xml | 8 -------- 1 file changed, 8 deletions(-) diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index ff6e2c939..281a00219 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -25,7 +25,6 @@ 6.0.10 - 4.13.2 2.20.0 17 17 @@ -86,13 +85,6 @@ aws-lambda-java-log4j2 1.5.1 - - - junit - junit - ${junit.version} - test - From b422a376caa1d36d37f9616ca8dfab01e63aa1dd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 22 Jun 2023 14:42:21 +0000 Subject: [PATCH 419/888] chore(deps): bump dependency-check-maven from 8.2.1 to 8.3.1 Bumps [dependency-check-maven](https://github.com/jeremylong/DependencyCheck) from 8.2.1 to 8.3.1. - [Release notes](https://github.com/jeremylong/DependencyCheck/releases) - [Changelog](https://github.com/jeremylong/DependencyCheck/blob/main/CHANGELOG.md) - [Commits](https://github.com/jeremylong/DependencyCheck/compare/v8.2.1...v8.3.1) --- updated-dependencies: - dependency-name: org.owasp:dependency-check-maven dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 3a6edf223..f43fff9ec 100644 --- a/pom.xml +++ b/pom.xml @@ -77,7 +77,7 @@ 0.7 - 8.2.1 + 8.3.1 2.15.2 2.0.7 5.9.3 From 56dd87b52d6413a5c9981ebaa2b224ad03691ed7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 22 Jun 2023 14:42:32 +0000 Subject: [PATCH 420/888] chore(deps-dev): bump mockito-core from 5.3.1 to 5.4.0 Bumps [mockito-core](https://github.com/mockito/mockito) from 5.3.1 to 5.4.0. - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](https://github.com/mockito/mockito/compare/v5.3.1...v5.4.0) --- updated-dependencies: - dependency-name: org.mockito:mockito-core dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 3a6edf223..26566413b 100644 --- a/pom.xml +++ b/pom.xml @@ -81,7 +81,7 @@ 2.15.2 2.0.7 5.9.3 - 5.3.1 + 5.4.0 1.3 UTF-8 From 43c66bf4e822149a4c6bd6253316b0949a301046 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 26 Jun 2023 06:37:54 +0200 Subject: [PATCH 421/888] chore(deps): update maven-shade-plugin to 3.5.0 --- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/jersey/pet-store/pom.xml | 2 +- samples/spring/pet-store/pom.xml | 2 +- samples/springboot3/pet-store/pom.xml | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml index e4b248019..a59bebfbe 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml @@ -107,7 +107,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.4.1 + 3.5.0 false diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index 8c1ff6466..b9d3d72df 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -119,7 +119,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.4.1 + 3.5.0 package diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml index 17772cddd..2be47cff2 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml @@ -83,7 +83,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.4.1 + 3.5.0 false diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index c7c4a687f..786163929 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -85,7 +85,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.4.1 + 3.5.0 false diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index 281a00219..684623a59 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -95,7 +95,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.4.1 + 3.5.0 package diff --git a/samples/springboot3/pet-store/pom.xml b/samples/springboot3/pet-store/pom.xml index 8a0053fdd..d246cb406 100644 --- a/samples/springboot3/pet-store/pom.xml +++ b/samples/springboot3/pet-store/pom.xml @@ -55,7 +55,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.4.1 + 3.5.0 false From 52feba7c2e1daad4d2c227ada73077d756d42e7c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 Jun 2023 04:56:36 +0000 Subject: [PATCH 422/888] chore(deps): bump commons-codec from 1.15 to 1.16.0 Bumps [commons-codec](https://github.com/apache/commons-codec) from 1.15 to 1.16.0. - [Changelog](https://github.com/apache/commons-codec/blob/master/RELEASE-NOTES.txt) - [Commits](https://github.com/apache/commons-codec/compare/rel/commons-codec-1.15...rel/commons-codec-1.16.0) --- updated-dependencies: - dependency-name: commons-codec:commons-codec dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- aws-serverless-java-container-jersey/pom.xml | 2 +- aws-serverless-java-container-spring/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index d4e9f42a8..246c4134c 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -64,7 +64,7 @@ commons-codec commons-codec - 1.15 + 1.16.0 test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 9f01bd60f..1423ddf22 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -53,7 +53,7 @@ commons-codec commons-codec - 1.15 + 1.16.0 test From a5dcb552501757ad1da8a331f76b02cf15832600 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 Jun 2023 04:56:40 +0000 Subject: [PATCH 423/888] chore(deps): bump hibernate-validator from 8.0.0.Final to 8.0.1.Final Bumps [hibernate-validator](https://github.com/hibernate/hibernate-validator) from 8.0.0.Final to 8.0.1.Final. - [Changelog](https://github.com/hibernate/hibernate-validator/blob/main/changelog.txt) - [Commits](https://github.com/hibernate/hibernate-validator/compare/8.0.0.Final...8.0.1.Final) --- updated-dependencies: - dependency-name: org.hibernate.validator:hibernate-validator dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- aws-serverless-java-container-spring/pom.xml | 2 +- aws-serverless-java-container-springboot3/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 9f01bd60f..25b90b881 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -75,7 +75,7 @@ org.hibernate.validator hibernate-validator - 8.0.0.Final + 8.0.1.Final test diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index a6a0e1880..7b0afefa6 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -155,7 +155,7 @@ org.hibernate.validator hibernate-validator - 8.0.0.Final + 8.0.1.Final test From 31643df429cb4d5b6e0e48a37e3d8b90e3914bec Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 Jun 2023 04:56:45 +0000 Subject: [PATCH 424/888] chore(deps): bump maven-clean-plugin from 3.2.0 to 3.3.1 Bumps [maven-clean-plugin](https://github.com/apache/maven-clean-plugin) from 3.2.0 to 3.3.1. - [Release notes](https://github.com/apache/maven-clean-plugin/releases) - [Commits](https://github.com/apache/maven-clean-plugin/compare/maven-clean-plugin-3.2.0...maven-clean-plugin-3.3.1) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-clean-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 69950a0f5..7a97652c9 100644 --- a/pom.xml +++ b/pom.xml @@ -211,7 +211,7 @@ org.apache.maven.plugins maven-clean-plugin - 3.2.0 + 3.3.1 org.apache.maven.plugins From 207d4a7c17c8d35faa320895963d48872add6cea Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 Jun 2023 04:56:58 +0000 Subject: [PATCH 425/888] chore(deps): bump spring-security.version from 6.1.0 to 6.1.1 Bumps `spring-security.version` from 6.1.0 to 6.1.1. Updates `spring-security-web` from 6.1.0 to 6.1.1 - [Release notes](https://github.com/spring-projects/spring-security/releases) - [Changelog](https://github.com/spring-projects/spring-security/blob/main/RELEASE.adoc) - [Commits](https://github.com/spring-projects/spring-security/compare/6.1.0...6.1.1) Updates `spring-security-config` from 6.1.1 to 6.1.1 - [Release notes](https://github.com/spring-projects/spring-security/releases) - [Changelog](https://github.com/spring-projects/spring-security/blob/main/RELEASE.adoc) - [Commits](https://github.com/spring-projects/spring-security/compare/6.1.1...6.1.1) --- updated-dependencies: - dependency-name: org.springframework.security:spring-security-web dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.springframework.security:spring-security-config dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- aws-serverless-java-container-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 4b217850c..ca4f689e2 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -75,7 +75,7 @@ org.springframework.security spring-security-web - 6.1.0 + 6.1.1 test From fb9b2cb7188c57288bf00d50023fe71bcd88f295 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Thu, 29 Jun 2023 09:16:35 +0200 Subject: [PATCH 426/888] chore: add OWASP suppression for CVE-2023-35116 (false positive as per https://github.com/FasterXML/jackson-databind/issues/3972) --- aws-serverless-java-container-core/pom.xml | 3 +++ aws-serverless-java-container-jersey/pom.xml | 3 +++ aws-serverless-java-container-spark/pom.xml | 3 +++ aws-serverless-java-container-spring/pom.xml | 3 +++ .../pom.xml | 3 +++ aws-serverless-java-container-struts/pom.xml | 3 +++ owasp-suppression.xml | 27 +++++++++++++++++++ 7 files changed, 45 insertions(+) create mode 100644 owasp-suppression.xml diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index ca4f689e2..3eed2022e 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -169,6 +169,9 @@ ${dependencyCheck.version} true + + ${project.basedir}/../owasp-suppression.xml + 7 false diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index 246c4134c..db3f9dd0c 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -192,6 +192,9 @@ ${dependencyCheck.version} true + + ${project.basedir}/../owasp-suppression.xml + 7 false diff --git a/aws-serverless-java-container-spark/pom.xml b/aws-serverless-java-container-spark/pom.xml index 8dd1abe28..8987d66aa 100644 --- a/aws-serverless-java-container-spark/pom.xml +++ b/aws-serverless-java-container-spark/pom.xml @@ -114,6 +114,9 @@ ${dependencyCheck.version} true + + ${project.basedir}/../owasp-suppression.xml + 7 false diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 7b051a6f7..9a2b077e8 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -235,6 +235,9 @@ ${dependencyCheck.version} true + + ${project.basedir}/../owasp-suppression.xml + 7 false diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index 7b0afefa6..507f6b8e2 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -265,6 +265,9 @@ ${dependencyCheck.version} true + + ${project.basedir}/../owasp-suppression.xml + 7 false diff --git a/aws-serverless-java-container-struts/pom.xml b/aws-serverless-java-container-struts/pom.xml index 37df0f2a8..cba005e90 100644 --- a/aws-serverless-java-container-struts/pom.xml +++ b/aws-serverless-java-container-struts/pom.xml @@ -182,6 +182,9 @@ ${dependencyCheck.version} true + + ${project.basedir}/../owasp-suppression.xml + 7 false diff --git a/owasp-suppression.xml b/owasp-suppression.xml new file mode 100644 index 000000000..0f16cbd34 --- /dev/null +++ b/owasp-suppression.xml @@ -0,0 +1,27 @@ + + + + + + + ^pkg:maven/com.fasterxml.jackson.core/jackson-databind@.*$ + CVE-2023-35116 + + \ No newline at end of file From bc106c79a7948309761005e4ad5c8325366be761 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Jul 2023 04:03:42 +0000 Subject: [PATCH 427/888] chore(deps): bump spotbugs-maven-plugin from 4.7.3.4 to 4.7.3.5 Bumps [spotbugs-maven-plugin](https://github.com/spotbugs/spotbugs-maven-plugin) from 4.7.3.4 to 4.7.3.5. - [Release notes](https://github.com/spotbugs/spotbugs-maven-plugin/releases) - [Commits](https://github.com/spotbugs/spotbugs-maven-plugin/compare/spotbugs-maven-plugin-4.7.3.4...spotbugs-maven-plugin-4.7.3.5) --- updated-dependencies: - dependency-name: com.github.spotbugs:spotbugs-maven-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 7a97652c9..6eb0965ce 100644 --- a/pom.xml +++ b/pom.xml @@ -249,7 +249,7 @@ com.github.spotbugs spotbugs-maven-plugin - 4.7.3.4 + 4.7.3.5 + + org.springframework.cloud + spring-cloud-function-serverless-web + 4.1.0-SNAPSHOT + com.amazonaws.serverless aws-serverless-java-container-core diff --git a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/SpringDelegatingLambdaContainerHandler.java b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/SpringDelegatingLambdaContainerHandler.java new file mode 100644 index 000000000..9647aad2f --- /dev/null +++ b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/SpringDelegatingLambdaContainerHandler.java @@ -0,0 +1,119 @@ +package com.amazonaws.serverless.proxy.spring; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.nio.charset.StandardCharsets; +import java.util.Map; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; + +import org.springframework.cloud.function.serverless.web.ProxyHttpServletRequest; +import org.springframework.cloud.function.serverless.web.ProxyMvc; + +import com.amazonaws.serverless.proxy.AwsHttpApiV2SecurityContextWriter; +import com.amazonaws.serverless.proxy.AwsProxySecurityContextWriter; +import com.amazonaws.serverless.proxy.RequestReader; +import com.amazonaws.serverless.proxy.SecurityContextWriter; +import com.amazonaws.serverless.proxy.internal.servlet.AwsHttpServletResponse; +import com.amazonaws.serverless.proxy.internal.servlet.AwsProxyHttpServletResponseWriter; +import com.amazonaws.serverless.proxy.model.AwsProxyRequest; +import com.amazonaws.serverless.proxy.model.HttpApiV2ProxyRequest; +import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.RequestStreamHandler; +import com.fasterxml.jackson.databind.ObjectMapper; + +import jakarta.servlet.http.HttpServletRequest; + +/* + * Copyright 2023 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance + * with the License. A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file 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. + */ + +/** + * An implementation of {@link RequestStreamHandler} which delegates to + * Spring Cloud Function serverless web module managed by Spring team. + * + * It requires no sub-classing from the user other then being identified as "Handler". + * The configuration class(es) should be provided via MAIN_CLASS environment variable. + * + */ +public class SpringDelegatingLambdaContainerHandler implements RequestStreamHandler { + + private final Class[] startupClasses; + + private final ProxyMvc mvc; + + private final ObjectMapper mapper; + + private final AwsProxyHttpServletResponseWriter responseWriter; + + public SpringDelegatingLambdaContainerHandler(Class... startupClasses) { + this.startupClasses = startupClasses; + this.mvc = ProxyMvc.INSTANCE(this.startupClasses); + this.mapper = new ObjectMapper(); + this.responseWriter = new AwsProxyHttpServletResponseWriter(); + } + + @SuppressWarnings({"rawtypes" }) + @Override + public void handleRequest(InputStream input, OutputStream output, Context lambdaContext) throws IOException { + Map request = mapper.readValue(input, Map.class); + SecurityContextWriter securityWriter = "2.0".equals(request.get("version")) + ? new AwsHttpApiV2SecurityContextWriter() : new AwsProxySecurityContextWriter(); + HttpServletRequest httpServletRequest = "2.0".equals(request.get("version")) + ? this.generateRequest2(request, lambdaContext, securityWriter) : this.generateRequest(request, lambdaContext, securityWriter); + + CountDownLatch latch = new CountDownLatch(1); + AwsHttpServletResponse httpServletResponse = new AwsHttpServletResponse(httpServletRequest, latch); + try { + mvc.service(httpServletRequest, httpServletResponse); + latch.await(10, TimeUnit.SECONDS); + mapper.writeValue(output, responseWriter.writeResponse(httpServletResponse, lambdaContext)); + } + catch (Exception e) { + throw new IllegalStateException(e); + } + } + + + @SuppressWarnings({ "unchecked", "rawtypes" }) + private HttpServletRequest generateRequest(Map request, Context lambdaContext, SecurityContextWriter securityWriter) { + AwsProxyRequest v1Request = this.mapper.convertValue(request, AwsProxyRequest.class); + + ProxyHttpServletRequest httpRequest = new ProxyHttpServletRequest(this.mvc.getApplicationContext().getServletContext(), + v1Request.getHttpMethod(), v1Request.getPath()); + httpRequest.setContentType("application/json"); + httpRequest.setContent(v1Request.getBody().getBytes(StandardCharsets.UTF_8)); + httpRequest.setAttribute(RequestReader.API_GATEWAY_CONTEXT_PROPERTY, v1Request.getRequestContext()); + httpRequest.setAttribute(RequestReader.API_GATEWAY_STAGE_VARS_PROPERTY, v1Request.getStageVariables()); + httpRequest.setAttribute(RequestReader.API_GATEWAY_EVENT_PROPERTY, v1Request); + httpRequest.setAttribute(RequestReader.ALB_CONTEXT_PROPERTY, v1Request.getRequestContext().getElb()); + httpRequest.setAttribute(RequestReader.LAMBDA_CONTEXT_PROPERTY, lambdaContext); + httpRequest.setAttribute(RequestReader.JAX_SECURITY_CONTEXT_PROPERTY, securityWriter.writeSecurityContext(v1Request, lambdaContext)); + return httpRequest; + } + + @SuppressWarnings({ "rawtypes", "unchecked" }) + public HttpServletRequest generateRequest2(Map request, Context lambdaContext, SecurityContextWriter securityWriter) { + HttpApiV2ProxyRequest v2Request = this.mapper.convertValue(request, HttpApiV2ProxyRequest.class); + ProxyHttpServletRequest httpRequest = new ProxyHttpServletRequest(this.mvc.getApplicationContext().getServletContext(), + v2Request.getRequestContext().getHttp().getMethod(), v2Request.getRequestContext().getHttp().getPath()); + httpRequest.setContentType("application/json"); + httpRequest.setContent(v2Request.getBody().getBytes(StandardCharsets.UTF_8)); + httpRequest.setAttribute(RequestReader.HTTP_API_CONTEXT_PROPERTY, v2Request.getRequestContext()); + httpRequest.setAttribute(RequestReader.HTTP_API_STAGE_VARS_PROPERTY, v2Request.getStageVariables()); + httpRequest.setAttribute(RequestReader.HTTP_API_EVENT_PROPERTY, v2Request); + httpRequest.setAttribute(RequestReader.LAMBDA_CONTEXT_PROPERTY, lambdaContext); + httpRequest.setAttribute(RequestReader.JAX_SECURITY_CONTEXT_PROPERTY, securityWriter.writeSecurityContext(v2Request, lambdaContext)); + return httpRequest; + } +} diff --git a/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/SpringDelegatingLambdaContainerHandlerTests.java b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/SpringDelegatingLambdaContainerHandlerTests.java new file mode 100644 index 000000000..50bedc320 --- /dev/null +++ b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/SpringDelegatingLambdaContainerHandlerTests.java @@ -0,0 +1,300 @@ +package com.amazonaws.serverless.proxy.spring; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; + +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; +import org.springframework.util.CollectionUtils; + +import com.amazonaws.serverless.proxy.spring.servletapp.MessageData; +import com.amazonaws.serverless.proxy.spring.servletapp.ServletApplication; +import com.amazonaws.serverless.proxy.spring.servletapp.UserData; +import com.fasterxml.jackson.databind.ObjectMapper; + +import jakarta.ws.rs.core.HttpHeaders; + +public class SpringDelegatingLambdaContainerHandlerTests { + + private static String API_GATEWAY_EVENT = "{\n" + + " \"version\": \"1.0\",\n" + + " \"resource\": \"$default\",\n" + + " \"path\": \"/async\",\n" + + " \"httpMethod\": \"POST\",\n" + + " \"headers\": {\n" + + " \"Content-Length\": \"45\",\n" + + " \"Content-Type\": \"application/json\",\n" + + " \"Host\": \"i76bfh111.execute-api.eu-west-3.amazonaws.com\",\n" + + " \"User-Agent\": \"curl/7.79.1\",\n" + + " \"X-Amzn-Trace-Id\": \"Root=1-64087690-2151375b219d3ba3389ea84e\",\n" + + " \"X-Forwarded-For\": \"109.210.252.44\",\n" + + " \"X-Forwarded-Port\": \"443\",\n" + + " \"X-Forwarded-Proto\": \"https\",\n" + + " \"accept\": \"*/*\"\n" + + " },\n" + + " \"multiValueHeaders\": {\n" + + " \"Content-Length\": [\n" + + " \"45\"\n" + + " ],\n" + + " \"Content-Type\": [\n" + + " \"application/json\"\n" + + " ],\n" + + " \"Host\": [\n" + + " \"i76bfhczs0.execute-api.eu-west-3.amazonaws.com\"\n" + + " ],\n" + + " \"User-Agent\": [\n" + + " \"curl/7.79.1\"\n" + + " ],\n" + + " \"X-Amzn-Trace-Id\": [\n" + + " \"Root=1-64087690-2151375b219d3ba3389ea84e\"\n" + + " ],\n" + + " \"X-Forwarded-For\": [\n" + + " \"109.210.252.44\"\n" + + " ],\n" + + " \"X-Forwarded-Port\": [\n" + + " \"443\"\n" + + " ],\n" + + " \"X-Forwarded-Proto\": [\n" + + " \"https\"\n" + + " ],\n" + + " \"accept\": [\n" + + " \"*/*\"\n" + + " ]\n" + + " },\n" + + " \"queryStringParameters\": {\n" + + " \"abc\": \"xyz\",\n" + + " \"foo\": \"baz\"\n" + + " },\n" + + " \"multiValueQueryStringParameters\": {\n" + + " \"abc\": [\n" + + " \"xyz\"\n" + + " ],\n" + + " \"foo\": [\n" + + " \"bar\",\n" + + " \"baz\"\n" + + " ]\n" + + " },\n" + + " \"requestContext\": {\n" + + " \"accountId\": \"123456789098\",\n" + + " \"apiId\": \"i76bfhczs0\",\n" + + " \"domainName\": \"i76bfhc111.execute-api.eu-west-3.amazonaws.com\",\n" + + " \"domainPrefix\": \"i76bfhczs0\",\n" + + " \"extendedRequestId\": \"Bdd2ngt5iGYEMIg=\",\n" + + " \"httpMethod\": \"POST\",\n" + + " \"identity\": {\n" + + " \"accessKey\": null,\n" + + " \"accountId\": null,\n" + + " \"caller\": null,\n" + + " \"cognitoAmr\": null,\n" + + " \"cognitoAuthenticationProvider\": null,\n" + + " \"cognitoAuthenticationType\": null,\n" + + " \"cognitoIdentityId\": null,\n" + + " \"cognitoIdentityPoolId\": null,\n" + + " \"principalOrgId\": null,\n" + + " \"sourceIp\": \"109.210.252.44\",\n" + + " \"user\": null,\n" + + " \"userAgent\": \"curl/7.79.1\",\n" + + " \"userArn\": null\n" + + " },\n" + + " \"path\": \"/pets\",\n" + + " \"protocol\": \"HTTP/1.1\",\n" + + " \"requestId\": \"Bdd2ngt5iGYEMIg=\",\n" + + " \"requestTime\": \"08/Mar/2023:11:50:40 +0000\",\n" + + " \"requestTimeEpoch\": 1678276240455,\n" + + " \"resourceId\": \"$default\",\n" + + " \"resourcePath\": \"$default\",\n" + + " \"stage\": \"$default\"\n" + + " },\n" + + " \"pathParameters\": null,\n" + + " \"stageVariables\": null,\n" + + " \"body\": \"{\\\"name\\\":\\\"bob\\\"}\",\n" + + " \"isBase64Encoded\": false\n" + + "}"; + + private static String API_GATEWAY_EVENT_V2 = "{\n" + + " \"version\": \"2.0\",\n" + + " \"routeKey\": \"$default\",\n" + + " \"rawPath\": \"/my/path\",\n" + + " \"rawQueryString\": \"parameter1=value1¶meter1=value2¶meter2=value\",\n" + + " \"cookies\": [\n" + + " \"cookie1\",\n" + + " \"cookie2\"\n" + + " ],\n" + + " \"headers\": {\n" + + " \"header1\": \"value1\",\n" + + " \"header2\": \"value1,value2\"\n" + + " },\n" + + " \"queryStringParameters\": {\n" + + " \"parameter1\": \"value1,value2\",\n" + + " \"parameter2\": \"value\"\n" + + " },\n" + + " \"requestContext\": {\n" + + " \"accountId\": \"123456789012\",\n" + + " \"apiId\": \"api-id\",\n" + + " \"authentication\": {\n" + + " \"clientCert\": {\n" + + " \"clientCertPem\": \"CERT_CONTENT\",\n" + + " \"subjectDN\": \"www.example.com\",\n" + + " \"issuerDN\": \"Example issuer\",\n" + + " \"serialNumber\": \"a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1\",\n" + + " \"validity\": {\n" + + " \"notBefore\": \"May 28 12:30:02 2019 GMT\",\n" + + " \"notAfter\": \"Aug 5 09:36:04 2021 GMT\"\n" + + " }\n" + + " }\n" + + " },\n" + + " \"authorizer\": {\n" + + " \"jwt\": {\n" + + " \"claims\": {\n" + + " \"claim1\": \"value1\",\n" + + " \"claim2\": \"value2\"\n" + + " },\n" + + " \"scopes\": [\n" + + " \"scope1\",\n" + + " \"scope2\"\n" + + " ]\n" + + " }\n" + + " },\n" + + " \"domainName\": \"id.execute-api.us-east-1.amazonaws.com\",\n" + + " \"domainPrefix\": \"id\",\n" + + " \"http\": {\n" + + " \"method\": \"POST\",\n" + + " \"path\": \"/my/path\",\n" + + " \"protocol\": \"HTTP/1.1\",\n" + + " \"sourceIp\": \"IP\",\n" + + " \"userAgent\": \"agent\"\n" + + " },\n" + + " \"requestId\": \"id\",\n" + + " \"routeKey\": \"$default\",\n" + + " \"stage\": \"$default\",\n" + + " \"time\": \"12/Mar/2020:19:03:58 +0000\",\n" + + " \"timeEpoch\": 1583348638390\n" + + " },\n" + + " \"body\": \"Hello from Lambda\",\n" + + " \"pathParameters\": {\n" + + " \"parameter1\": \"value1\"\n" + + " },\n" + + " \"isBase64Encoded\": false,\n" + + " \"stageVariables\": {\n" + + " \"stageVariable1\": \"value1\",\n" + + " \"stageVariable2\": \"value2\"\n" + + " }\n" + + "}"; + + private SpringDelegatingLambdaContainerHandler handler; + + private ObjectMapper mapper = new ObjectMapper(); + + public void initServletAppTest() { + this.handler = new SpringDelegatingLambdaContainerHandler(ServletApplication.class); + } + + public static Collection data() { + return Arrays.asList(new String[]{API_GATEWAY_EVENT, API_GATEWAY_EVENT_V2}); + } + + @MethodSource("data") + @ParameterizedTest + public void testAsyncPost(String jsonEvent) throws Exception { + initServletAppTest(); + InputStream targetStream = new ByteArrayInputStream(this.generateHttpRequest(jsonEvent, "POST", "/async", "{\"name\":\"bob\"}", null)); + ByteArrayOutputStream output = new ByteArrayOutputStream(); + handler.handleRequest(targetStream, output, null); + System.out.println(output.toString(StandardCharsets.UTF_8)); + } + + @MethodSource("data") + @ParameterizedTest + public void testValidate400(String jsonEvent) throws Exception { + initServletAppTest(); + UserData ud = new UserData(); + InputStream targetStream = new ByteArrayInputStream(this.generateHttpRequest(jsonEvent, "POST", "/validate", mapper.writeValueAsString(ud), null)); + ByteArrayOutputStream output = new ByteArrayOutputStream(); + handler.handleRequest(targetStream, output, null); + System.out.println(output.toString(StandardCharsets.UTF_8)); + } + + @MethodSource("data") + @ParameterizedTest + public void testValidate200(String jsonEvent) throws Exception { + initServletAppTest(); + UserData ud = new UserData(); + ud.setFirstName("bob"); + ud.setLastName("smith"); + ud.setEmail("foo@bar.com"); + InputStream targetStream = new ByteArrayInputStream(this.generateHttpRequest(jsonEvent, "POST", "/validate", mapper.writeValueAsString(ud), null)); + ByteArrayOutputStream output = new ByteArrayOutputStream(); + handler.handleRequest(targetStream, output, null); + System.out.println(output.toString(StandardCharsets.UTF_8)); + } + + @MethodSource("data") + @ParameterizedTest + public void messageObject_parsesObject_returnsCorrectMessage(String jsonEvent) throws Exception { + initServletAppTest(); + InputStream targetStream = new ByteArrayInputStream(this.generateHttpRequest(jsonEvent, "POST", "/message", + mapper.writeValueAsString(new MessageData("test message")), null)); + ByteArrayOutputStream output = new ByteArrayOutputStream(); + handler.handleRequest(targetStream, output, null); + System.out.println(output.toString(StandardCharsets.UTF_8)); + } + + @SuppressWarnings({ "rawtypes", "unchecked" }) + @MethodSource("data") + @ParameterizedTest + void messageObject_propertiesInContentType_returnsCorrectMessage(String jsonEvent) throws Exception { + initServletAppTest(); + + Map headers = new HashMap<>(); + headers.put(HttpHeaders.CONTENT_TYPE, "application/json;v=1"); + headers.put(HttpHeaders.ACCEPT, "application/json;v=1"); + InputStream targetStream = new ByteArrayInputStream(this.generateHttpRequest(jsonEvent, "POST", "/message", + mapper.writeValueAsString(new MessageData("test message")), headers)); + + ByteArrayOutputStream output = new ByteArrayOutputStream(); + handler.handleRequest(targetStream, output, null); + Map result = mapper.readValue(output.toString(StandardCharsets.UTF_8), Map.class); + assertEquals("test message", result.get("body")); + } + + @SuppressWarnings({ "rawtypes" }) + private byte[] generateHttpRequest(String jsonEvent, String method, String path, String body, Map headers) throws Exception { + Map requestMap = mapper.readValue(jsonEvent, Map.class); + if (requestMap.get("version").equals("2.0")) { + return generateHttpRequest2(requestMap, method, path, body, headers); + } + return generateHttpRequest(requestMap, method, path, body, headers); + } + + @SuppressWarnings({ "unchecked", "rawtypes" }) + private byte[] generateHttpRequest(Map requestMap, String method, String path, String body, Map headers) throws Exception { + requestMap.put("path", path); + requestMap.put("httpMethod", method); + requestMap.put("body", body); + if (!CollectionUtils.isEmpty(headers)) { + requestMap.put("headers", headers); + } + return mapper.writeValueAsBytes(requestMap); + } + + @SuppressWarnings({ "unchecked", "rawtypes" }) + private byte[] generateHttpRequest2(Map requestMap, String method, String path, String body, Map headers) throws Exception { + Map map = mapper.readValue(API_GATEWAY_EVENT_V2, Map.class); + Map http = (Map) ((Map) map.get("requestContext")).get("http"); + http.put("path", path); + http.put("method", method); + map.put("body", body); + if (!CollectionUtils.isEmpty(headers)) { + map.put("headers", headers); + } + return mapper.writeValueAsBytes(map); + } +} From 42e0309fb2c65f195e98e07d8714cf0ccde275df Mon Sep 17 00:00:00 2001 From: Oleg Zhurakousky Date: Wed, 28 Jun 2023 18:29:53 +0200 Subject: [PATCH 429/888] Add spring snapshot repo --- .../pom.xml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index 94c671cd8..37cc85156 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -286,4 +286,22 @@ + + + spring-snapshots + Spring Snapshots + https://repo.spring.io/snapshot + + true + + + + spring-milestones + Spring Milestones + https://repo.spring.io/milestone + + false + + + From fb6f20504f7b93d9a5b1e3f0141ac3ba3fd4f669 Mon Sep 17 00:00:00 2001 From: Oleg Zhurakousky Date: Thu, 29 Jun 2023 08:37:36 +0200 Subject: [PATCH 430/888] Fix tests assertions --- ...DelegatingLambdaContainerHandlerTests.java | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/SpringDelegatingLambdaContainerHandlerTests.java b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/SpringDelegatingLambdaContainerHandlerTests.java index 50bedc320..8b50eb9f5 100644 --- a/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/SpringDelegatingLambdaContainerHandlerTests.java +++ b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/SpringDelegatingLambdaContainerHandlerTests.java @@ -22,6 +22,7 @@ import jakarta.ws.rs.core.HttpHeaders; +@SuppressWarnings("rawtypes") public class SpringDelegatingLambdaContainerHandlerTests { private static String API_GATEWAY_EVENT = "{\n" @@ -208,7 +209,9 @@ public void testAsyncPost(String jsonEvent) throws Exception { InputStream targetStream = new ByteArrayInputStream(this.generateHttpRequest(jsonEvent, "POST", "/async", "{\"name\":\"bob\"}", null)); ByteArrayOutputStream output = new ByteArrayOutputStream(); handler.handleRequest(targetStream, output, null); - System.out.println(output.toString(StandardCharsets.UTF_8)); + Map result = mapper.readValue(output.toString(StandardCharsets.UTF_8), Map.class); + assertEquals(200, result.get("statusCode")); + assertEquals("{\"name\":\"BOB\"}", result.get("body")); } @MethodSource("data") @@ -219,7 +222,9 @@ public void testValidate400(String jsonEvent) throws Exception { InputStream targetStream = new ByteArrayInputStream(this.generateHttpRequest(jsonEvent, "POST", "/validate", mapper.writeValueAsString(ud), null)); ByteArrayOutputStream output = new ByteArrayOutputStream(); handler.handleRequest(targetStream, output, null); - System.out.println(output.toString(StandardCharsets.UTF_8)); + Map result = mapper.readValue(output.toString(StandardCharsets.UTF_8), Map.class); + assertEquals(400, result.get("statusCode")); + assertEquals("3", result.get("body")); } @MethodSource("data") @@ -233,7 +238,9 @@ public void testValidate200(String jsonEvent) throws Exception { InputStream targetStream = new ByteArrayInputStream(this.generateHttpRequest(jsonEvent, "POST", "/validate", mapper.writeValueAsString(ud), null)); ByteArrayOutputStream output = new ByteArrayOutputStream(); handler.handleRequest(targetStream, output, null); - System.out.println(output.toString(StandardCharsets.UTF_8)); + Map result = mapper.readValue(output.toString(StandardCharsets.UTF_8), Map.class); + assertEquals(200, result.get("statusCode")); + assertEquals("VALID", result.get("body")); } @MethodSource("data") @@ -244,10 +251,12 @@ public void messageObject_parsesObject_returnsCorrectMessage(String jsonEvent) t mapper.writeValueAsString(new MessageData("test message")), null)); ByteArrayOutputStream output = new ByteArrayOutputStream(); handler.handleRequest(targetStream, output, null); - System.out.println(output.toString(StandardCharsets.UTF_8)); + Map result = mapper.readValue(output.toString(StandardCharsets.UTF_8), Map.class); + assertEquals(200, result.get("statusCode")); + assertEquals("VALID", result.get("test message")); } - @SuppressWarnings({ "rawtypes", "unchecked" }) + @SuppressWarnings({"unchecked" }) @MethodSource("data") @ParameterizedTest void messageObject_propertiesInContentType_returnsCorrectMessage(String jsonEvent) throws Exception { @@ -265,7 +274,6 @@ void messageObject_propertiesInContentType_returnsCorrectMessage(String jsonEven assertEquals("test message", result.get("body")); } - @SuppressWarnings({ "rawtypes" }) private byte[] generateHttpRequest(String jsonEvent, String method, String path, String body, Map headers) throws Exception { Map requestMap = mapper.readValue(jsonEvent, Map.class); if (requestMap.get("version").equals("2.0")) { @@ -274,7 +282,7 @@ private byte[] generateHttpRequest(String jsonEvent, String method, String path, return generateHttpRequest(requestMap, method, path, body, headers); } - @SuppressWarnings({ "unchecked", "rawtypes" }) + @SuppressWarnings({ "unchecked"}) private byte[] generateHttpRequest(Map requestMap, String method, String path, String body, Map headers) throws Exception { requestMap.put("path", path); requestMap.put("httpMethod", method); @@ -285,7 +293,7 @@ private byte[] generateHttpRequest(Map requestMap, String method, String path, S return mapper.writeValueAsBytes(requestMap); } - @SuppressWarnings({ "unchecked", "rawtypes" }) + @SuppressWarnings({ "unchecked"}) private byte[] generateHttpRequest2(Map requestMap, String method, String path, String body, Map headers) throws Exception { Map map = mapper.readValue(API_GATEWAY_EVENT_V2, Map.class); Map http = (Map) ((Map) map.get("requestContext")).get("http"); From 6fb6ff266a8fe5b70c2b2d583e5d6df710df1149 Mon Sep 17 00:00:00 2001 From: Oleg Zhurakousky Date: Fri, 30 Jun 2023 11:41:01 +0200 Subject: [PATCH 431/888] Fix tests --- .../spring/SpringDelegatingLambdaContainerHandlerTests.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/SpringDelegatingLambdaContainerHandlerTests.java b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/SpringDelegatingLambdaContainerHandlerTests.java index 8b50eb9f5..e242ea6e3 100644 --- a/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/SpringDelegatingLambdaContainerHandlerTests.java +++ b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/SpringDelegatingLambdaContainerHandlerTests.java @@ -253,7 +253,7 @@ public void messageObject_parsesObject_returnsCorrectMessage(String jsonEvent) t handler.handleRequest(targetStream, output, null); Map result = mapper.readValue(output.toString(StandardCharsets.UTF_8), Map.class); assertEquals(200, result.get("statusCode")); - assertEquals("VALID", result.get("test message")); + assertEquals("test message", result.get("body")); } @SuppressWarnings({"unchecked" }) From 42d92bb8440d955f5bf06b225256ae7b717f3bdb Mon Sep 17 00:00:00 2001 From: Oleg Zhurakousky Date: Fri, 30 Jun 2023 13:17:28 +0200 Subject: [PATCH 432/888] Add spring snapshot/milestone repo to gradle file of pet-store sample --- samples/springboot3/pet-store/build.gradle | 2 ++ 1 file changed, 2 insertions(+) diff --git a/samples/springboot3/pet-store/build.gradle b/samples/springboot3/pet-store/build.gradle index 6d0270f40..00a9d3a1f 100644 --- a/samples/springboot3/pet-store/build.gradle +++ b/samples/springboot3/pet-store/build.gradle @@ -3,6 +3,8 @@ apply plugin: 'java' repositories { mavenLocal() mavenCentral() + maven {url "https://repo.spring.io/milestone"} + maven {url "https://repo.spring.io/snapshot"} } dependencies { From 870d75ec56da7a1faf158a049d908b32403f647e Mon Sep 17 00:00:00 2001 From: Oleg Zhurakousky Date: Fri, 30 Jun 2023 13:28:55 +0200 Subject: [PATCH 433/888] Add spring snapshot/milestone repo to gradle file of springboot3 archetype --- .../src/main/resources/archetype-resources/build.gradle | 2 ++ 1 file changed, 2 insertions(+) diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle index 6de5e677e..13c8e76b2 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle @@ -3,6 +3,8 @@ apply plugin: 'java' repositories { mavenLocal() mavenCentral() + maven {url "https://repo.spring.io/milestone"} + maven {url "https://repo.spring.io/snapshot"} } dependencies { From 801890d09ce7de593b271e393bb86dffed088c57 Mon Sep 17 00:00:00 2001 From: Oleg Zhurakousky Date: Fri, 30 Jun 2023 17:33:26 +0200 Subject: [PATCH 434/888] Add sample and documentation --- .gitignore | 3 + ...pringDelegatingLambdaContainerHandler.java | 35 +++- samples/springboot3/alt-pet-store/README.md | 39 +++++ .../springboot3/alt-pet-store/builds.gradle | 29 ++++ samples/springboot3/alt-pet-store/pom.xml | 154 ++++++++++++++++++ .../alt-pet-store/src/assembly/bin.xml | 27 +++ .../sample/springboot3/Application.java | 51 ++++++ .../controller/PetsController.java | 77 +++++++++ .../filter/CognitoIdentityFilter.java | 69 ++++++++ .../sample/springboot3/model/Error.java | 29 ++++ .../sample/springboot3/model/Pet.java | 55 +++++++ .../sample/springboot3/model/PetData.java | 117 +++++++++++++ .../src/main/resources/logback.xml | 5 + .../springboot3/alt-pet-store/template.yml | 41 +++++ 14 files changed, 726 insertions(+), 5 deletions(-) create mode 100644 samples/springboot3/alt-pet-store/README.md create mode 100644 samples/springboot3/alt-pet-store/builds.gradle create mode 100644 samples/springboot3/alt-pet-store/pom.xml create mode 100644 samples/springboot3/alt-pet-store/src/assembly/bin.xml create mode 100644 samples/springboot3/alt-pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/Application.java create mode 100644 samples/springboot3/alt-pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/controller/PetsController.java create mode 100644 samples/springboot3/alt-pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/filter/CognitoIdentityFilter.java create mode 100644 samples/springboot3/alt-pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/model/Error.java create mode 100644 samples/springboot3/alt-pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/model/Pet.java create mode 100644 samples/springboot3/alt-pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/model/PetData.java create mode 100644 samples/springboot3/alt-pet-store/src/main/resources/logback.xml create mode 100644 samples/springboot3/alt-pet-store/template.yml diff --git a/.gitignore b/.gitignore index 8f6b9d359..2aa1654c2 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,9 @@ *.jar *.war *.ear +*.project +*.classpath +*.settings # Idea project files .idea/ diff --git a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/SpringDelegatingLambdaContainerHandler.java b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/SpringDelegatingLambdaContainerHandler.java index 9647aad2f..46ccfb13b 100644 --- a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/SpringDelegatingLambdaContainerHandler.java +++ b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/SpringDelegatingLambdaContainerHandler.java @@ -3,13 +3,27 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.net.URL; import java.nio.charset.StandardCharsets; +import java.util.Collections; +import java.util.List; import java.util.Map; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; +import java.util.jar.JarFile; +import java.util.jar.Manifest; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.springframework.cloud.function.serverless.web.FunctionClassUtils; import org.springframework.cloud.function.serverless.web.ProxyHttpServletRequest; import org.springframework.cloud.function.serverless.web.ProxyMvc; +import org.springframework.core.KotlinDetector; +import org.springframework.core.io.Resource; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.util.Assert; +import org.springframework.util.ClassUtils; +import org.springframework.util.StringUtils; import com.amazonaws.serverless.proxy.AwsHttpApiV2SecurityContextWriter; import com.amazonaws.serverless.proxy.AwsProxySecurityContextWriter; @@ -48,6 +62,8 @@ */ public class SpringDelegatingLambdaContainerHandler implements RequestStreamHandler { + private static Log logger = LogFactory.getLog(SpringDelegatingLambdaContainerHandler.class); + private final Class[] startupClasses; private final ProxyMvc mvc; @@ -56,6 +72,10 @@ public class SpringDelegatingLambdaContainerHandler implements RequestStreamHand private final AwsProxyHttpServletResponseWriter responseWriter; + public SpringDelegatingLambdaContainerHandler() { + this(new Class[] {FunctionClassUtils.getStartClass()}); + } + public SpringDelegatingLambdaContainerHandler(Class... startupClasses) { this.startupClasses = startupClasses; this.mvc = ProxyMvc.INSTANCE(this.startupClasses); @@ -84,15 +104,17 @@ public void handleRequest(InputStream input, OutputStream output, Context lambda } } - @SuppressWarnings({ "unchecked", "rawtypes" }) private HttpServletRequest generateRequest(Map request, Context lambdaContext, SecurityContextWriter securityWriter) { AwsProxyRequest v1Request = this.mapper.convertValue(request, AwsProxyRequest.class); ProxyHttpServletRequest httpRequest = new ProxyHttpServletRequest(this.mvc.getApplicationContext().getServletContext(), v1Request.getHttpMethod(), v1Request.getPath()); - httpRequest.setContentType("application/json"); - httpRequest.setContent(v1Request.getBody().getBytes(StandardCharsets.UTF_8)); + + if (StringUtils.hasText(v1Request.getBody())) { + httpRequest.setContentType("application/json"); + httpRequest.setContent(v1Request.getBody().getBytes(StandardCharsets.UTF_8)); + } httpRequest.setAttribute(RequestReader.API_GATEWAY_CONTEXT_PROPERTY, v1Request.getRequestContext()); httpRequest.setAttribute(RequestReader.API_GATEWAY_STAGE_VARS_PROPERTY, v1Request.getStageVariables()); httpRequest.setAttribute(RequestReader.API_GATEWAY_EVENT_PROPERTY, v1Request); @@ -107,8 +129,11 @@ public HttpServletRequest generateRequest2(Map request, Context lambdaContext, S HttpApiV2ProxyRequest v2Request = this.mapper.convertValue(request, HttpApiV2ProxyRequest.class); ProxyHttpServletRequest httpRequest = new ProxyHttpServletRequest(this.mvc.getApplicationContext().getServletContext(), v2Request.getRequestContext().getHttp().getMethod(), v2Request.getRequestContext().getHttp().getPath()); - httpRequest.setContentType("application/json"); - httpRequest.setContent(v2Request.getBody().getBytes(StandardCharsets.UTF_8)); + + if (StringUtils.hasText(v2Request.getBody())) { + httpRequest.setContentType("application/json"); + httpRequest.setContent(v2Request.getBody().getBytes(StandardCharsets.UTF_8)); + } httpRequest.setAttribute(RequestReader.HTTP_API_CONTEXT_PROPERTY, v2Request.getRequestContext()); httpRequest.setAttribute(RequestReader.HTTP_API_STAGE_VARS_PROPERTY, v2Request.getStageVariables()); httpRequest.setAttribute(RequestReader.HTTP_API_EVENT_PROPERTY, v2Request); diff --git a/samples/springboot3/alt-pet-store/README.md b/samples/springboot3/alt-pet-store/README.md new file mode 100644 index 000000000..d8cf8383d --- /dev/null +++ b/samples/springboot3/alt-pet-store/README.md @@ -0,0 +1,39 @@ +# Serverless Spring Boot 3 example +A basic pet store written with the [Spring Boot 3 framework](https://projects.spring.io/spring-boot/). Unlike older examples, this example is relying on the new +`SpringDelegatingLambdaContainerHandler`, which you simply need to identify as a _handler_ of the Lambda function. The main configuration class identified as `MAIN_CLASS` +environment variable or `Start-Class` or `Main-Class` entry in Manifest file. See provided `template.yml` file for reference. + + +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/samples/springboot3/alt-pet-store/builds.gradle b/samples/springboot3/alt-pet-store/builds.gradle new file mode 100644 index 000000000..00a9d3a1f --- /dev/null +++ b/samples/springboot3/alt-pet-store/builds.gradle @@ -0,0 +1,29 @@ +apply plugin: 'java' + +repositories { + mavenLocal() + mavenCentral() + maven {url "https://repo.spring.io/milestone"} + maven {url "https://repo.spring.io/snapshot"} +} + +dependencies { + implementation ( + implementation('org.springframework.boot:spring-boot-starter-web:3.1.1') { + exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat' + }, + 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:[2.0-SNAPSHOT,)', + ) +} + +task buildZip(type: Zip) { + from compileJava + from processResources + into('lib') { + from(configurations.compileClasspath) { + exclude 'tomcat-embed-*' + } + } +} + +build.dependsOn buildZip diff --git a/samples/springboot3/alt-pet-store/pom.xml b/samples/springboot3/alt-pet-store/pom.xml new file mode 100644 index 000000000..a8f6220b5 --- /dev/null +++ b/samples/springboot3/alt-pet-store/pom.xml @@ -0,0 +1,154 @@ + + + 4.0.0 + + com.amazonaws.serverless.sample + petstore-springboot3-example + 2.0-SNAPSHOT + Spring Boot example for the aws-serverless-java-container library + Simple pet store written with the Spring framework and Spring Boot + https://aws.amazon.com/lambda/ + + + org.springframework.boot + spring-boot-starter-parent + 3.1.1 + + + + + The Apache Software License, Version 2.0 + http://www.apache.org/licenses/LICENSE-2.0.txt + repo + + + + + 17 + + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-tomcat + + + + + + com.amazonaws.serverless + aws-serverless-java-container-springboot3 + 2.0.0-SNAPSHOT + + + + + + shaded-jar + + + + org.apache.maven.plugins + maven-shade-plugin + 3.5.0 + + false + + + + package + + shade + + + + + org.apache.tomcat.embed:* + + + + + + + + + + + assembly-zip + + true + + + + + + org.apache.maven.plugins + maven-jar-plugin + 3.3.0 + + + default-jar + none + + + + + org.apache.maven.plugins + maven-install-plugin + 3.1.1 + + true + + + + + org.apache.maven.plugins + maven-dependency-plugin + 3.6.0 + + + copy-dependencies + package + + copy-dependencies + + + ${project.build.directory}/lib + runtime + + + + + + org.apache.maven.plugins + maven-assembly-plugin + 3.6.0 + + + zip-assembly + package + + single + + + ${project.artifactId}-${project.version} + + src${file.separator}assembly${file.separator}bin.xml + + false + + + + + + + + + + + diff --git a/samples/springboot3/alt-pet-store/src/assembly/bin.xml b/samples/springboot3/alt-pet-store/src/assembly/bin.xml new file mode 100644 index 000000000..1e085057d --- /dev/null +++ b/samples/springboot3/alt-pet-store/src/assembly/bin.xml @@ -0,0 +1,27 @@ + + lambda-package + + zip + + false + + + + ${project.build.directory}${file.separator}lib + lib + + tomcat-embed* + + + + + ${project.build.directory}${file.separator}classes + + ** + + ${file.separator} + + + \ No newline at end of file diff --git a/samples/springboot3/alt-pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/Application.java b/samples/springboot3/alt-pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/Application.java new file mode 100644 index 000000000..ee9989df5 --- /dev/null +++ b/samples/springboot3/alt-pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/Application.java @@ -0,0 +1,51 @@ +package com.amazonaws.serverless.sample.springboot3; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Import; +import org.springframework.web.servlet.HandlerAdapter; +import org.springframework.web.servlet.HandlerMapping; +import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter; +import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping; + +import com.amazonaws.serverless.sample.springboot3.controller.PetsController; +import com.amazonaws.serverless.sample.springboot3.filter.CognitoIdentityFilter; + +import jakarta.servlet.Filter; + + +@SpringBootApplication +@Import({ PetsController.class }) +public class Application { + + // silence console logging + @Value("${logging.level.root:OFF}") + String message = ""; + + /* + * 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(); + } + + @Bean("CognitoIdentityFilter") + public Filter cognitoFilter() { + return new CognitoIdentityFilter(); + } + + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } +} \ No newline at end of file diff --git a/samples/springboot3/alt-pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/controller/PetsController.java b/samples/springboot3/alt-pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/controller/PetsController.java new file mode 100644 index 000000000..680e629d3 --- /dev/null +++ b/samples/springboot3/alt-pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/controller/PetsController.java @@ -0,0 +1,77 @@ +/* + * Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance + * with the License. A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.sample.springboot3.controller; + + + +import com.amazonaws.serverless.sample.springboot3.model.Pet; +import com.amazonaws.serverless.sample.springboot3.model.PetData; + +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; + +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; + } + + @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/samples/springboot3/alt-pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/filter/CognitoIdentityFilter.java b/samples/springboot3/alt-pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/filter/CognitoIdentityFilter.java new file mode 100644 index 000000000..d6ccae765 --- /dev/null +++ b/samples/springboot3/alt-pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/filter/CognitoIdentityFilter.java @@ -0,0 +1,69 @@ +package com.amazonaws.serverless.sample.springboot3.filter; + + +import com.amazonaws.serverless.proxy.RequestReader; +import com.amazonaws.serverless.proxy.model.AwsProxyRequestContext; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; + +import java.io.IOException; + + +/** + * Simple Filter implementation that looks for a Cognito identity id in the API Gateway request context + * and stores the value in a request attribute. The filter is registered with aws-serverless-java-container + * in the onStartup method from the {@link com.amazonaws.serverless.sample.springboot3.StreamLambdaHandler} class. + */ +public class CognitoIdentityFilter implements Filter { + public static final String COGNITO_IDENTITY_ATTRIBUTE = "com.amazonaws.serverless.cognitoId"; + + private static Logger log = LoggerFactory.getLogger(CognitoIdentityFilter.class); + + @Override + public void init(FilterConfig filterConfig) + throws ServletException { + // nothing to do in init + } + + + @Override + public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) + throws IOException, ServletException { + Object apiGwContext = servletRequest.getAttribute(RequestReader.API_GATEWAY_CONTEXT_PROPERTY); + if (apiGwContext == null) { + log.warn("API Gateway context is null"); + filterChain.doFilter(servletRequest, servletResponse); + return; + } + if (!AwsProxyRequestContext.class.isAssignableFrom(apiGwContext.getClass())) { + log.warn("API Gateway context object is not of valid type"); + filterChain.doFilter(servletRequest, servletResponse); + } + + AwsProxyRequestContext ctx = (AwsProxyRequestContext)apiGwContext; + if (ctx.getIdentity() == null) { + log.warn("Identity context is null"); + filterChain.doFilter(servletRequest, servletResponse); + } + String cognitoIdentityId = ctx.getIdentity().getCognitoIdentityId(); + if (cognitoIdentityId == null || "".equals(cognitoIdentityId.trim())) { + log.warn("Cognito identity id in request is null"); + } + servletRequest.setAttribute(COGNITO_IDENTITY_ATTRIBUTE, cognitoIdentityId); + filterChain.doFilter(servletRequest, servletResponse); + } + + + @Override + public void destroy() { + // nothing to do in destroy + } +} diff --git a/samples/springboot3/alt-pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/model/Error.java b/samples/springboot3/alt-pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/model/Error.java new file mode 100644 index 000000000..320f21582 --- /dev/null +++ b/samples/springboot3/alt-pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/model/Error.java @@ -0,0 +1,29 @@ +/* + * Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance + * with the License. A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.sample.springboot3.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/samples/springboot3/alt-pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/model/Pet.java b/samples/springboot3/alt-pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/model/Pet.java new file mode 100644 index 000000000..4f0c4ba8e --- /dev/null +++ b/samples/springboot3/alt-pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/model/Pet.java @@ -0,0 +1,55 @@ +/* + * Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance + * with the License. A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.sample.springboot3.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/samples/springboot3/alt-pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/model/PetData.java b/samples/springboot3/alt-pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/model/PetData.java new file mode 100644 index 000000000..68ea3c18b --- /dev/null +++ b/samples/springboot3/alt-pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/model/PetData.java @@ -0,0 +1,117 @@ +/* + * Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance + * with the License. A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.sample.springboot3.model; + + +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.GregorianCalendar; +import java.util.List; +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/samples/springboot3/alt-pet-store/src/main/resources/logback.xml b/samples/springboot3/alt-pet-store/src/main/resources/logback.xml new file mode 100644 index 000000000..14a3a84fa --- /dev/null +++ b/samples/springboot3/alt-pet-store/src/main/resources/logback.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/samples/springboot3/alt-pet-store/template.yml b/samples/springboot3/alt-pet-store/template.yml new file mode 100644 index 000000000..8a51c8d1d --- /dev/null +++ b/samples/springboot3/alt-pet-store/template.yml @@ -0,0 +1,41 @@ +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: +# AutoPublishAlias: bcn + FunctionName: pet-store-boot-3 + Handler: com.amazonaws.serverless.proxy.spring.SpringDelegatingLambdaContainerHandler::handleRequest + Runtime: java17 + SnapStart: + ApplyOn: PublishedVersions + CodeUri: . + MemorySize: 1024 + Policies: AWSLambdaBasicExecutionRole + Timeout: 30 + Environment: + Variables: + MAIN_CLASS: com.amazonaws.serverless.sample.springboot3.Application + 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: SpringPetStoreApi + + From 224e5fb0f0a91b99b1a7c29ece158ebfada66df7 Mon Sep 17 00:00:00 2001 From: Oleg Zhurakousky Date: Fri, 30 Jun 2023 19:13:18 +0200 Subject: [PATCH 435/888] Cleanup --- .../SpringDelegatingLambdaContainerHandler.java | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/SpringDelegatingLambdaContainerHandler.java b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/SpringDelegatingLambdaContainerHandler.java index 46ccfb13b..20e154743 100644 --- a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/SpringDelegatingLambdaContainerHandler.java +++ b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/SpringDelegatingLambdaContainerHandler.java @@ -3,26 +3,16 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; -import java.net.URL; import java.nio.charset.StandardCharsets; -import java.util.Collections; -import java.util.List; import java.util.Map; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; -import java.util.jar.JarFile; -import java.util.jar.Manifest; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.cloud.function.serverless.web.FunctionClassUtils; import org.springframework.cloud.function.serverless.web.ProxyHttpServletRequest; import org.springframework.cloud.function.serverless.web.ProxyMvc; -import org.springframework.core.KotlinDetector; -import org.springframework.core.io.Resource; -import org.springframework.core.io.support.PathMatchingResourcePatternResolver; -import org.springframework.util.Assert; -import org.springframework.util.ClassUtils; import org.springframework.util.StringUtils; import com.amazonaws.serverless.proxy.AwsHttpApiV2SecurityContextWriter; @@ -62,8 +52,6 @@ */ public class SpringDelegatingLambdaContainerHandler implements RequestStreamHandler { - private static Log logger = LogFactory.getLog(SpringDelegatingLambdaContainerHandler.class); - private final Class[] startupClasses; private final ProxyMvc mvc; From 3a96f35a70b184f17c73a686174e50f996cb6df8 Mon Sep 17 00:00:00 2001 From: Oleg Zhurakousky Date: Tue, 4 Jul 2023 10:10:20 +0200 Subject: [PATCH 436/888] Substitute tabs for spaces --- .../proxy/model/AwsProxyRequest.java | 12 +- .../pom.xml | 34 +- ...pringDelegatingLambdaContainerHandler.java | 134 +++-- ...DelegatingLambdaContainerHandlerTests.java | 514 +++++++++--------- .../sample/springboot3/Application.java | 2 +- 5 files changed, 347 insertions(+), 349 deletions(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/AwsProxyRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/AwsProxyRequest.java index af4e6ea77..53ad758f1 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/AwsProxyRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/AwsProxyRequest.java @@ -30,7 +30,7 @@ public class AwsProxyRequest { private String body; private String version; - private String resource; + private String resource; private AwsProxyRequestContext requestContext; private MultiValuedTreeMap multiValueQueryStringParameters; private Map queryStringParameters; @@ -97,12 +97,12 @@ public String getResource() { } public String getVersion() { - return version; - } + return version; + } - public void setVersion(String version) { - this.version = version; - } + public void setVersion(String version) { + this.version = version; + } public void setResource(String resource) { this.resource = resource; diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index 37cc85156..532ce8312 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -287,21 +287,21 @@ - - spring-snapshots - Spring Snapshots - https://repo.spring.io/snapshot - - true - - - - spring-milestones - Spring Milestones - https://repo.spring.io/milestone - - false - - - + + spring-snapshots + Spring Snapshots + https://repo.spring.io/snapshot + + true + + + + spring-milestones + Spring Milestones + https://repo.spring.io/milestone + + false + + + diff --git a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/SpringDelegatingLambdaContainerHandler.java b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/SpringDelegatingLambdaContainerHandler.java index 20e154743..ce3142369 100644 --- a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/SpringDelegatingLambdaContainerHandler.java +++ b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/SpringDelegatingLambdaContainerHandler.java @@ -8,8 +8,6 @@ import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import org.springframework.cloud.function.serverless.web.FunctionClassUtils; import org.springframework.cloud.function.serverless.web.ProxyHttpServletRequest; import org.springframework.cloud.function.serverless.web.ProxyMvc; @@ -52,75 +50,75 @@ */ public class SpringDelegatingLambdaContainerHandler implements RequestStreamHandler { - private final Class[] startupClasses; - - private final ProxyMvc mvc; - - private final ObjectMapper mapper; - - private final AwsProxyHttpServletResponseWriter responseWriter; - - public SpringDelegatingLambdaContainerHandler() { - this(new Class[] {FunctionClassUtils.getStartClass()}); - } - - public SpringDelegatingLambdaContainerHandler(Class... startupClasses) { - this.startupClasses = startupClasses; - this.mvc = ProxyMvc.INSTANCE(this.startupClasses); - this.mapper = new ObjectMapper(); - this.responseWriter = new AwsProxyHttpServletResponseWriter(); - } - - @SuppressWarnings({"rawtypes" }) - @Override - public void handleRequest(InputStream input, OutputStream output, Context lambdaContext) throws IOException { - Map request = mapper.readValue(input, Map.class); - SecurityContextWriter securityWriter = "2.0".equals(request.get("version")) - ? new AwsHttpApiV2SecurityContextWriter() : new AwsProxySecurityContextWriter(); - HttpServletRequest httpServletRequest = "2.0".equals(request.get("version")) - ? this.generateRequest2(request, lambdaContext, securityWriter) : this.generateRequest(request, lambdaContext, securityWriter); - - CountDownLatch latch = new CountDownLatch(1); - AwsHttpServletResponse httpServletResponse = new AwsHttpServletResponse(httpServletRequest, latch); - try { - mvc.service(httpServletRequest, httpServletResponse); - latch.await(10, TimeUnit.SECONDS); - mapper.writeValue(output, responseWriter.writeResponse(httpServletResponse, lambdaContext)); - } - catch (Exception e) { - throw new IllegalStateException(e); - } - } - - @SuppressWarnings({ "unchecked", "rawtypes" }) - private HttpServletRequest generateRequest(Map request, Context lambdaContext, SecurityContextWriter securityWriter) { - AwsProxyRequest v1Request = this.mapper.convertValue(request, AwsProxyRequest.class); - - ProxyHttpServletRequest httpRequest = new ProxyHttpServletRequest(this.mvc.getApplicationContext().getServletContext(), - v1Request.getHttpMethod(), v1Request.getPath()); - - if (StringUtils.hasText(v1Request.getBody())) { - httpRequest.setContentType("application/json"); - httpRequest.setContent(v1Request.getBody().getBytes(StandardCharsets.UTF_8)); - } - httpRequest.setAttribute(RequestReader.API_GATEWAY_CONTEXT_PROPERTY, v1Request.getRequestContext()); - httpRequest.setAttribute(RequestReader.API_GATEWAY_STAGE_VARS_PROPERTY, v1Request.getStageVariables()); - httpRequest.setAttribute(RequestReader.API_GATEWAY_EVENT_PROPERTY, v1Request); - httpRequest.setAttribute(RequestReader.ALB_CONTEXT_PROPERTY, v1Request.getRequestContext().getElb()); - httpRequest.setAttribute(RequestReader.LAMBDA_CONTEXT_PROPERTY, lambdaContext); - httpRequest.setAttribute(RequestReader.JAX_SECURITY_CONTEXT_PROPERTY, securityWriter.writeSecurityContext(v1Request, lambdaContext)); - return httpRequest; - } - - @SuppressWarnings({ "rawtypes", "unchecked" }) - public HttpServletRequest generateRequest2(Map request, Context lambdaContext, SecurityContextWriter securityWriter) { - HttpApiV2ProxyRequest v2Request = this.mapper.convertValue(request, HttpApiV2ProxyRequest.class); + private final Class[] startupClasses; + + private final ProxyMvc mvc; + + private final ObjectMapper mapper; + + private final AwsProxyHttpServletResponseWriter responseWriter; + + public SpringDelegatingLambdaContainerHandler() { + this(new Class[] {FunctionClassUtils.getStartClass()}); + } + + public SpringDelegatingLambdaContainerHandler(Class... startupClasses) { + this.startupClasses = startupClasses; + this.mvc = ProxyMvc.INSTANCE(this.startupClasses); + this.mapper = new ObjectMapper(); + this.responseWriter = new AwsProxyHttpServletResponseWriter(); + } + + @SuppressWarnings({"rawtypes" }) + @Override + public void handleRequest(InputStream input, OutputStream output, Context lambdaContext) throws IOException { + Map request = mapper.readValue(input, Map.class); + SecurityContextWriter securityWriter = "2.0".equals(request.get("version")) + ? new AwsHttpApiV2SecurityContextWriter() : new AwsProxySecurityContextWriter(); + HttpServletRequest httpServletRequest = "2.0".equals(request.get("version")) + ? this.generateRequest2(request, lambdaContext, securityWriter) : this.generateRequest(request, lambdaContext, securityWriter); + + CountDownLatch latch = new CountDownLatch(1); + AwsHttpServletResponse httpServletResponse = new AwsHttpServletResponse(httpServletRequest, latch); + try { + mvc.service(httpServletRequest, httpServletResponse); + latch.await(10, TimeUnit.SECONDS); + mapper.writeValue(output, responseWriter.writeResponse(httpServletResponse, lambdaContext)); + } + catch (Exception e) { + throw new IllegalStateException(e); + } + } + + @SuppressWarnings({ "unchecked", "rawtypes" }) + private HttpServletRequest generateRequest(Map request, Context lambdaContext, SecurityContextWriter securityWriter) { + AwsProxyRequest v1Request = this.mapper.convertValue(request, AwsProxyRequest.class); + + ProxyHttpServletRequest httpRequest = new ProxyHttpServletRequest(this.mvc.getApplicationContext().getServletContext(), + v1Request.getHttpMethod(), v1Request.getPath()); + + if (StringUtils.hasText(v1Request.getBody())) { + httpRequest.setContentType("application/json"); + httpRequest.setContent(v1Request.getBody().getBytes(StandardCharsets.UTF_8)); + } + httpRequest.setAttribute(RequestReader.API_GATEWAY_CONTEXT_PROPERTY, v1Request.getRequestContext()); + httpRequest.setAttribute(RequestReader.API_GATEWAY_STAGE_VARS_PROPERTY, v1Request.getStageVariables()); + httpRequest.setAttribute(RequestReader.API_GATEWAY_EVENT_PROPERTY, v1Request); + httpRequest.setAttribute(RequestReader.ALB_CONTEXT_PROPERTY, v1Request.getRequestContext().getElb()); + httpRequest.setAttribute(RequestReader.LAMBDA_CONTEXT_PROPERTY, lambdaContext); + httpRequest.setAttribute(RequestReader.JAX_SECURITY_CONTEXT_PROPERTY, securityWriter.writeSecurityContext(v1Request, lambdaContext)); + return httpRequest; + } + + @SuppressWarnings({ "rawtypes", "unchecked" }) + public HttpServletRequest generateRequest2(Map request, Context lambdaContext, SecurityContextWriter securityWriter) { + HttpApiV2ProxyRequest v2Request = this.mapper.convertValue(request, HttpApiV2ProxyRequest.class); ProxyHttpServletRequest httpRequest = new ProxyHttpServletRequest(this.mvc.getApplicationContext().getServletContext(), - v2Request.getRequestContext().getHttp().getMethod(), v2Request.getRequestContext().getHttp().getPath()); + v2Request.getRequestContext().getHttp().getMethod(), v2Request.getRequestContext().getHttp().getPath()); if (StringUtils.hasText(v2Request.getBody())) { - httpRequest.setContentType("application/json"); - httpRequest.setContent(v2Request.getBody().getBytes(StandardCharsets.UTF_8)); + httpRequest.setContentType("application/json"); + httpRequest.setContent(v2Request.getBody().getBytes(StandardCharsets.UTF_8)); } httpRequest.setAttribute(RequestReader.HTTP_API_CONTEXT_PROPERTY, v2Request.getRequestContext()); httpRequest.setAttribute(RequestReader.HTTP_API_STAGE_VARS_PROPERTY, v2Request.getStageVariables()); diff --git a/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/SpringDelegatingLambdaContainerHandlerTests.java b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/SpringDelegatingLambdaContainerHandlerTests.java index e242ea6e3..dabc30e24 100644 --- a/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/SpringDelegatingLambdaContainerHandlerTests.java +++ b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/SpringDelegatingLambdaContainerHandlerTests.java @@ -25,284 +25,284 @@ @SuppressWarnings("rawtypes") public class SpringDelegatingLambdaContainerHandlerTests { - private static String API_GATEWAY_EVENT = "{\n" - + " \"version\": \"1.0\",\n" - + " \"resource\": \"$default\",\n" - + " \"path\": \"/async\",\n" - + " \"httpMethod\": \"POST\",\n" - + " \"headers\": {\n" - + " \"Content-Length\": \"45\",\n" - + " \"Content-Type\": \"application/json\",\n" - + " \"Host\": \"i76bfh111.execute-api.eu-west-3.amazonaws.com\",\n" - + " \"User-Agent\": \"curl/7.79.1\",\n" - + " \"X-Amzn-Trace-Id\": \"Root=1-64087690-2151375b219d3ba3389ea84e\",\n" - + " \"X-Forwarded-For\": \"109.210.252.44\",\n" - + " \"X-Forwarded-Port\": \"443\",\n" - + " \"X-Forwarded-Proto\": \"https\",\n" - + " \"accept\": \"*/*\"\n" - + " },\n" - + " \"multiValueHeaders\": {\n" - + " \"Content-Length\": [\n" - + " \"45\"\n" - + " ],\n" - + " \"Content-Type\": [\n" - + " \"application/json\"\n" - + " ],\n" - + " \"Host\": [\n" - + " \"i76bfhczs0.execute-api.eu-west-3.amazonaws.com\"\n" - + " ],\n" - + " \"User-Agent\": [\n" - + " \"curl/7.79.1\"\n" - + " ],\n" - + " \"X-Amzn-Trace-Id\": [\n" - + " \"Root=1-64087690-2151375b219d3ba3389ea84e\"\n" - + " ],\n" - + " \"X-Forwarded-For\": [\n" - + " \"109.210.252.44\"\n" - + " ],\n" - + " \"X-Forwarded-Port\": [\n" - + " \"443\"\n" - + " ],\n" - + " \"X-Forwarded-Proto\": [\n" - + " \"https\"\n" - + " ],\n" - + " \"accept\": [\n" - + " \"*/*\"\n" - + " ]\n" - + " },\n" - + " \"queryStringParameters\": {\n" - + " \"abc\": \"xyz\",\n" - + " \"foo\": \"baz\"\n" - + " },\n" - + " \"multiValueQueryStringParameters\": {\n" - + " \"abc\": [\n" - + " \"xyz\"\n" - + " ],\n" - + " \"foo\": [\n" - + " \"bar\",\n" - + " \"baz\"\n" - + " ]\n" - + " },\n" - + " \"requestContext\": {\n" - + " \"accountId\": \"123456789098\",\n" - + " \"apiId\": \"i76bfhczs0\",\n" - + " \"domainName\": \"i76bfhc111.execute-api.eu-west-3.amazonaws.com\",\n" - + " \"domainPrefix\": \"i76bfhczs0\",\n" - + " \"extendedRequestId\": \"Bdd2ngt5iGYEMIg=\",\n" - + " \"httpMethod\": \"POST\",\n" - + " \"identity\": {\n" - + " \"accessKey\": null,\n" - + " \"accountId\": null,\n" - + " \"caller\": null,\n" - + " \"cognitoAmr\": null,\n" - + " \"cognitoAuthenticationProvider\": null,\n" - + " \"cognitoAuthenticationType\": null,\n" - + " \"cognitoIdentityId\": null,\n" - + " \"cognitoIdentityPoolId\": null,\n" - + " \"principalOrgId\": null,\n" - + " \"sourceIp\": \"109.210.252.44\",\n" - + " \"user\": null,\n" - + " \"userAgent\": \"curl/7.79.1\",\n" - + " \"userArn\": null\n" - + " },\n" - + " \"path\": \"/pets\",\n" - + " \"protocol\": \"HTTP/1.1\",\n" - + " \"requestId\": \"Bdd2ngt5iGYEMIg=\",\n" - + " \"requestTime\": \"08/Mar/2023:11:50:40 +0000\",\n" - + " \"requestTimeEpoch\": 1678276240455,\n" - + " \"resourceId\": \"$default\",\n" - + " \"resourcePath\": \"$default\",\n" - + " \"stage\": \"$default\"\n" - + " },\n" - + " \"pathParameters\": null,\n" - + " \"stageVariables\": null,\n" - + " \"body\": \"{\\\"name\\\":\\\"bob\\\"}\",\n" - + " \"isBase64Encoded\": false\n" - + "}"; + private static String API_GATEWAY_EVENT = "{\n" + + " \"version\": \"1.0\",\n" + + " \"resource\": \"$default\",\n" + + " \"path\": \"/async\",\n" + + " \"httpMethod\": \"POST\",\n" + + " \"headers\": {\n" + + " \"Content-Length\": \"45\",\n" + + " \"Content-Type\": \"application/json\",\n" + + " \"Host\": \"i76bfh111.execute-api.eu-west-3.amazonaws.com\",\n" + + " \"User-Agent\": \"curl/7.79.1\",\n" + + " \"X-Amzn-Trace-Id\": \"Root=1-64087690-2151375b219d3ba3389ea84e\",\n" + + " \"X-Forwarded-For\": \"109.210.252.44\",\n" + + " \"X-Forwarded-Port\": \"443\",\n" + + " \"X-Forwarded-Proto\": \"https\",\n" + + " \"accept\": \"*/*\"\n" + + " },\n" + + " \"multiValueHeaders\": {\n" + + " \"Content-Length\": [\n" + + " \"45\"\n" + + " ],\n" + + " \"Content-Type\": [\n" + + " \"application/json\"\n" + + " ],\n" + + " \"Host\": [\n" + + " \"i76bfhczs0.execute-api.eu-west-3.amazonaws.com\"\n" + + " ],\n" + + " \"User-Agent\": [\n" + + " \"curl/7.79.1\"\n" + + " ],\n" + + " \"X-Amzn-Trace-Id\": [\n" + + " \"Root=1-64087690-2151375b219d3ba3389ea84e\"\n" + + " ],\n" + + " \"X-Forwarded-For\": [\n" + + " \"109.210.252.44\"\n" + + " ],\n" + + " \"X-Forwarded-Port\": [\n" + + " \"443\"\n" + + " ],\n" + + " \"X-Forwarded-Proto\": [\n" + + " \"https\"\n" + + " ],\n" + + " \"accept\": [\n" + + " \"*/*\"\n" + + " ]\n" + + " },\n" + + " \"queryStringParameters\": {\n" + + " \"abc\": \"xyz\",\n" + + " \"foo\": \"baz\"\n" + + " },\n" + + " \"multiValueQueryStringParameters\": {\n" + + " \"abc\": [\n" + + " \"xyz\"\n" + + " ],\n" + + " \"foo\": [\n" + + " \"bar\",\n" + + " \"baz\"\n" + + " ]\n" + + " },\n" + + " \"requestContext\": {\n" + + " \"accountId\": \"123456789098\",\n" + + " \"apiId\": \"i76bfhczs0\",\n" + + " \"domainName\": \"i76bfhc111.execute-api.eu-west-3.amazonaws.com\",\n" + + " \"domainPrefix\": \"i76bfhczs0\",\n" + + " \"extendedRequestId\": \"Bdd2ngt5iGYEMIg=\",\n" + + " \"httpMethod\": \"POST\",\n" + + " \"identity\": {\n" + + " \"accessKey\": null,\n" + + " \"accountId\": null,\n" + + " \"caller\": null,\n" + + " \"cognitoAmr\": null,\n" + + " \"cognitoAuthenticationProvider\": null,\n" + + " \"cognitoAuthenticationType\": null,\n" + + " \"cognitoIdentityId\": null,\n" + + " \"cognitoIdentityPoolId\": null,\n" + + " \"principalOrgId\": null,\n" + + " \"sourceIp\": \"109.210.252.44\",\n" + + " \"user\": null,\n" + + " \"userAgent\": \"curl/7.79.1\",\n" + + " \"userArn\": null\n" + + " },\n" + + " \"path\": \"/pets\",\n" + + " \"protocol\": \"HTTP/1.1\",\n" + + " \"requestId\": \"Bdd2ngt5iGYEMIg=\",\n" + + " \"requestTime\": \"08/Mar/2023:11:50:40 +0000\",\n" + + " \"requestTimeEpoch\": 1678276240455,\n" + + " \"resourceId\": \"$default\",\n" + + " \"resourcePath\": \"$default\",\n" + + " \"stage\": \"$default\"\n" + + " },\n" + + " \"pathParameters\": null,\n" + + " \"stageVariables\": null,\n" + + " \"body\": \"{\\\"name\\\":\\\"bob\\\"}\",\n" + + " \"isBase64Encoded\": false\n" + + "}"; - private static String API_GATEWAY_EVENT_V2 = "{\n" + - " \"version\": \"2.0\",\n" + - " \"routeKey\": \"$default\",\n" + - " \"rawPath\": \"/my/path\",\n" + - " \"rawQueryString\": \"parameter1=value1¶meter1=value2¶meter2=value\",\n" + - " \"cookies\": [\n" + - " \"cookie1\",\n" + - " \"cookie2\"\n" + - " ],\n" + - " \"headers\": {\n" + - " \"header1\": \"value1\",\n" + - " \"header2\": \"value1,value2\"\n" + - " },\n" + - " \"queryStringParameters\": {\n" + - " \"parameter1\": \"value1,value2\",\n" + - " \"parameter2\": \"value\"\n" + - " },\n" + - " \"requestContext\": {\n" + - " \"accountId\": \"123456789012\",\n" + - " \"apiId\": \"api-id\",\n" + - " \"authentication\": {\n" + - " \"clientCert\": {\n" + - " \"clientCertPem\": \"CERT_CONTENT\",\n" + - " \"subjectDN\": \"www.example.com\",\n" + - " \"issuerDN\": \"Example issuer\",\n" + - " \"serialNumber\": \"a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1\",\n" + - " \"validity\": {\n" + - " \"notBefore\": \"May 28 12:30:02 2019 GMT\",\n" + - " \"notAfter\": \"Aug 5 09:36:04 2021 GMT\"\n" + - " }\n" + - " }\n" + - " },\n" + - " \"authorizer\": {\n" + - " \"jwt\": {\n" + - " \"claims\": {\n" + - " \"claim1\": \"value1\",\n" + - " \"claim2\": \"value2\"\n" + - " },\n" + - " \"scopes\": [\n" + - " \"scope1\",\n" + - " \"scope2\"\n" + - " ]\n" + - " }\n" + - " },\n" + - " \"domainName\": \"id.execute-api.us-east-1.amazonaws.com\",\n" + - " \"domainPrefix\": \"id\",\n" + - " \"http\": {\n" + - " \"method\": \"POST\",\n" + - " \"path\": \"/my/path\",\n" + - " \"protocol\": \"HTTP/1.1\",\n" + - " \"sourceIp\": \"IP\",\n" + - " \"userAgent\": \"agent\"\n" + - " },\n" + - " \"requestId\": \"id\",\n" + - " \"routeKey\": \"$default\",\n" + - " \"stage\": \"$default\",\n" + - " \"time\": \"12/Mar/2020:19:03:58 +0000\",\n" + - " \"timeEpoch\": 1583348638390\n" + - " },\n" + - " \"body\": \"Hello from Lambda\",\n" + - " \"pathParameters\": {\n" + - " \"parameter1\": \"value1\"\n" + - " },\n" + - " \"isBase64Encoded\": false,\n" + - " \"stageVariables\": {\n" + - " \"stageVariable1\": \"value1\",\n" + - " \"stageVariable2\": \"value2\"\n" + - " }\n" + - "}"; + private static String API_GATEWAY_EVENT_V2 = "{\n" + + " \"version\": \"2.0\",\n" + + " \"routeKey\": \"$default\",\n" + + " \"rawPath\": \"/my/path\",\n" + + " \"rawQueryString\": \"parameter1=value1¶meter1=value2¶meter2=value\",\n" + + " \"cookies\": [\n" + + " \"cookie1\",\n" + + " \"cookie2\"\n" + + " ],\n" + + " \"headers\": {\n" + + " \"header1\": \"value1\",\n" + + " \"header2\": \"value1,value2\"\n" + + " },\n" + + " \"queryStringParameters\": {\n" + + " \"parameter1\": \"value1,value2\",\n" + + " \"parameter2\": \"value\"\n" + + " },\n" + + " \"requestContext\": {\n" + + " \"accountId\": \"123456789012\",\n" + + " \"apiId\": \"api-id\",\n" + + " \"authentication\": {\n" + + " \"clientCert\": {\n" + + " \"clientCertPem\": \"CERT_CONTENT\",\n" + + " \"subjectDN\": \"www.example.com\",\n" + + " \"issuerDN\": \"Example issuer\",\n" + + " \"serialNumber\": \"a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1\",\n" + + " \"validity\": {\n" + + " \"notBefore\": \"May 28 12:30:02 2019 GMT\",\n" + + " \"notAfter\": \"Aug 5 09:36:04 2021 GMT\"\n" + + " }\n" + + " }\n" + + " },\n" + + " \"authorizer\": {\n" + + " \"jwt\": {\n" + + " \"claims\": {\n" + + " \"claim1\": \"value1\",\n" + + " \"claim2\": \"value2\"\n" + + " },\n" + + " \"scopes\": [\n" + + " \"scope1\",\n" + + " \"scope2\"\n" + + " ]\n" + + " }\n" + + " },\n" + + " \"domainName\": \"id.execute-api.us-east-1.amazonaws.com\",\n" + + " \"domainPrefix\": \"id\",\n" + + " \"http\": {\n" + + " \"method\": \"POST\",\n" + + " \"path\": \"/my/path\",\n" + + " \"protocol\": \"HTTP/1.1\",\n" + + " \"sourceIp\": \"IP\",\n" + + " \"userAgent\": \"agent\"\n" + + " },\n" + + " \"requestId\": \"id\",\n" + + " \"routeKey\": \"$default\",\n" + + " \"stage\": \"$default\",\n" + + " \"time\": \"12/Mar/2020:19:03:58 +0000\",\n" + + " \"timeEpoch\": 1583348638390\n" + + " },\n" + + " \"body\": \"Hello from Lambda\",\n" + + " \"pathParameters\": {\n" + + " \"parameter1\": \"value1\"\n" + + " },\n" + + " \"isBase64Encoded\": false,\n" + + " \"stageVariables\": {\n" + + " \"stageVariable1\": \"value1\",\n" + + " \"stageVariable2\": \"value2\"\n" + + " }\n" + + "}"; - private SpringDelegatingLambdaContainerHandler handler; + private SpringDelegatingLambdaContainerHandler handler; - private ObjectMapper mapper = new ObjectMapper(); + private ObjectMapper mapper = new ObjectMapper(); - public void initServletAppTest() { - this.handler = new SpringDelegatingLambdaContainerHandler(ServletApplication.class); - } + public void initServletAppTest() { + this.handler = new SpringDelegatingLambdaContainerHandler(ServletApplication.class); + } - public static Collection data() { + public static Collection data() { return Arrays.asList(new String[]{API_GATEWAY_EVENT, API_GATEWAY_EVENT_V2}); } - @MethodSource("data") - @ParameterizedTest - public void testAsyncPost(String jsonEvent) throws Exception { - initServletAppTest(); - InputStream targetStream = new ByteArrayInputStream(this.generateHttpRequest(jsonEvent, "POST", "/async", "{\"name\":\"bob\"}", null)); - ByteArrayOutputStream output = new ByteArrayOutputStream(); - handler.handleRequest(targetStream, output, null); - Map result = mapper.readValue(output.toString(StandardCharsets.UTF_8), Map.class); - assertEquals(200, result.get("statusCode")); - assertEquals("{\"name\":\"BOB\"}", result.get("body")); - } + @MethodSource("data") + @ParameterizedTest + public void testAsyncPost(String jsonEvent) throws Exception { + initServletAppTest(); + InputStream targetStream = new ByteArrayInputStream(this.generateHttpRequest(jsonEvent, "POST", "/async", "{\"name\":\"bob\"}", null)); + ByteArrayOutputStream output = new ByteArrayOutputStream(); + handler.handleRequest(targetStream, output, null); + Map result = mapper.readValue(output.toString(StandardCharsets.UTF_8), Map.class); + assertEquals(200, result.get("statusCode")); + assertEquals("{\"name\":\"BOB\"}", result.get("body")); + } - @MethodSource("data") - @ParameterizedTest - public void testValidate400(String jsonEvent) throws Exception { - initServletAppTest(); - UserData ud = new UserData(); - InputStream targetStream = new ByteArrayInputStream(this.generateHttpRequest(jsonEvent, "POST", "/validate", mapper.writeValueAsString(ud), null)); - ByteArrayOutputStream output = new ByteArrayOutputStream(); - handler.handleRequest(targetStream, output, null); - Map result = mapper.readValue(output.toString(StandardCharsets.UTF_8), Map.class); - assertEquals(400, result.get("statusCode")); - assertEquals("3", result.get("body")); - } + @MethodSource("data") + @ParameterizedTest + public void testValidate400(String jsonEvent) throws Exception { + initServletAppTest(); + UserData ud = new UserData(); + InputStream targetStream = new ByteArrayInputStream(this.generateHttpRequest(jsonEvent, "POST", "/validate", mapper.writeValueAsString(ud), null)); + ByteArrayOutputStream output = new ByteArrayOutputStream(); + handler.handleRequest(targetStream, output, null); + Map result = mapper.readValue(output.toString(StandardCharsets.UTF_8), Map.class); + assertEquals(400, result.get("statusCode")); + assertEquals("3", result.get("body")); + } - @MethodSource("data") - @ParameterizedTest - public void testValidate200(String jsonEvent) throws Exception { - initServletAppTest(); - UserData ud = new UserData(); - ud.setFirstName("bob"); - ud.setLastName("smith"); - ud.setEmail("foo@bar.com"); - InputStream targetStream = new ByteArrayInputStream(this.generateHttpRequest(jsonEvent, "POST", "/validate", mapper.writeValueAsString(ud), null)); - ByteArrayOutputStream output = new ByteArrayOutputStream(); - handler.handleRequest(targetStream, output, null); - Map result = mapper.readValue(output.toString(StandardCharsets.UTF_8), Map.class); - assertEquals(200, result.get("statusCode")); - assertEquals("VALID", result.get("body")); - } + @MethodSource("data") + @ParameterizedTest + public void testValidate200(String jsonEvent) throws Exception { + initServletAppTest(); + UserData ud = new UserData(); + ud.setFirstName("bob"); + ud.setLastName("smith"); + ud.setEmail("foo@bar.com"); + InputStream targetStream = new ByteArrayInputStream(this.generateHttpRequest(jsonEvent, "POST", "/validate", mapper.writeValueAsString(ud), null)); + ByteArrayOutputStream output = new ByteArrayOutputStream(); + handler.handleRequest(targetStream, output, null); + Map result = mapper.readValue(output.toString(StandardCharsets.UTF_8), Map.class); + assertEquals(200, result.get("statusCode")); + assertEquals("VALID", result.get("body")); + } - @MethodSource("data") - @ParameterizedTest - public void messageObject_parsesObject_returnsCorrectMessage(String jsonEvent) throws Exception { - initServletAppTest(); + @MethodSource("data") + @ParameterizedTest + public void messageObject_parsesObject_returnsCorrectMessage(String jsonEvent) throws Exception { + initServletAppTest(); InputStream targetStream = new ByteArrayInputStream(this.generateHttpRequest(jsonEvent, "POST", "/message", - mapper.writeValueAsString(new MessageData("test message")), null)); + mapper.writeValueAsString(new MessageData("test message")), null)); ByteArrayOutputStream output = new ByteArrayOutputStream(); - handler.handleRequest(targetStream, output, null); - Map result = mapper.readValue(output.toString(StandardCharsets.UTF_8), Map.class); - assertEquals(200, result.get("statusCode")); - assertEquals("test message", result.get("body")); + handler.handleRequest(targetStream, output, null); + Map result = mapper.readValue(output.toString(StandardCharsets.UTF_8), Map.class); + assertEquals(200, result.get("statusCode")); + assertEquals("test message", result.get("body")); } - @SuppressWarnings({"unchecked" }) - @MethodSource("data") - @ParameterizedTest - void messageObject_propertiesInContentType_returnsCorrectMessage(String jsonEvent) throws Exception { + @SuppressWarnings({"unchecked" }) + @MethodSource("data") + @ParameterizedTest + void messageObject_propertiesInContentType_returnsCorrectMessage(String jsonEvent) throws Exception { initServletAppTest(); Map headers = new HashMap<>(); - headers.put(HttpHeaders.CONTENT_TYPE, "application/json;v=1"); - headers.put(HttpHeaders.ACCEPT, "application/json;v=1"); - InputStream targetStream = new ByteArrayInputStream(this.generateHttpRequest(jsonEvent, "POST", "/message", - mapper.writeValueAsString(new MessageData("test message")), headers)); + headers.put(HttpHeaders.CONTENT_TYPE, "application/json;v=1"); + headers.put(HttpHeaders.ACCEPT, "application/json;v=1"); + InputStream targetStream = new ByteArrayInputStream(this.generateHttpRequest(jsonEvent, "POST", "/message", + mapper.writeValueAsString(new MessageData("test message")), headers)); - ByteArrayOutputStream output = new ByteArrayOutputStream(); - handler.handleRequest(targetStream, output, null); - Map result = mapper.readValue(output.toString(StandardCharsets.UTF_8), Map.class); - assertEquals("test message", result.get("body")); + ByteArrayOutputStream output = new ByteArrayOutputStream(); + handler.handleRequest(targetStream, output, null); + Map result = mapper.readValue(output.toString(StandardCharsets.UTF_8), Map.class); + assertEquals("test message", result.get("body")); } - private byte[] generateHttpRequest(String jsonEvent, String method, String path, String body, Map headers) throws Exception { - Map requestMap = mapper.readValue(jsonEvent, Map.class); - if (requestMap.get("version").equals("2.0")) { - return generateHttpRequest2(requestMap, method, path, body, headers); - } - return generateHttpRequest(requestMap, method, path, body, headers); - } + private byte[] generateHttpRequest(String jsonEvent, String method, String path, String body, Map headers) throws Exception { + Map requestMap = mapper.readValue(jsonEvent, Map.class); + if (requestMap.get("version").equals("2.0")) { + return generateHttpRequest2(requestMap, method, path, body, headers); + } + return generateHttpRequest(requestMap, method, path, body, headers); + } - @SuppressWarnings({ "unchecked"}) - private byte[] generateHttpRequest(Map requestMap, String method, String path, String body, Map headers) throws Exception { - requestMap.put("path", path); - requestMap.put("httpMethod", method); - requestMap.put("body", body); - if (!CollectionUtils.isEmpty(headers)) { - requestMap.put("headers", headers); - } - return mapper.writeValueAsBytes(requestMap); - } + @SuppressWarnings({ "unchecked"}) + private byte[] generateHttpRequest(Map requestMap, String method, String path, String body, Map headers) throws Exception { + requestMap.put("path", path); + requestMap.put("httpMethod", method); + requestMap.put("body", body); + if (!CollectionUtils.isEmpty(headers)) { + requestMap.put("headers", headers); + } + return mapper.writeValueAsBytes(requestMap); + } - @SuppressWarnings({ "unchecked"}) - private byte[] generateHttpRequest2(Map requestMap, String method, String path, String body, Map headers) throws Exception { - Map map = mapper.readValue(API_GATEWAY_EVENT_V2, Map.class); - Map http = (Map) ((Map) map.get("requestContext")).get("http"); - http.put("path", path); - http.put("method", method); - map.put("body", body); - if (!CollectionUtils.isEmpty(headers)) { - map.put("headers", headers); - } - return mapper.writeValueAsBytes(map); - } + @SuppressWarnings({ "unchecked"}) + private byte[] generateHttpRequest2(Map requestMap, String method, String path, String body, Map headers) throws Exception { + Map map = mapper.readValue(API_GATEWAY_EVENT_V2, Map.class); + Map http = (Map) ((Map) map.get("requestContext")).get("http"); + http.put("path", path); + http.put("method", method); + map.put("body", body); + if (!CollectionUtils.isEmpty(headers)) { + map.put("headers", headers); + } + return mapper.writeValueAsBytes(map); + } } diff --git a/samples/springboot3/alt-pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/Application.java b/samples/springboot3/alt-pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/Application.java index ee9989df5..428d67267 100644 --- a/samples/springboot3/alt-pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/Application.java +++ b/samples/springboot3/alt-pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/Application.java @@ -42,7 +42,7 @@ public HandlerAdapter handlerAdapter() { @Bean("CognitoIdentityFilter") public Filter cognitoFilter() { - return new CognitoIdentityFilter(); + return new CognitoIdentityFilter(); } public static void main(String[] args) { From da5cb2b0f37da5397a945080dd9c157486284254 Mon Sep 17 00:00:00 2001 From: Oleg Zhurakousky Date: Thu, 6 Jul 2023 10:30:10 +0200 Subject: [PATCH 437/888] Upgrade s-c-function to 4.0.4 (release) --- aws-serverless-java-container-springboot3/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index 532ce8312..4c41ab834 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -25,7 +25,7 @@ org.springframework.cloud spring-cloud-function-serverless-web - 4.1.0-SNAPSHOT + 4.0.4 com.amazonaws.serverless From ff72372fa201655773e2caa2f20a766f320a1e5c Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Tue, 11 Jul 2023 11:11:12 +0200 Subject: [PATCH 438/888] cleanup (#577) --- .../proxy/spring/servletapp/MessageController.java | 8 -------- 1 file changed, 8 deletions(-) diff --git a/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/MessageController.java b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/MessageController.java index a40d2c206..1923396c6 100644 --- a/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/MessageController.java +++ b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/MessageController.java @@ -9,7 +9,6 @@ import org.springframework.web.server.ResponseStatusException; import jakarta.validation.Valid; -import reactor.core.publisher.Mono; import java.util.Collections; import java.util.HashMap; @@ -22,12 +21,6 @@ public class MessageController { public static final String UTF8_RESPONSE = "öüäß фрыцшщ"; public static final String EX_MESSAGE = "404 exception message"; - - @RequestMapping(path="/hi", method=RequestMethod.GET, produces = {"text/plain"}) - public Mono hi() { - return Mono.just(HELLO_MESSAGE); - } - @SuppressWarnings({ "unchecked", "rawtypes" }) @RequestMapping(path = "/async", method = RequestMethod.POST) @ResponseBody @@ -37,7 +30,6 @@ public DeferredResult> asyncResult(@RequestBody Map Date: Mon, 17 Jul 2023 14:26:05 +0200 Subject: [PATCH 439/888] chore(deps): align code with Commons Fileupload 2.0.0-M1 (currently under vote https://lists.apache.org/thread/27gkqk3928bw9qcqyhkgw9tzqxllpw67) --- .../proxy/internal/servlet/AwsHttpServletRequest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java index df6627cbd..1bd12c048 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java @@ -24,7 +24,7 @@ import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import org.apache.commons.fileupload2.core.FileItem; import org.apache.commons.fileupload2.core.FileUploadException; -import org.apache.commons.fileupload2.core.disk.DiskFileItemFactory; +import org.apache.commons.fileupload2.core.DiskFileItemFactory; import org.apache.commons.fileupload2.jakarta.JakartaServletFileUpload; import org.apache.commons.io.FilenameUtils; import org.apache.commons.io.IOUtils; From 5b1560c4d378689d7a784345371d1687b4907176 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Thu, 20 Jul 2023 12:15:37 +0200 Subject: [PATCH 440/888] chore(deps): use Commons Fileupload 2.0.0-M1 instead of SNAPSHOT --- aws-serverless-java-container-core/pom.xml | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 3eed2022e..b8cbce252 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -20,21 +20,6 @@ 6.0.0 - - - apache.snapshots - Apache Development Snapshot Repository - https://repository.apache.org/content/repositories/snapshots/ - - false - - - true - - - - - com.amazonaws @@ -69,7 +54,7 @@ org.apache.commons commons-fileupload2-jakarta - 2.0.0-SNAPSHOT + 2.0.0-M1 From 5afae31480e0ead72762758bebe908bcfc12ff02 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Thu, 20 Jul 2023 12:31:35 +0200 Subject: [PATCH 441/888] chore(deps): update websocket apis to 2.1.1 (closes #605, #606) --- aws-serverless-java-container-springboot3/pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index 4c41ab834..02ea48b0a 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -180,14 +180,14 @@ jakarta.websocket jakarta.websocket-api - 2.1.0 + 2.1.1 test jakarta.websocket jakarta.websocket-client-api - 2.1.0 + 2.1.1 test From a858154116f4f4efa9aa0b78243f0e7687c012d6 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Thu, 20 Jul 2023 14:03:44 +0200 Subject: [PATCH 442/888] chore(deps): Update Spring dependencies (framework to 6.0.11, security to 6.1.2, boot to 3.1.2) #609, #610, #611, #612, #613 --- aws-serverless-java-container-core/pom.xml | 2 +- aws-serverless-java-container-spring/pom.xml | 4 ++-- aws-serverless-java-container-springboot3/pom.xml | 6 +++--- .../src/main/resources/archetype-resources/build.gradle | 4 ++-- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/spring/pet-store/build.gradle | 4 ++-- samples/spring/pet-store/pom.xml | 2 +- samples/springboot3/alt-pet-store/builds.gradle | 2 +- samples/springboot3/alt-pet-store/pom.xml | 2 +- samples/springboot3/pet-store/build.gradle | 2 +- samples/springboot3/pet-store/pom.xml | 2 +- 13 files changed, 18 insertions(+), 18 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index b8cbce252..dfffbe606 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -60,7 +60,7 @@ org.springframework.security spring-security-web - 6.1.1 + 6.1.2 test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 9a2b077e8..7d1a9a25b 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -16,8 +16,8 @@ - 6.0.10 - 6.1.1 + 6.0.11 + 6.1.2 diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index 02ea48b0a..b797d89ae 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -15,9 +15,9 @@ 2.0.0-SNAPSHOT - 6.0.10 - 3.1.1 - 6.1.1 + 6.0.11 + 3.1.2 + 6.1.2 diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index 7c14db0dd..c31590715 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -7,8 +7,8 @@ repositories { dependencies { implementation ( - 'org.springframework:spring-webmvc:6.0.10', - 'org.springframework:spring-context:6.0.10', + 'org.springframework:spring-webmvc:6.0.11', + 'org.springframework:spring-context:6.0.11', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[2.0-SNAPSHOT,)', 'org.apache.logging.log4j:log4j-core:2.20.0', 'org.apache.logging.log4j:log4j-api:2.20.0', diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index b9d3d72df..69927546b 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 1.8 - 6.0.10 + 6.0.11 5.9.3 2.20.0 diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle index 13c8e76b2..2d7977bbe 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle @@ -9,7 +9,7 @@ repositories { dependencies { implementation ( - 'org.springframework.boot:spring-boot-starter-web:3.1.1', + 'org.springframework.boot:spring-boot-starter-web:3.1.2', 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:[2.0-SNAPSHOT,)', ) diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml index 2be47cff2..673cea593 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ org.springframework.boot spring-boot-starter-parent - 3.1.1 + 3.1.2 diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index 82048da2b..42813a0ee 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -7,8 +7,8 @@ repositories { dependencies { implementation ( - 'org.springframework:spring-webmvc:6.0.10', - 'org.springframework:spring-context:6.0.10', + 'org.springframework:spring-webmvc:6.0.11', + 'org.springframework:spring-context:6.0.11', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[2.0-SNAPSHOT,)', 'org.apache.logging.log4j:log4j-core:2.20.0', 'org.apache.logging.log4j:log4j-api:2.20.0', diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index 684623a59..2ed9ae0de 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -24,7 +24,7 @@ - 6.0.10 + 6.0.11 2.20.0 17 17 diff --git a/samples/springboot3/alt-pet-store/builds.gradle b/samples/springboot3/alt-pet-store/builds.gradle index 00a9d3a1f..d6d2ec61d 100644 --- a/samples/springboot3/alt-pet-store/builds.gradle +++ b/samples/springboot3/alt-pet-store/builds.gradle @@ -9,7 +9,7 @@ repositories { dependencies { implementation ( - implementation('org.springframework.boot:spring-boot-starter-web:3.1.1') { + implementation('org.springframework.boot:spring-boot-starter-web:3.1.2') { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat' }, 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:[2.0-SNAPSHOT,)', diff --git a/samples/springboot3/alt-pet-store/pom.xml b/samples/springboot3/alt-pet-store/pom.xml index a8f6220b5..1e655268a 100644 --- a/samples/springboot3/alt-pet-store/pom.xml +++ b/samples/springboot3/alt-pet-store/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 3.1.1 + 3.1.2 diff --git a/samples/springboot3/pet-store/build.gradle b/samples/springboot3/pet-store/build.gradle index 00a9d3a1f..d6d2ec61d 100644 --- a/samples/springboot3/pet-store/build.gradle +++ b/samples/springboot3/pet-store/build.gradle @@ -9,7 +9,7 @@ repositories { dependencies { implementation ( - implementation('org.springframework.boot:spring-boot-starter-web:3.1.1') { + implementation('org.springframework.boot:spring-boot-starter-web:3.1.2') { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat' }, 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:[2.0-SNAPSHOT,)', diff --git a/samples/springboot3/pet-store/pom.xml b/samples/springboot3/pet-store/pom.xml index d246cb406..8a21e0fad 100644 --- a/samples/springboot3/pet-store/pom.xml +++ b/samples/springboot3/pet-store/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 3.1.1 + 3.1.2 From 39045b356102e9b975132dd2cf08320463fcb91a Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Thu, 20 Jul 2023 14:15:30 +0200 Subject: [PATCH 443/888] fix Gradle filename (#603) --- samples/springboot3/alt-pet-store/{builds.gradle => build.gradle} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename samples/springboot3/alt-pet-store/{builds.gradle => build.gradle} (100%) diff --git a/samples/springboot3/alt-pet-store/builds.gradle b/samples/springboot3/alt-pet-store/build.gradle similarity index 100% rename from samples/springboot3/alt-pet-store/builds.gradle rename to samples/springboot3/alt-pet-store/build.gradle From 80fd2773b410fd8b9af25b27cebe8cfa7fd3dc3a Mon Sep 17 00:00:00 2001 From: deki Date: Thu, 20 Jul 2023 12:25:53 +0000 Subject: [PATCH 444/888] chore: release - prepare release aws-serverless-java-container-2.0.0-M2 --- aws-serverless-java-container-core/pom.xml | 4 ++-- aws-serverless-java-container-jersey/pom.xml | 8 ++++---- aws-serverless-java-container-spring/pom.xml | 8 ++++---- aws-serverless-java-container-springboot3/pom.xml | 8 ++++---- aws-serverless-jersey-archetype/pom.xml | 6 +++--- aws-serverless-spring-archetype/pom.xml | 6 +++--- aws-serverless-springboot3-archetype/pom.xml | 6 +++--- pom.xml | 4 ++-- 8 files changed, 25 insertions(+), 25 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index dfffbe606..30b09b0e4 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Core Allows Java applications written for a servlet container to run in AWS Lambda https://aws.amazon.com/lambda - 2.0.0-SNAPSHOT + 2.0.0-M2 com.amazonaws.serverless aws-serverless-java-container - 2.0.0-SNAPSHOT + 2.0.0-M2 .. diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index db3f9dd0c..cb8ee0a00 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Jersey implementation Allows Java applications written for Jersey to run in AWS Lambda https://aws.amazon.com/lambda - 2.0.0-SNAPSHOT + 2.0.0-M2 com.amazonaws.serverless aws-serverless-java-container - 2.0.0-SNAPSHOT + 2.0.0-M2 .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.0.0-SNAPSHOT + 2.0.0-M2 com.fasterxml.jackson.core @@ -35,7 +35,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.0.0-SNAPSHOT + 2.0.0-M2 tests test-jar test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 7d1a9a25b..e26732426 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spring implementation Allows Java applications written for the Spring framework to run in AWS Lambda https://aws.amazon.com/lambda - 2.0.0-SNAPSHOT + 2.0.0-M2 com.amazonaws.serverless aws-serverless-java-container - 2.0.0-SNAPSHOT + 2.0.0-M2 .. @@ -25,12 +25,12 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.0.0-SNAPSHOT + 2.0.0-M2 com.amazonaws.serverless aws-serverless-java-container-core - 2.0.0-SNAPSHOT + 2.0.0-M2 tests test-jar test diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index b797d89ae..812ec42ed 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -3,7 +3,7 @@ aws-serverless-java-container com.amazonaws.serverless - 2.0.0-SNAPSHOT + 2.0.0-M2 4.0.0 @@ -12,7 +12,7 @@ AWS Serverless Java container support - SpringBoot 3 implementation Allows Java applications written for SpringBoot 3 to run in AWS Lambda https://aws.amazon.com/lambda - 2.0.0-SNAPSHOT + 2.0.0-M2 6.0.11 @@ -30,12 +30,12 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.0.0-SNAPSHOT + 2.0.0-M2 com.amazonaws.serverless aws-serverless-java-container-core - 2.0.0-SNAPSHOT + 2.0.0-M2 tests test-jar test diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index e328fee77..c43f6f2a7 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.0.0-SNAPSHOT + 2.0.0-M2 com.amazonaws.serverless.archetypes aws-serverless-jersey-archetype - 2.0.0-SNAPSHOT + 2.0.0-M2 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-2.0.0-M2 diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index 747ff0838..d755e5ca2 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.0.0-SNAPSHOT + 2.0.0-M2 com.amazonaws.serverless.archetypes aws-serverless-spring-archetype - 2.0.0-SNAPSHOT + 2.0.0-M2 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-2.0.0-M2 diff --git a/aws-serverless-springboot3-archetype/pom.xml b/aws-serverless-springboot3-archetype/pom.xml index 8f478b223..504dc334f 100644 --- a/aws-serverless-springboot3-archetype/pom.xml +++ b/aws-serverless-springboot3-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.0.0-SNAPSHOT + 2.0.0-M2 com.amazonaws.serverless.archetypes aws-serverless-springboot3-archetype - 2.0.0-SNAPSHOT + 2.0.0-M2 maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-2.0.0-M2 diff --git a/pom.xml b/pom.xml index 6eb0965ce..1dc935729 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazonaws.serverless aws-serverless-java-container pom - 2.0.0-SNAPSHOT + 2.0.0-M2 AWS Serverless Java container A Java framework to run Spring, Spring Boot, Jersey, Spark, and Struts applications inside AWS Lambda https://github.com/awslabs/aws-serverless-java-container @@ -37,7 +37,7 @@ https://github.com/awslabs/aws-serverless-java-container scm:git:https://github.com/awslabs/aws-serverless-java-container.git - HEAD + aws-serverless-java-container-2.0.0-M2 From 3c55f6224fea14d9f2099807f86296ea920003cc Mon Sep 17 00:00:00 2001 From: deki Date: Thu, 20 Jul 2023 12:25:55 +0000 Subject: [PATCH 445/888] chore: release - prepare for next development iteration --- aws-serverless-java-container-core/pom.xml | 4 ++-- aws-serverless-java-container-jersey/pom.xml | 8 ++++---- aws-serverless-java-container-spring/pom.xml | 8 ++++---- aws-serverless-java-container-springboot3/pom.xml | 8 ++++---- aws-serverless-jersey-archetype/pom.xml | 6 +++--- aws-serverless-spring-archetype/pom.xml | 6 +++--- aws-serverless-springboot3-archetype/pom.xml | 6 +++--- pom.xml | 4 ++-- 8 files changed, 25 insertions(+), 25 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 30b09b0e4..dfffbe606 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Core Allows Java applications written for a servlet container to run in AWS Lambda https://aws.amazon.com/lambda - 2.0.0-M2 + 2.0.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 2.0.0-M2 + 2.0.0-SNAPSHOT .. diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index cb8ee0a00..db3f9dd0c 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Jersey implementation Allows Java applications written for Jersey to run in AWS Lambda https://aws.amazon.com/lambda - 2.0.0-M2 + 2.0.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 2.0.0-M2 + 2.0.0-SNAPSHOT .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.0.0-M2 + 2.0.0-SNAPSHOT com.fasterxml.jackson.core @@ -35,7 +35,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.0.0-M2 + 2.0.0-SNAPSHOT tests test-jar test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index e26732426..7d1a9a25b 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spring implementation Allows Java applications written for the Spring framework to run in AWS Lambda https://aws.amazon.com/lambda - 2.0.0-M2 + 2.0.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 2.0.0-M2 + 2.0.0-SNAPSHOT .. @@ -25,12 +25,12 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.0.0-M2 + 2.0.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container-core - 2.0.0-M2 + 2.0.0-SNAPSHOT tests test-jar test diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index 812ec42ed..b797d89ae 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -3,7 +3,7 @@ aws-serverless-java-container com.amazonaws.serverless - 2.0.0-M2 + 2.0.0-SNAPSHOT 4.0.0 @@ -12,7 +12,7 @@ AWS Serverless Java container support - SpringBoot 3 implementation Allows Java applications written for SpringBoot 3 to run in AWS Lambda https://aws.amazon.com/lambda - 2.0.0-M2 + 2.0.0-SNAPSHOT 6.0.11 @@ -30,12 +30,12 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.0.0-M2 + 2.0.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container-core - 2.0.0-M2 + 2.0.0-SNAPSHOT tests test-jar test diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index c43f6f2a7..e328fee77 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.0.0-M2 + 2.0.0-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-jersey-archetype - 2.0.0-M2 + 2.0.0-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-2.0.0-M2 + HEAD diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index d755e5ca2..747ff0838 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.0.0-M2 + 2.0.0-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-spring-archetype - 2.0.0-M2 + 2.0.0-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-2.0.0-M2 + HEAD diff --git a/aws-serverless-springboot3-archetype/pom.xml b/aws-serverless-springboot3-archetype/pom.xml index 504dc334f..8f478b223 100644 --- a/aws-serverless-springboot3-archetype/pom.xml +++ b/aws-serverless-springboot3-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.0.0-M2 + 2.0.0-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-springboot3-archetype - 2.0.0-M2 + 2.0.0-SNAPSHOT maven-archetype https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-2.0.0-M2 + HEAD diff --git a/pom.xml b/pom.xml index 1dc935729..6eb0965ce 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazonaws.serverless aws-serverless-java-container pom - 2.0.0-M2 + 2.0.0-SNAPSHOT AWS Serverless Java container A Java framework to run Spring, Spring Boot, Jersey, Spark, and Struts applications inside AWS Lambda https://github.com/awslabs/aws-serverless-java-container @@ -37,7 +37,7 @@ https://github.com/awslabs/aws-serverless-java-container scm:git:https://github.com/awslabs/aws-serverless-java-container.git - aws-serverless-java-container-2.0.0-M2 + HEAD From af891860d2185c3749f35da23b60d053d08fab38 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 14 Aug 2023 08:39:39 +0200 Subject: [PATCH 446/888] chore(deps): update JUnit version to 5.10.0 --- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- pom.xml | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle index 28c81422b..627cbbd2f 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle @@ -23,7 +23,7 @@ dependencies { testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") testImplementation("org.apache.httpcomponents.client5:httpclient5:5.2.1") - testImplementation(platform("org.junit:junit-bom:5.9.3")) + testImplementation(platform("org.junit:junit-bom:5.10.0")) testImplementation("org.junit.jupiter:junit-jupiter") } diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml index a59bebfbe..3c4149d19 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml @@ -17,7 +17,7 @@ 3.1.2 2.15.2 - 5.9.3 + 5.10.0 diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle index d198e93b0..fb1d73c1f 100644 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle @@ -14,7 +14,7 @@ dependencies { testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") testImplementation("org.apache.httpcomponents.client5:httpclient5:5.2.1") - testImplementation(platform("org.junit:junit-bom:5.9.3")) + testImplementation(platform("org.junit:junit-bom:5.10.0")) testImplementation("org.junit.jupiter:junit-jupiter") } diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml index 56038d396..cf4f75a7a 100644 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml @@ -18,7 +18,7 @@ 1.8 2.15.2 2.9.4 - 5.9.3 + 5.10.0 diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index c31590715..5d2323018 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -19,7 +19,7 @@ dependencies { testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") testImplementation("org.apache.httpcomponents.client5:httpclient5:5.2.1") - testImplementation(platform("org.junit:junit-bom:5.9.3")) + testImplementation(platform("org.junit:junit-bom:5.10.0")) testImplementation("org.junit.jupiter:junit-jupiter") } diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index 69927546b..35065eb85 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -17,7 +17,7 @@ 1.8 1.8 6.0.11 - 5.9.3 + 5.10.0 2.20.0 diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle index 2d7977bbe..41494fbd9 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle @@ -15,7 +15,7 @@ dependencies { testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") testImplementation("org.apache.httpcomponents.client5:httpclient5:5.2.1") - testImplementation(platform("org.junit:junit-bom:5.9.3")) + testImplementation(platform("org.junit:junit-bom:5.10.0")) testImplementation("org.junit.jupiter:junit-jupiter") } diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml index 673cea593..dbdaf330f 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml @@ -21,7 +21,7 @@ 17 - 5.9.3 + 5.10.0 diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle index 5c5dc0db4..a01f0a00d 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle @@ -43,7 +43,7 @@ dependencies { testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") testImplementation("org.apache.httpcomponents.client5:httpclient5:5.2.1") - testImplementation(platform("org.junit:junit-bom:5.9.3")) + testImplementation(platform("org.junit:junit-bom:5.10.0")) testImplementation("org.junit.jupiter:junit-jupiter") testImplementation('org.apache.struts:struts2-junit-plugin:6.1.2.1') { exclude group: 'org.apache.struts', module: 'struts2-core' diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml index 8c3d30e7c..a228dd923 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml @@ -17,7 +17,7 @@ 1.8 6.1.2.1 2.15.2 - 5.9.3 + 5.10.0 2.20.0 diff --git a/pom.xml b/pom.xml index 6eb0965ce..219bc2677 100644 --- a/pom.xml +++ b/pom.xml @@ -80,7 +80,7 @@ 8.3.1 2.15.2 2.0.7 - 5.9.3 + 5.10.0 5.4.0 1.3 UTF-8 From 4dac7d827f981465e8c142fd2d1901ff7f2afecb Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 14 Aug 2023 09:18:45 +0200 Subject: [PATCH 447/888] chore(deps): update Jersey version to 3.1.3 --- aws-serverless-java-container-jersey/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 4 ++-- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/jersey/pet-store/build.gradle | 4 ++-- samples/jersey/pet-store/pom.xml | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index db3f9dd0c..d028bfda7 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -16,7 +16,7 @@ - 3.1.2 + 3.1.3 diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle index 627cbbd2f..5552cbef4 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle @@ -11,13 +11,13 @@ dependencies { 'com.fasterxml.jackson.core:jackson-databind:2.15.2', ) - implementation("org.glassfish.jersey.media:jersey-media-json-jackson:3.1.2") { + implementation("org.glassfish.jersey.media:jersey-media-json-jackson:3.1.3") { exclude group: 'com.fasterxml.jackson.core', module: "jackson-annotations" exclude group: 'com.fasterxml.jackson.core', module: "jackson-databind" exclude group: 'com.fasterxml.jackson.core', module: "jackson-core" } - implementation("org.glassfish.jersey.inject:jersey-hk2:3.1.2") { + implementation("org.glassfish.jersey.inject:jersey-hk2:3.1.3") { exclude group: 'javax.inject', module: "javax.inject" } diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml index 3c4149d19..692bb89c7 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml @@ -15,7 +15,7 @@ 1.8 1.8 - 3.1.2 + 3.1.3 2.15.2 5.10.0 diff --git a/samples/jersey/pet-store/build.gradle b/samples/jersey/pet-store/build.gradle index 3bd7dff51..674394de4 100644 --- a/samples/jersey/pet-store/build.gradle +++ b/samples/jersey/pet-store/build.gradle @@ -11,13 +11,13 @@ dependencies { 'com.fasterxml.jackson.core:jackson-databind:2.15.2', ) - implementation("org.glassfish.jersey.media:jersey-media-json-jackson:3.1.2") { + implementation("org.glassfish.jersey.media:jersey-media-json-jackson:3.1.3") { exclude group: 'com.fasterxml.jackson.core', module: "jackson-annotations" exclude group: 'com.fasterxml.jackson.core', module: "jackson-databind" exclude group: 'com.fasterxml.jackson.core', module: "jackson-core" } - implementation("org.glassfish.jersey.inject:jersey-hk2:3.1.2") { + implementation("org.glassfish.jersey.inject:jersey-hk2:3.1.3") { exclude group: 'javax.inject', module: "javax.inject" } } diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index 786163929..0ed1f95f4 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -26,7 +26,7 @@ 1.8 1.8 - 3.1.2 + 3.1.3 2.15.2 From 75fe8a91707a393697b6ea3092a53e8b396061c8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 21 Aug 2023 04:54:14 +0000 Subject: [PATCH 448/888] chore(deps): bump org.owasp:dependency-check-maven from 8.3.1 to 8.4.0 Bumps [org.owasp:dependency-check-maven](https://github.com/jeremylong/DependencyCheck) from 8.3.1 to 8.4.0. - [Release notes](https://github.com/jeremylong/DependencyCheck/releases) - [Changelog](https://github.com/jeremylong/DependencyCheck/blob/main/CHANGELOG.md) - [Commits](https://github.com/jeremylong/DependencyCheck/compare/v8.3.1...v8.4.0) --- updated-dependencies: - dependency-name: org.owasp:dependency-check-maven dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 219bc2677..2c5c0ed97 100644 --- a/pom.xml +++ b/pom.xml @@ -77,7 +77,7 @@ 0.7 - 8.3.1 + 8.4.0 2.15.2 2.0.7 5.10.0 From 636c483335dadfa56c9e6d9b770c0528ad76d5f8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 21 Aug 2023 04:54:20 +0000 Subject: [PATCH 449/888] chore(deps): bump com.amazonaws:aws-lambda-java-core from 1.2.2 to 1.2.3 Bumps [com.amazonaws:aws-lambda-java-core](https://github.com/aws/aws-lambda-java-libs) from 1.2.2 to 1.2.3. - [Commits](https://github.com/aws/aws-lambda-java-libs/commits) --- updated-dependencies: - dependency-name: com.amazonaws:aws-lambda-java-core dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- aws-serverless-java-container-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index dfffbe606..5d0da0c83 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -24,7 +24,7 @@ com.amazonaws aws-lambda-java-core - 1.2.2 + 1.2.3 From ae3de8b9367db70f19717d7c8e63e6745a1b90f6 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Thu, 24 Aug 2023 14:28:08 +0200 Subject: [PATCH 450/888] chore(deps): Update Spring dependencies (security to 6.1.3, boot to 3.1.3) --- aws-serverless-java-container-core/pom.xml | 2 +- aws-serverless-java-container-spring/pom.xml | 2 +- aws-serverless-java-container-springboot3/pom.xml | 4 ++-- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/springboot3/alt-pet-store/build.gradle | 2 +- samples/springboot3/alt-pet-store/pom.xml | 2 +- samples/springboot3/pet-store/build.gradle | 2 +- samples/springboot3/pet-store/pom.xml | 2 +- 9 files changed, 10 insertions(+), 10 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 5d0da0c83..5e29578d9 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -60,7 +60,7 @@ org.springframework.security spring-security-web - 6.1.2 + 6.1.3 test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 7d1a9a25b..608270c0c 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -17,7 +17,7 @@ 6.0.11 - 6.1.2 + 6.1.3 diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index b797d89ae..cc907f952 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -16,8 +16,8 @@ 6.0.11 - 3.1.2 - 6.1.2 + 3.1.3 + 6.1.3 diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle index 41494fbd9..567aae98c 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle @@ -9,7 +9,7 @@ repositories { dependencies { implementation ( - 'org.springframework.boot:spring-boot-starter-web:3.1.2', + 'org.springframework.boot:spring-boot-starter-web:3.1.3', 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:[2.0-SNAPSHOT,)', ) diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml index dbdaf330f..02693c1bd 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ org.springframework.boot spring-boot-starter-parent - 3.1.2 + 3.1.3 diff --git a/samples/springboot3/alt-pet-store/build.gradle b/samples/springboot3/alt-pet-store/build.gradle index d6d2ec61d..8b38f55f8 100644 --- a/samples/springboot3/alt-pet-store/build.gradle +++ b/samples/springboot3/alt-pet-store/build.gradle @@ -9,7 +9,7 @@ repositories { dependencies { implementation ( - implementation('org.springframework.boot:spring-boot-starter-web:3.1.2') { + implementation('org.springframework.boot:spring-boot-starter-web:3.1.3') { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat' }, 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:[2.0-SNAPSHOT,)', diff --git a/samples/springboot3/alt-pet-store/pom.xml b/samples/springboot3/alt-pet-store/pom.xml index 1e655268a..ba4b2433a 100644 --- a/samples/springboot3/alt-pet-store/pom.xml +++ b/samples/springboot3/alt-pet-store/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 3.1.2 + 3.1.3 diff --git a/samples/springboot3/pet-store/build.gradle b/samples/springboot3/pet-store/build.gradle index d6d2ec61d..8b38f55f8 100644 --- a/samples/springboot3/pet-store/build.gradle +++ b/samples/springboot3/pet-store/build.gradle @@ -9,7 +9,7 @@ repositories { dependencies { implementation ( - implementation('org.springframework.boot:spring-boot-starter-web:3.1.2') { + implementation('org.springframework.boot:spring-boot-starter-web:3.1.3') { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat' }, 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:[2.0-SNAPSHOT,)', diff --git a/samples/springboot3/pet-store/pom.xml b/samples/springboot3/pet-store/pom.xml index 8a21e0fad..2fdd615eb 100644 --- a/samples/springboot3/pet-store/pom.xml +++ b/samples/springboot3/pet-store/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 3.1.2 + 3.1.3 From bf2e36792b0befdf60b97ba17e9d4dddc8f6b9ab Mon Sep 17 00:00:00 2001 From: kibeom lee Date: Sun, 27 Aug 2023 22:50:45 +0900 Subject: [PATCH 451/888] Fix typos in FilterChainManager comments Fixed minor typographical errors in the Javadoc comments of FilterChainManager. --- .../serverless/proxy/internal/servlet/FilterChainManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/FilterChainManager.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/FilterChainManager.java index 835170bb5..4917b4aaa 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/FilterChainManager.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/FilterChainManager.java @@ -26,7 +26,7 @@ import java.util.function.Predicate; /** - * This object in in charge of matching a servlet request to a set of filter, creating the filter chain for a request, + * This object is in charge of matching a servlet request to a set of filters, creating the filter chain for a request, * and cache filter chains that were already loaded for re-use. This object should be used by the framework-specific * implementations that use the HttpServletRequest and HttpServletResponse objects. * From 6842d795993c01bcd858fc9253f6a887d0d85f65 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 28 Aug 2023 04:25:02 +0000 Subject: [PATCH 452/888] chore(deps): bump org.apache.maven.plugins:maven-enforcer-plugin Bumps [org.apache.maven.plugins:maven-enforcer-plugin](https://github.com/apache/maven-enforcer) from 3.3.0 to 3.4.0. - [Release notes](https://github.com/apache/maven-enforcer/releases) - [Commits](https://github.com/apache/maven-enforcer/compare/enforcer-3.3.0...enforcer-3.4.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-enforcer-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 2c5c0ed97..ee2d9eac3 100644 --- a/pom.xml +++ b/pom.xml @@ -169,7 +169,7 @@ org.apache.maven.plugins maven-enforcer-plugin - 3.3.0 + 3.4.0 enforce From 20a06320b3ad0f9227c9dcdaba61614d1a17e573 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 28 Aug 2023 04:25:11 +0000 Subject: [PATCH 453/888] chore(deps-dev): bump org.mockito:mockito-core from 5.4.0 to 5.5.0 Bumps [org.mockito:mockito-core](https://github.com/mockito/mockito) from 5.4.0 to 5.5.0. - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](https://github.com/mockito/mockito/compare/v5.4.0...v5.5.0) --- updated-dependencies: - dependency-name: org.mockito:mockito-core dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 2c5c0ed97..144d4d0f2 100644 --- a/pom.xml +++ b/pom.xml @@ -81,7 +81,7 @@ 2.15.2 2.0.7 5.10.0 - 5.4.0 + 5.5.0 1.3 UTF-8 From 007395460951b8932dde0f60c7d059b213d04313 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Sep 2023 04:51:57 +0000 Subject: [PATCH 454/888] chore(deps): bump slf4j.version from 2.0.7 to 2.0.9 Bumps `slf4j.version` from 2.0.7 to 2.0.9. Updates `org.slf4j:slf4j-api` from 2.0.7 to 2.0.9 Updates `org.slf4j:slf4j-simple` from 2.0.7 to 2.0.9 --- updated-dependencies: - dependency-name: org.slf4j:slf4j-api dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.slf4j:slf4j-simple dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 11d59a0a8..7a1d18987 100644 --- a/pom.xml +++ b/pom.xml @@ -79,7 +79,7 @@ 0.7 8.4.0 2.15.2 - 2.0.7 + 2.0.9 5.10.0 5.5.0 1.3 From 4019c878e9f6c4722170669def35f1e254335417 Mon Sep 17 00:00:00 2001 From: kibeom lee <70303094+2012160085@users.noreply.github.com> Date: Thu, 7 Sep 2023 16:05:05 +0900 Subject: [PATCH 455/888] Fix dispatch order issue in async request handling Ensure post-processing logic is executed before re-dispatching during asynchronous request handling * SpringBootLambdaContainerHandler - Added logic within the handleRequest method to reprocess the request in cases where an asynchronous request requires re-dispatching. * AwsAsyncContext - Added an isDispatchStarted method that returns whether the dispatch has started or not. - Removed the part where doFilter is directly called within the dispatch function. --- .../internal/servlet/AwsAsyncContext.java | 21 ++++++++++++------- .../SpringBootLambdaContainerHandler.java | 13 ++++++++++++ 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContext.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContext.java index 7e3642ef0..0dd115b9a 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContext.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContext.java @@ -37,6 +37,7 @@ public class AwsAsyncContext implements AsyncContext { private long timeout; private AtomicBoolean dispatched; private AtomicBoolean completed; + private AtomicBoolean dispatchStarted; private Logger log = LoggerFactory.getLogger(AwsAsyncContext.class); @@ -49,6 +50,7 @@ public AwsAsyncContext(HttpServletRequest request, HttpServletResponse response, timeout = 3000; dispatched = new AtomicBoolean(false); completed = new AtomicBoolean(false); + dispatchStarted = new AtomicBoolean(false); } @Override @@ -68,16 +70,15 @@ public boolean hasOriginalRequestAndResponse() { @Override public void dispatch() { - try { - log.debug("Dispatching request"); - if (dispatched.get()) { - throw new IllegalStateException("Dispatching already started"); - } + log.debug("Dispatching request"); + if (dispatched.get()) { + throw new IllegalStateException("Dispatching already started"); + } + if (!dispatchStarted.get()) { + dispatchStarted.set(true); + } else { dispatched.set(true); - handler.doFilter(req, res, ((AwsServletContext)req.getServletContext()).getServletForPath(req.getRequestURI())); notifyListeners(NotificationType.START_ASYNC, null); - } catch (ServletException | IOException e) { - notifyListeners(NotificationType.ERROR, e); } } @@ -154,6 +155,10 @@ public boolean isCompleted() { return completed.get(); } + public boolean isDispatchStarted() { + return dispatchStarted.get(); + } + private void notifyListeners(NotificationType type, Throwable t) { listeners.forEach((h) -> { try { diff --git a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java index 1f7719e9a..dd48994a8 100644 --- a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java +++ b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java @@ -22,6 +22,7 @@ import com.amazonaws.serverless.proxy.spring.embedded.ServerlessReactiveServletEmbeddedServerFactory; import com.amazonaws.serverless.proxy.spring.embedded.ServerlessServletEmbeddedServerFactory; import com.amazonaws.services.lambda.runtime.Context; +import jakarta.servlet.AsyncContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.WebApplicationType; @@ -172,9 +173,21 @@ protected void handleRequest(HttpServletRequest containerRequest, AwsHttpServlet ((AwsHttpServletRequest)containerRequest).setResponse(containerResponse); } doFilter(containerRequest, containerResponse, reqServlet); + if(requiresAsyncReDispatch(containerRequest)) { + doFilter(containerRequest, containerResponse, reqServlet); + } Timer.stop("SPRINGBOOT2_HANDLE_REQUEST"); } + private boolean requiresAsyncReDispatch(HttpServletRequest request) { + if (request.isAsyncStarted()) { + AsyncContext asyncContext = request.getAsyncContext(); + return asyncContext instanceof AwsAsyncContext + && ((AwsAsyncContext) asyncContext).isDispatchStarted(); + } + return false; + } + @Override public void initialize() From 14ae2607f1370089cb92a40dcd9e37165e3b8ef8 Mon Sep 17 00:00:00 2001 From: kibeom lee <70303094+2012160085@users.noreply.github.com> Date: Thu, 7 Sep 2023 16:09:13 +0900 Subject: [PATCH 456/888] Disable Servlet mapping tests of AwsAsyncContext *AwsAsyncContextTest -Disabled servlet mapping tests as it no longer make servlet requests. --- .../serverless/proxy/internal/servlet/AwsAsyncContextTest.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContextTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContextTest.java index 2177fa8bb..e4db0e679 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContextTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContextTest.java @@ -10,6 +10,7 @@ import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.serverless.proxy.model.AwsProxyResponse; import com.amazonaws.services.lambda.runtime.Context; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import jakarta.servlet.AsyncContext; @@ -32,6 +33,7 @@ public class AwsAsyncContextTest { private AwsServletContextTest.TestServlet srv2 = new AwsServletContextTest.TestServlet("srv2"); private AwsServletContext ctx = getCtx(); + @Disabled //AwsAsyncContext does not sends to servlet anymore @Test void dispatch_sendsToCorrectServlet() { AwsProxyHttpServletRequest req = new AwsProxyHttpServletRequest(new AwsProxyRequestBuilder("/srv1/hello", "GET").build(), lambdaCtx, null); @@ -58,6 +60,7 @@ void dispatch_sendsToCorrectServlet() { assertEquals(202, handler.getResponse().getStatus()); } + @Disabled //AwsAsyncContext does not sends to servlet anymore @Test void dispatchNewPath_sendsToCorrectServlet() throws InvalidRequestEventException { AwsProxyHttpServletRequest req = (AwsProxyHttpServletRequest)reader.readRequest(new AwsProxyRequestBuilder("/srv1/hello", "GET").build(), null, lambdaCtx, LambdaContainerHandler.getContainerConfig()); From cfcff4c2259d4743d81ee2e44a28a52d03dd3f27 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Sep 2023 04:33:06 +0000 Subject: [PATCH 457/888] chore(deps): bump org.apache.maven.plugins:maven-enforcer-plugin Bumps [org.apache.maven.plugins:maven-enforcer-plugin](https://github.com/apache/maven-enforcer) from 3.4.0 to 3.4.1. - [Release notes](https://github.com/apache/maven-enforcer/releases) - [Commits](https://github.com/apache/maven-enforcer/compare/enforcer-3.4.0...enforcer-3.4.1) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-enforcer-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 7a1d18987..e7cabafd3 100644 --- a/pom.xml +++ b/pom.xml @@ -169,7 +169,7 @@ org.apache.maven.plugins maven-enforcer-plugin - 3.4.0 + 3.4.1 enforce From 096c4819c0e9ee18ec0db86fcd6a427d8f2a7d59 Mon Sep 17 00:00:00 2001 From: kibeom lee <70303094+2012160085@users.noreply.github.com> Date: Fri, 15 Sep 2023 03:08:57 +0900 Subject: [PATCH 458/888] add tests -Added jpaapp.JpaApplication for H2 and Spring Data JPA testing. -Excluded JPA auto-configuration from other test apps to prevent interference. -Implemented one async and one sync test case in JpaAppTest --- .../pom.xml | 40 +++++++++++++ .../serverless/proxy/spring/JpaAppTest.java | 52 ++++++++++++++++ .../proxy/spring/jpaapp/DatabaseConfig.java | 23 ++++++++ .../proxy/spring/jpaapp/JpaApplication.java | 17 ++++++ .../proxy/spring/jpaapp/LambdaHandler.java | 59 +++++++++++++++++++ .../spring/jpaapp/MessageController.java | 31 ++++++++++ .../securityapp/SecurityApplication.java | 5 +- .../spring/servletapp/ServletApplication.java | 4 +- .../spring/slowapp/SlowTestApplication.java | 4 +- .../webfluxapp/WebFluxTestApplication.java | 4 +- 10 files changed, 235 insertions(+), 4 deletions(-) create mode 100644 aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/JpaAppTest.java create mode 100644 aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/jpaapp/DatabaseConfig.java create mode 100644 aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/jpaapp/JpaApplication.java create mode 100644 aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/jpaapp/LambdaHandler.java create mode 100644 aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/jpaapp/MessageController.java diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index cc907f952..56c617738 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -191,6 +191,46 @@ test + + org.springframework.boot + spring-boot-starter-data-jpa + 3.1.3 + test + + + org.springframework.boot + spring-boot-starter-aop + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-logging + + + org.springframework.boot + spring-boot-starter-tomcat + + + org.apache.tomcat.embed + tomcat-embed-core + + + org.apache.tomcat.embed + tomcat-embed-websocket + + + + + com.h2database + h2 + 2.2.222 + test + + + diff --git a/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/JpaAppTest.java b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/JpaAppTest.java new file mode 100644 index 000000000..a111e510a --- /dev/null +++ b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/JpaAppTest.java @@ -0,0 +1,52 @@ +package com.amazonaws.serverless.proxy.spring; + +import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; +import com.amazonaws.serverless.proxy.internal.testutils.MockLambdaContext; +import com.amazonaws.serverless.proxy.model.AwsProxyResponse; +import com.amazonaws.serverless.proxy.spring.jpaapp.LambdaHandler; +import com.amazonaws.serverless.proxy.spring.jpaapp.MessageController; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; + +import java.util.Arrays; +import java.util.Collection; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class JpaAppTest { + + LambdaHandler handler; + MockLambdaContext lambdaContext = new MockLambdaContext(); + + private String type; + + public static Collection data() { + return Arrays.asList(new Object[]{"API_GW", "ALB", "HTTP_API"}); + } + + public void initJpaAppTest(String reqType) { + type = reqType; + handler = new LambdaHandler(type); + } + + @MethodSource("data") + @ParameterizedTest + void asyncRequest(String reqType) { + initJpaAppTest(reqType); + AwsProxyRequestBuilder req = new AwsProxyRequestBuilder("/async", "POST") + .json() + .body("{\"name\":\"kong\"}"); + AwsProxyResponse resp = handler.handleRequest(req, lambdaContext); + assertEquals("{\"name\":\"KONG\"}", resp.getBody()); + } + + @MethodSource("data") + @ParameterizedTest + void helloRequest_respondsWithSingleMessage(String reqType) { + initJpaAppTest(reqType); + AwsProxyRequestBuilder req = new AwsProxyRequestBuilder("/hello", "GET"); + AwsProxyResponse resp = handler.handleRequest(req, lambdaContext); + assertEquals(MessageController.HELLO_MESSAGE, resp.getBody()); + } + +} diff --git a/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/jpaapp/DatabaseConfig.java b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/jpaapp/DatabaseConfig.java new file mode 100644 index 000000000..aeef7c65e --- /dev/null +++ b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/jpaapp/DatabaseConfig.java @@ -0,0 +1,23 @@ +package com.amazonaws.serverless.proxy.spring.jpaapp; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.jdbc.datasource.DriverManagerDataSource; + +import javax.sql.DataSource; + +@Configuration +public class DatabaseConfig { + + @Bean + public DataSource dataSource() { + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName("org.h2.Driver"); + dataSource.setUrl("jdbc:h2:mem:testdb"); + dataSource.setUsername("sa"); + dataSource.setPassword(""); + + return dataSource; + } +} + diff --git a/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/jpaapp/JpaApplication.java b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/jpaapp/JpaApplication.java new file mode 100644 index 000000000..5aced5e28 --- /dev/null +++ b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/jpaapp/JpaApplication.java @@ -0,0 +1,17 @@ +package com.amazonaws.serverless.proxy.spring.jpaapp; + +import org.springframework.beans.factory.InitializingBean; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.logging.LogLevel; +import org.springframework.boot.logging.LoggingSystem; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Import; + +@SpringBootApplication(exclude = { + org.springframework.boot.autoconfigure.security.reactive.ReactiveUserDetailsServiceAutoConfiguration.class, + org.springframework.boot.autoconfigure.security.reactive.ReactiveSecurityAutoConfiguration.class, + org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration.class, + org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class +}) +@Import(MessageController.class) +public class JpaApplication {} diff --git a/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/jpaapp/LambdaHandler.java b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/jpaapp/LambdaHandler.java new file mode 100644 index 000000000..0cf67c10f --- /dev/null +++ b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/jpaapp/LambdaHandler.java @@ -0,0 +1,59 @@ +package com.amazonaws.serverless.proxy.spring.jpaapp; + +import com.amazonaws.serverless.exceptions.ContainerInitializationException; +import com.amazonaws.serverless.proxy.InitializationWrapper; +import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; +import com.amazonaws.serverless.proxy.model.AwsProxyRequest; +import com.amazonaws.serverless.proxy.model.AwsProxyResponse; +import com.amazonaws.serverless.proxy.model.HttpApiV2ProxyRequest; +import com.amazonaws.serverless.proxy.spring.SpringBootLambdaContainerHandler; +import com.amazonaws.serverless.proxy.spring.SpringBootProxyHandlerBuilder; +import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.RequestHandler; + +public class LambdaHandler implements RequestHandler { + private static SpringBootLambdaContainerHandler handler; + private static SpringBootLambdaContainerHandler httpApiHandler; + private String type; + + public LambdaHandler(String reqType) { + type = reqType; + try { + switch (type) { + case "API_GW": + case "ALB": + handler = new SpringBootProxyHandlerBuilder() + .defaultProxy() + .initializationWrapper(new InitializationWrapper()) + .servletApplication() + .springBootApplication(JpaApplication.class) + .buildAndInitialize(); + break; + case "HTTP_API": + httpApiHandler = new SpringBootProxyHandlerBuilder() + .defaultHttpApiV2Proxy() + .initializationWrapper(new InitializationWrapper()) + .servletApplication() + .springBootApplication(JpaApplication.class) + .buildAndInitialize(); + break; + } + } catch (ContainerInitializationException e) { + e.printStackTrace(); + } + } + + @Override + public AwsProxyResponse handleRequest(AwsProxyRequestBuilder awsProxyRequest, Context context) { + switch (type) { + case "API_GW": + return handler.proxy(awsProxyRequest.build(), context); + case "ALB": + return handler.proxy(awsProxyRequest.alb().build(), context); + case "HTTP_API": + return httpApiHandler.proxy(awsProxyRequest.toHttpApiV2Request(), context); + default: + throw new RuntimeException("Unknown request type: " + type); + } + } +} diff --git a/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/jpaapp/MessageController.java b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/jpaapp/MessageController.java new file mode 100644 index 000000000..a85292262 --- /dev/null +++ b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/jpaapp/MessageController.java @@ -0,0 +1,31 @@ +package com.amazonaws.serverless.proxy.spring.jpaapp; + +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.context.request.async.DeferredResult; +import java.util.Collections; +import java.util.Map; + +@RestController +public class MessageController { + + public static final String HELLO_MESSAGE = "Hello"; + + @RequestMapping(path="/hello", method=RequestMethod.GET, produces = {"text/plain"}) + public String hello() { + return HELLO_MESSAGE; + } + + @SuppressWarnings({ "unchecked", "rawtypes" }) + @RequestMapping(path = "/async", method = RequestMethod.POST) + @ResponseBody + public DeferredResult> asyncResult(@RequestBody Map value) { + DeferredResult result = new DeferredResult<>(); + result.setResult(Collections.singletonMap("name", value.get("name").toUpperCase())); + return result; + } + +} diff --git a/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/securityapp/SecurityApplication.java b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/securityapp/SecurityApplication.java index cafcd4000..d4036dcfe 100644 --- a/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/securityapp/SecurityApplication.java +++ b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/securityapp/SecurityApplication.java @@ -6,7 +6,10 @@ import org.springframework.security.config.annotation.web.reactive.EnableWebFluxSecurity; import org.springframework.web.reactive.config.EnableWebFlux; -@SpringBootApplication +@SpringBootApplication(exclude = { + org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration.class, + org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration.class +}) @EnableWebFluxSecurity @EnableWebFlux @Import(SecurityConfig.class) diff --git a/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/ServletApplication.java b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/ServletApplication.java index 07ddbab43..0cb001ed1 100644 --- a/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/ServletApplication.java +++ b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/ServletApplication.java @@ -9,7 +9,9 @@ org.springframework.boot.autoconfigure.security.reactive.ReactiveUserDetailsServiceAutoConfiguration.class, org.springframework.boot.autoconfigure.security.reactive.ReactiveSecurityAutoConfiguration.class, org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration.class, - org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class + org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class, + org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration.class, + org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration.class }) @Import(MessageController.class) public class ServletApplication { diff --git a/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/slowapp/SlowTestApplication.java b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/slowapp/SlowTestApplication.java index b3fe177a1..006e51e45 100644 --- a/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/slowapp/SlowTestApplication.java +++ b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/slowapp/SlowTestApplication.java @@ -8,7 +8,9 @@ @SpringBootApplication(exclude = { org.springframework.boot.autoconfigure.security.reactive.ReactiveUserDetailsServiceAutoConfiguration.class, - org.springframework.boot.autoconfigure.security.reactive.ReactiveSecurityAutoConfiguration.class + org.springframework.boot.autoconfigure.security.reactive.ReactiveSecurityAutoConfiguration.class, + org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration.class, + org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration.class }) public class SlowTestApplication { diff --git a/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/webfluxapp/WebFluxTestApplication.java b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/webfluxapp/WebFluxTestApplication.java index 70e0c9934..fc6aecd6f 100644 --- a/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/webfluxapp/WebFluxTestApplication.java +++ b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/webfluxapp/WebFluxTestApplication.java @@ -13,7 +13,9 @@ org.springframework.boot.autoconfigure.security.reactive.ReactiveUserDetailsServiceAutoConfiguration.class, org.springframework.boot.autoconfigure.security.reactive.ReactiveSecurityAutoConfiguration.class, org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration.class, - org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class + org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class, + org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration.class, + org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration.class }) public class WebFluxTestApplication { From 93c03c820a6066ae3a8a51a9be842c9f8973087f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Sep 2023 04:22:49 +0000 Subject: [PATCH 459/888] chore(deps): bump org.apache.maven.plugins:maven-javadoc-plugin Bumps [org.apache.maven.plugins:maven-javadoc-plugin](https://github.com/apache/maven-javadoc-plugin) from 3.5.0 to 3.6.0. - [Release notes](https://github.com/apache/maven-javadoc-plugin/releases) - [Commits](https://github.com/apache/maven-javadoc-plugin/compare/maven-javadoc-plugin-3.5.0...maven-javadoc-plugin-3.6.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-javadoc-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index e7cabafd3..1f681d408 100644 --- a/pom.xml +++ b/pom.xml @@ -201,7 +201,7 @@ org.apache.maven.plugins maven-javadoc-plugin - 3.5.0 + 3.6.0 org.apache.maven.plugins From 5615394a840f97aff45371693aed90df1af4bfe6 Mon Sep 17 00:00:00 2001 From: kibeom lee <70303094+2012160085@users.noreply.github.com> Date: Tue, 19 Sep 2023 03:46:53 +0900 Subject: [PATCH 460/888] Add test case for AwsAsyncContext --- .../internal/servlet/AwsAsyncContextTest.java | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContextTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContextTest.java index e4db0e679..dd452dc19 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContextTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContextTest.java @@ -33,7 +33,21 @@ public class AwsAsyncContextTest { private AwsServletContextTest.TestServlet srv2 = new AwsServletContextTest.TestServlet("srv2"); private AwsServletContext ctx = getCtx(); - @Disabled //AwsAsyncContext does not sends to servlet anymore + + @Test + void dispatch_amendsPath() throws InvalidRequestEventException { + AwsProxyHttpServletRequest req = (AwsProxyHttpServletRequest)reader.readRequest(new AwsProxyRequestBuilder("/srv1/hello", "GET").build(), null, lambdaCtx, LambdaContainerHandler.getContainerConfig()); + req.setResponse(handler.getContainerResponse(req, new CountDownLatch(1))); + req.setServletContext(ctx); + req.setContainerHandler(handler); + + AsyncContext asyncCtx = req.startAsync(); + handler.setDesiredStatus(301); + asyncCtx.dispatch("/srv4/hello"); + assertEquals("/srv1/hello", req.getRequestURI()); + } + + @Disabled("AwsAsyncContext does not sends to servlet anymore") @Test void dispatch_sendsToCorrectServlet() { AwsProxyHttpServletRequest req = new AwsProxyHttpServletRequest(new AwsProxyRequestBuilder("/srv1/hello", "GET").build(), lambdaCtx, null); @@ -60,7 +74,7 @@ void dispatch_sendsToCorrectServlet() { assertEquals(202, handler.getResponse().getStatus()); } - @Disabled //AwsAsyncContext does not sends to servlet anymore + @Disabled("AwsAsyncContext does not sends to servlet anymore") @Test void dispatchNewPath_sendsToCorrectServlet() throws InvalidRequestEventException { AwsProxyHttpServletRequest req = (AwsProxyHttpServletRequest)reader.readRequest(new AwsProxyRequestBuilder("/srv1/hello", "GET").build(), null, lambdaCtx, LambdaContainerHandler.getContainerConfig()); From ab62529c7dd393ed0cb7795693607e3f491b2fc2 Mon Sep 17 00:00:00 2001 From: kibeom lee <70303094+2012160085@users.noreply.github.com> Date: Tue, 19 Sep 2023 03:57:34 +0900 Subject: [PATCH 461/888] fix handleRequest redispatch -get reqServlet before doFilter for redispatch --- .../proxy/spring/SpringBootLambdaContainerHandler.java | 1 + 1 file changed, 1 insertion(+) diff --git a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java index dd48994a8..752623cdc 100644 --- a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java +++ b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java @@ -174,6 +174,7 @@ protected void handleRequest(HttpServletRequest containerRequest, AwsHttpServlet } doFilter(containerRequest, containerResponse, reqServlet); if(requiresAsyncReDispatch(containerRequest)) { + reqServlet = ((AwsServletContext)getServletContext()).getServletForPath(containerRequest.getPathInfo()); doFilter(containerRequest, containerResponse, reqServlet); } Timer.stop("SPRINGBOOT2_HANDLE_REQUEST"); From aa203912b9a3f871aa40e08f45506e01ccadd3da Mon Sep 17 00:00:00 2001 From: kibeom lee <70303094+2012160085@users.noreply.github.com> Date: Tue, 19 Sep 2023 04:04:14 +0900 Subject: [PATCH 462/888] fix handleRequest re-dispatch -Added re-dispatch logic inside SpringLambdaContainerHandler's handleRequest --- .../proxy/spring/SpringLambdaContainerHandler.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringLambdaContainerHandler.java b/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringLambdaContainerHandler.java index 5e56dba62..3c6fcf8b0 100644 --- a/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringLambdaContainerHandler.java +++ b/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringLambdaContainerHandler.java @@ -20,6 +20,7 @@ import com.amazonaws.serverless.proxy.internal.servlet.*; import com.amazonaws.serverless.proxy.model.HttpApiV2ProxyRequest; import com.amazonaws.services.lambda.runtime.Context; +import jakarta.servlet.AsyncContext; import org.springframework.web.context.ConfigurableWebApplicationContext; import org.springframework.web.servlet.DispatcherServlet; @@ -160,9 +161,21 @@ protected void handleRequest(HttpServletRequest containerRequest, AwsHttpServlet // process filters Servlet reqServlet = ((AwsServletContext)getServletContext()).getServletForPath(containerRequest.getPathInfo()); doFilter(containerRequest, containerResponse, reqServlet); + if(requiresAsyncReDispatch(containerRequest)) { + reqServlet = ((AwsServletContext)getServletContext()).getServletForPath(containerRequest.getPathInfo()); + doFilter(containerRequest, containerResponse, reqServlet); + } Timer.stop("SPRING_HANDLE_REQUEST"); } + private boolean requiresAsyncReDispatch(HttpServletRequest request) { + if (request.isAsyncStarted()) { + AsyncContext asyncContext = request.getAsyncContext(); + return asyncContext instanceof AwsAsyncContext + && ((AwsAsyncContext) asyncContext).isDispatchStarted(); + } + return false; + } @Override public void initialize() From 3047ca99c3d1e8a1c0ebf50c47f3106491a36170 Mon Sep 17 00:00:00 2001 From: kibeom lee <70303094+2012160085@users.noreply.github.com> Date: Tue, 19 Sep 2023 04:47:04 +0900 Subject: [PATCH 463/888] add test case for spring -Added test cases for async request --- .../serverless/proxy/spring/AsyncAppTest.java | 46 +++++++++++++++++++ .../proxy/spring/springapp/AppConfig.java | 8 ++++ .../proxy/spring/springapp/LambdaHandler.java | 26 +++++++++++ .../spring/springapp/MessageController.java | 25 ++++++++++ 4 files changed, 105 insertions(+) create mode 100644 aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/AsyncAppTest.java create mode 100644 aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springapp/AppConfig.java create mode 100644 aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springapp/LambdaHandler.java create mode 100644 aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springapp/MessageController.java diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/AsyncAppTest.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/AsyncAppTest.java new file mode 100644 index 000000000..8265e1bf4 --- /dev/null +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/AsyncAppTest.java @@ -0,0 +1,46 @@ +package com.amazonaws.serverless.proxy.spring; + +import com.amazonaws.serverless.exceptions.ContainerInitializationException; +import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; +import com.amazonaws.serverless.proxy.internal.testutils.MockLambdaContext; +import com.amazonaws.serverless.proxy.model.AwsProxyRequest; +import com.amazonaws.serverless.proxy.model.AwsProxyResponse; +import com.amazonaws.serverless.proxy.spring.springapp.LambdaHandler; +import com.amazonaws.serverless.proxy.spring.springapp.MessageController; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.fail; + +public class AsyncAppTest { + + private static LambdaHandler handler; + + @BeforeAll + public static void setUp() { + try { + handler = new LambdaHandler(); + } catch (ContainerInitializationException e) { + e.printStackTrace(); + fail(); + } + } + + @Test + void springApp_helloRequest_returnsCorrect() { + AwsProxyRequest req = new AwsProxyRequestBuilder("/hello", "GET").build(); + AwsProxyResponse resp = handler.handleRequest(req, new MockLambdaContext()); + assertEquals(200, resp.getStatusCode()); + assertEquals(MessageController.HELLO_MESSAGE, resp.getBody()); + } + + @Test + void springApp_asyncRequest_returnsCorrect() { + AwsProxyRequest req = new AwsProxyRequestBuilder("/async", "GET").build(); + AwsProxyResponse resp = handler.handleRequest(req, new MockLambdaContext()); + assertEquals(200, resp.getStatusCode()); + assertEquals(MessageController.HELLO_MESSAGE, resp.getBody()); + } + +} diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springapp/AppConfig.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springapp/AppConfig.java new file mode 100644 index 000000000..d3562c221 --- /dev/null +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springapp/AppConfig.java @@ -0,0 +1,8 @@ +package com.amazonaws.serverless.proxy.spring.springapp; + +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; + +@Configuration +@Import({MessageController.class}) +public class AppConfig { } diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springapp/LambdaHandler.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springapp/LambdaHandler.java new file mode 100644 index 000000000..f0cad13c5 --- /dev/null +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springapp/LambdaHandler.java @@ -0,0 +1,26 @@ +package com.amazonaws.serverless.proxy.spring.springapp; + +import com.amazonaws.serverless.exceptions.ContainerInitializationException; +import com.amazonaws.serverless.proxy.model.AwsProxyRequest; +import com.amazonaws.serverless.proxy.model.AwsProxyResponse; +import com.amazonaws.serverless.proxy.spring.SpringLambdaContainerHandler; +import com.amazonaws.serverless.proxy.spring.SpringProxyHandlerBuilder; +import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.RequestHandler; + +public class LambdaHandler implements RequestHandler { + private SpringLambdaContainerHandler handler; + + public LambdaHandler() throws ContainerInitializationException { + handler = new SpringProxyHandlerBuilder() + .defaultProxy() + .asyncInit() + .configurationClasses(AppConfig.class) + .buildAndInitialize(); + } + + @Override + public AwsProxyResponse handleRequest(AwsProxyRequest awsProxyRequest, Context context) { + return handler.proxy(awsProxyRequest, context); + } +} diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springapp/MessageController.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springapp/MessageController.java new file mode 100644 index 000000000..1f5dc83d4 --- /dev/null +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/springapp/MessageController.java @@ -0,0 +1,25 @@ +package com.amazonaws.serverless.proxy.spring.springapp; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.context.request.async.DeferredResult; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; + +@RestController +@EnableWebMvc +public class MessageController { + public static final String HELLO_MESSAGE = "Hello"; + + @RequestMapping(path="/hello", method= RequestMethod.GET) + public String hello() { + return HELLO_MESSAGE; + } + + @RequestMapping(path="/async", method= RequestMethod.GET) + public DeferredResult asyncHello() { + DeferredResult result = new DeferredResult<>(); + result.setResult(HELLO_MESSAGE); + return result; + } +} From ff1d5cf085f32e4effeb26f2c2614c37272c5bf3 Mon Sep 17 00:00:00 2001 From: kibeom lee <70303094+2012160085@users.noreply.github.com> Date: Tue, 19 Sep 2023 04:50:16 +0900 Subject: [PATCH 464/888] edit test case for AwsAsyncContext --- .../serverless/proxy/internal/servlet/AwsAsyncContextTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContextTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContextTest.java index dd452dc19..9bbbc13a9 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContextTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContextTest.java @@ -42,7 +42,6 @@ void dispatch_amendsPath() throws InvalidRequestEventException { req.setContainerHandler(handler); AsyncContext asyncCtx = req.startAsync(); - handler.setDesiredStatus(301); asyncCtx.dispatch("/srv4/hello"); assertEquals("/srv1/hello", req.getRequestURI()); } From c92a0e90831139824e2215457a667a3e5a3653e7 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Thu, 21 Sep 2023 15:13:57 +0200 Subject: [PATCH 465/888] chore(deps): Update Spring dependencies (framework to 6.0.12, security to 6.1.4, boot to 3.1.4) --- aws-serverless-java-container-core/pom.xml | 2 +- aws-serverless-java-container-spring/pom.xml | 4 ++-- aws-serverless-java-container-springboot3/pom.xml | 6 +++--- .../src/main/resources/archetype-resources/build.gradle | 4 ++-- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/spring/pet-store/build.gradle | 4 ++-- samples/spring/pet-store/pom.xml | 2 +- samples/springboot3/alt-pet-store/build.gradle | 2 +- samples/springboot3/alt-pet-store/pom.xml | 2 +- samples/springboot3/pet-store/build.gradle | 2 +- samples/springboot3/pet-store/pom.xml | 2 +- 13 files changed, 18 insertions(+), 18 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 5e29578d9..5d23fcbf6 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -60,7 +60,7 @@ org.springframework.security spring-security-web - 6.1.3 + 6.1.4 test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 608270c0c..2e590866b 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -16,8 +16,8 @@ - 6.0.11 - 6.1.3 + 6.0.12 + 6.1.4 diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index cc907f952..974345fe7 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -15,9 +15,9 @@ 2.0.0-SNAPSHOT - 6.0.11 - 3.1.3 - 6.1.3 + 6.0.12 + 3.1.4 + 6.1.4 diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index 5d2323018..bc76f577b 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -7,8 +7,8 @@ repositories { dependencies { implementation ( - 'org.springframework:spring-webmvc:6.0.11', - 'org.springframework:spring-context:6.0.11', + 'org.springframework:spring-webmvc:6.0.12', + 'org.springframework:spring-context:6.0.12', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[2.0-SNAPSHOT,)', 'org.apache.logging.log4j:log4j-core:2.20.0', 'org.apache.logging.log4j:log4j-api:2.20.0', diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index 35065eb85..455c9e31f 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 1.8 - 6.0.11 + 6.0.12 5.10.0 2.20.0 diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle index 567aae98c..f6972663b 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle @@ -9,7 +9,7 @@ repositories { dependencies { implementation ( - 'org.springframework.boot:spring-boot-starter-web:3.1.3', + 'org.springframework.boot:spring-boot-starter-web:3.1.4', 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:[2.0-SNAPSHOT,)', ) diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml index 02693c1bd..54625efac 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ org.springframework.boot spring-boot-starter-parent - 3.1.3 + 3.1.4 diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index 42813a0ee..072b80965 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -7,8 +7,8 @@ repositories { dependencies { implementation ( - 'org.springframework:spring-webmvc:6.0.11', - 'org.springframework:spring-context:6.0.11', + 'org.springframework:spring-webmvc:6.0.12', + 'org.springframework:spring-context:6.0.12', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[2.0-SNAPSHOT,)', 'org.apache.logging.log4j:log4j-core:2.20.0', 'org.apache.logging.log4j:log4j-api:2.20.0', diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index 2ed9ae0de..9c87d85ca 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -24,7 +24,7 @@ - 6.0.11 + 6.0.12 2.20.0 17 17 diff --git a/samples/springboot3/alt-pet-store/build.gradle b/samples/springboot3/alt-pet-store/build.gradle index 8b38f55f8..65386b0fa 100644 --- a/samples/springboot3/alt-pet-store/build.gradle +++ b/samples/springboot3/alt-pet-store/build.gradle @@ -9,7 +9,7 @@ repositories { dependencies { implementation ( - implementation('org.springframework.boot:spring-boot-starter-web:3.1.3') { + implementation('org.springframework.boot:spring-boot-starter-web:3.1.4') { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat' }, 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:[2.0-SNAPSHOT,)', diff --git a/samples/springboot3/alt-pet-store/pom.xml b/samples/springboot3/alt-pet-store/pom.xml index ba4b2433a..c0d39c7e9 100644 --- a/samples/springboot3/alt-pet-store/pom.xml +++ b/samples/springboot3/alt-pet-store/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 3.1.3 + 3.1.4 diff --git a/samples/springboot3/pet-store/build.gradle b/samples/springboot3/pet-store/build.gradle index 8b38f55f8..65386b0fa 100644 --- a/samples/springboot3/pet-store/build.gradle +++ b/samples/springboot3/pet-store/build.gradle @@ -9,7 +9,7 @@ repositories { dependencies { implementation ( - implementation('org.springframework.boot:spring-boot-starter-web:3.1.3') { + implementation('org.springframework.boot:spring-boot-starter-web:3.1.4') { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat' }, 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:[2.0-SNAPSHOT,)', diff --git a/samples/springboot3/pet-store/pom.xml b/samples/springboot3/pet-store/pom.xml index 2fdd615eb..96264cf5b 100644 --- a/samples/springboot3/pet-store/pom.xml +++ b/samples/springboot3/pet-store/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 3.1.3 + 3.1.4 From 3739cdbe9f2a8d9e3b7d067b6676ae1550aec0c0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 25 Sep 2023 04:42:26 +0000 Subject: [PATCH 466/888] chore(deps): bump com.github.spotbugs:spotbugs-maven-plugin Bumps [com.github.spotbugs:spotbugs-maven-plugin](https://github.com/spotbugs/spotbugs-maven-plugin) from 4.7.3.5 to 4.7.3.6. - [Release notes](https://github.com/spotbugs/spotbugs-maven-plugin/releases) - [Commits](https://github.com/spotbugs/spotbugs-maven-plugin/compare/spotbugs-maven-plugin-4.7.3.5...spotbugs-maven-plugin-4.7.3.6) --- updated-dependencies: - dependency-name: com.github.spotbugs:spotbugs-maven-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 1f681d408..ca133620f 100644 --- a/pom.xml +++ b/pom.xml @@ -249,7 +249,7 @@ com.github.spotbugs spotbugs-maven-plugin - 4.7.3.5 + 4.7.3.6 + + + + + diff --git a/samples/springboot3/alt-pet-store/src/main/resources/logback.xml b/samples/springboot3/alt-pet-store/src/main/resources/logback.xml index 14a3a84fa..81d891777 100644 --- a/samples/springboot3/alt-pet-store/src/main/resources/logback.xml +++ b/samples/springboot3/alt-pet-store/src/main/resources/logback.xml @@ -1,5 +1,6 @@ - + + \ No newline at end of file diff --git a/samples/springboot3/alt-pet-store/template.yml b/samples/springboot3/alt-pet-store/template.yml index c883f0850..8a51c8d1d 100644 --- a/samples/springboot3/alt-pet-store/template.yml +++ b/samples/springboot3/alt-pet-store/template.yml @@ -14,7 +14,7 @@ Resources: # AutoPublishAlias: bcn FunctionName: pet-store-boot-3 Handler: com.amazonaws.serverless.proxy.spring.SpringDelegatingLambdaContainerHandler::handleRequest - Runtime: java21 + Runtime: java17 SnapStart: ApplyOn: PublishedVersions CodeUri: . From 4fee8fce73e8223fe3bd82fbf099b0e90af9a275 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 12 Jan 2024 16:15:15 +0100 Subject: [PATCH 527/888] chore(deps): update commons-fileupload to 2.0.0-M2 --- aws-serverless-java-container-core/pom.xml | 4 ++-- .../proxy/internal/servlet/AwsHttpServletRequest.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 17f8edc7c..2a290f85f 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -53,8 +53,8 @@ org.apache.commons - commons-fileupload2-jakarta - 2.0.0-M1 + commons-fileupload2-jakarta-servlet6 + 2.0.0-M2 diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java index ca5d163ec..31d26a182 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java @@ -25,7 +25,7 @@ import org.apache.commons.fileupload2.core.FileItem; import org.apache.commons.fileupload2.core.FileUploadException; import org.apache.commons.fileupload2.core.DiskFileItemFactory; -import org.apache.commons.fileupload2.jakarta.JakartaServletFileUpload; +import org.apache.commons.fileupload2.jakarta.servlet6.JakartaServletFileUpload; import org.apache.commons.io.FilenameUtils; import org.apache.commons.io.IOUtils; import org.apache.commons.io.input.NullInputStream; From 13c0d3fe04b5202c52cfb742a53ecb820dd418be Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 12 Jan 2024 17:16:14 +0100 Subject: [PATCH 528/888] refactor: use defaultCharset, polishing --- .../servlet/AwsHttpServletRequest.java | 29 ++++++++++--------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java index 31d26a182..d17270d98 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java @@ -22,6 +22,7 @@ import com.amazonaws.serverless.proxy.model.MultiValuedTreeMap; import com.amazonaws.services.lambda.runtime.Context; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; +import org.apache.commons.fileupload2.core.DiskFileItem; import org.apache.commons.fileupload2.core.FileItem; import org.apache.commons.fileupload2.core.FileUploadException; import org.apache.commons.fileupload2.core.DiskFileItemFactory; @@ -41,7 +42,7 @@ import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.net.URLEncoder; -import java.nio.charset.StandardCharsets; +import java.nio.charset.Charset; import java.time.format.DateTimeFormatter; import java.util.*; import java.util.stream.Collectors; @@ -312,7 +313,7 @@ protected Cookie[] parseCookieHeaderValue(String headerValue) { */ protected String generateQueryString(MultiValuedTreeMap parameters, boolean encode, String encodeCharset) throws ServletException { - if (parameters == null || parameters.size() == 0) { + if (parameters == null || parameters.isEmpty()) { return null; } if (queryString != null) { @@ -396,7 +397,7 @@ protected String parseCharacterEncoding(String contentTypeHeader) { } protected String appendCharacterEncoding(String currentContentType, String newEncoding) { - if (currentContentType == null || "".equals(currentContentType.trim())) { + if (currentContentType == null || currentContentType.trim().isEmpty()) { return null; } @@ -429,13 +430,13 @@ protected ServletInputStream bodyStringToInputStream(String body, boolean isBase } else { String encoding = getCharacterEncoding(); if (encoding == null) { - encoding = StandardCharsets.ISO_8859_1.name(); + encoding = Charset.defaultCharset().name(); } try { bodyBytes = body.getBytes(encoding); } catch (Exception e) { log.error("Could not read request with character encoding: " + SecurityUtils.crlf(encoding), e); - bodyBytes = body.getBytes(StandardCharsets.ISO_8859_1.name()); + bodyBytes = body.getBytes(Charset.defaultCharset()); } } ByteArrayInputStream requestBodyStream = new ByteArrayInputStream(bodyBytes); @@ -486,7 +487,7 @@ protected Map> getFormUrlEncodedParametersMap() { Timer.start("SERVLET_REQUEST_GET_FORM_PARAMS"); String rawBodyContent = null; try { - rawBodyContent = IOUtils.toString(getInputStream()); + rawBodyContent = IOUtils.toString(getInputStream(), getCharacterEncoding()); } catch (IOException e) { throw new RuntimeException(e); } @@ -543,11 +544,12 @@ protected Map> getMultipartFormParametersMap() { Timer.start("SERVLET_REQUEST_GET_MULTIPART_PARAMS"); multipartFormParameters = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); - JakartaServletFileUpload upload = new JakartaServletFileUpload(DiskFileItemFactory.builder().get()); + JakartaServletFileUpload upload = + new JakartaServletFileUpload<>(DiskFileItemFactory.builder().get()); try { - List items = upload.parseRequest(this); - for (FileItem item : items) { + List items = upload.parseRequest(this); + for (FileItem item : items) { String fileName = FilenameUtils.getName(item.getName()); AwsProxyRequestPart newPart = new AwsProxyRequestPart(item.get()); newPart.setName(item.getFieldName()); @@ -684,11 +686,10 @@ protected List parseHeaderValue(String headerValue, String valueSep return values; } - for (String v : headerValue.split(valueSeparator)) { - String curValue = v; + for (String curValue : headerValue.split(valueSeparator)) { float curPreference = 1.0f; HeaderValue newValue = new HeaderValue(); - newValue.setRawValue(v); + newValue.setRawValue(curValue); for (String q : curValue.split(qualifierSeparator)) { @@ -704,7 +705,7 @@ protected List parseHeaderValue(String headerValue, String valueSep // if the length of the value is 0 we assume that we are looking at a // base64 encoded value with padding so we just set the value. This is because // we assume that empty values in a key/value pair will contain at least a white space - if (kv[1].length() == 0) { + if (kv[1].isEmpty()) { val = q.trim(); } // this was a base64 string with an additional = for padding, set the value only @@ -752,7 +753,7 @@ protected List parseAcceptLanguageHeader(String headerValue) { ); List locales = new ArrayList<>(); - if (values.size() == 0) { + if (values.isEmpty()) { locales.add(Locale.getDefault()); } else { for (HeaderValue locale : values) { From 40f7050d69c5f5302091ab5bbd1e4743d8616026 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Jan 2024 04:37:37 +0000 Subject: [PATCH 529/888] chore(deps): bump com.github.spotbugs:spotbugs-maven-plugin Bumps [com.github.spotbugs:spotbugs-maven-plugin](https://github.com/spotbugs/spotbugs-maven-plugin) from 4.8.2.0 to 4.8.3.0. - [Release notes](https://github.com/spotbugs/spotbugs-maven-plugin/releases) - [Commits](https://github.com/spotbugs/spotbugs-maven-plugin/compare/spotbugs-maven-plugin-4.8.2.0...spotbugs-maven-plugin-4.8.3.0) --- updated-dependencies: - dependency-name: com.github.spotbugs:spotbugs-maven-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 5dd123278..01c3162d0 100644 --- a/pom.xml +++ b/pom.xml @@ -249,7 +249,7 @@ com.github.spotbugs spotbugs-maven-plugin - 4.8.2.0 + 4.8.3.0 + com/amazonaws/serverless/proxy/spring/AWSWebRuntimeEventLoop* + com/amazonaws/serverless/proxy/spring/AWSTypesProcessor* + From 026bb8ef1f87c1bcdf6d0fb504635eb630b47b6e Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 15 Jan 2024 13:07:17 +0100 Subject: [PATCH 534/888] test: address deprecation warnings --- .../serverless/proxy/spring/SpringAwsProxyTest.java | 3 --- .../proxy/spring/echoapp/model/ValidatedUserModel.java | 5 ++--- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringAwsProxyTest.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringAwsProxyTest.java index 1101efc8c..9504b6166 100644 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringAwsProxyTest.java +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/SpringAwsProxyTest.java @@ -56,9 +56,6 @@ public class SpringAwsProxyTest { // update the registration to map to a path registration.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), true, "/echo/*"); // servlet name mappings are disabled and will throw an exception - - //handler.getApplicationInitializer().getDispatcherServlet().setThrowExceptionIfNoHandlerFound(true); - ((DispatcherServlet)((AwsServletRegistration)c.getServletRegistration("dispatcherServlet")).getServlet()).setThrowExceptionIfNoHandlerFound(true); }); private String type; diff --git a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/model/ValidatedUserModel.java b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/model/ValidatedUserModel.java index 1e5b83c37..c587429da 100644 --- a/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/model/ValidatedUserModel.java +++ b/aws-serverless-java-container-spring/src/test/java/com/amazonaws/serverless/proxy/spring/echoapp/model/ValidatedUserModel.java @@ -1,8 +1,7 @@ package com.amazonaws.serverless.proxy.spring.echoapp.model; -import org.hibernate.validator.constraints.Email; -import org.hibernate.validator.constraints.NotEmpty; - +import jakarta.validation.constraints.Email; +import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.Size; public class ValidatedUserModel { From 98434ddf74b7ede115f05c40a6288ab9c3e1dffd Mon Sep 17 00:00:00 2001 From: kibeom lee <70303094+2012160085@users.noreply.github.com> Date: Sun, 21 Jan 2024 15:14:58 +0900 Subject: [PATCH 535/888] Update spring-boot-starter-data-jpa version for test --- aws-serverless-java-container-springboot3/pom.xml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index d71a93725..3e90469cc 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -194,7 +194,7 @@ org.springframework.boot spring-boot-starter-data-jpa - 3.1.3 + 3.2.1 test @@ -324,6 +324,14 @@ + + org.apache.maven.plugins + maven-compiler-plugin + + 10 + 10 + + From fc53fa67692724812bc33c490b9773d7a5018183 Mon Sep 17 00:00:00 2001 From: kibeom lee <70303094+2012160085@users.noreply.github.com> Date: Sun, 21 Jan 2024 16:29:24 +0900 Subject: [PATCH 536/888] Refactor: Move Redispatch Logic from Spring Boot 3 and Spring Packages to Core --- .../servlet/AwsLambdaServletContainerHandler.java | 14 +++++++++++++- .../proxy/spring/SpringLambdaContainerHandler.java | 13 ------------- .../spring/SpringBootLambdaContainerHandler.java | 14 -------------- 3 files changed, 13 insertions(+), 28 deletions(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsLambdaServletContainerHandler.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsLambdaServletContainerHandler.java index b35bba92c..7437449e1 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsLambdaServletContainerHandler.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsLambdaServletContainerHandler.java @@ -152,13 +152,25 @@ protected void doFilter(HttpServletRequest request, HttpServletResponse response FilterChain chain = getFilterChain(request, servlet); chain.doFilter(request, response); - + if(requiresAsyncReDispatch(request)) { + chain = getFilterChain(request, servlet); + chain.doFilter(request, response); + } // if for some reason the response wasn't flushed yet, we force it here unless it's being processed asynchronously (WebFlux) if (!response.isCommitted() && request.getDispatcherType() != DispatcherType.ASYNC) { response.flushBuffer(); } } + private boolean requiresAsyncReDispatch(HttpServletRequest request) { + if (request.isAsyncStarted()) { + AsyncContext asyncContext = request.getAsyncContext(); + return asyncContext instanceof AwsAsyncContext + && ((AwsAsyncContext) asyncContext).isDispatchStarted(); + } + return false; + } + @Override public void initialize() throws ContainerInitializationException { // we expect all servlets to be wrapped in an AwsServletRegistration diff --git a/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringLambdaContainerHandler.java b/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringLambdaContainerHandler.java index 3c6fcf8b0..5e56dba62 100644 --- a/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringLambdaContainerHandler.java +++ b/aws-serverless-java-container-spring/src/main/java/com/amazonaws/serverless/proxy/spring/SpringLambdaContainerHandler.java @@ -20,7 +20,6 @@ import com.amazonaws.serverless.proxy.internal.servlet.*; import com.amazonaws.serverless.proxy.model.HttpApiV2ProxyRequest; import com.amazonaws.services.lambda.runtime.Context; -import jakarta.servlet.AsyncContext; import org.springframework.web.context.ConfigurableWebApplicationContext; import org.springframework.web.servlet.DispatcherServlet; @@ -161,21 +160,9 @@ protected void handleRequest(HttpServletRequest containerRequest, AwsHttpServlet // process filters Servlet reqServlet = ((AwsServletContext)getServletContext()).getServletForPath(containerRequest.getPathInfo()); doFilter(containerRequest, containerResponse, reqServlet); - if(requiresAsyncReDispatch(containerRequest)) { - reqServlet = ((AwsServletContext)getServletContext()).getServletForPath(containerRequest.getPathInfo()); - doFilter(containerRequest, containerResponse, reqServlet); - } Timer.stop("SPRING_HANDLE_REQUEST"); } - private boolean requiresAsyncReDispatch(HttpServletRequest request) { - if (request.isAsyncStarted()) { - AsyncContext asyncContext = request.getAsyncContext(); - return asyncContext instanceof AwsAsyncContext - && ((AwsAsyncContext) asyncContext).isDispatchStarted(); - } - return false; - } @Override public void initialize() diff --git a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java index 752623cdc..1f7719e9a 100644 --- a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java +++ b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java @@ -22,7 +22,6 @@ import com.amazonaws.serverless.proxy.spring.embedded.ServerlessReactiveServletEmbeddedServerFactory; import com.amazonaws.serverless.proxy.spring.embedded.ServerlessServletEmbeddedServerFactory; import com.amazonaws.services.lambda.runtime.Context; -import jakarta.servlet.AsyncContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.WebApplicationType; @@ -173,22 +172,9 @@ protected void handleRequest(HttpServletRequest containerRequest, AwsHttpServlet ((AwsHttpServletRequest)containerRequest).setResponse(containerResponse); } doFilter(containerRequest, containerResponse, reqServlet); - if(requiresAsyncReDispatch(containerRequest)) { - reqServlet = ((AwsServletContext)getServletContext()).getServletForPath(containerRequest.getPathInfo()); - doFilter(containerRequest, containerResponse, reqServlet); - } Timer.stop("SPRINGBOOT2_HANDLE_REQUEST"); } - private boolean requiresAsyncReDispatch(HttpServletRequest request) { - if (request.isAsyncStarted()) { - AsyncContext asyncContext = request.getAsyncContext(); - return asyncContext instanceof AwsAsyncContext - && ((AwsAsyncContext) asyncContext).isDispatchStarted(); - } - return false; - } - @Override public void initialize() From db267a67f6abd752b4fdd89f34f509a1b7a0b88e Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Sun, 21 Jan 2024 08:55:22 +0100 Subject: [PATCH 537/888] docs: project graduated from awslabs to aws GitHub organization --- CONTRIBUTING.md | 6 ++--- README.md | 26 +++++++++---------- .../internal/LambdaContainerHandler.java | 2 +- .../internal/servlet/AwsServletContext.java | 2 +- aws-serverless-jersey-archetype/pom.xml | 2 +- .../resources/archetype-resources/README.md | 2 +- .../resources/archetype-resources/pom.xml | 2 +- aws-serverless-spark-archetype/pom.xml | 2 +- .../resources/archetype-resources/README.md | 2 +- .../resources/archetype-resources/pom.xml | 2 +- aws-serverless-spring-archetype/pom.xml | 2 +- .../resources/archetype-resources/README.md | 2 +- .../resources/archetype-resources/pom.xml | 2 +- aws-serverless-springboot3-archetype/pom.xml | 2 +- .../resources/archetype-resources/README.md | 2 +- .../resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/application.properties | 2 +- aws-serverless-struts-archetype/pom.xml | 2 +- .../resources/archetype-resources/README.md | 2 +- .../resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/application.properties | 2 +- pom.xml | 8 +++--- samples/jersey/pet-store/pom.xml | 2 +- samples/spark/pet-store/pom.xml | 2 +- samples/spring/pet-store/pom.xml | 2 +- samples/struts/pet-store/pom.xml | 2 +- 26 files changed, 43 insertions(+), 43 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 4d490d0fd..5d42e96a8 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -11,7 +11,7 @@ information to effectively respond to your bug report or contribution. We welcome you to use the GitHub issue tracker to report bugs or suggest features. -When filing an issue, please check [existing open](https://github.com/awslabs/aws-serverless-java-container/issues), or [recently closed](https://github.com/awslabs/aws-serverless-java-container/issues?utf8=%E2%9C%93&q=is%3Aissue%20is%3Aclosed%20), issues to make sure somebody else hasn't already +When filing an issue, please check [existing open](https://github.com/aws/serverless-java-container/issues), or [recently closed](https://github.com/aws/serverless-java-container/issues?utf8=%E2%9C%93&q=is%3Aissue%20is%3Aclosed%20), issues to make sure somebody else hasn't already reported the issue. Please try to include as much information as you can. Details like these are incredibly useful: * A reproducible test case or series of steps @@ -41,7 +41,7 @@ GitHub provides additional document on [forking a repository](https://help.githu ## Finding contributions to work on -Looking at the existing issues is a great way to find something to contribute on. As our projects, by default, use the default GitHub issue labels ((enhancement/bug/duplicate/help wanted/invalid/question/wontfix), looking at any ['help wanted'](https://github.com/awslabs/aws-serverless-java-container/labels/help%20wanted) issues is a great place to start. +Looking at the existing issues is a great way to find something to contribute on. As our projects, by default, use the default GitHub issue labels ((enhancement/bug/duplicate/help wanted/invalid/question/wontfix), looking at any ['help wanted'](https://github.com/aws/serverless-java-container/labels/help%20wanted) issues is a great place to start. ## Code of Conduct @@ -56,6 +56,6 @@ If you discover a potential security issue in this project we ask that you notif ## Licensing -See the [LICENSE](https://github.com/awslabs/aws-serverless-java-container/blob/master/LICENSE) file for our project's licensing. We will ask you to confirm the licensing of your contribution. +See the [LICENSE](https://github.com/aws/serverless-java-container/blob/master/LICENSE) file for our project's licensing. We will ask you to confirm the licensing of your contribution. We may ask you to sign a [Contributor License Agreement (CLA)](http://en.wikipedia.org/wiki/Contributor_License_Agreement) for larger changes. diff --git a/README.md b/README.md index 33622db3d..174576470 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Serverless Java container [![Build Status](https://github.com/awslabs/aws-serverless-java-container/workflows/Continuous%20Integration/badge.svg)](https://github.com/awslabs/aws-serverless-java-container/actions) [![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.amazonaws.serverless/aws-serverless-java-container/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.amazonaws.serverless/aws-serverless-java-container) [![Help](http://img.shields.io/badge/help-gitter-E91E63.svg?style=flat-square)](https://gitter.im/awslabs/aws-serverless-java-container) +# Serverless Java container [![Build Status](https://github.com/aws/serverless-java-container/workflows/Continuous%20Integration/badge.svg)](https://github.com/aws/serverless-java-container/actions) [![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.amazonaws.serverless/aws-serverless-java-container/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.amazonaws.serverless/aws-serverless-java-container) [![Help](http://img.shields.io/badge/help-gitter-E91E63.svg?style=flat-square)](https://gitter.im/aws/serverless-java-container) The `aws-serverless-java-container` makes it easy to run Java applications written with frameworks such as [Spring](https://spring.io/), [Spring Boot](https://projects.spring.io/spring-boot/), [Apache Struts](http://struts.apache.org/), [Jersey](https://jersey.java.net/), or [Spark](http://sparkjava.com/) in [AWS Lambda](https://aws.amazon.com/lambda/). Serverless Java Container natively supports API Gateway's proxy integration models for requests and responses, you can create and inject custom models for methods that use custom mappings. @@ -7,18 +7,18 @@ Currently the following versions are maintained: | Version | Branch | Java Enterprise support | Spring versions | JAX-RS/ Jersey version | Struts support | Spark support | |--------------------------|--------|-------------------------|-----------------|------------------------|----------------|---------------| -| 1.x (stable) | [1.x](https://github.com/awslabs/aws-serverless-java-container/tree/1.x) | Java EE (javax.*) | 5.x (Boot 2.x) | 2.x | :white_check_mark: | :white_check_mark: | -| 2.x (under development) | [main](https://github.com/awslabs/aws-serverless-java-container/tree/main) | Jakarta EE (jakarta.*) | 6.x (Boot 3.x) | 3.x | :x: | :x: | - -Follow the quick start guides in [our wiki](https://github.com/awslabs/aws-serverless-java-container/wiki) to integrate Serverless Java Container with your project: -* [Spring quick start](https://github.com/awslabs/aws-serverless-java-container/wiki/Quick-start---Spring) -* [Spring Boot 2 quick start](https://github.com/awslabs/aws-serverless-java-container/wiki/Quick-start---Spring-Boot2) -* [Spring Boot 3 quick start](https://github.com/awslabs/aws-serverless-java-container/wiki/Quick-start---Spring-Boot3) -* [Apache Struts quick start](https://github.com/awslabs/aws-serverless-java-container/wiki/Quick-start---Struts) -* [Jersey quick start](https://github.com/awslabs/aws-serverless-java-container/wiki/Quick-start---Jersey) -* [Spark quick start](https://github.com/awslabs/aws-serverless-java-container/wiki/Quick-start---Spark) - -Below is the most basic AWS Lambda handler example that launches a Spring application. You can also take a look at the [samples](https://github.com/awslabs/aws-serverless-java-container/tree/master/samples) in this repository, our main wiki page includes a [step-by-step guide](https://github.com/awslabs/aws-serverless-java-container/wiki#deploying-the-sample-applications) on how to deploy the various sample applications using Maven and [SAM](https://github.com/awslabs/serverless-application-model). +| 1.x (stable) | [1.x](https://github.com/aws/serverless-java-container/tree/1.x) | Java EE (javax.*) | 5.x (Boot 2.x) | 2.x | :white_check_mark: | :white_check_mark: | +| 2.x (under development) | [main](https://github.com/aws/serverless-java-container/tree/main) | Jakarta EE (jakarta.*) | 6.x (Boot 3.x) | 3.x | :x: | :x: | + +Follow the quick start guides in [our wiki](https://github.com/aws/serverless-java-container/wiki) to integrate Serverless Java Container with your project: +* [Spring quick start](https://github.com/aws/serverless-java-container/wiki/Quick-start---Spring) +* [Spring Boot 2 quick start](https://github.com/aws/serverless-java-container/wiki/Quick-start---Spring-Boot2) +* [Spring Boot 3 quick start](https://github.com/aws/serverless-java-container/wiki/Quick-start---Spring-Boot3) +* [Apache Struts quick start](https://github.com/aws/serverless-java-container/wiki/Quick-start---Struts) +* [Jersey quick start](https://github.com/aws/serverless-java-container/wiki/Quick-start---Jersey) +* [Spark quick start](https://github.com/aws/serverless-java-container/wiki/Quick-start---Spark) + +Below is the most basic AWS Lambda handler example that launches a Spring application. You can also take a look at the [samples](https://github.com/aws/serverless-java-container/tree/master/samples) in this repository, our main wiki page includes a [step-by-step guide](https://github.com/aws/serverless-java-container/wiki#deploying-the-sample-applications) on how to deploy the various sample applications using Maven and [SAM](https://github.com/awslabs/serverless-application-model). ```java public class StreamLambdaHandler implements RequestStreamHandler { diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/LambdaContainerHandler.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/LambdaContainerHandler.java index d736d6373..f14251600 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/LambdaContainerHandler.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/LambdaContainerHandler.java @@ -163,7 +163,7 @@ public void setInitializationWrapper(InitializationWrapper wrapper) { /** * Configures the library to strip a base path from incoming requests before passing them on to the wrapped - * framework. This was added in response to issue #34 (https://github.com/awslabs/aws-serverless-java-container/issues/34). + * framework. This was added in response to issue #34 (https://github.com/aws/serverless-java-container/issues/34). * When creating a base path mapping for custom domain names in API Gateway we want to be able to strip the base path * from the request - the underlying service may not recognize this path. * @param basePath The base path to be stripped from the request diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java index 5211e68df..94dcaf440 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsServletContext.java @@ -169,7 +169,7 @@ public String getMimeType(String file) { String mimeType = null; - // may not work on Lambda until mailcap package is present https://github.com/awslabs/aws-serverless-java-container/pull/504 + // may not work on Lambda until mailcap package is present https://github.com/aws/serverless-java-container/pull/504 try { mimeType = Files.probeContentType(Paths.get(file)); } catch (IOException | InvalidPathException e) { diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index e328fee77..15fd76b80 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -13,7 +13,7 @@ maven-archetype - https://github.com/awslabs/aws-serverless-java-container.git + https://github.com/aws/serverless-java-container.git HEAD diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/README.md b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/README.md index 1017a83ad..311c40aee 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/README.md +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/README.md @@ -16,7 +16,7 @@ #set($resourceName = "#replaceChar($resourceName, '.')") #set($resourceName = $resourceName.replaceAll("\n", "").trim()) # \${artifactId} serverless API -The \${artifactId} project, created with [`aws-serverless-java-container`](https://github.com/awslabs/aws-serverless-java-container). +The \${artifactId} project, created with [`aws-serverless-java-container`](https://github.com/aws/serverless-java-container). The starter project defines a simple `/ping` resource that can accept `GET` requests with its tests. diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml index 9cad88b85..d5f7c0c7e 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml @@ -9,7 +9,7 @@ jar Serverless Jersey API - https://github.com/awslabs/aws-serverless-java-container + https://github.com/aws/serverless-java-container 1.8 diff --git a/aws-serverless-spark-archetype/pom.xml b/aws-serverless-spark-archetype/pom.xml index 90dcabf45..d0ce113fd 100644 --- a/aws-serverless-spark-archetype/pom.xml +++ b/aws-serverless-spark-archetype/pom.xml @@ -13,7 +13,7 @@ maven-archetype - https://github.com/awslabs/aws-serverless-java-container.git + https://github.com/aws/serverless-java-container.git HEAD diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/README.md b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/README.md index 1017a83ad..311c40aee 100644 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/README.md +++ b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/README.md @@ -16,7 +16,7 @@ #set($resourceName = "#replaceChar($resourceName, '.')") #set($resourceName = $resourceName.replaceAll("\n", "").trim()) # \${artifactId} serverless API -The \${artifactId} project, created with [`aws-serverless-java-container`](https://github.com/awslabs/aws-serverless-java-container). +The \${artifactId} project, created with [`aws-serverless-java-container`](https://github.com/aws/serverless-java-container). The starter project defines a simple `/ping` resource that can accept `GET` requests with its tests. diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml index 3cae46498..1151dd29d 100644 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml @@ -11,7 +11,7 @@ jar Serverless Spark API - https://github.com/awslabs/aws-serverless-java-container + https://github.com/aws/serverless-java-container 1.8 diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index 747ff0838..b5891f921 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -13,7 +13,7 @@ maven-archetype - https://github.com/awslabs/aws-serverless-java-container.git + https://github.com/aws/serverless-java-container.git HEAD diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/README.md b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/README.md index 1017a83ad..311c40aee 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/README.md +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/README.md @@ -16,7 +16,7 @@ #set($resourceName = "#replaceChar($resourceName, '.')") #set($resourceName = $resourceName.replaceAll("\n", "").trim()) # \${artifactId} serverless API -The \${artifactId} project, created with [`aws-serverless-java-container`](https://github.com/awslabs/aws-serverless-java-container). +The \${artifactId} project, created with [`aws-serverless-java-container`](https://github.com/aws/serverless-java-container). The starter project defines a simple `/ping` resource that can accept `GET` requests with its tests. diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index b68674412..093924daa 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -11,7 +11,7 @@ jar Serverless Spring API - https://github.com/awslabs/aws-serverless-java-container + https://github.com/aws/serverless-java-container 1.8 diff --git a/aws-serverless-springboot3-archetype/pom.xml b/aws-serverless-springboot3-archetype/pom.xml index 8f478b223..a6cf366b3 100644 --- a/aws-serverless-springboot3-archetype/pom.xml +++ b/aws-serverless-springboot3-archetype/pom.xml @@ -13,7 +13,7 @@ maven-archetype - https://github.com/awslabs/aws-serverless-java-container.git + https://github.com/aws/serverless-java-container.git HEAD diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/README.md b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/README.md index 1017a83ad..311c40aee 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/README.md +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/README.md @@ -16,7 +16,7 @@ #set($resourceName = "#replaceChar($resourceName, '.')") #set($resourceName = $resourceName.replaceAll("\n", "").trim()) # \${artifactId} serverless API -The \${artifactId} project, created with [`aws-serverless-java-container`](https://github.com/awslabs/aws-serverless-java-container). +The \${artifactId} project, created with [`aws-serverless-java-container`](https://github.com/aws/serverless-java-container). The starter project defines a simple `/ping` resource that can accept `GET` requests with its tests. diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml index 1382f9bd6..396a77b03 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml @@ -11,7 +11,7 @@ jar Serverless Spring Boot 3 API - https://github.com/awslabs/aws-serverless-java-container + https://github.com/aws/serverless-java-container org.springframework.boot diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/src/main/resources/application.properties b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/src/main/resources/application.properties index ec1cb9792..070e632fe 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/src/main/resources/application.properties +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/src/main/resources/application.properties @@ -1,3 +1,3 @@ # Reduce logging level to make sure the application works with SAM local -# https://github.com/awslabs/aws-serverless-java-container/issues/134 +# https://github.com/aws/serverless-java-container/issues/134 logging.level.root=WARN \ No newline at end of file diff --git a/aws-serverless-struts-archetype/pom.xml b/aws-serverless-struts-archetype/pom.xml index 1d0e078af..0e12ca517 100644 --- a/aws-serverless-struts-archetype/pom.xml +++ b/aws-serverless-struts-archetype/pom.xml @@ -13,7 +13,7 @@ maven-archetype - https://github.com/awslabs/aws-serverless-java-container.git + https://github.com/aws/serverless-java-container.git HEAD diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/README.md b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/README.md index 1017a83ad..311c40aee 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/README.md +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/README.md @@ -16,7 +16,7 @@ #set($resourceName = "#replaceChar($resourceName, '.')") #set($resourceName = $resourceName.replaceAll("\n", "").trim()) # \${artifactId} serverless API -The \${artifactId} project, created with [`aws-serverless-java-container`](https://github.com/awslabs/aws-serverless-java-container). +The \${artifactId} project, created with [`aws-serverless-java-container`](https://github.com/aws/serverless-java-container). The starter project defines a simple `/ping` resource that can accept `GET` requests with its tests. diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml index 15cbc1dd9..d7664d120 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml @@ -10,7 +10,7 @@ jar Serverless Struts API - https://github.com/awslabs/aws-serverless-java-container + https://github.com/aws/serverless-java-container 1.8 diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/src/main/resources/application.properties b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/src/main/resources/application.properties index ec1cb9792..070e632fe 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/src/main/resources/application.properties +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/src/main/resources/application.properties @@ -1,3 +1,3 @@ # Reduce logging level to make sure the application works with SAM local -# https://github.com/awslabs/aws-serverless-java-container/issues/134 +# https://github.com/aws/serverless-java-container/issues/134 logging.level.root=WARN \ No newline at end of file diff --git a/pom.xml b/pom.xml index 4b149262d..9cd64107d 100644 --- a/pom.xml +++ b/pom.xml @@ -7,10 +7,10 @@ 2.0.0-SNAPSHOT AWS Serverless Java container A Java framework to run Spring, Spring Boot, Jersey, Spark, and Struts applications inside AWS Lambda - https://github.com/awslabs/aws-serverless-java-container + https://github.com/aws/serverless-java-container GitHub Issues - https://github.com/awslabs/aws-serverless-java-container/issues + https://github.com/aws/serverless-java-container/issues @@ -35,8 +35,8 @@ - https://github.com/awslabs/aws-serverless-java-container - scm:git:https://github.com/awslabs/aws-serverless-java-container.git + https://github.com/aws/serverless-java-container + scm:git:https://github.com/aws/serverless-java-container.git HEAD diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index b7cae7576..7a5ed7fba 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -12,7 +12,7 @@ https://aws.amazon.com/lambda/ - https://github.com/awslabs/aws-serverless-java-container.git + https://github.com/aws/serverless-java-container.git diff --git a/samples/spark/pet-store/pom.xml b/samples/spark/pet-store/pom.xml index cf2e56606..f1dee6372 100644 --- a/samples/spark/pet-store/pom.xml +++ b/samples/spark/pet-store/pom.xml @@ -12,7 +12,7 @@ https://aws.amazon.com/lambda/ - https://github.com/awslabs/aws-serverless-java-container.git + https://github.com/aws/serverless-java-container.git diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index d60e4817a..e60226d8d 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -12,7 +12,7 @@ https://aws.amazon.com/lambda/ - https://github.com/awslabs/aws-serverless-java-container.git + https://github.com/aws/serverless-java-container.git diff --git a/samples/struts/pet-store/pom.xml b/samples/struts/pet-store/pom.xml index 85f52730b..c547d9cc7 100644 --- a/samples/struts/pet-store/pom.xml +++ b/samples/struts/pet-store/pom.xml @@ -12,7 +12,7 @@ https://aws.amazon.com/lambda/ - https://github.com/awslabs/aws-serverless-java-container.git + https://github.com/aws/serverless-java-container.git From b471fe4b1701ac9dfff0dab2d7fd03378ff28481 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Sun, 21 Jan 2024 09:00:45 +0100 Subject: [PATCH 538/888] chore(deps): Update Spring dependencies (framework to 6.1.3, boot to 3.2.2) --- aws-serverless-java-container-spring/pom.xml | 2 +- aws-serverless-java-container-springboot3/pom.xml | 4 ++-- .../main/resources/archetype-resources/build.gradle | 4 ++-- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../main/resources/archetype-resources/build.gradle | 10 +++++----- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/spring/pet-store/build.gradle | 4 ++-- samples/spring/pet-store/pom.xml | 2 +- samples/springboot3/alt-pet-store/build.gradle | 2 +- samples/springboot3/alt-pet-store/pom.xml | 2 +- samples/springboot3/pet-store/build.gradle | 2 +- samples/springboot3/pet-store/pom.xml | 2 +- samples/struts/pet-store/build.gradle | 8 ++++---- samples/struts/pet-store/pom.xml | 2 +- 16 files changed, 26 insertions(+), 26 deletions(-) diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 57e1bed60..5a5ff5470 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -16,7 +16,7 @@ - 6.1.2 + 6.1.3 6.2.1 diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index 51ad6f1f1..9b4d941c9 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -15,8 +15,8 @@ 2.0.0-SNAPSHOT - 6.1.2 - 3.2.1 + 6.1.3 + 3.2.2 6.2.1 diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index f82bb3d63..1f1d1af7c 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -7,8 +7,8 @@ repositories { dependencies { implementation ( - 'org.springframework:spring-webmvc:6.1.2', - 'org.springframework:spring-context:6.1.2', + 'org.springframework:spring-webmvc:6.1.3', + 'org.springframework:spring-context:6.1.3', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[2.0-SNAPSHOT,)', 'org.apache.logging.log4j:log4j-core:2.22.1', 'org.apache.logging.log4j:log4j-api:2.22.1', diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index 093924daa..5aa0330b2 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 1.8 - 6.1.2 + 6.1.3 5.10.1 2.22.1 diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle index 1a04756fa..2f2ebee1a 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle @@ -9,7 +9,7 @@ repositories { dependencies { implementation ( - 'org.springframework.boot:spring-boot-starter-web:3.2.1', + 'org.springframework.boot:spring-boot-starter-web:3.2.2', 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:[2.0-SNAPSHOT,)', ) diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml index 396a77b03..f990dda8b 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ org.springframework.boot spring-boot-starter-parent - 3.2.1 + 3.2.2 diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle index dba15956e..1f03497bd 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle @@ -18,19 +18,19 @@ dependencies { exclude group: 'org.apache.logging.log4j', module: 'log4j-api' exclude group: 'org.apache.logging.log4j', module: 'log4j-to-slf4j' } - implementation ('org.apache.struts:struts2-convention-plugin:6.1.2.1') { + implementation ('org.apache.struts:struts2-convention-plugin:6.1.3.1') { exclude group: 'org.apache.struts', module: 'struts2-core' } - implementation ('org.apache.struts:struts2-rest-plugin:6.1.2.1') { + implementation ('org.apache.struts:struts2-rest-plugin:6.1.3.1') { exclude group: 'org.apache.struts', module: 'struts2-core' } - implementation ('org.apache.struts:struts2-bean-validation-plugin:6.1.2.1') { + implementation ('org.apache.struts:struts2-bean-validation-plugin:6.1.3.1') { exclude group: 'org.apache.struts', module: 'struts2-core' } implementation ('com.jgeppert.struts2:struts2-aws-lambda-support-plugin:1.4.2') { exclude group: 'org.apache.struts', module: 'struts2-core' } - implementation ('org.apache.struts:struts2-core:6.1.2.1') { + implementation ('org.apache.struts:struts2-core:6.1.3.1') { exclude group: 'org.apache.logging.log4j', module: 'log4j-api' } implementation ('org.hibernate.validator:hibernate-validator:6.1.7.Final') @@ -45,7 +45,7 @@ dependencies { testImplementation("org.apache.httpcomponents.client5:httpclient5:5.2.1") testImplementation(platform("org.junit:junit-bom:5.10.1")) testImplementation("org.junit.jupiter:junit-jupiter") - testImplementation('org.apache.struts:struts2-junit-plugin:6.1.2.1') { + testImplementation('org.apache.struts:struts2-junit-plugin:6.1.3.1') { exclude group: 'org.apache.struts', module: 'struts2-core' } } diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml index d7664d120..485fa214a 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml @@ -15,7 +15,7 @@ 1.8 1.8 - 6.1.2.1 + 6.1.3.1 2.16.1 5.10.1 2.22.1 diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index 70e6d22ba..586773bdd 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -7,8 +7,8 @@ repositories { dependencies { implementation ( - 'org.springframework:spring-webmvc:6.1.2', - 'org.springframework:spring-context:6.1.2', + 'org.springframework:spring-webmvc:6.1.3', + 'org.springframework:spring-context:6.1.3', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[2.0-SNAPSHOT,)', 'org.apache.logging.log4j:log4j-core:2.22.1', 'org.apache.logging.log4j:log4j-api:2.22.1', diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index e60226d8d..6c0fb81e2 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -24,7 +24,7 @@ - 6.1.2 + 6.1.3 2.22.1 17 17 diff --git a/samples/springboot3/alt-pet-store/build.gradle b/samples/springboot3/alt-pet-store/build.gradle index 998718068..b59cc9720 100644 --- a/samples/springboot3/alt-pet-store/build.gradle +++ b/samples/springboot3/alt-pet-store/build.gradle @@ -9,7 +9,7 @@ repositories { dependencies { implementation ( - implementation('org.springframework.boot:spring-boot-starter-web:3.2.1') { + implementation('org.springframework.boot:spring-boot-starter-web:3.2.2') { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat' }, 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:[2.0-SNAPSHOT,)', diff --git a/samples/springboot3/alt-pet-store/pom.xml b/samples/springboot3/alt-pet-store/pom.xml index 7bfd00bf2..950ad6830 100644 --- a/samples/springboot3/alt-pet-store/pom.xml +++ b/samples/springboot3/alt-pet-store/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 3.2.1 + 3.2.2 diff --git a/samples/springboot3/pet-store/build.gradle b/samples/springboot3/pet-store/build.gradle index 998718068..b59cc9720 100644 --- a/samples/springboot3/pet-store/build.gradle +++ b/samples/springboot3/pet-store/build.gradle @@ -9,7 +9,7 @@ repositories { dependencies { implementation ( - implementation('org.springframework.boot:spring-boot-starter-web:3.2.1') { + implementation('org.springframework.boot:spring-boot-starter-web:3.2.2') { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat' }, 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:[2.0-SNAPSHOT,)', diff --git a/samples/springboot3/pet-store/pom.xml b/samples/springboot3/pet-store/pom.xml index 291b8bb09..569552a71 100644 --- a/samples/springboot3/pet-store/pom.xml +++ b/samples/springboot3/pet-store/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 3.2.1 + 3.2.2 diff --git a/samples/struts/pet-store/build.gradle b/samples/struts/pet-store/build.gradle index 491419e3f..4982518a2 100644 --- a/samples/struts/pet-store/build.gradle +++ b/samples/struts/pet-store/build.gradle @@ -14,10 +14,10 @@ configurations { dependencies { implementation ( 'com.amazonaws.serverless:aws-serverless-java-container-struts:[1.9,)', - 'org.apache.struts:struts2-convention-plugin:6.1.2.1', - 'org.apache.struts:struts2-rest-plugin:6.1.2.1', - 'org.apache.struts:struts2-bean-validation-plugin:6.1.2.1', - 'org.apache.struts:struts2-junit-plugin:6.1.2.1', + 'org.apache.struts:struts2-convention-plugin:6.1.3.1', + 'org.apache.struts:struts2-rest-plugin:6.1.3.1', + 'org.apache.struts:struts2-bean-validation-plugin:6.1.3.1', + 'org.apache.struts:struts2-junit-plugin:6.1.3.1', 'com.jgeppert.struts2:struts2-aws-lambda-support-plugin:1.4.2', 'org.hibernate.validator:hibernate-validator:6.1.7.Final', 'org.glassfish:javax.el:3.0.0', diff --git a/samples/struts/pet-store/pom.xml b/samples/struts/pet-store/pom.xml index c547d9cc7..6eacfc31e 100644 --- a/samples/struts/pet-store/pom.xml +++ b/samples/struts/pet-store/pom.xml @@ -26,7 +26,7 @@ 1.8 1.8 - 6.1.2.1 + 6.1.3.1 2.16.1 4.13.2 2.22.1 From fd96f7fb90ab9f9d74f484f4ea17217e486859e9 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Sun, 21 Jan 2024 09:30:36 +0100 Subject: [PATCH 539/888] refactor: Delete Spark related implementations as the project is no longer maintained --- .../continuous-integration-workflow.yml | 8 - .../jersey/JerseyLambdaContainerHandler.java | 2 +- aws-serverless-java-container-spark/pom.xml | 134 ---------- .../spark/SparkLambdaContainerHandler.java | 251 ------------------ .../embeddedserver/LambdaEmbeddedServer.java | 119 --------- .../LambdaEmbeddedServerFactory.java | 72 ----- .../spark/HelloWorldSparkStreamTest.java | 160 ----------- .../proxy/spark/HelloWorldSparkTest.java | 176 ------------ .../proxy/spark/InitExceptionHandlerTest.java | 76 ------ .../SparkLambdaContainerHandlerTest.java | 124 --------- .../LambdaEmbeddedServerTest.java | 23 -- .../spark/filter/CustomHeaderFilter.java | 37 --- .../spark/filter/UnauthenticatedFilter.java | 42 --- aws-serverless-spark-archetype/pom.xml | 81 ------ .../META-INF/maven/archetype-metadata.xml | 33 --- .../resources/archetype-resources/README.md | 99 ------- .../archetype-resources/build.gradle | 40 --- .../resources/archetype-resources/pom.xml | 186 ------------- .../archetype-resources/src/assembly/bin.xml | 32 --- .../src/main/java/SparkResources.java | 25 -- .../src/main/java/StreamLambdaHandler.java | 37 --- .../src/main/java/util/JsonTransformer.java | 24 -- .../test/java/StreamLambdaHandlerTest.java | 89 ------- .../archetype-resources/template.yml | 52 ---- .../projects/base/archetype.properties | 3 - .../src/test/resources/projects/base/goal.txt | 1 - samples/spark/pet-store/README.md | 36 --- samples/spark/pet-store/build.gradle | 31 --- samples/spark/pet-store/pom.xml | 164 ------------ samples/spark/pet-store/src/assembly/bin.xml | 32 --- .../sample/spark/JsonTransformer.java | 36 --- .../sample/spark/SparkResources.java | 66 ----- .../sample/spark/StreamLambdaHandler.java | 54 ---- .../spark/filter/CognitoIdentityFilter.java | 68 ----- .../serverless/sample/spark/model/Error.java | 29 -- .../serverless/sample/spark/model/Pet.java | 54 ---- .../sample/spark/model/PetData.java | 111 -------- samples/spark/pet-store/template.yml | 32 --- 38 files changed, 1 insertion(+), 2638 deletions(-) delete mode 100644 aws-serverless-java-container-spark/pom.xml delete mode 100644 aws-serverless-java-container-spark/src/main/java/com/amazonaws/serverless/proxy/spark/SparkLambdaContainerHandler.java delete mode 100644 aws-serverless-java-container-spark/src/main/java/com/amazonaws/serverless/proxy/spark/embeddedserver/LambdaEmbeddedServer.java delete mode 100644 aws-serverless-java-container-spark/src/main/java/com/amazonaws/serverless/proxy/spark/embeddedserver/LambdaEmbeddedServerFactory.java delete mode 100644 aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/HelloWorldSparkStreamTest.java delete mode 100644 aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/HelloWorldSparkTest.java delete mode 100644 aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/InitExceptionHandlerTest.java delete mode 100644 aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/SparkLambdaContainerHandlerTest.java delete mode 100644 aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/embeddedserver/LambdaEmbeddedServerTest.java delete mode 100644 aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/filter/CustomHeaderFilter.java delete mode 100644 aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/filter/UnauthenticatedFilter.java delete mode 100644 aws-serverless-spark-archetype/pom.xml delete mode 100644 aws-serverless-spark-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml delete mode 100644 aws-serverless-spark-archetype/src/main/resources/archetype-resources/README.md delete mode 100644 aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle delete mode 100644 aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml delete mode 100644 aws-serverless-spark-archetype/src/main/resources/archetype-resources/src/assembly/bin.xml delete mode 100644 aws-serverless-spark-archetype/src/main/resources/archetype-resources/src/main/java/SparkResources.java delete mode 100644 aws-serverless-spark-archetype/src/main/resources/archetype-resources/src/main/java/StreamLambdaHandler.java delete mode 100644 aws-serverless-spark-archetype/src/main/resources/archetype-resources/src/main/java/util/JsonTransformer.java delete mode 100644 aws-serverless-spark-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java delete mode 100644 aws-serverless-spark-archetype/src/main/resources/archetype-resources/template.yml delete mode 100644 aws-serverless-spark-archetype/src/test/resources/projects/base/archetype.properties delete mode 100644 aws-serverless-spark-archetype/src/test/resources/projects/base/goal.txt delete mode 100644 samples/spark/pet-store/README.md delete mode 100644 samples/spark/pet-store/build.gradle delete mode 100644 samples/spark/pet-store/pom.xml delete mode 100644 samples/spark/pet-store/src/assembly/bin.xml delete mode 100644 samples/spark/pet-store/src/main/java/com/amazonaws/serverless/sample/spark/JsonTransformer.java delete mode 100644 samples/spark/pet-store/src/main/java/com/amazonaws/serverless/sample/spark/SparkResources.java delete mode 100644 samples/spark/pet-store/src/main/java/com/amazonaws/serverless/sample/spark/StreamLambdaHandler.java delete mode 100644 samples/spark/pet-store/src/main/java/com/amazonaws/serverless/sample/spark/filter/CognitoIdentityFilter.java delete mode 100644 samples/spark/pet-store/src/main/java/com/amazonaws/serverless/sample/spark/model/Error.java delete mode 100644 samples/spark/pet-store/src/main/java/com/amazonaws/serverless/sample/spark/model/Pet.java delete mode 100644 samples/spark/pet-store/src/main/java/com/amazonaws/serverless/sample/spark/model/PetData.java delete mode 100644 samples/spark/pet-store/template.yml diff --git a/.github/workflows/continuous-integration-workflow.yml b/.github/workflows/continuous-integration-workflow.yml index 2374a45bc..b0acd32ad 100644 --- a/.github/workflows/continuous-integration-workflow.yml +++ b/.github/workflows/continuous-integration-workflow.yml @@ -46,14 +46,6 @@ jobs: # - name: Build Jersey 2.29 # run: ./gha_build.sh jersey false false -Djersey.version=2.29.1 -# build_spark: -# name: Build and test Spark -# runs-on: ubuntu-latest -# steps: -# - uses: actions/checkout@v3 -# - name: Build latest -# run: ./gha_build.sh spark true true - build_spring: name: Build and test Spring runs-on: ubuntu-latest diff --git a/aws-serverless-java-container-jersey/src/main/java/com/amazonaws/serverless/proxy/jersey/JerseyLambdaContainerHandler.java b/aws-serverless-java-container-jersey/src/main/java/com/amazonaws/serverless/proxy/jersey/JerseyLambdaContainerHandler.java index e290e284b..43bd7eac1 100644 --- a/aws-serverless-java-container-jersey/src/main/java/com/amazonaws/serverless/proxy/jersey/JerseyLambdaContainerHandler.java +++ b/aws-serverless-java-container-jersey/src/main/java/com/amazonaws/serverless/proxy/jersey/JerseyLambdaContainerHandler.java @@ -207,7 +207,7 @@ protected AwsHttpServletResponse getContainerResponse(HttpServletRequest request public void initialize() { Timer.start("JERSEY_COLD_START_INIT"); - // manually add the spark filter to the chain. This should the last one and match all uris + // manually add the filter to the chain. This should the last one and match all uris FilterRegistration.Dynamic jerseyFilterReg = getServletContext().addFilter("JerseyFilter", jerseyFilter); jerseyFilterReg.addMappingForUrlPatterns( EnumSet.of(DispatcherType.REQUEST, DispatcherType.ASYNC, DispatcherType.INCLUDE, DispatcherType.FORWARD), diff --git a/aws-serverless-java-container-spark/pom.xml b/aws-serverless-java-container-spark/pom.xml deleted file mode 100644 index 8987d66aa..000000000 --- a/aws-serverless-java-container-spark/pom.xml +++ /dev/null @@ -1,134 +0,0 @@ - - - 4.0.0 - - aws-serverless-java-container-spark - AWS Serverless Java container support - Spark implementation - Allows Java applications written for Spark to run in AWS Lambda - https://aws.amazon.com/lambda - 2.0.0-SNAPSHOT - - - com.amazonaws.serverless - aws-serverless-java-container - 2.0.0-SNAPSHOT - .. - - - - 2.9.4 - - - - - - com.amazonaws.serverless - aws-serverless-java-container-core - 2.0.0-SNAPSHOT - - - - com.sparkjava - spark-core - ${spark.version} - - - org.junit.jupiter - junit-jupiter - test - - - - - - - org.jacoco - jacoco-maven-plugin - - ${basedir}/target/coverage-reports/jacoco-unit.exec - ${basedir}/target/coverage-reports/jacoco-unit.exec - - - - default-prepare-agent - - prepare-agent - - - - jacoco-site - package - - report - - - - jacoco-check - test - - check - - - true - - BUNDLE - - - INSTRUCTION - COVEREDRATIO - ${jacoco.minCoverage} - - - - - - - - - - org.apache.maven.plugins - maven-surefire-plugin - - false - - - - com.github.spotbugs - spotbugs-maven-plugin - - - - analyze-compile - compile - - check - - - - - - org.owasp - dependency-check-maven - ${dependencyCheck.version} - - true - - ${project.basedir}/../owasp-suppression.xml - - 7 - false - - - - - check - - - - - - - - diff --git a/aws-serverless-java-container-spark/src/main/java/com/amazonaws/serverless/proxy/spark/SparkLambdaContainerHandler.java b/aws-serverless-java-container-spark/src/main/java/com/amazonaws/serverless/proxy/spark/SparkLambdaContainerHandler.java deleted file mode 100644 index 9c1b47511..000000000 --- a/aws-serverless-java-container-spark/src/main/java/com/amazonaws/serverless/proxy/spark/SparkLambdaContainerHandler.java +++ /dev/null @@ -1,251 +0,0 @@ -/* - * Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance - * with the License. A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.proxy.spark; - - -import com.amazonaws.serverless.exceptions.ContainerInitializationException; -import com.amazonaws.serverless.proxy.*; -import com.amazonaws.serverless.proxy.internal.testutils.Timer; -import com.amazonaws.serverless.proxy.model.AwsProxyRequest; -import com.amazonaws.serverless.proxy.model.AwsProxyResponse; -import com.amazonaws.serverless.proxy.internal.servlet.*; -import com.amazonaws.serverless.proxy.model.HttpApiV2ProxyRequest; -import com.amazonaws.serverless.proxy.spark.embeddedserver.LambdaEmbeddedServer; -import com.amazonaws.serverless.proxy.spark.embeddedserver.LambdaEmbeddedServerFactory; - -import com.amazonaws.services.lambda.runtime.Context; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import spark.Service; -import spark.Spark; -import spark.embeddedserver.EmbeddedServers; - -import jakarta.servlet.DispatcherType; -import jakarta.servlet.FilterRegistration; -import jakarta.servlet.Servlet; -import jakarta.servlet.http.HttpServletRequest; - -import java.lang.reflect.Field; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.security.AccessController; -import java.security.PrivilegedActionException; -import java.security.PrivilegedExceptionAction; -import java.util.EnumSet; -import java.util.concurrent.CountDownLatch; - - -/** - * Implementation of the LambdaContainerHandler object that supports the Spark framework: http://sparkjava.com/ - *

- * Because of the way this container is implemented, using reflection to change accessibility of methods in the Spark - * framework and inserting itself as the default embedded container, it is important that you initialize the Handler - * before declaring your spark routes. - *

- * This implementation uses the default AwsProxyHttpServletRequest and Response implementations. - *

- *

- * {@code
- *     // always initialize the handler first
- *     SparkLambdaContainerHandler handler =
- *             SparkLambdaContainerHandler.getAwsProxyHandler();
- *
- *     get("/hello", (req, res) -> {
- *         res.status(200);
- *         res.body("Hello World");
- *     });
- * }
- * 
- * - * @param The request object used by the RequestReader implementation passed to the constructor - * @param The response object produced by the ResponseWriter implementation in the constructor - */ -public class SparkLambdaContainerHandler - extends AwsLambdaServletContainerHandler { - - //------------------------------------------------------------- - // Constants - //------------------------------------------------------------- - - private static final String LAMBDA_EMBEDDED_SERVER_CODE = "AWS_LAMBDA"; - - //------------------------------------------------------------- - // Variables - Private - //------------------------------------------------------------- - - private LambdaEmbeddedServer embeddedServer; - private LambdaEmbeddedServerFactory lambdaServerFactory; - private Logger log = LoggerFactory.getLogger(SparkLambdaContainerHandler.class); - - //------------------------------------------------------------- - // Methods - Public - Static - //------------------------------------------------------------- - - - /** - * Returns a new instance of an SparkLambdaContainerHandler initialized to work with AwsProxyRequest - * and AwsProxyResponse objects. - * - * @return a new instance of SparkLambdaContainerHandler - * - * @throws ContainerInitializationException Throws this exception if we fail to initialize the Spark container. - * This could be caused by the introspection used to insert the library as the default embedded container - */ - public static SparkLambdaContainerHandler getAwsProxyHandler() - throws ContainerInitializationException { - SparkLambdaContainerHandler newHandler = new SparkLambdaContainerHandler<>(AwsProxyRequest.class, - AwsProxyResponse.class, - new AwsProxyHttpServletRequestReader(), - new AwsProxyHttpServletResponseWriter(), - new AwsProxySecurityContextWriter(), - new AwsProxyExceptionHandler(), - new LambdaEmbeddedServerFactory()); - - // For Spark we cannot call initialize here. It needs to be called manually after the routes are set - //newHandler.initialize(); - - return newHandler; - } - - /** - * Returns a new instance of an SparkLambdaContainerHandler initialized to work with HttpApiV2ProxyRequest - * and AwsProxyResponse objects. - * - * @return a new instance of SparkLambdaContainerHandler - * - * @throws ContainerInitializationException Throws this exception if we fail to initialize the Spark container. - * This could be caused by the introspection used to insert the library as the default embedded container - */ - public static SparkLambdaContainerHandler getHttpApiV2ProxyHandler() - throws ContainerInitializationException { - SparkLambdaContainerHandler newHandler = new SparkLambdaContainerHandler<>(HttpApiV2ProxyRequest.class, - AwsProxyResponse.class, - new AwsHttpApiV2HttpServletRequestReader(), - new AwsProxyHttpServletResponseWriter(true), - new AwsHttpApiV2SecurityContextWriter(), - new AwsProxyExceptionHandler(), - new LambdaEmbeddedServerFactory()); - - // For Spark we cannot call initialize here. It needs to be called manually after the routes are set - //newHandler.initialize(); - - return newHandler; - } - - //------------------------------------------------------------- - // Constructors - //------------------------------------------------------------- - - - public SparkLambdaContainerHandler(Class requestTypeClass, - Class responseTypeClass, - RequestReader requestReader, - ResponseWriter responseWriter, - SecurityContextWriter securityContextWriter, - ExceptionHandler exceptionHandler, - LambdaEmbeddedServerFactory embeddedServerFactory) - throws ContainerInitializationException { - super(requestTypeClass, responseTypeClass, requestReader, responseWriter, securityContextWriter, exceptionHandler); - Timer.start("SPARK_CONTAINER_HANDLER_CONSTRUCTOR"); - - EmbeddedServers.add(LAMBDA_EMBEDDED_SERVER_CODE, embeddedServerFactory); - this.lambdaServerFactory = embeddedServerFactory; - - // TODO: This is pretty bad but we are not given access to the embeddedServerIdentifier property of the - // Service object - try { - AccessController.doPrivileged((PrivilegedExceptionAction) () -> { - log.debug("Changing visibility of getInstance method and embeddedServerIdentifier properties"); - Method serviceInstanceMethod = Spark.class.getDeclaredMethod("getInstance"); - serviceInstanceMethod.setAccessible(true); - Service sparkService = (Service) serviceInstanceMethod.invoke(null); - Field serverIdentifierField = Service.class.getDeclaredField("embeddedServerIdentifier"); - serverIdentifierField.setAccessible(true); - serverIdentifierField.set(sparkService, LAMBDA_EMBEDDED_SERVER_CODE); - return null; - }); - } catch (PrivilegedActionException e) { - if (e.getException() instanceof NoSuchFieldException) { - log.error("Could not fine embeddedServerIdentifier field in Service class", e.getException()); - } else if (e.getException() instanceof NoSuchMethodException) { - log.error("Could not find getInstance method in Spark class", e.getException()); - } else if (e.getException() instanceof IllegalAccessException) { - log.error("Could not access getInstance method in Spark class", e.getException()); - } else if (e.getException() instanceof InvocationTargetException) { - log.error("Could not invoke getInstance method in Spark class", e.getException()); - } else { - log.error("Unknown exception while modifying Spark class", e.getException()); - } - Timer.stop("SPARK_CONTAINER_HANDLER_CONSTRUCTOR"); - throw new ContainerInitializationException("Could not initialize Spark server", e.getException()); - } - Timer.stop("SPARK_CONTAINER_HANDLER_CONSTRUCTOR"); - } - - //------------------------------------------------------------- - // Methods - Implementation - //------------------------------------------------------------- - - - @Override - protected AwsHttpServletResponse getContainerResponse(HttpServletRequest request, CountDownLatch latch) { - return new AwsHttpServletResponse(request, latch); - } - - - @Override - protected void handleRequest(HttpServletRequest httpServletRequest, AwsHttpServletResponse httpServletResponse, Context lambdaContext) - throws Exception { - Timer.start("SPARK_HANDLE_REQUEST"); - - if (embeddedServer == null) { - initialize(); - } - - if (AwsHttpServletRequest.class.isAssignableFrom(httpServletRequest.getClass())) { - ((AwsHttpServletRequest)httpServletRequest).setServletContext(getServletContext()); - } - - doFilter(httpServletRequest, httpServletResponse, null); - Timer.stop("SPARK_HANDLE_REQUEST"); - } - - - @Override - public void initialize() - throws ContainerInitializationException { - Timer.start("SPARK_COLD_START"); - log.debug("First request, getting new server instance"); - - // trying to call init in case the embedded server had not been initialized. - Spark.init(); - - // adding this call to make sure that the framework is fully initialized. This should address a race - // condition and solve GitHub issue #71. - Spark.awaitInitialization(); - - embeddedServer = lambdaServerFactory.getServerInstance(); - - // manually add the spark filter to the chain. This should the last one and match all uris - FilterRegistration.Dynamic sparkRegistration = getServletContext().addFilter("SparkFilter", embeddedServer.getSparkFilter()); - sparkRegistration.addMappingForUrlPatterns( - EnumSet.of(DispatcherType.REQUEST, DispatcherType.ASYNC, DispatcherType.INCLUDE, DispatcherType.FORWARD), - true, "/*"); - Timer.stop("SPARK_COLD_START"); - } - - public Servlet getServlet() { - return null; - } -} diff --git a/aws-serverless-java-container-spark/src/main/java/com/amazonaws/serverless/proxy/spark/embeddedserver/LambdaEmbeddedServer.java b/aws-serverless-java-container-spark/src/main/java/com/amazonaws/serverless/proxy/spark/embeddedserver/LambdaEmbeddedServer.java deleted file mode 100644 index 8d79c613c..000000000 --- a/aws-serverless-java-container-spark/src/main/java/com/amazonaws/serverless/proxy/spark/embeddedserver/LambdaEmbeddedServer.java +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance - * with the License. A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.proxy.spark.embeddedserver; - -import com.amazonaws.serverless.exceptions.ContainerInitializationException; -import com.amazonaws.serverless.proxy.internal.testutils.Timer; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import spark.ExceptionMapper; -import spark.embeddedserver.EmbeddedServer; -import spark.embeddedserver.jetty.websocket.WebSocketHandlerWrapper; -import spark.http.matching.MatcherFilter; -import spark.route.Routes; -import spark.ssl.SslStores; -import spark.staticfiles.StaticFilesConfiguration; - -import jakarta.servlet.Filter; -import java.util.Map; -import java.util.Optional; - -public class LambdaEmbeddedServer - implements EmbeddedServer { - - //------------------------------------------------------------- - // Variables - Private - //------------------------------------------------------------- - - private Routes applicationRoutes; - private ExceptionMapper exceptionMapper; - private MatcherFilter sparkFilter; - private StaticFilesConfiguration staticFilesConfiguration; - private boolean hasMultipleHandler; - private Logger log = LoggerFactory.getLogger(LambdaEmbeddedServer.class); - - - //------------------------------------------------------------- - // Constructors - //------------------------------------------------------------- - - LambdaEmbeddedServer(Routes routes, StaticFilesConfiguration filesConfig, ExceptionMapper exceptionMapper, boolean multipleHandlers) { - Timer.start("SPARK_EMBEDDED_SERVER_CONSTRUCTOR"); - applicationRoutes = routes; - staticFilesConfiguration = filesConfig; - hasMultipleHandler = multipleHandlers; - this.exceptionMapper = exceptionMapper; - - // try to initialize the filter here. - sparkFilter = new MatcherFilter(applicationRoutes, staticFilesConfiguration, exceptionMapper, true, hasMultipleHandler); - Timer.stop("SPARK_EMBEDDED_SERVER_CONSTRUCTOR"); - } - - - //------------------------------------------------------------- - // Implementation - EmbeddedServer - //------------------------------------------------------------- - @Override - public int ignite(String host, int port, SslStores sslStores, int maxThreads, int minThreads, int threadIdleTimeoutMillis) - throws ContainerInitializationException { - Timer.start("SPARK_EMBEDDED_IGNITE"); - log.info("Starting Spark server, ignoring port and host"); - // if not initialized yet - if (sparkFilter == null) { - sparkFilter = new MatcherFilter(applicationRoutes, staticFilesConfiguration, exceptionMapper, true, hasMultipleHandler); - } - sparkFilter.init(null); - Timer.stop("SPARK_EMBEDDED_IGNITE"); - return port; - } - - - public void configureWebSockets(Map webSocketHandlers, - Optional webSocketIdleTimeoutMillis) { - // Swallowing this exception to prevent Spark from getting stuck - // throw new UnsupportedOperationException(); - log.info("Spark called configureWebSockets. However, web sockets are not supported"); - } - - - @Override - public void join() { - log.info("Called join method, nothing to do here since Lambda only runs a single event per container"); - } - - - @Override - public void extinguish() { - log.info("Called extinguish method, nothing to do here."); - } - - - @Override - public int activeThreadCount() { - log.debug("Called activeThreadCount, since Lambda only runs one event per container we always return 1"); - return 1; - } - - //------------------------------------------------------------- - // Methods - Public - //------------------------------------------------------------- - - /** - * Returns the initialized instance of the main Spark filter. - * @return The spark filter instance. - */ - public Filter getSparkFilter() { - return sparkFilter; - } -} diff --git a/aws-serverless-java-container-spark/src/main/java/com/amazonaws/serverless/proxy/spark/embeddedserver/LambdaEmbeddedServerFactory.java b/aws-serverless-java-container-spark/src/main/java/com/amazonaws/serverless/proxy/spark/embeddedserver/LambdaEmbeddedServerFactory.java deleted file mode 100644 index 9074e5ddf..000000000 --- a/aws-serverless-java-container-spark/src/main/java/com/amazonaws/serverless/proxy/spark/embeddedserver/LambdaEmbeddedServerFactory.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance - * with the License. A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.proxy.spark.embeddedserver; - -import com.amazonaws.serverless.proxy.internal.testutils.Timer; - -import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; -import spark.ExceptionMapper; -import spark.embeddedserver.EmbeddedServer; -import spark.embeddedserver.EmbeddedServerFactory; -import spark.route.Routes; -import spark.staticfiles.StaticFilesConfiguration; - -public class LambdaEmbeddedServerFactory implements EmbeddedServerFactory { - - //------------------------------------------------------------- - // Variables - Private - Static - //------------------------------------------------------------- - - private static volatile LambdaEmbeddedServer embeddedServer; - - - /** - * Empty constructor, applications should always use this constructor. - */ - public LambdaEmbeddedServerFactory() {} - - - /** - * Constructor used in unit tests to inject a mocked embedded server - * @param server The mocked server - */ - @SuppressFBWarnings("ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD") // suppressing the warning as this constructor is only used for unit tests - public LambdaEmbeddedServerFactory(LambdaEmbeddedServer server) { - LambdaEmbeddedServerFactory.embeddedServer = server; - } - - - //------------------------------------------------------------- - // Implementation - EmbeddedServerFactory - //------------------------------------------------------------- - - - @Override - public EmbeddedServer create(Routes routes, StaticFilesConfiguration staticFilesConfiguration, ExceptionMapper exceptionMapper, boolean multipleHandlers) { - Timer.start("SPARK_SERVER_FACTORY_CREATE"); - if (embeddedServer == null) { - LambdaEmbeddedServerFactory.embeddedServer = new LambdaEmbeddedServer(routes, staticFilesConfiguration, exceptionMapper, multipleHandlers); - } - Timer.stop("SPARK_SERVER_FACTORY_CREATE"); - return embeddedServer; - } - - - //------------------------------------------------------------- - // Methods - Getter/Setter - //------------------------------------------------------------- - - public LambdaEmbeddedServer getServerInstance() { - return embeddedServer; - } -} diff --git a/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/HelloWorldSparkStreamTest.java b/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/HelloWorldSparkStreamTest.java deleted file mode 100644 index 33bc19f1d..000000000 --- a/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/HelloWorldSparkStreamTest.java +++ /dev/null @@ -1,160 +0,0 @@ -package com.amazonaws.serverless.proxy.spark; - - -import com.amazonaws.serverless.exceptions.ContainerInitializationException; -import com.amazonaws.serverless.proxy.internal.LambdaContainerHandler; -import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; -import com.amazonaws.serverless.proxy.internal.testutils.MockLambdaContext; -import com.amazonaws.serverless.proxy.model.AwsProxyRequest; -import com.amazonaws.serverless.proxy.model.AwsProxyResponse; - -import com.amazonaws.serverless.proxy.model.HttpApiV2ProxyRequest; -import com.amazonaws.services.lambda.runtime.Context; -import org.junit.jupiter.api.AfterAll; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.MethodSource; -import spark.Spark; - -import jakarta.servlet.http.Cookie; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.util.Arrays; -import java.util.Collection; - -import static org.junit.jupiter.api.Assertions.*; -import static spark.Spark.get; - -// This class doesn't actually test Spark. Instead it tests the proxyStream method of the -// LambdaContainerHandler object. We use the Spark implementation for this because it's the -// fastest to start -public class HelloWorldSparkStreamTest { - private static final String CUSTOM_HEADER_KEY = "X-Custom-Header"; - private static final String CUSTOM_HEADER_VALUE = "My Header Value"; - private static final String BODY_TEXT_RESPONSE = "Hello World"; - - private static final String COOKIE_NAME = "MyCookie"; - private static final String COOKIE_VALUE = "CookieValue"; - private static final String COOKIE_DOMAIN = "mydomain.com"; - private static final String COOKIE_PATH = "/"; - - private static SparkLambdaContainerHandler handler; - private static SparkLambdaContainerHandler httpApiHandler; - - private String type; - - public void initHelloWorldSparkStreamTest(String reqType) { - type = reqType; - try { - switch (type) { - case "API_GW": - case "ALB": - handler = SparkLambdaContainerHandler.getAwsProxyHandler(); - break; - case "HTTP_API": - httpApiHandler = SparkLambdaContainerHandler.getHttpApiV2ProxyHandler(); - break; - default: - throw new RuntimeException("Unknown request type: " + type); - } - - configureRoutes(); - Spark.awaitInitialization(); - } catch (RuntimeException | ContainerInitializationException e) { - e.printStackTrace(); - fail(); - } - } - - public static Collection data() { - return Arrays.asList(new Object[]{"API_GW", "ALB", "HTTP_API"}); - } - - private AwsProxyRequestBuilder getRequestBuilder() { - return new AwsProxyRequestBuilder(); - } - - private ByteArrayOutputStream executeRequest(AwsProxyRequestBuilder requestBuilder, Context lambdaContext) throws IOException { - ByteArrayOutputStream os = new ByteArrayOutputStream(); - switch (type) { - case "API_GW": - handler.proxyStream(requestBuilder.buildStream(), os, lambdaContext); - break; - case "ALB": - handler.proxyStream(requestBuilder.alb().buildStream(), os, lambdaContext); - break; - case "HTTP_API": - httpApiHandler.proxyStream(requestBuilder.toHttpApiV2RequestStream(), os, lambdaContext); - break; - default: - throw new RuntimeException("Unknown request type: " + type); - } - return os; - } - - @AfterAll - public static void stopSpark() { - Spark.stop(); - } - - @MethodSource("data") - @ParameterizedTest - void helloRequest_basicStream_populatesOutputSuccessfully(String reqType) { - initHelloWorldSparkStreamTest(reqType); - try { - ByteArrayOutputStream outputStream = executeRequest(getRequestBuilder().method("GET").path("/hello"), new MockLambdaContext()); - AwsProxyResponse response = LambdaContainerHandler.getObjectMapper().readValue(outputStream.toByteArray(), AwsProxyResponse.class); - - assertEquals(200, response.getStatusCode()); - assertTrue(response.getMultiValueHeaders().containsKey(CUSTOM_HEADER_KEY)); - assertEquals(CUSTOM_HEADER_VALUE, response.getMultiValueHeaders().getFirst(CUSTOM_HEADER_KEY)); - assertEquals(BODY_TEXT_RESPONSE, response.getBody()); - } catch (IOException e) { - e.printStackTrace(); - fail(); - } - } - - @MethodSource("data") - @ParameterizedTest - void nullPathRequest_doesntFail_expectA404(String reqType) { - initHelloWorldSparkStreamTest(reqType); - try { - ByteArrayOutputStream outputStream = executeRequest(getRequestBuilder().method("GET").path(null), new MockLambdaContext()); - AwsProxyResponse response = LambdaContainerHandler.getObjectMapper().readValue(outputStream.toByteArray(), AwsProxyResponse.class); - - assertEquals(404, response.getStatusCode()); - } catch (IOException e) { - e.printStackTrace(); - fail(); - } - } - - private static void configureRoutes() { - get("/hello", (req, res) -> { - res.status(200); - res.header(CUSTOM_HEADER_KEY, CUSTOM_HEADER_VALUE); - return BODY_TEXT_RESPONSE; - }); - - get("/cookie", (req, res) -> { - Cookie testCookie = new Cookie(COOKIE_NAME, COOKIE_VALUE); - testCookie.setDomain(COOKIE_DOMAIN); - testCookie.setPath(COOKIE_PATH); - res.raw().addCookie(testCookie); - return BODY_TEXT_RESPONSE; - }); - - get("/multi-cookie", (req, res) -> { - Cookie testCookie = new Cookie(COOKIE_NAME, COOKIE_VALUE); - testCookie.setDomain(COOKIE_DOMAIN); - testCookie.setPath(COOKIE_PATH); - Cookie testCookie2 = new Cookie(COOKIE_NAME + "2", COOKIE_VALUE + "2"); - testCookie2.setDomain(COOKIE_DOMAIN); - testCookie2.setPath(COOKIE_PATH); - res.raw().addCookie(testCookie); - res.raw().addCookie(testCookie2); - return BODY_TEXT_RESPONSE; - }); - } -} diff --git a/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/HelloWorldSparkTest.java b/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/HelloWorldSparkTest.java deleted file mode 100644 index b687784ec..000000000 --- a/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/HelloWorldSparkTest.java +++ /dev/null @@ -1,176 +0,0 @@ -package com.amazonaws.serverless.proxy.spark; - - -import com.amazonaws.serverless.exceptions.ContainerInitializationException; -import com.amazonaws.serverless.proxy.model.AwsProxyRequest; -import com.amazonaws.serverless.proxy.model.AwsProxyResponse; -import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; -import com.amazonaws.serverless.proxy.internal.testutils.MockLambdaContext; - -import org.junit.jupiter.api.AfterAll; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.MethodSource; -import spark.Spark; - -import jakarta.servlet.http.Cookie; -import jakarta.ws.rs.core.HttpHeaders; - -import java.util.Arrays; -import java.util.Collection; - -import static org.junit.jupiter.api.Assertions.*; -import static spark.Spark.get; - - -public class HelloWorldSparkTest { - private static final String CUSTOM_HEADER_KEY = "X-Custom-Header"; - private static final String CUSTOM_HEADER_VALUE = "My Header Value"; - private static final String BODY_TEXT_RESPONSE = "Hello World"; - - private static final String COOKIE_NAME = "MyCookie"; - private static final String COOKIE_VALUE = "CookieValue"; - private static final String COOKIE_DOMAIN = "mydomain.com"; - private static final String COOKIE_PATH = "/"; - - private static final String READ_COOKIE_NAME = "customCookie"; - - private static SparkLambdaContainerHandler handler; - - private boolean isAlb; - - public void initHelloWorldSparkTest(boolean alb) { - isAlb = alb; - } - - public static Collection data() { - return Arrays.asList(new Object[]{false, true}); - } - - private AwsProxyRequestBuilder getRequestBuilder() { - AwsProxyRequestBuilder builder = new AwsProxyRequestBuilder(); - if (isAlb) builder.alb(); - - return builder; - } - - @BeforeAll - public static void initializeServer() { - try { - handler = SparkLambdaContainerHandler.getAwsProxyHandler(); - - configureRoutes(); - Spark.awaitInitialization(); - } catch (RuntimeException | ContainerInitializationException e) { - e.printStackTrace(); - fail(); - } - } - - @AfterAll - public static void stopSpark() { - Spark.stop(); - } - - @MethodSource("data") - @ParameterizedTest - void basicServer_handleRequest_emptyFilters(boolean alb) { - initHelloWorldSparkTest(alb); - AwsProxyRequest req = getRequestBuilder().method("GET").path("/hello").build(); - AwsProxyResponse response = handler.proxy(req, new MockLambdaContext()); - - assertEquals(200, response.getStatusCode()); - assertTrue(response.getMultiValueHeaders().containsKey(CUSTOM_HEADER_KEY)); - assertEquals(CUSTOM_HEADER_VALUE, response.getMultiValueHeaders().getFirst(CUSTOM_HEADER_KEY)); - assertEquals(BODY_TEXT_RESPONSE, response.getBody()); - } - - @MethodSource("data") - @ParameterizedTest - void addCookie_setCookieOnResponse_validCustomCookie(boolean alb) { - initHelloWorldSparkTest(alb); - AwsProxyRequest req = getRequestBuilder().method("GET").path("/cookie").build(); - AwsProxyResponse response = handler.proxy(req, new MockLambdaContext()); - - assertEquals(200, response.getStatusCode()); - assertTrue(response.getMultiValueHeaders().containsKey(HttpHeaders.SET_COOKIE)); - assertTrue(response.getMultiValueHeaders().getFirst(HttpHeaders.SET_COOKIE).contains(COOKIE_NAME + "=" + COOKIE_VALUE)); - assertTrue(response.getMultiValueHeaders().getFirst(HttpHeaders.SET_COOKIE).contains(COOKIE_DOMAIN)); - assertTrue(response.getMultiValueHeaders().getFirst(HttpHeaders.SET_COOKIE).contains(COOKIE_PATH)); - } - - @MethodSource("data") - @ParameterizedTest - void multiCookie_setCookieOnResponse_singleHeaderWithMultipleValues(boolean alb) { - initHelloWorldSparkTest(alb); - AwsProxyRequest req = getRequestBuilder().method("GET").path("/multi-cookie").build(); - AwsProxyResponse response = handler.proxy(req, new MockLambdaContext()); - - assertEquals(200, response.getStatusCode()); - assertTrue(response.getMultiValueHeaders().containsKey(HttpHeaders.SET_COOKIE)); - - assertEquals(2, response.getMultiValueHeaders().get(HttpHeaders.SET_COOKIE).size()); - assertTrue(response.getMultiValueHeaders().getFirst(HttpHeaders.SET_COOKIE).contains(COOKIE_NAME + "=" + COOKIE_VALUE)); - assertTrue(response.getMultiValueHeaders().get(HttpHeaders.SET_COOKIE).get(1).contains(COOKIE_NAME + "2=" + COOKIE_VALUE + "2")); - assertTrue(response.getMultiValueHeaders().getFirst(HttpHeaders.SET_COOKIE).contains(COOKIE_DOMAIN)); - assertTrue(response.getMultiValueHeaders().getFirst(HttpHeaders.SET_COOKIE).contains(COOKIE_PATH)); - } - - @MethodSource("data") - @ParameterizedTest - void rootResource_basicRequest_expectSuccess(boolean alb) { - initHelloWorldSparkTest(alb); - AwsProxyRequest req = getRequestBuilder().method("GET").path("/").build(); - AwsProxyResponse response = handler.proxy(req, new MockLambdaContext()); - - assertEquals(200, response.getStatusCode()); - assertTrue(response.getMultiValueHeaders().containsKey(CUSTOM_HEADER_KEY)); - assertEquals(CUSTOM_HEADER_VALUE, response.getMultiValueHeaders().getFirst(CUSTOM_HEADER_KEY)); - assertEquals(BODY_TEXT_RESPONSE, response.getBody()); - } - - @MethodSource("data") - @ParameterizedTest - void readCookie_customDomainName_expectValidCookie(boolean alb) { - initHelloWorldSparkTest(alb); - AwsProxyRequest req = getRequestBuilder().method("GET").path("/cookie-read").cookie(READ_COOKIE_NAME, "test").build(); - AwsProxyResponse response = handler.proxy(req, new MockLambdaContext()); - assertEquals("test", response.getBody()); - } - - private static void configureRoutes() { - get("/", (req, res) -> { - res.status(200); - res.header(CUSTOM_HEADER_KEY, CUSTOM_HEADER_VALUE); - return BODY_TEXT_RESPONSE; - }); - - get("/hello", (req, res) -> { - res.status(200); - res.header(CUSTOM_HEADER_KEY, CUSTOM_HEADER_VALUE); - return BODY_TEXT_RESPONSE; - }); - - get("/cookie", (req, res) -> { - Cookie testCookie = new Cookie(COOKIE_NAME, COOKIE_VALUE); - testCookie.setDomain(COOKIE_DOMAIN); - testCookie.setPath(COOKIE_PATH); - res.raw().addCookie(testCookie); - return BODY_TEXT_RESPONSE; - }); - - get("/multi-cookie", (req, res) -> { - Cookie testCookie = new Cookie(COOKIE_NAME, COOKIE_VALUE); - testCookie.setDomain(COOKIE_DOMAIN); - testCookie.setPath(COOKIE_PATH); - Cookie testCookie2 = new Cookie(COOKIE_NAME + "2", COOKIE_VALUE + "2"); - testCookie2.setDomain(COOKIE_DOMAIN); - testCookie2.setPath(COOKIE_PATH); - res.raw().addCookie(testCookie); - res.raw().addCookie(testCookie2); - return BODY_TEXT_RESPONSE; - }); - - get("/cookie-read", (req, res) -> req.cookie(READ_COOKIE_NAME)); - } -} diff --git a/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/InitExceptionHandlerTest.java b/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/InitExceptionHandlerTest.java deleted file mode 100644 index 92c84a49b..000000000 --- a/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/InitExceptionHandlerTest.java +++ /dev/null @@ -1,76 +0,0 @@ -package com.amazonaws.serverless.proxy.spark; - - -import com.amazonaws.serverless.exceptions.ContainerInitializationException; -import com.amazonaws.serverless.proxy.AwsProxyExceptionHandler; -import com.amazonaws.serverless.proxy.AwsProxySecurityContextWriter; -import com.amazonaws.serverless.proxy.internal.servlet.AwsProxyHttpServletRequestReader; -import com.amazonaws.serverless.proxy.internal.servlet.AwsProxyHttpServletResponseWriter; -import com.amazonaws.serverless.proxy.model.AwsProxyRequest; -import com.amazonaws.serverless.proxy.model.AwsProxyResponse; -import com.amazonaws.serverless.proxy.spark.embeddedserver.LambdaEmbeddedServer; -import com.amazonaws.serverless.proxy.spark.embeddedserver.LambdaEmbeddedServerFactory; - -import org.junit.jupiter.api.AfterAll; -import org.junit.jupiter.api.Test; -import spark.Spark; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.fail; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.reset; -import static org.mockito.Mockito.when; -import static spark.Spark.get; -import static spark.Spark.initExceptionHandler; - - -public class InitExceptionHandlerTest { - - private static final String TEST_EXCEPTION_MESSAGE = "test exception"; - private static LambdaEmbeddedServer embeddedServer = mock(LambdaEmbeddedServer.class); - - @Test - void initException_mockException_expectHandlerToRun() { - try { - - when(embeddedServer.ignite(anyString(), anyInt(), any(), anyInt(), anyInt(), anyInt())) - .thenThrow(new ContainerInitializationException(TEST_EXCEPTION_MESSAGE, null)); - LambdaEmbeddedServerFactory serverFactory = new LambdaEmbeddedServerFactory(embeddedServer); - new SparkLambdaContainerHandler<>(AwsProxyRequest.class, - AwsProxyResponse.class, - new AwsProxyHttpServletRequestReader(), - new AwsProxyHttpServletResponseWriter(), - new AwsProxySecurityContextWriter(), - new AwsProxyExceptionHandler(), - serverFactory); - - configureRoutes(); - Spark.awaitInitialization(); - } catch (Exception e) { - e.printStackTrace(); - fail("Error while mocking server"); - } - - } - - @AfterAll - public static void stopSpark() { - // un-mock the embedded server to avoid blocking other tests - reset(embeddedServer); - // reset the static variable in the factory so that it will be instantiated again next time - new LambdaEmbeddedServerFactory(null); - Spark.stop(); - } - - private static void configureRoutes() { - initExceptionHandler((e) -> { - assertEquals(TEST_EXCEPTION_MESSAGE, e.getLocalizedMessage()); - }); - - get("/test-route", (req, res) -> { - res.status(200); - return "test"; - }); - } -} diff --git a/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/SparkLambdaContainerHandlerTest.java b/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/SparkLambdaContainerHandlerTest.java deleted file mode 100644 index a5c5e824b..000000000 --- a/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/SparkLambdaContainerHandlerTest.java +++ /dev/null @@ -1,124 +0,0 @@ -package com.amazonaws.serverless.proxy.spark; - - -import com.amazonaws.serverless.exceptions.ContainerInitializationException; -import com.amazonaws.serverless.proxy.model.AwsProxyRequest; -import com.amazonaws.serverless.proxy.model.AwsProxyResponse; -import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; -import com.amazonaws.serverless.proxy.internal.testutils.MockLambdaContext; -import com.amazonaws.serverless.proxy.spark.filter.CustomHeaderFilter; -import com.amazonaws.serverless.proxy.spark.filter.UnauthenticatedFilter; - -import org.junit.jupiter.api.AfterAll; -import org.junit.jupiter.api.Test; -import spark.Spark; - -import jakarta.servlet.DispatcherType; -import jakarta.servlet.FilterRegistration; - -import java.util.EnumSet; - -import static org.junit.jupiter.api.Assertions.*; -import static spark.Spark.get; - - -public class SparkLambdaContainerHandlerTest { - private static final String RESPONSE_BODY_TEXT = "hello"; - - @Test - void filters_onStartupMethod_executeFilters() { - - SparkLambdaContainerHandler handler = null; - try { - handler = SparkLambdaContainerHandler.getAwsProxyHandler(); - } catch (ContainerInitializationException e) { - e.printStackTrace(); - fail(); - } - - handler.onStartup(c -> { - if (c == null) { - fail(); - } - FilterRegistration.Dynamic registration = c.addFilter("CustomHeaderFilter", CustomHeaderFilter.class); - // update the registration to map to a path - registration.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), true, "/*"); - // servlet name mappings are disabled and will throw an exception - }); - - configureRoutes(); - - Spark.awaitInitialization(); - - AwsProxyRequest req = new AwsProxyRequestBuilder().method("GET").path("/header-filter").build(); - AwsProxyResponse response = handler.proxy(req, new MockLambdaContext()); - - assertNotNull(response); - assertEquals(200, response.getStatusCode()); - assertTrue(response.getMultiValueHeaders().containsKey(CustomHeaderFilter.HEADER_NAME)); - assertEquals(CustomHeaderFilter.HEADER_VALUE, response.getMultiValueHeaders().getFirst(CustomHeaderFilter.HEADER_NAME)); - assertEquals(RESPONSE_BODY_TEXT, response.getBody()); - - } - - @Test - void filters_unauthenticatedFilter_stopRequestProcessing() { - - SparkLambdaContainerHandler handler = null; - try { - handler = SparkLambdaContainerHandler.getAwsProxyHandler(); - } catch (ContainerInitializationException e) { - e.printStackTrace(); - fail(); - } - - handler.onStartup(c -> { - if (c == null) { - fail(); - } - FilterRegistration.Dynamic registration = c.addFilter("UnauthenticatedFilter", UnauthenticatedFilter.class); - // update the registration to map to a path - registration.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), true, "/unauth"); - // servlet name mappings are disabled and will throw an exception - }); - - configureRoutes(); - Spark.awaitInitialization(); - - // first we test without the custom header, we expect request processing to complete - // successfully - AwsProxyRequest req = new AwsProxyRequestBuilder().method("GET").path("/unauth").build(); - AwsProxyResponse response = handler.proxy(req, new MockLambdaContext()); - - assertNotNull(response); - assertEquals(200, response.getStatusCode()); - assertEquals(RESPONSE_BODY_TEXT, response.getBody()); - - // now we test with the custom header, this should stop request processing in the - // filter and return an unauthenticated response - AwsProxyRequest unauthReq = new AwsProxyRequestBuilder().method("GET").path("/unauth") - .header(UnauthenticatedFilter.HEADER_NAME, "1").build(); - AwsProxyResponse unauthResp = handler.proxy(unauthReq, new MockLambdaContext()); - - assertNotNull(unauthResp); - assertEquals(UnauthenticatedFilter.RESPONSE_STATUS, unauthResp.getStatusCode()); - assertEquals("", unauthResp.getBody()); - } - - @AfterAll - public static void stopSpark() { - Spark.stop(); - } - - private static void configureRoutes() { - get("/header-filter", (req, res) -> { - res.status(200); - return RESPONSE_BODY_TEXT; - }); - - get("/unauth", (req, res) -> { - res.status(200); - return RESPONSE_BODY_TEXT; - }); - } -} diff --git a/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/embeddedserver/LambdaEmbeddedServerTest.java b/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/embeddedserver/LambdaEmbeddedServerTest.java deleted file mode 100644 index 8cb34eae1..000000000 --- a/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/embeddedserver/LambdaEmbeddedServerTest.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.amazonaws.serverless.proxy.spark.embeddedserver; - - -import org.junit.jupiter.api.Test; - -import java.util.Optional; - -import static org.junit.jupiter.api.Assertions.fail; - - -public class LambdaEmbeddedServerTest { - private static LambdaEmbeddedServer server = new LambdaEmbeddedServer(null, null, null, false); - - @Test - void webSocket_configureWebSocket_noException() { - try { - server.configureWebSockets(null, Optional.of(0L)); - } catch (Exception e) { - e.printStackTrace(); - fail(); - } - } -} diff --git a/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/filter/CustomHeaderFilter.java b/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/filter/CustomHeaderFilter.java deleted file mode 100644 index 8f4bc99ac..000000000 --- a/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/filter/CustomHeaderFilter.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.amazonaws.serverless.proxy.spark.filter; - - -import jakarta.servlet.Filter; -import jakarta.servlet.FilterChain; -import jakarta.servlet.FilterConfig; -import jakarta.servlet.ServletException; -import jakarta.servlet.ServletRequest; -import jakarta.servlet.ServletResponse; -import jakarta.servlet.http.HttpServletResponse; - -import java.io.IOException; - - -public class CustomHeaderFilter implements Filter { - public static final String HEADER_NAME = "X-Filter-Header"; - public static final String HEADER_VALUE = "CustomHeaderFilter"; - - @Override - public void init(FilterConfig filterConfig) throws ServletException { - - } - - @Override - public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { - HttpServletResponse resp = (HttpServletResponse)servletResponse; - resp.addHeader(HEADER_NAME, HEADER_VALUE); - - filterChain.doFilter(servletRequest, servletResponse); - } - - - @Override - public void destroy() { - - } -} \ No newline at end of file diff --git a/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/filter/UnauthenticatedFilter.java b/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/filter/UnauthenticatedFilter.java deleted file mode 100644 index efa41a2d3..000000000 --- a/aws-serverless-java-container-spark/src/test/java/com/amazonaws/serverless/proxy/spark/filter/UnauthenticatedFilter.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.amazonaws.serverless.proxy.spark.filter; - - -import jakarta.servlet.Filter; -import jakarta.servlet.FilterChain; -import jakarta.servlet.FilterConfig; -import jakarta.servlet.ServletException; -import jakarta.servlet.ServletRequest; -import jakarta.servlet.ServletResponse; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; - -import java.io.IOException; - - -public class UnauthenticatedFilter implements Filter { - public static final String HEADER_NAME = "X-Unauthenticated-Response"; - public static final int RESPONSE_STATUS = 401; - - @Override - public void init(FilterConfig filterConfig) - throws ServletException { - - } - - - @Override - public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) - throws IOException, ServletException { - if (((HttpServletRequest)servletRequest).getHeader(HEADER_NAME) != null) { - ((HttpServletResponse) servletResponse).setStatus(401); - return; - } - filterChain.doFilter(servletRequest, servletResponse); - } - - - @Override - public void destroy() { - - } -} diff --git a/aws-serverless-spark-archetype/pom.xml b/aws-serverless-spark-archetype/pom.xml deleted file mode 100644 index d0ce113fd..000000000 --- a/aws-serverless-spark-archetype/pom.xml +++ /dev/null @@ -1,81 +0,0 @@ - - 4.0.0 - - - com.amazonaws.serverless - aws-serverless-java-container - 2.0.0-SNAPSHOT - - - com.amazonaws.serverless.archetypes - aws-serverless-spark-archetype - 2.0.0-SNAPSHOT - maven-archetype - - - https://github.com/aws/serverless-java-container.git - HEAD - - - - - The Apache Software License, Version 2.0 - http://www.apache.org/licenses/LICENSE-2.0.txt - repo - - - - - - - src/main/resources - true - - archetype-resources/pom.xml - archetype-resources/README.md - - - - src/main/resources - false - - archetype-resources/pom.xml - - - - - - - org.apache.maven.archetype - archetype-packaging - 3.0.1 - - - - - - - org.apache.maven.plugins - maven-resources-plugin - 3.1.0 - - \ - - - - - org.apache.maven.plugins - maven-archetype-plugin - 3.0.1 - - - - integration-test - - - - - - - - diff --git a/aws-serverless-spark-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml b/aws-serverless-spark-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml deleted file mode 100644 index 2ea9dca13..000000000 --- a/aws-serverless-spark-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - src/main/java - - **/*.java - - - - src/test/java - - **/*.java - - - - src/assembly - - * - - - - - - template.yml - README.md - build.gradle - - - - \ No newline at end of file diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/README.md b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/README.md deleted file mode 100644 index 311c40aee..000000000 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/README.md +++ /dev/null @@ -1,99 +0,0 @@ -#set($resourceName = $artifactId) -#macro(replaceChar $originalName, $char) - #if($originalName.contains($char)) - #set($tokens = $originalName.split($char)) - #set($newResourceName = "") - #foreach($token in $tokens) - #set($newResourceName = $newResourceName + $token.substring(0,1).toUpperCase() + $token.substring(1).toLowerCase()) - #end - ${newResourceName} - #else - #set($newResourceName = $originalName.substring(0,1).toUpperCase() + $originalName.substring(1)) - ${newResourceName} - #end -#end -#set($resourceName = "#replaceChar($resourceName, '-')") -#set($resourceName = "#replaceChar($resourceName, '.')") -#set($resourceName = $resourceName.replaceAll("\n", "").trim()) -# \${artifactId} serverless API -The \${artifactId} project, created with [`aws-serverless-java-container`](https://github.com/aws/serverless-java-container). - -The starter project defines a simple `/ping` resource that can accept `GET` requests with its tests. - -The project folder also includes a `template.yml` file. You can use this [SAM](https://github.com/awslabs/serverless-application-model) file to deploy the project to AWS Lambda and Amazon API Gateway or test in local with the [SAM CLI](https://github.com/awslabs/aws-sam-cli). - -#[[##]]# 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/) - -#[[##]]# Building the project -You can use the SAM CLI to quickly build the project -```bash -$ mvn archetype:generate -DartifactId=\${artifactId} -DarchetypeGroupId=com.amazonaws.serverless.archetypes -DarchetypeArtifactId=aws-serverless-jersey-archetype -DarchetypeVersion=${project.version} -DgroupId=\${groupId} -Dversion=\${version} -Dinteractive=false -$ cd \${artifactId} -$ sam build -Building resource '\${resourceName}Function' -Running JavaGradleWorkflow:GradleBuild -Running JavaGradleWorkflow:CopyArtifacts - -Build Succeeded - -Built Artifacts : .aws-sam/build -Built Template : .aws-sam/build/template.yaml - -Commands you can use next -========================= -[*] Invoke Function: sam local invoke -[*] Deploy: sam deploy --guided -``` - -#[[##]]# Testing locally with the SAM CLI - -From the project root folder - where the `template.yml` file is located - start the API with the SAM CLI. - -```bash -$ sam local start-api - -... -Mounting ${groupId}.StreamLambdaHandler::handleRequest (java11) at http://127.0.0.1:3000/{proxy+} [OPTIONS GET HEAD POST PUT DELETE PATCH] -... -``` - -Using a new shell, you can send a test ping request to your API: - -```bash -$ curl -s http://127.0.0.1:3000/ping | python -m json.tool - -{ - "pong": "Hello, World!" -} -``` - -#[[##]]# Deploying to AWS -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 -------------------------------------------------------------------------------------------------------------- -\${resourceName}Api - URL for application https://xxxxxxxxxx.execute-api.us-west-2.amazonaws.com/Prod/pets -------------------------------------------------------------------------------------------------------------- -``` - -Copy the `OutputValue` into a browser or use curl to test your first request: - -```bash -$ curl -s https://xxxxxxx.execute-api.us-west-2.amazonaws.com/Prod/ping | python -m json.tool - -{ - "pong": "Hello, World!" -} -``` diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle deleted file mode 100644 index 781e31234..000000000 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/build.gradle +++ /dev/null @@ -1,40 +0,0 @@ -apply plugin: 'java' - -repositories { - mavenLocal() - mavenCentral() -} - -dependencies { - implementation ( - 'com.sparkjava:spark-core:2.9.4', - 'com.amazonaws.serverless:aws-serverless-java-container-spark:[1.0,)', - 'com.fasterxml.jackson.core:jackson-databind:2.16.1', - ) - - testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") - testImplementation("org.apache.httpcomponents.client5:httpclient5:5.2.1") - testImplementation(platform("org.junit:junit-bom:5.10.1")) - testImplementation("org.junit.jupiter:junit-jupiter") -} - -task buildZip(type: Zip) { - from compileJava - from processResources - into('lib') { - from(configurations.compileClasspath) { - exclude 'jetty-http*' - exclude 'jetty-client*' - exclude 'jetty-webapp*' - exclude 'jetty-xml*' - exclude 'jetty-io*' - exclude 'websocket*' - } - } -} - -test { - useJUnitPlatform() -} - -build.dependsOn buildZip diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml deleted file mode 100644 index 1151dd29d..000000000 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/pom.xml +++ /dev/null @@ -1,186 +0,0 @@ -#set($dollar = '$') - - - 4.0.0 - - \${groupId} - \${artifactId} - \${version} - jar - - Serverless Spark API - https://github.com/aws/serverless-java-container - - - 1.8 - 1.8 - 2.16.1 - 2.9.4 - 5.10.1 - - - - - com.amazonaws.serverless - aws-serverless-java-container-spark - ${project.version} - - - com.amazonaws.serverless - aws-serverless-java-container-core - ${project.version} - tests - test-jar - test - - - org.apache.httpcomponents.client5 - httpclient5 - 5.2.1 - test - - - - com.sparkjava - spark-core - \${spark.version} - - - - com.fasterxml.jackson.core - jackson-databind - \${jackson.version} - - - - org.junit.jupiter - junit-jupiter - test - - - - - - - org.junit - junit-bom - ${junit.version} - import - pom - - - - - - - shaded-jar - - - - org.apache.maven.plugins - maven-shade-plugin - 3.2.4 - - false - - - - package - - shade - - - - - - org.eclipse.jetty.websocket:* - org.eclipse.jetty:jetty-http - org.eclipse.jetty:jetty-client - org.eclipse.jetty:jetty-webapp - org.eclipse.jetty:jetty-xml - org.eclipse.jetty:jetty-io - - - - - - - - - - - assembly-zip - - true - - - - - - org.apache.maven.plugins - maven-jar-plugin - 3.2.0 - - - default-jar - none - - - - - org.apache.maven.plugins - maven-install-plugin - 3.1.1 - - true - - - - - org.apache.maven.plugins - maven-dependency-plugin - 3.6.1 - - - copy-dependencies - package - - copy-dependencies - - - ${dollar}{project.build.directory}${dollar}{file.separator}lib - runtime - - - - - - org.apache.maven.plugins - maven-assembly-plugin - 3.3.0 - - - zip-assembly - package - - single - - - ${dollar}{project.artifactId}-${dollar}{project.version} - - src${dollar}{file.separator}assembly${dollar}{file.separator}bin.xml - - false - - - - - - - - - diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/src/assembly/bin.xml b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/src/assembly/bin.xml deleted file mode 100644 index fcb935036..000000000 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/src/assembly/bin.xml +++ /dev/null @@ -1,32 +0,0 @@ - - lambda-package - - zip - - false - - - - ${project.build.directory}${file.separator}lib - - websocket* - jetty-http* - jetty-client* - jetty-webapp* - jetty-xml* - jetty-io* - - lib - - - - ${project.build.directory}${file.separator}classes - - ** - - ${file.separator} - - - \ No newline at end of file diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/src/main/java/SparkResources.java b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/src/main/java/SparkResources.java deleted file mode 100644 index bc55eb43d..000000000 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/src/main/java/SparkResources.java +++ /dev/null @@ -1,25 +0,0 @@ -package ${groupId}; - - -import java.util.HashMap; -import java.util.Map; - -import static spark.Spark.before; -import static spark.Spark.get; - -import ${groupId}.util.JsonTransformer; - - -public class SparkResources { - - public static void defineResources() { - before((request, response) -> response.type("application/json")); - - get("/ping", (req, res) -> { - Map pong = new HashMap<>(); - pong.put("pong", "Hello, World!"); - res.status(200); - return pong; - }, new JsonTransformer()); - } -} \ No newline at end of file diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/src/main/java/StreamLambdaHandler.java b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/src/main/java/StreamLambdaHandler.java deleted file mode 100644 index fdd1409a5..000000000 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/src/main/java/StreamLambdaHandler.java +++ /dev/null @@ -1,37 +0,0 @@ -package ${groupId}; - - -import com.amazonaws.serverless.exceptions.ContainerInitializationException; -import com.amazonaws.serverless.proxy.model.AwsProxyRequest; -import com.amazonaws.serverless.proxy.model.AwsProxyResponse; -import com.amazonaws.serverless.proxy.spark.SparkLambdaContainerHandler; -import com.amazonaws.services.lambda.runtime.Context; -import com.amazonaws.services.lambda.runtime.RequestStreamHandler; - -import spark.Spark; - -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; - - -public class StreamLambdaHandler implements RequestStreamHandler { - private static SparkLambdaContainerHandler handler; - static { - try { - handler = SparkLambdaContainerHandler.getAwsProxyHandler(); - SparkResources.defineResources(); - Spark.awaitInitialization(); - } catch (ContainerInitializationException e) { - // if we fail here. We re-throw the exception to force another cold start - e.printStackTrace(); - throw new RuntimeException("Could not initialize Spark container", e); - } - } - - @Override - public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) - throws IOException { - handler.proxyStream(inputStream, outputStream, context); - } -} diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/src/main/java/util/JsonTransformer.java b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/src/main/java/util/JsonTransformer.java deleted file mode 100644 index 8df085ea1..000000000 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/src/main/java/util/JsonTransformer.java +++ /dev/null @@ -1,24 +0,0 @@ -package ${groupId}.util; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import spark.ResponseTransformer; - -public class JsonTransformer implements ResponseTransformer { - - private ObjectMapper mapper = new ObjectMapper(); - private Logger log = LoggerFactory.getLogger(JsonTransformer.class); - - @Override - public String render(Object model) { - try { - return mapper.writeValueAsString(model); - } catch (JsonProcessingException e) { - log.error("Cannot serialize object", e); - return null; - } - } - -} \ No newline at end of file diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java deleted file mode 100644 index 26d5360bf..000000000 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java +++ /dev/null @@ -1,89 +0,0 @@ -package ${groupId}; - - -import com.amazonaws.serverless.proxy.internal.LambdaContainerHandler; -import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; -import com.amazonaws.serverless.proxy.internal.testutils.MockLambdaContext; -import com.amazonaws.serverless.proxy.model.AwsProxyResponse; -import com.amazonaws.services.lambda.runtime.Context; - -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; - -import jakarta.ws.rs.HttpMethod; -import jakarta.ws.rs.core.HttpHeaders; -import jakarta.ws.rs.core.MediaType; -import jakarta.ws.rs.core.Response; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; - -import static org.junit.jupiter.api.Assertions.*; - -public class StreamLambdaHandlerTest { - - private static StreamLambdaHandler handler; - private static Context lambdaContext; - - @BeforeAll - public static void setUp() { - handler = new StreamLambdaHandler(); - lambdaContext = new MockLambdaContext(); - } - - @Test - public void ping_streamRequest_respondsWithHello() { - InputStream requestStream = new AwsProxyRequestBuilder("/ping", HttpMethod.GET) - .header(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON) - .buildStream(); - ByteArrayOutputStream responseStream = new ByteArrayOutputStream(); - - handle(requestStream, responseStream); - - AwsProxyResponse response = readResponse(responseStream); - assertNotNull(response); - assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode()); - - assertFalse(response.isBase64Encoded()); - - assertTrue(response.getBody().contains("pong")); - assertTrue(response.getBody().contains("Hello, World!")); - - assertTrue(response.getMultiValueHeaders().containsKey(HttpHeaders.CONTENT_TYPE)); - assertTrue(response.getMultiValueHeaders().getFirst(HttpHeaders.CONTENT_TYPE).startsWith(MediaType.APPLICATION_JSON)); - } - - @Test - public void invalidResource_streamRequest_responds404() { - InputStream requestStream = new AwsProxyRequestBuilder("/pong", HttpMethod.GET) - .header(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON) - .buildStream(); - ByteArrayOutputStream responseStream = new ByteArrayOutputStream(); - - handle(requestStream, responseStream); - - AwsProxyResponse response = readResponse(responseStream); - assertNotNull(response); - assertEquals(Response.Status.NOT_FOUND.getStatusCode(), response.getStatusCode()); - } - - private void handle(InputStream is, ByteArrayOutputStream os) { - try { - handler.handleRequest(is, os, lambdaContext); - } catch (IOException e) { - e.printStackTrace(); - fail(e.getMessage()); - } - } - - private AwsProxyResponse readResponse(ByteArrayOutputStream responseStream) { - try { - return LambdaContainerHandler.getObjectMapper().readValue(responseStream.toByteArray(), AwsProxyResponse.class); - } catch (IOException e) { - e.printStackTrace(); - fail("Error while parsing response: " + e.getMessage()); - } - return null; - } -} diff --git a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/template.yml b/aws-serverless-spark-archetype/src/main/resources/archetype-resources/template.yml deleted file mode 100644 index d45c9923b..000000000 --- a/aws-serverless-spark-archetype/src/main/resources/archetype-resources/template.yml +++ /dev/null @@ -1,52 +0,0 @@ -#set($resourceName = $artifactId) -#macro(replaceChar $originalName, $char) - #if($originalName.contains($char)) - #set($tokens = $originalName.split($char)) - #set($newResourceName = "") - #foreach($token in $tokens) - #set($newResourceName = $newResourceName + $token.substring(0,1).toUpperCase() + $token.substring(1).toLowerCase()) - #end - ${newResourceName} - #else - #set($newResourceName = $originalName.substring(0,1).toUpperCase() + $originalName.substring(1)) - ${newResourceName} - #end -#end -#set($resourceName = "#replaceChar($resourceName, '-')") -#set($resourceName = "#replaceChar($resourceName, '.')") -#set($resourceName = $resourceName.replaceAll("\n", "").trim()) -#macro(regionVar) - AWS::Region -#end -#set($awsRegion = "#regionVar()") -#set($awsRegion = $awsRegion.replaceAll("\n", "").trim()) -AWSTemplateFormatVersion: '2010-09-09' -Transform: AWS::Serverless-2016-10-31 -Description: AWS Serverless Spark API - ${groupId}::${artifactId} -Globals: - Api: - EndpointConfiguration: REGIONAL - -Resources: - ${resourceName}Function: - Type: AWS::Serverless::Function - Properties: - Handler: ${groupId}.StreamLambdaHandler::handleRequest - Runtime: java11 - CodeUri: . - MemorySize: 512 - Policies: AWSLambdaBasicExecutionRole - Timeout: 15 - Events: - ProxyResource: - Type: Api - Properties: - Path: /{proxy+} - Method: any - -Outputs: - ${resourceName}Api: - Description: URL for application - Value: !Sub 'https://${ServerlessRestApi}.execute-api.${${awsRegion}}.amazonaws.com/Prod/ping' - Export: - Name: ${resourceName}Api diff --git a/aws-serverless-spark-archetype/src/test/resources/projects/base/archetype.properties b/aws-serverless-spark-archetype/src/test/resources/projects/base/archetype.properties deleted file mode 100644 index 33825ed03..000000000 --- a/aws-serverless-spark-archetype/src/test/resources/projects/base/archetype.properties +++ /dev/null @@ -1,3 +0,0 @@ -groupId=test.service -artifactId=spark-archetype-test -version=1.0-SNAPSHOT diff --git a/aws-serverless-spark-archetype/src/test/resources/projects/base/goal.txt b/aws-serverless-spark-archetype/src/test/resources/projects/base/goal.txt deleted file mode 100644 index 597acc768..000000000 --- a/aws-serverless-spark-archetype/src/test/resources/projects/base/goal.txt +++ /dev/null @@ -1 +0,0 @@ -package \ No newline at end of file diff --git a/samples/spark/pet-store/README.md b/samples/spark/pet-store/README.md deleted file mode 100644 index 2bfec99de..000000000 --- a/samples/spark/pet-store/README.md +++ /dev/null @@ -1,36 +0,0 @@ -# Serverless Spark example -A basic pet store written with the [Spark framework](http://sparkjava.com/). 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/samples/spark/pet-store/build.gradle b/samples/spark/pet-store/build.gradle deleted file mode 100644 index 9e37febd0..000000000 --- a/samples/spark/pet-store/build.gradle +++ /dev/null @@ -1,31 +0,0 @@ -apply plugin: 'java' - -repositories { - mavenLocal() - mavenCentral() -} - -dependencies { - implementation ( - 'com.sparkjava:spark-core:2.9.4', - 'com.amazonaws.serverless:aws-serverless-java-container-spark:[1.0,)', - 'com.fasterxml.jackson.core:jackson-databind:2.16.1', - ) -} - -task buildZip(type: Zip) { - from compileJava - from processResources - into('lib') { - from(configurations.compileClasspath) { - exclude 'jetty-http*' - exclude 'jetty-client*' - exclude 'jetty-webapp*' - exclude 'jetty-xml*' - exclude 'jetty-io*' - exclude 'websocket*' - } - } -} - -build.dependsOn buildZip diff --git a/samples/spark/pet-store/pom.xml b/samples/spark/pet-store/pom.xml deleted file mode 100644 index f1dee6372..000000000 --- a/samples/spark/pet-store/pom.xml +++ /dev/null @@ -1,164 +0,0 @@ - - - 4.0.0 - - com.amazonaws.serverless.sample - serverless-spark-example - 1.0-SNAPSHOT - Spark example for the aws-serverless-java-container library - Simple pet store written with the Spark framework - https://aws.amazon.com/lambda/ - - - https://github.com/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 - 2.16.1 - 2.9.1 - - - - - com.amazonaws.serverless - aws-serverless-java-container-spark - [1.6,) - - - - com.sparkjava - spark-core - ${spark.version} - - - - com.fasterxml.jackson.core - jackson-databind - ${jackson.version} - - - - - - shaded-jar - - - - org.apache.maven.plugins - maven-shade-plugin - 3.2.4 - - false - - - - package - - shade - - - - - - org.eclipse.jetty.websocket:* - org.eclipse.jetty:jetty-http - org.eclipse.jetty:jetty-client - org.eclipse.jetty:jetty-webapp - org.eclipse.jetty:jetty-xml - org.eclipse.jetty:jetty-io - - - - - - - - - - - assembly-zip - - true - - - - - - org.apache.maven.plugins - maven-jar-plugin - 3.2.0 - - - default-jar - none - - - - - org.apache.maven.plugins - maven-install-plugin - 3.1.1 - - true - - - - - org.apache.maven.plugins - maven-dependency-plugin - 3.6.1 - - - copy-dependencies - package - - copy-dependencies - - - ${project.build.directory}/lib - runtime - - - - - - org.apache.maven.plugins - maven-assembly-plugin - 3.6.0 - - - zip-assembly - package - - single - - - ${project.artifactId}-${project.version} - - src${file.separator}assembly${file.separator}bin.xml - - false - - - - - - - - - - diff --git a/samples/spark/pet-store/src/assembly/bin.xml b/samples/spark/pet-store/src/assembly/bin.xml deleted file mode 100644 index fcb935036..000000000 --- a/samples/spark/pet-store/src/assembly/bin.xml +++ /dev/null @@ -1,32 +0,0 @@ - - lambda-package - - zip - - false - - - - ${project.build.directory}${file.separator}lib - - websocket* - jetty-http* - jetty-client* - jetty-webapp* - jetty-xml* - jetty-io* - - lib - - - - ${project.build.directory}${file.separator}classes - - ** - - ${file.separator} - - - \ No newline at end of file diff --git a/samples/spark/pet-store/src/main/java/com/amazonaws/serverless/sample/spark/JsonTransformer.java b/samples/spark/pet-store/src/main/java/com/amazonaws/serverless/sample/spark/JsonTransformer.java deleted file mode 100644 index bc1692afd..000000000 --- a/samples/spark/pet-store/src/main/java/com/amazonaws/serverless/sample/spark/JsonTransformer.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance - * with the License. A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.sample.spark; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import spark.ResponseTransformer; - -public class JsonTransformer implements ResponseTransformer { - - private ObjectMapper mapper = new ObjectMapper(); - private Logger log = LoggerFactory.getLogger(JsonTransformer.class); - - @Override - public String render(Object model) { - try { - return mapper.writeValueAsString(model); - } catch (JsonProcessingException e) { - log.error("Cannot serialize object", e); - return null; - } - } - -} \ No newline at end of file diff --git a/samples/spark/pet-store/src/main/java/com/amazonaws/serverless/sample/spark/SparkResources.java b/samples/spark/pet-store/src/main/java/com/amazonaws/serverless/sample/spark/SparkResources.java deleted file mode 100644 index 4794b7aec..000000000 --- a/samples/spark/pet-store/src/main/java/com/amazonaws/serverless/sample/spark/SparkResources.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.amazonaws.serverless.sample.spark; - - -import com.amazonaws.serverless.proxy.internal.LambdaContainerHandler; -import com.amazonaws.serverless.sample.spark.model.Pet; -import com.amazonaws.serverless.sample.spark.model.PetData; - -import jakarta.ws.rs.core.Response; - -import java.util.UUID; - -import static spark.Spark.before; -import static spark.Spark.get; -import static spark.Spark.post; - - -public class SparkResources { - - public static void defineResources() { - before((request, response) -> response.type("application/json")); - - post("/pets", (req, res) -> { - Pet newPet = LambdaContainerHandler.getObjectMapper().readValue(req.body(), Pet.class); - if (newPet.getName() == null || newPet.getBreed() == null) { - return Response.status(400).entity(new Error("Invalid name or breed")).build(); - } - - Pet dbPet = newPet; - dbPet.setId(UUID.randomUUID().toString()); - - res.status(200); - return dbPet; - }, new JsonTransformer()); - - get("/pets", (req, res) -> { - int limit = 10; - if (req.queryParams("limit") != null) { - limit = Integer.parseInt(req.queryParams("limit")); - } - - Pet[] outputPets = new Pet[limit]; - - for (int i = 0; i < limit; 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; - } - - res.status(200); - return outputPets; - }, new JsonTransformer()); - - get("/pets/:petId", (req, res) -> { - Pet newPet = new Pet(); - newPet.setId(UUID.randomUUID().toString()); - newPet.setBreed(PetData.getRandomBreed()); - newPet.setDateOfBirth(PetData.getRandomDoB()); - newPet.setName(PetData.getRandomName()); - res.status(200); - return newPet; - }, new JsonTransformer()); - } -} diff --git a/samples/spark/pet-store/src/main/java/com/amazonaws/serverless/sample/spark/StreamLambdaHandler.java b/samples/spark/pet-store/src/main/java/com/amazonaws/serverless/sample/spark/StreamLambdaHandler.java deleted file mode 100644 index e02499103..000000000 --- a/samples/spark/pet-store/src/main/java/com/amazonaws/serverless/sample/spark/StreamLambdaHandler.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.amazonaws.serverless.sample.spark; - - -import com.amazonaws.serverless.exceptions.ContainerInitializationException; -import com.amazonaws.serverless.proxy.internal.testutils.Timer; -import com.amazonaws.serverless.proxy.model.AwsProxyRequest; -import com.amazonaws.serverless.proxy.model.AwsProxyResponse; -import com.amazonaws.serverless.proxy.spark.SparkLambdaContainerHandler; -import com.amazonaws.serverless.sample.spark.filter.CognitoIdentityFilter; -import com.amazonaws.services.lambda.runtime.Context; -import com.amazonaws.services.lambda.runtime.RequestStreamHandler; - -import spark.Spark; - -import jakarta.servlet.DispatcherType; -import jakarta.servlet.FilterRegistration; - -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.util.EnumSet; - - -public class StreamLambdaHandler implements RequestStreamHandler { - private static SparkLambdaContainerHandler handler; - static { - try { - handler = SparkLambdaContainerHandler.getAwsProxyHandler(); - SparkResources.defineResources(); - Spark.awaitInitialization(); - - // we use the onStartup method of the handler to register our custom filter - handler.onStartup(servletContext -> { - FilterRegistration.Dynamic registration = servletContext.addFilter("CognitoIdentityFilter", CognitoIdentityFilter.class); - registration.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), false, "/*"); - }); - } catch (ContainerInitializationException e) { - // if we fail here. We re-throw the exception to force another cold start - e.printStackTrace(); - throw new RuntimeException("Could not initialize Spark container", e); - } - } - - public StreamLambdaHandler() { - // we enable the timer for debugging. This SHOULD NOT be enabled in production. - Timer.enable(); - } - - @Override - public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) - throws IOException { - handler.proxyStream(inputStream, outputStream, context); - } -} diff --git a/samples/spark/pet-store/src/main/java/com/amazonaws/serverless/sample/spark/filter/CognitoIdentityFilter.java b/samples/spark/pet-store/src/main/java/com/amazonaws/serverless/sample/spark/filter/CognitoIdentityFilter.java deleted file mode 100644 index e45370b0b..000000000 --- a/samples/spark/pet-store/src/main/java/com/amazonaws/serverless/sample/spark/filter/CognitoIdentityFilter.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.amazonaws.serverless.sample.spark.filter; - - -import com.amazonaws.serverless.proxy.RequestReader; -import com.amazonaws.serverless.proxy.model.AwsProxyRequestContext; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import jakarta.servlet.Filter; -import jakarta.servlet.FilterChain; -import jakarta.servlet.FilterConfig; -import jakarta.servlet.ServletException; -import jakarta.servlet.ServletRequest; -import jakarta.servlet.ServletResponse; - -import java.io.IOException; - - -/** - * Simple Filter implementation that looks for a Cognito identity id in the API Gateway request context - * and stores the value in a request attribute. The filter is registered with aws-serverless-java-container - * in the onStartup method from the {@link com.amazonaws.serverless.sample.spring.StreamLambdaHandler} class. - */ -public class CognitoIdentityFilter implements Filter { - public static final String COGNITO_IDENTITY_ATTRIBUTE = "com.amazonaws.serverless.cognitoId"; - - private static Logger log = LoggerFactory.getLogger(CognitoIdentityFilter.class); - - @Override - public void init(FilterConfig filterConfig) - throws ServletException { - // nothing to do in init - } - - - @Override - public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) - throws IOException, ServletException { - Object apiGwContext = servletRequest.getAttribute(RequestReader.API_GATEWAY_CONTEXT_PROPERTY); - if (apiGwContext == null) { - log.warn("API Gateway context is null"); - filterChain.doFilter(servletRequest, servletResponse); - } - if (!AwsProxyRequestContext.class.isAssignableFrom(apiGwContext.getClass())) { - log.warn("API Gateway context object is not of valid type"); - filterChain.doFilter(servletRequest, servletResponse); - } - - AwsProxyRequestContext ctx = (AwsProxyRequestContext)apiGwContext; - if (ctx.getIdentity() == null) { - log.warn("Identity context is null"); - filterChain.doFilter(servletRequest, servletResponse); - } - String cognitoIdentityId = ctx.getIdentity().getCognitoIdentityId(); - if (cognitoIdentityId == null || "".equals(cognitoIdentityId.trim())) { - log.warn("Cognito identity id in request is null"); - } - servletRequest.setAttribute(COGNITO_IDENTITY_ATTRIBUTE, cognitoIdentityId); - filterChain.doFilter(servletRequest, servletResponse); - } - - - @Override - public void destroy() { - // nothing to do in destroy - } -} diff --git a/samples/spark/pet-store/src/main/java/com/amazonaws/serverless/sample/spark/model/Error.java b/samples/spark/pet-store/src/main/java/com/amazonaws/serverless/sample/spark/model/Error.java deleted file mode 100644 index 3577e6a3a..000000000 --- a/samples/spark/pet-store/src/main/java/com/amazonaws/serverless/sample/spark/model/Error.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance - * with the License. A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.sample.spark.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/samples/spark/pet-store/src/main/java/com/amazonaws/serverless/sample/spark/model/Pet.java b/samples/spark/pet-store/src/main/java/com/amazonaws/serverless/sample/spark/model/Pet.java deleted file mode 100644 index a6f569597..000000000 --- a/samples/spark/pet-store/src/main/java/com/amazonaws/serverless/sample/spark/model/Pet.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance - * with the License. A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.sample.spark.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/samples/spark/pet-store/src/main/java/com/amazonaws/serverless/sample/spark/model/PetData.java b/samples/spark/pet-store/src/main/java/com/amazonaws/serverless/sample/spark/model/PetData.java deleted file mode 100644 index ba9c47db6..000000000 --- a/samples/spark/pet-store/src/main/java/com/amazonaws/serverless/sample/spark/model/PetData.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance - * with the License. A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.sample.spark.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/samples/spark/pet-store/template.yml b/samples/spark/pet-store/template.yml deleted file mode 100644 index 535e684f9..000000000 --- a/samples/spark/pet-store/template.yml +++ /dev/null @@ -1,32 +0,0 @@ -AWSTemplateFormatVersion: '2010-09-09' -Transform: AWS::Serverless-2016-10-31 -Description: Example Pet Store API written with spark with the aws-serverless-java-container library - -Globals: - Api: - # API Gateway regional endpoints - EndpointConfiguration: REGIONAL - -Resources: - PetStoreFunction: - Type: AWS::Serverless::Function - Properties: - Handler: com.amazonaws.serverless.sample.spark.StreamLambdaHandler::handleRequest - Runtime: java11 - CodeUri: . - MemorySize: 512 - Policies: AWSLambdaBasicExecutionRole - Timeout: 20 - Events: - HttpApiEvent: - Type: HttpApi - Properties: - TimeoutInMillis: 20000 - PayloadFormatVersion: '1.0' - -Outputs: - SparkPetStoreApi: - Description: URL for application - Value: !Sub 'https://${ServerlessHttpApi}.execute-api.${AWS::Region}.amazonaws.com/pets' - Export: - Name: SparkPetStoreApi From 0982dc15aa9d0bd212511ffd08c7d9745e33ca1c Mon Sep 17 00:00:00 2001 From: kibeom lee <70303094+2012160085@users.noreply.github.com> Date: Sun, 21 Jan 2024 18:14:26 +0900 Subject: [PATCH 540/888] Deleted 2 disabled tests dispatch_sendsToCorrectServlet dispatchNewPath_sendsToCorrectServlet --- .../internal/servlet/AwsAsyncContextTest.java | 43 ------------------- 1 file changed, 43 deletions(-) diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContextTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContextTest.java index 9bbbc13a9..a8383b5c3 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContextTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContextTest.java @@ -46,49 +46,6 @@ void dispatch_amendsPath() throws InvalidRequestEventException { assertEquals("/srv1/hello", req.getRequestURI()); } - @Disabled("AwsAsyncContext does not sends to servlet anymore") - @Test - void dispatch_sendsToCorrectServlet() { - AwsProxyHttpServletRequest req = new AwsProxyHttpServletRequest(new AwsProxyRequestBuilder("/srv1/hello", "GET").build(), lambdaCtx, null); - req.setResponse(handler.getContainerResponse(req, new CountDownLatch(1))); - req.setServletContext(ctx); - req.setContainerHandler(handler); - - AsyncContext asyncCtx = req.startAsync(); - handler.setDesiredStatus(201); - asyncCtx.dispatch(); - assertNotNull(handler.getSelectedServlet()); - assertEquals(srv1, handler.getSelectedServlet()); - assertEquals(201, handler.getResponse().getStatus()); - - req = new AwsProxyHttpServletRequest(new AwsProxyRequestBuilder("/srv5/hello", "GET").build(), lambdaCtx, null); - req.setResponse(handler.getContainerResponse(req, new CountDownLatch(1))); - req.setServletContext(ctx); - req.setContainerHandler(handler); - asyncCtx = req.startAsync(); - handler.setDesiredStatus(202); - asyncCtx.dispatch(); - assertNotNull(handler.getSelectedServlet()); - assertEquals(srv2, handler.getSelectedServlet()); - assertEquals(202, handler.getResponse().getStatus()); - } - - @Disabled("AwsAsyncContext does not sends to servlet anymore") - @Test - void dispatchNewPath_sendsToCorrectServlet() throws InvalidRequestEventException { - AwsProxyHttpServletRequest req = (AwsProxyHttpServletRequest)reader.readRequest(new AwsProxyRequestBuilder("/srv1/hello", "GET").build(), null, lambdaCtx, LambdaContainerHandler.getContainerConfig()); - req.setResponse(handler.getContainerResponse(req, new CountDownLatch(1))); - req.setServletContext(ctx); - req.setContainerHandler(handler); - - AsyncContext asyncCtx = req.startAsync(); - handler.setDesiredStatus(301); - asyncCtx.dispatch("/srv4/hello"); - assertNotNull(handler.getSelectedServlet()); - assertEquals(srv2, handler.getSelectedServlet()); - assertNotNull(handler.getResponse()); - assertEquals(301, handler.getResponse().getStatus()); - } private AwsServletContext getCtx() { AwsServletContext ctx = new AwsServletContext(handler); From 3bbeed7822b2680621b6a6561ca712d62dec6512 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Sun, 21 Jan 2024 11:02:04 +0100 Subject: [PATCH 541/888] chore(deps): update Struts to 7.0.0-M1 for testing --- aws-serverless-java-container-struts/pom.xml | 47 ++++++++++++------- .../archetype-resources/build.gradle | 10 ++-- .../resources/archetype-resources/pom.xml | 20 +++++--- samples/struts/pet-store/build.gradle | 14 +++--- samples/struts/pet-store/pom.xml | 23 +++++---- 5 files changed, 72 insertions(+), 42 deletions(-) diff --git a/aws-serverless-java-container-struts/pom.xml b/aws-serverless-java-container-struts/pom.xml index 767705099..0cd2a4aa9 100644 --- a/aws-serverless-java-container-struts/pom.xml +++ b/aws-serverless-java-container-struts/pom.xml @@ -15,7 +15,7 @@ - 6.3.0.2 + 7.0.0-M1 @@ -25,12 +25,24 @@ aws-serverless-java-container-core 2.0.0-SNAPSHOT + + com.amazonaws.serverless + aws-serverless-java-container-core + 2.0.0-SNAPSHOT + tests + test-jar + test + org.apache.struts struts2-core ${struts.version} + + org.apache.commons + commons-fileupload2-jakarta + commons-io commons-io @@ -71,38 +83,33 @@ - javax.el - javax.el-api - 3.0.0 + jakarta.el + jakarta.el-api + 5.0.1 test - javax.servlet - jsp-api - 2.0 + jakarta.servlet.jsp + jakarta.servlet.jsp-api + 3.1.0 test org.glassfish - javax.el - 3.0.0 + jakarta.el + 5.0.0-M1 test - + org.apache.commons commons-text - 1.10.0 - - - commons-net - commons-net - 3.9.0 + 1.11.0 @@ -198,4 +205,12 @@ + + + + apache-pre-release + https://repository.apache.org/content/repositories/staging/ + default + + diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle index 1f03497bd..c579ff711 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle @@ -18,19 +18,19 @@ dependencies { exclude group: 'org.apache.logging.log4j', module: 'log4j-api' exclude group: 'org.apache.logging.log4j', module: 'log4j-to-slf4j' } - implementation ('org.apache.struts:struts2-convention-plugin:6.1.3.1') { + implementation ('org.apache.struts:struts2-convention-plugin:7.0.0-M1') { exclude group: 'org.apache.struts', module: 'struts2-core' } - implementation ('org.apache.struts:struts2-rest-plugin:6.1.3.1') { + implementation ('org.apache.struts:struts2-rest-plugin:7.0.0-M1') { exclude group: 'org.apache.struts', module: 'struts2-core' } - implementation ('org.apache.struts:struts2-bean-validation-plugin:6.1.3.1') { + implementation ('org.apache.struts:struts2-bean-validation-plugin:7.0.0-M1') { exclude group: 'org.apache.struts', module: 'struts2-core' } implementation ('com.jgeppert.struts2:struts2-aws-lambda-support-plugin:1.4.2') { exclude group: 'org.apache.struts', module: 'struts2-core' } - implementation ('org.apache.struts:struts2-core:6.1.3.1') { + implementation ('org.apache.struts:struts2-core:7.0.0-M1') { exclude group: 'org.apache.logging.log4j', module: 'log4j-api' } implementation ('org.hibernate.validator:hibernate-validator:6.1.7.Final') @@ -45,7 +45,7 @@ dependencies { testImplementation("org.apache.httpcomponents.client5:httpclient5:5.2.1") testImplementation(platform("org.junit:junit-bom:5.10.1")) testImplementation("org.junit.jupiter:junit-jupiter") - testImplementation('org.apache.struts:struts2-junit-plugin:6.1.3.1') { + testImplementation('org.apache.struts:struts2-junit-plugin:7.0.0-M1') { exclude group: 'org.apache.struts', module: 'struts2-core' } } diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml index 485fa214a..30ec31d71 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml @@ -15,7 +15,7 @@ 1.8 1.8 - 6.1.3.1 + 7.0.0-M1 2.16.1 5.10.1 2.22.1 @@ -121,15 +121,15 @@ - javax.el - javax.el-api - 3.0.0 + jakarta.el + jakarta.el-api + 5.0.1 test org.glassfish - javax.el - 3.0.0 + jakarta.el + 5.0.0-M1 test @@ -175,4 +175,12 @@ + + + + apache-pre-release + https://repository.apache.org/content/repositories/staging/ + default + + diff --git a/samples/struts/pet-store/build.gradle b/samples/struts/pet-store/build.gradle index 4982518a2..11296662f 100644 --- a/samples/struts/pet-store/build.gradle +++ b/samples/struts/pet-store/build.gradle @@ -13,15 +13,15 @@ configurations { dependencies { implementation ( - 'com.amazonaws.serverless:aws-serverless-java-container-struts:[1.9,)', - 'org.apache.struts:struts2-convention-plugin:6.1.3.1', - 'org.apache.struts:struts2-rest-plugin:6.1.3.1', - 'org.apache.struts:struts2-bean-validation-plugin:6.1.3.1', - 'org.apache.struts:struts2-junit-plugin:6.1.3.1', + 'com.amazonaws.serverless:aws-serverless-java-container-struts:[2.0-SNAPSHOT,)', + 'org.apache.struts:struts2-convention-plugin:7.0.0-M1', + 'org.apache.struts:struts2-rest-plugin:7.0.0-M1', + 'org.apache.struts:struts2-bean-validation-plugin:7.0.0-M1', + 'org.apache.struts:struts2-junit-plugin:7.0.0-M1', 'com.jgeppert.struts2:struts2-aws-lambda-support-plugin:1.4.2', 'org.hibernate.validator:hibernate-validator:6.1.7.Final', - 'org.glassfish:javax.el:3.0.0', - 'javax.el:javax.el-api:3.0.0', + 'org.glassfish:jakarta.el:5.0.0-M1', + 'jakarta.el:jakarta.el-api:5.0.1', 'com.fasterxml.jackson.core:jackson-databind:2.16.1', 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.16.1', 'org.apache.logging.log4j:log4j-core:2.22.1', diff --git a/samples/struts/pet-store/pom.xml b/samples/struts/pet-store/pom.xml index 6eacfc31e..c9fc14f92 100644 --- a/samples/struts/pet-store/pom.xml +++ b/samples/struts/pet-store/pom.xml @@ -6,7 +6,7 @@ com.amazonaws.serverless.sample serverless-struts-example - 1.0-SNAPSHOT + 2.0-SNAPSHOT Struts example for the aws-serverless-java-container library Simple pet store written with the Apache Struts framework https://aws.amazon.com/lambda/ @@ -26,7 +26,7 @@ 1.8 1.8 - 6.1.3.1 + 7.0.0-M1 2.16.1 4.13.2 2.22.1 @@ -36,7 +36,7 @@ com.amazonaws.serverless aws-serverless-java-container-struts - [1.9,) + [2.0.0-SNAPSHOT,) @@ -79,13 +79,13 @@ org.glassfish - javax.el - 3.0.0 + jakarta.el + 5.0.0-M1 - javax.el - javax.el-api - 3.0.0 + jakarta.el + jakarta.el-api + 5.0.1 @@ -167,4 +167,11 @@ + + + apache-pre-release + https://repository.apache.org/content/repositories/staging/ + default + + From 3b637dc7bedd832110bffc390f3476b813a7a119 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Jan 2024 04:06:00 +0000 Subject: [PATCH 542/888] chore(deps): bump org.owasp:dependency-check-maven from 9.0.8 to 9.0.9 Bumps [org.owasp:dependency-check-maven](https://github.com/jeremylong/DependencyCheck) from 9.0.8 to 9.0.9. - [Release notes](https://github.com/jeremylong/DependencyCheck/releases) - [Changelog](https://github.com/jeremylong/DependencyCheck/blob/main/CHANGELOG.md) - [Commits](https://github.com/jeremylong/DependencyCheck/compare/v9.0.8...v9.0.9) --- updated-dependencies: - dependency-name: org.owasp:dependency-check-maven dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 9cd64107d..0caa7b78d 100644 --- a/pom.xml +++ b/pom.xml @@ -77,7 +77,7 @@ 0.7 - 9.0.8 + 9.0.9 2.16.1 2.0.11 5.10.1 From 96b1a4a6be9102545efc3c3f6a1e147dc5664bbd Mon Sep 17 00:00:00 2001 From: kibeom lee <70303094+2012160085@users.noreply.github.com> Date: Mon, 22 Jan 2024 18:52:34 +0900 Subject: [PATCH 543/888] Remove AwsLambdaServletContainerHandler from AwsAsyncContext since it is no longer dependent on AwsLambdaServletContainerHandler --- .../serverless/proxy/internal/servlet/AwsAsyncContext.java | 4 +--- .../internal/servlet/AwsHttpApiV2ProxyHttpServletRequest.java | 4 ++-- .../proxy/internal/servlet/AwsProxyHttpServletRequest.java | 4 ++-- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContext.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContext.java index 0dd115b9a..98e7ef8ec 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContext.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContext.java @@ -32,7 +32,6 @@ public class AwsAsyncContext implements AsyncContext { private HttpServletRequest req; private HttpServletResponse res; - private AwsLambdaServletContainerHandler handler; private List listeners; private long timeout; private AtomicBoolean dispatched; @@ -41,11 +40,10 @@ public class AwsAsyncContext implements AsyncContext { private Logger log = LoggerFactory.getLogger(AwsAsyncContext.class); - public AwsAsyncContext(HttpServletRequest request, HttpServletResponse response, AwsLambdaServletContainerHandler servletHandler) { + public AwsAsyncContext(HttpServletRequest request, HttpServletResponse response) { log.debug("Initializing async context for request: " + SecurityUtils.crlf(request.getPathInfo()) + " - " + SecurityUtils.crlf(request.getMethod())); req = request; res = response; - handler = servletHandler; listeners = new ArrayList<>(); timeout = 3000; dispatched = new AtomicBoolean(false); diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2ProxyHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2ProxyHttpServletRequest.java index 73239a914..6fdb31f08 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2ProxyHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2ProxyHttpServletRequest.java @@ -442,7 +442,7 @@ public boolean isAsyncStarted() { @Override public AsyncContext startAsync() throws IllegalStateException { - asyncContext = new AwsAsyncContext(this, response, containerHandler); + asyncContext = new AwsAsyncContext(this, response); setAttribute(DISPATCHER_TYPE_ATTRIBUTE, DispatcherType.ASYNC); log.debug("Starting async context for request: " + SecurityUtils.crlf(request.getRequestContext().getRequestId())); return asyncContext; @@ -450,7 +450,7 @@ public AsyncContext startAsync() throws IllegalStateException { @Override public AsyncContext startAsync(ServletRequest servletRequest, ServletResponse servletResponse) throws IllegalStateException { - asyncContext = new AwsAsyncContext((HttpServletRequest) servletRequest, (HttpServletResponse) servletResponse, containerHandler); + asyncContext = new AwsAsyncContext((HttpServletRequest) servletRequest, (HttpServletResponse) servletResponse); setAttribute(DISPATCHER_TYPE_ATTRIBUTE, DispatcherType.ASYNC); log.debug("Starting async context for request: " + SecurityUtils.crlf(request.getRequestContext().getRequestId())); return asyncContext; diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java index 280a7e308..3e92d43dc 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java @@ -495,7 +495,7 @@ public boolean isAsyncStarted() { @Override public AsyncContext startAsync() throws IllegalStateException { - asyncContext = new AwsAsyncContext(this, response, containerHandler); + asyncContext = new AwsAsyncContext(this, response); setAttribute(DISPATCHER_TYPE_ATTRIBUTE, DispatcherType.ASYNC); log.debug("Starting async context for request: " + SecurityUtils.crlf(request.getRequestContext().getRequestId())); return asyncContext; @@ -506,7 +506,7 @@ public AsyncContext startAsync() public AsyncContext startAsync(ServletRequest servletRequest, ServletResponse servletResponse) throws IllegalStateException { servletRequest.setAttribute(DISPATCHER_TYPE_ATTRIBUTE, DispatcherType.ASYNC); - asyncContext = new AwsAsyncContext((HttpServletRequest) servletRequest, (HttpServletResponse) servletResponse, containerHandler); + asyncContext = new AwsAsyncContext((HttpServletRequest) servletRequest, (HttpServletResponse) servletResponse); log.debug("Starting async context for request: " + SecurityUtils.crlf(request.getRequestContext().getRequestId())); return asyncContext; } From 42353cb3d3e36b47363715f8b1feab78d3a42888 Mon Sep 17 00:00:00 2001 From: mbfreder Date: Tue, 23 Jan 2024 17:32:02 -0800 Subject: [PATCH 544/888] Added SpringBoot3-GraphQl sample --- .../springboot3/graphql-pet-store/README.md | 38 ++++ samples/springboot3/graphql-pet-store/pom.xml | 162 ++++++++++++++++++ .../graphql-pet-store/src/assembly/bin.xml | 27 +++ .../sample/springboot3/Application.java | 49 ++++++ .../springboot3/StreamLambdaHandler.java | 50 ++++++ .../controller/PetsController.java | 21 +++ .../filter/CognitoIdentityFilter.java | 69 ++++++++ .../sample/springboot3/model/Owner.java | 20 +++ .../sample/springboot3/model/Pet.java | 20 +++ .../main/resources/graphql/schema.graphqls | 16 ++ .../src/main/resources/logback.xml | 5 + .../graphql-pet-store/template.yml | 32 ++++ 12 files changed, 509 insertions(+) create mode 100644 samples/springboot3/graphql-pet-store/README.md create mode 100644 samples/springboot3/graphql-pet-store/pom.xml create mode 100644 samples/springboot3/graphql-pet-store/src/assembly/bin.xml create mode 100644 samples/springboot3/graphql-pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/Application.java create mode 100644 samples/springboot3/graphql-pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/StreamLambdaHandler.java create mode 100644 samples/springboot3/graphql-pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/controller/PetsController.java create mode 100644 samples/springboot3/graphql-pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/filter/CognitoIdentityFilter.java create mode 100644 samples/springboot3/graphql-pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/model/Owner.java create mode 100644 samples/springboot3/graphql-pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/model/Pet.java create mode 100644 samples/springboot3/graphql-pet-store/src/main/resources/graphql/schema.graphqls create mode 100644 samples/springboot3/graphql-pet-store/src/main/resources/logback.xml create mode 100644 samples/springboot3/graphql-pet-store/template.yml diff --git a/samples/springboot3/graphql-pet-store/README.md b/samples/springboot3/graphql-pet-store/README.md new file mode 100644 index 000000000..7d18a0dd7 --- /dev/null +++ b/samples/springboot3/graphql-pet-store/README.md @@ -0,0 +1,38 @@ +# Serverless Spring Boot 3 and Spring-graphQl example +A basic pet store written with the [Spring Boot 3 framework](https://projects.spring.io/spring-boot/). Unlike older examples, this example uses the [Spring for GraphQl](https://docs.spring.io/spring-graphql/reference/) library. + + +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` to make a call to the URL + +``` +... +--------------------------------------------------------------------------------------------------------- +OutputKey-Description OutputValue +--------------------------------------------------------------------------------------------------------- +PetStoreApi - URL for application https://xxxxxxxxxx.execute-api.us-west-2.amazonaws.com/graphQl +--------------------------------------------------------------------------------------------------------- + +$ curl -X POST https://xxxxxxxxxx.execute-api.us-west-2.amazonaws.com/graphQl -d '{"query":"query petDetails {\n petById(id: \"pet-1\") {\n id\n name\n breed\n owner {\n id\n firstName\n lastName\n }\n }\n}","operationName":"petDetails"}' -H "Content-Type: application/json" + +``` \ No newline at end of file diff --git a/samples/springboot3/graphql-pet-store/pom.xml b/samples/springboot3/graphql-pet-store/pom.xml new file mode 100644 index 000000000..35535e2a4 --- /dev/null +++ b/samples/springboot3/graphql-pet-store/pom.xml @@ -0,0 +1,162 @@ + + + 4.0.0 + + com.amazonaws.serverless.sample + serverless-springboot3-example + 2.0-SNAPSHOT + Spring Boot example for the aws-serverless-java-container library + Simple pet store written with the Spring framework and Spring Boot + https://aws.amazon.com/lambda/ + + + org.springframework.boot + spring-boot-starter-parent + 3.2.2 + + + + + The Apache Software License, Version 2.0 + http://www.apache.org/licenses/LICENSE-2.0.txt + repo + + + + + 21 + + + + + org.springframework.boot + spring-boot-starter-graphql + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-tomcat + + + + + org.springframework.graphql + spring-graphql-test + test + + + com.amazonaws.serverless + aws-serverless-java-container-springboot3 + 2.0.0-SNAPSHOT + + + + + + shaded-jar + + + + org.apache.maven.plugins + maven-shade-plugin + 3.5.1 + + false + + + + package + + shade + + + + + org.apache.tomcat.embed:* + + + + + + + + + + + assembly-zip + + true + + + + + + org.apache.maven.plugins + maven-jar-plugin + 3.3.0 + + + default-jar + none + + + + + org.apache.maven.plugins + maven-install-plugin + 3.1.1 + + true + + + + + org.apache.maven.plugins + maven-dependency-plugin + 3.6.1 + + + copy-dependencies + package + + copy-dependencies + + + ${project.build.directory}/lib + runtime + + + + + + org.apache.maven.plugins + maven-assembly-plugin + 3.6.0 + + + zip-assembly + package + + single + + + ${project.artifactId}-${project.version} + + src${file.separator}assembly${file.separator}bin.xml + + false + + + + + + + + + + + diff --git a/samples/springboot3/graphql-pet-store/src/assembly/bin.xml b/samples/springboot3/graphql-pet-store/src/assembly/bin.xml new file mode 100644 index 000000000..efc312c25 --- /dev/null +++ b/samples/springboot3/graphql-pet-store/src/assembly/bin.xml @@ -0,0 +1,27 @@ + + lambda-package + + zip + + false + + + + ${project.build.directory}${file.separator}lib + lib + + tomcat-embed* + + + + + ${project.build.directory}${file.separator}classes + + ** + + ${file.separator} + + + diff --git a/samples/springboot3/graphql-pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/Application.java b/samples/springboot3/graphql-pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/Application.java new file mode 100644 index 000000000..678477a27 --- /dev/null +++ b/samples/springboot3/graphql-pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/Application.java @@ -0,0 +1,49 @@ +package com.amazonaws.serverless.sample.springboot3; + +import com.amazonaws.serverless.sample.springboot3.controller.PetsController; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; +import org.springframework.context.annotation.Bean; +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; + +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; + + +@SpringBootApplication +@Import({ PetsController.class }) +public class Application { + + // silence console logging + @Value("${logging.level.root:OFF}") + String message = ""; + + /* + * 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(); + } + + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } +} diff --git a/samples/springboot3/graphql-pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/StreamLambdaHandler.java b/samples/springboot3/graphql-pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/StreamLambdaHandler.java new file mode 100644 index 000000000..a65c6f1ec --- /dev/null +++ b/samples/springboot3/graphql-pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/StreamLambdaHandler.java @@ -0,0 +1,50 @@ +package com.amazonaws.serverless.sample.springboot3; + + +import com.amazonaws.serverless.exceptions.ContainerInitializationException; +import com.amazonaws.serverless.proxy.internal.testutils.Timer; +import com.amazonaws.serverless.proxy.model.AwsProxyRequest; +import com.amazonaws.serverless.proxy.model.AwsProxyResponse; +import com.amazonaws.serverless.proxy.spring.SpringBootLambdaContainerHandler; +import com.amazonaws.serverless.sample.springboot3.filter.CognitoIdentityFilter; +import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.RequestStreamHandler; + +import jakarta.servlet.DispatcherType; +import jakarta.servlet.FilterRegistration; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.EnumSet; + + +public class StreamLambdaHandler implements RequestStreamHandler { + private static SpringBootLambdaContainerHandler handler; + static { + try { + handler = SpringBootLambdaContainerHandler.getAwsProxyHandler(Application.class); + + // we use the onStartup method of the handler to register our custom filter + handler.onStartup(servletContext -> { + FilterRegistration.Dynamic registration = servletContext.addFilter("CognitoIdentityFilter", CognitoIdentityFilter.class); + registration.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), true, "/*"); + }); + } catch (ContainerInitializationException e) { + // if we fail here. We re-throw the exception to force another cold start + e.printStackTrace(); + throw new RuntimeException("Could not initialize Spring Boot application", e); + } + } + + public StreamLambdaHandler() { + // we enable the timer for debugging. This SHOULD NOT be enabled in production. + Timer.enable(); + } + + @Override + public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) + throws IOException { + handler.proxyStream(inputStream, outputStream, context); + } +} diff --git a/samples/springboot3/graphql-pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/controller/PetsController.java b/samples/springboot3/graphql-pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/controller/PetsController.java new file mode 100644 index 000000000..93eb999bd --- /dev/null +++ b/samples/springboot3/graphql-pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/controller/PetsController.java @@ -0,0 +1,21 @@ +package com.amazonaws.serverless.sample.springboot3.controller; + +import org.springframework.graphql.data.method.annotation.Argument; +import org.springframework.graphql.data.method.annotation.QueryMapping; +import org.springframework.graphql.data.method.annotation.SchemaMapping; +import org.springframework.stereotype.Controller; +import com.amazonaws.serverless.sample.springboot3.model.Owner; +import com.amazonaws.serverless.sample.springboot3.model.Pet; + +@Controller +public class PetsController { + @QueryMapping + public Pet petById(@Argument String id) { + return Pet.getById(id); + } + + @SchemaMapping + public Owner owner(Pet pet) { + return Owner.getById(pet.ownerId()); + } +} diff --git a/samples/springboot3/graphql-pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/filter/CognitoIdentityFilter.java b/samples/springboot3/graphql-pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/filter/CognitoIdentityFilter.java new file mode 100644 index 000000000..d6ccae765 --- /dev/null +++ b/samples/springboot3/graphql-pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/filter/CognitoIdentityFilter.java @@ -0,0 +1,69 @@ +package com.amazonaws.serverless.sample.springboot3.filter; + + +import com.amazonaws.serverless.proxy.RequestReader; +import com.amazonaws.serverless.proxy.model.AwsProxyRequestContext; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; + +import java.io.IOException; + + +/** + * Simple Filter implementation that looks for a Cognito identity id in the API Gateway request context + * and stores the value in a request attribute. The filter is registered with aws-serverless-java-container + * in the onStartup method from the {@link com.amazonaws.serverless.sample.springboot3.StreamLambdaHandler} class. + */ +public class CognitoIdentityFilter implements Filter { + public static final String COGNITO_IDENTITY_ATTRIBUTE = "com.amazonaws.serverless.cognitoId"; + + private static Logger log = LoggerFactory.getLogger(CognitoIdentityFilter.class); + + @Override + public void init(FilterConfig filterConfig) + throws ServletException { + // nothing to do in init + } + + + @Override + public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) + throws IOException, ServletException { + Object apiGwContext = servletRequest.getAttribute(RequestReader.API_GATEWAY_CONTEXT_PROPERTY); + if (apiGwContext == null) { + log.warn("API Gateway context is null"); + filterChain.doFilter(servletRequest, servletResponse); + return; + } + if (!AwsProxyRequestContext.class.isAssignableFrom(apiGwContext.getClass())) { + log.warn("API Gateway context object is not of valid type"); + filterChain.doFilter(servletRequest, servletResponse); + } + + AwsProxyRequestContext ctx = (AwsProxyRequestContext)apiGwContext; + if (ctx.getIdentity() == null) { + log.warn("Identity context is null"); + filterChain.doFilter(servletRequest, servletResponse); + } + String cognitoIdentityId = ctx.getIdentity().getCognitoIdentityId(); + if (cognitoIdentityId == null || "".equals(cognitoIdentityId.trim())) { + log.warn("Cognito identity id in request is null"); + } + servletRequest.setAttribute(COGNITO_IDENTITY_ATTRIBUTE, cognitoIdentityId); + filterChain.doFilter(servletRequest, servletResponse); + } + + + @Override + public void destroy() { + // nothing to do in destroy + } +} diff --git a/samples/springboot3/graphql-pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/model/Owner.java b/samples/springboot3/graphql-pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/model/Owner.java new file mode 100644 index 000000000..f048e6906 --- /dev/null +++ b/samples/springboot3/graphql-pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/model/Owner.java @@ -0,0 +1,20 @@ +package com.amazonaws.serverless.sample.springboot3.model; + +import java.util.Arrays; +import java.util.List; + +public record Owner (String id, String firstName, String lastName) { + + private static List owners = Arrays.asList( + new Owner("owner-1", "Joshua", "Bloch"), + new Owner("owner-2", "Douglas", "Adams"), + new Owner("owner-3", "Bill", "Bryson") + ); + + public static Owner getById(String id) { + return owners.stream() + .filter(owner -> owner.id().equals(id)) + .findFirst() + .orElse(null); + } +} diff --git a/samples/springboot3/graphql-pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/model/Pet.java b/samples/springboot3/graphql-pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/model/Pet.java new file mode 100644 index 000000000..f97b973d0 --- /dev/null +++ b/samples/springboot3/graphql-pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/model/Pet.java @@ -0,0 +1,20 @@ +package com.amazonaws.serverless.sample.springboot3.model; + +import java.util.Arrays; +import java.util.List; + +public record Pet (String id, String name, String breed, String ownerId) { + + private static List pets = Arrays.asList( + new Pet("pet-1", "Alpha", "Bulldog", "owner-1"), + new Pet("pet-2", "Max", "German Shepherd", "owner-2"), + new Pet("pet-3", "Rockie", "Golden Retriever", "owner-3") + ); + + public static Pet getById(String id) { + return pets.stream() + .filter(pet -> pet.id().equals(id)) + .findFirst() + .orElse(null); + } +} diff --git a/samples/springboot3/graphql-pet-store/src/main/resources/graphql/schema.graphqls b/samples/springboot3/graphql-pet-store/src/main/resources/graphql/schema.graphqls new file mode 100644 index 000000000..293cdcc40 --- /dev/null +++ b/samples/springboot3/graphql-pet-store/src/main/resources/graphql/schema.graphqls @@ -0,0 +1,16 @@ +type Query { + petById(id: ID): Pet +} + +type Pet { + id: ID + name: String + breed: String + owner: Owner +} + +type Owner { + id: ID + firstName: String + lastName: String +} diff --git a/samples/springboot3/graphql-pet-store/src/main/resources/logback.xml b/samples/springboot3/graphql-pet-store/src/main/resources/logback.xml new file mode 100644 index 000000000..8ff988992 --- /dev/null +++ b/samples/springboot3/graphql-pet-store/src/main/resources/logback.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/samples/springboot3/graphql-pet-store/template.yml b/samples/springboot3/graphql-pet-store/template.yml new file mode 100644 index 000000000..c6543b15f --- /dev/null +++ b/samples/springboot3/graphql-pet-store/template.yml @@ -0,0 +1,32 @@ +AWSTemplateFormatVersion: '2010-09-09' +Transform: AWS::Serverless-2016-10-31 +Description: Example Pet Store API written with SpringBoot3, Spring for GraphQl and the aws-serverless-java-container library + +Globals: + Api: + # API Gateway regional endpoints + EndpointConfiguration: REGIONAL + +Resources: + PetStoreFunction: + Type: AWS::Serverless::Function + Properties: + Handler: com.amazonaws.serverless.sample.springboot3.StreamLambdaHandler::handleRequest + Runtime: java21 + CodeUri: . + MemorySize: 1512 + Policies: AWSLambdaBasicExecutionRole + Timeout: 60 + Events: + HttpApiEvent: + Type: HttpApi + Properties: + TimeoutInMillis: 20000 + PayloadFormatVersion: '1.0' + +Outputs: + SpringBootPetStoreApi: + Description: URL for application + Value: !Sub 'https://${ServerlessHttpApi}.execute-api.${AWS::Region}.amazonaws.com/graphql' + Export: + Name: SpringBootPetStoreApi From 1b4a659270129c8e2b90f846c13c7efc50581dc3 Mon Sep 17 00:00:00 2001 From: Neves97 <43831599+Neves97@users.noreply.github.com> Date: Wed, 24 Jan 2024 10:42:47 -0300 Subject: [PATCH 545/888] fix: Changed Maven version range to resolve both SNAPSHOTs and released versions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * pom.xml missing references fix * Using version range * revert maven shade downgrade --------- Co-authored-by: João Neves --- samples/springboot3/pet-store/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/springboot3/pet-store/pom.xml b/samples/springboot3/pet-store/pom.xml index 569552a71..04de7678e 100644 --- a/samples/springboot3/pet-store/pom.xml +++ b/samples/springboot3/pet-store/pom.xml @@ -43,7 +43,7 @@ com.amazonaws.serverless aws-serverless-java-container-springboot3 - [2.0-SNAPSHOT,) + [2.0.0-SNAPSHOT,),[2.0.0-M1,) From c30b1977659f41d0c2742bc7fb5ac6a5d4c1f0f2 Mon Sep 17 00:00:00 2001 From: Oleg Zhurakousky Date: Wed, 24 Jan 2024 19:07:06 +0100 Subject: [PATCH 546/888] Address PR comments and add sample which also addresses most of the PR comments from the sample PR that I have closed Update jacoco exclusions --- .../proxy/AsyncInitializationWrapper.java | 2 +- .../pom.xml | 4 +- .../serverless/proxy/spring/AWSHttpUtils.java | 12 +- .../spring/AWSWebRuntimeInitializer.java | 6 +- ...r.java => AwsSpringAotTypesProcessor.java} | 5 +- ...> AwsSpringWebCustomRuntimeEventLoop.java} | 27 +- .../resources/META-INF/spring/aot.factories | 2 +- .../proxy/spring/AWSHttpUtilsTests.java | 2 +- .../proxy/spring/AWSWebRuntimeTests.java | 8 +- .../{build.gradle => build.gradles} | 0 samples/springboot3/alt-pet-store/pom.xml | 6 - .../springboot3/pet-store-native/.gitignore | 33 ++ .../.mvn/wrapper/maven-wrapper.jar | Bin 0 -> 62547 bytes .../.mvn/wrapper/maven-wrapper.properties | 18 + .../springboot3/pet-store-native/Dockerfile | 43 +++ .../springboot3/pet-store-native/README.md | 44 +++ samples/springboot3/pet-store-native/mvnw | 308 ++++++++++++++++++ samples/springboot3/pet-store-native/mvnw.cmd | 205 ++++++++++++ samples/springboot3/pet-store-native/pom.xml | 122 +++++++ .../pet-store-native/src/assembly/java.xml | 31 ++ .../pet-store-native/src/assembly/native.xml | 29 ++ .../sample/springboot3/DemoApplication.java | 12 + .../sample/springboot3/HelloController.java | 17 + .../controller/PetsController.java | 82 +++++ .../filter/CognitoIdentityFilter.java | 69 ++++ .../sample/springboot3/model/Error.java | 29 ++ .../sample/springboot3/model/Pet.java | 55 ++++ .../sample/springboot3/model/PetData.java | 117 +++++++ .../src/main/resources/META-INF/.gitignore | 1 + .../src/main/resources/application.properties | 1 + .../pet-store-native/src/shell/java/bootstrap | 7 + .../src/shell/native/bootstrap | 5 + .../pet-store-native/template.yaml | 33 ++ 33 files changed, 1302 insertions(+), 33 deletions(-) rename aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/{AWSTypesProcessor.java => AwsSpringAotTypesProcessor.java} (92%) rename aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/{AWSWebRuntimeEventLoop.java => AwsSpringWebCustomRuntimeEventLoop.java} (84%) rename samples/springboot3/alt-pet-store/{build.gradle => build.gradles} (100%) create mode 100644 samples/springboot3/pet-store-native/.gitignore create mode 100644 samples/springboot3/pet-store-native/.mvn/wrapper/maven-wrapper.jar create mode 100644 samples/springboot3/pet-store-native/.mvn/wrapper/maven-wrapper.properties create mode 100644 samples/springboot3/pet-store-native/Dockerfile create mode 100644 samples/springboot3/pet-store-native/README.md create mode 100755 samples/springboot3/pet-store-native/mvnw create mode 100644 samples/springboot3/pet-store-native/mvnw.cmd create mode 100644 samples/springboot3/pet-store-native/pom.xml create mode 100644 samples/springboot3/pet-store-native/src/assembly/java.xml create mode 100644 samples/springboot3/pet-store-native/src/assembly/native.xml create mode 100644 samples/springboot3/pet-store-native/src/main/java/com/amazonaws/serverless/sample/springboot3/DemoApplication.java create mode 100644 samples/springboot3/pet-store-native/src/main/java/com/amazonaws/serverless/sample/springboot3/HelloController.java create mode 100644 samples/springboot3/pet-store-native/src/main/java/com/amazonaws/serverless/sample/springboot3/controller/PetsController.java create mode 100644 samples/springboot3/pet-store-native/src/main/java/com/amazonaws/serverless/sample/springboot3/filter/CognitoIdentityFilter.java create mode 100644 samples/springboot3/pet-store-native/src/main/java/com/amazonaws/serverless/sample/springboot3/model/Error.java create mode 100644 samples/springboot3/pet-store-native/src/main/java/com/amazonaws/serverless/sample/springboot3/model/Pet.java create mode 100644 samples/springboot3/pet-store-native/src/main/java/com/amazonaws/serverless/sample/springboot3/model/PetData.java create mode 100644 samples/springboot3/pet-store-native/src/main/resources/META-INF/.gitignore create mode 100644 samples/springboot3/pet-store-native/src/main/resources/application.properties create mode 100644 samples/springboot3/pet-store-native/src/shell/java/bootstrap create mode 100644 samples/springboot3/pet-store-native/src/shell/native/bootstrap create mode 100644 samples/springboot3/pet-store-native/template.yaml diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/AsyncInitializationWrapper.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/AsyncInitializationWrapper.java index b6b9b037d..f5264e5f8 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/AsyncInitializationWrapper.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/AsyncInitializationWrapper.java @@ -47,7 +47,7 @@ public class AsyncInitializationWrapper extends InitializationWrapper { private static final boolean ASYNC_INIT_DISABLED = !INITIALIZATION_TYPE.equals(INITIALIZATION_TYPE_ON_DEMAND); private static final int INIT_GRACE_TIME_MS = Integer.parseInt(System.getenv().getOrDefault( INIT_GRACE_TIME_ENVIRONMENT_VARIABLE_NAME, Integer.toString(DEFAULT_INIT_GRACE_TIME_MS))); - private static final int LAMBDA_MAX_INIT_TIME_MS = 10_000; + public static final int LAMBDA_MAX_INIT_TIME_MS = 10_000; private CountDownLatch initializationLatch; private final long actualStartTime; diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index 82b87b468..e7ab41cd9 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -203,8 +203,8 @@ ${basedir}/target/coverage-reports/jacoco-unit.exec - com/amazonaws/serverless/proxy/spring/AWSWebRuntimeEventLoop* - com/amazonaws/serverless/proxy/spring/AWSTypesProcessor* + com/amazonaws/serverless/proxy/spring/AwsSpringWebCustomRuntimeEventLoop* + com/amazonaws/serverless/proxy/spring/AwsSpringAotTypesProcessor* diff --git a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AWSHttpUtils.java b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AWSHttpUtils.java index aa2edefe7..e19226b84 100644 --- a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AWSHttpUtils.java +++ b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AWSHttpUtils.java @@ -14,6 +14,7 @@ import org.springframework.util.MultiValueMapAdapter; import org.springframework.util.StringUtils; +import com.amazonaws.serverless.proxy.AsyncInitializationWrapper; import com.amazonaws.serverless.proxy.AwsHttpApiV2SecurityContextWriter; import com.amazonaws.serverless.proxy.AwsProxySecurityContextWriter; import com.amazonaws.serverless.proxy.RequestReader; @@ -29,18 +30,21 @@ import jakarta.servlet.ServletContext; import jakarta.servlet.http.HttpServletRequest; -public class AWSHttpUtils { +class AWSHttpUtils { - private static Log logger = LogFactory.getLog(AWSWebRuntimeEventLoop.class); + private static Log logger = LogFactory.getLog(AWSHttpUtils.class); + private AWSHttpUtils() { + + } - public static AwsProxyResponse serviceAWS(String gatewayEvent, ServerlessMVC mvc, ObjectMapper mapper, AwsProxyHttpServletResponseWriter responseWriter) { + public static AwsProxyResponse processRequest(String gatewayEvent, ServerlessMVC mvc, ObjectMapper mapper, AwsProxyHttpServletResponseWriter responseWriter) { HttpServletRequest request = AWSHttpUtils.generateHttpServletRequest(gatewayEvent, null, mvc.getServletContext(), mapper); CountDownLatch latch = new CountDownLatch(1); AwsHttpServletResponse response = new AwsHttpServletResponse(request, latch); try { mvc.service(request, response); - latch.await(10, TimeUnit.SECONDS); + latch.await(AsyncInitializationWrapper.LAMBDA_MAX_INIT_TIME_MS, TimeUnit.SECONDS); AwsProxyResponse awsResponse = responseWriter.writeResponse(response, null); return awsResponse; } diff --git a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AWSWebRuntimeInitializer.java b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AWSWebRuntimeInitializer.java index 4d09e6ba2..e6dbd878f 100644 --- a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AWSWebRuntimeInitializer.java +++ b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AWSWebRuntimeInitializer.java @@ -45,9 +45,9 @@ public void initialize(GenericApplicationContext context) { } if (context instanceof ServletWebServerApplicationContext && isCustomRuntime(environment)) { - if (context.getBeanFactory().getBeanNamesForType(AWSWebRuntimeEventLoop.class, false, false).length == 0) { - context.registerBean(StringUtils.uncapitalize(AWSWebRuntimeEventLoop.class.getSimpleName()), - SmartLifecycle.class, () -> new AWSWebRuntimeEventLoop((ServletWebServerApplicationContext) context)); + if (context.getBeanFactory().getBeanNamesForType(AwsSpringWebCustomRuntimeEventLoop.class, false, false).length == 0) { + context.registerBean(StringUtils.uncapitalize(AwsSpringWebCustomRuntimeEventLoop.class.getSimpleName()), + SmartLifecycle.class, () -> new AwsSpringWebCustomRuntimeEventLoop((ServletWebServerApplicationContext) context)); } } } diff --git a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AWSTypesProcessor.java b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringAotTypesProcessor.java similarity index 92% rename from aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AWSTypesProcessor.java rename to aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringAotTypesProcessor.java index 70e961c88..f7fbe9e25 100644 --- a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AWSTypesProcessor.java +++ b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringAotTypesProcessor.java @@ -28,6 +28,7 @@ import com.amazonaws.serverless.proxy.model.ApiGatewayRequestIdentity; import com.amazonaws.serverless.proxy.model.AwsProxyRequest; import com.amazonaws.serverless.proxy.model.AwsProxyRequestContext; +import com.amazonaws.serverless.proxy.model.AwsProxyResponse; import com.amazonaws.serverless.proxy.model.Headers; import com.amazonaws.serverless.proxy.model.MultiValuedTreeMap; import com.amazonaws.serverless.proxy.model.SingleValueHeaders; @@ -40,7 +41,7 @@ * * @author Oleg Zhurakousky */ -public class AWSTypesProcessor implements BeanFactoryInitializationAotProcessor { +public class AwsSpringAotTypesProcessor implements BeanFactoryInitializationAotProcessor { @Override public BeanFactoryInitializationAotContribution processAheadOfTime(ConfigurableListableBeanFactory beanFactory) { @@ -55,6 +56,8 @@ public void applyTo(GenerationContext generationContext, BeanFactoryInitializati runtimeHints.reflection().registerType(AwsProxyRequest.class, MemberCategory.INVOKE_PUBLIC_METHODS, MemberCategory.INVOKE_PUBLIC_CONSTRUCTORS, MemberCategory.DECLARED_FIELDS, MemberCategory.DECLARED_CLASSES); + runtimeHints.reflection().registerType(AwsProxyResponse.class, + MemberCategory.INVOKE_PUBLIC_METHODS, MemberCategory.INVOKE_PUBLIC_CONSTRUCTORS, MemberCategory.DECLARED_FIELDS, MemberCategory.DECLARED_CLASSES); runtimeHints.reflection().registerType(SingleValueHeaders.class, MemberCategory.INVOKE_PUBLIC_METHODS, MemberCategory.INVOKE_PUBLIC_CONSTRUCTORS, MemberCategory.DECLARED_FIELDS, MemberCategory.DECLARED_CLASSES); runtimeHints.reflection().registerType(JsonToken.class, diff --git a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AWSWebRuntimeEventLoop.java b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringWebCustomRuntimeEventLoop.java similarity index 84% rename from aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AWSWebRuntimeEventLoop.java rename to aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringWebCustomRuntimeEventLoop.java index a09f0c0d7..4bb81059f 100644 --- a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AWSWebRuntimeEventLoop.java +++ b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringWebCustomRuntimeEventLoop.java @@ -48,9 +48,9 @@ * @author Mark Sailes * */ -public final class AWSWebRuntimeEventLoop implements SmartLifecycle { +public final class AwsSpringWebCustomRuntimeEventLoop implements SmartLifecycle { - private static Log logger = LogFactory.getLog(AWSWebRuntimeEventLoop.class); + private static Log logger = LogFactory.getLog(AwsSpringWebCustomRuntimeEventLoop.class); static final String LAMBDA_VERSION_DATE = "2018-06-01"; private static final String LAMBDA_ERROR_URL_TEMPLATE = "http://{0}/{1}/runtime/invocation/{2}/error"; @@ -65,7 +65,7 @@ public final class AWSWebRuntimeEventLoop implements SmartLifecycle { private ExecutorService executor = Executors.newSingleThreadExecutor(); - public AWSWebRuntimeEventLoop(ServletWebServerApplicationContext applicationContext) { + public AwsSpringWebCustomRuntimeEventLoop(ServletWebServerApplicationContext applicationContext) { this.applicationContext = applicationContext; } @@ -110,7 +110,7 @@ private void eventLoop(ServletWebServerApplicationContext context) { RequestEntity requestEntity = RequestEntity.get(URI.create(eventUri)) .header("User-Agent", USER_AGENT_VALUE).build(); RestTemplate rest = new RestTemplate(); - ObjectMapper mapper = context.getBean(ObjectMapper.class); + ObjectMapper mapper = new ObjectMapper();//.getBean(ObjectMapper.class); mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); AwsProxyHttpServletResponseWriter responseWriter = new AwsProxyHttpServletResponseWriter(); @@ -128,16 +128,23 @@ private void eventLoop(ServletWebServerApplicationContext context) { try { logger.debug("Submitting request to the user's web application"); - AwsProxyResponse awsResponse = AWSHttpUtils.serviceAWS(incomingEvent.getBody(), mvc, mapper, responseWriter); - + AwsProxyResponse awsResponse = AWSHttpUtils.processRequest(incomingEvent.getBody(), mvc, mapper, responseWriter); if (logger.isDebugEnabled()) { - logger.debug("Received response - body:" + awsResponse.getBody() + - "; status:" + awsResponse.getStatusCode() + "; headers:" + awsResponse.getHeaders()); + 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 result = rest.exchange(RequestEntity.post(URI.create(invocationUrl)) - .header("User-Agent", USER_AGENT_VALUE).body(awsResponse, AwsProxyResponse.class), Object.class); + + ResponseEntity 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()); + } + System.out.println("==> status " + result.getStatusCode()); + System.out.println("==> body " + result.getBody()); logger.debug("Response submitted back to the AWS Gateway"); if (logger.isInfoEnabled()) { logger.info("Result POST status: " + result); diff --git a/aws-serverless-java-container-springboot3/src/main/resources/META-INF/spring/aot.factories b/aws-serverless-java-container-springboot3/src/main/resources/META-INF/spring/aot.factories index 779aeae9d..44acc0d83 100644 --- a/aws-serverless-java-container-springboot3/src/main/resources/META-INF/spring/aot.factories +++ b/aws-serverless-java-container-springboot3/src/main/resources/META-INF/spring/aot.factories @@ -1 +1 @@ -org.springframework.beans.factory.aot.BeanFactoryInitializationAotProcessor=com.amazonaws.serverless.proxy.spring.AWSTypesProcessor \ No newline at end of file +org.springframework.beans.factory.aot.BeanFactoryInitializationAotProcessor=com.amazonaws.serverless.proxy.spring.AwsSpringAotTypesProcessor \ No newline at end of file diff --git a/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/AWSHttpUtilsTests.java b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/AWSHttpUtilsTests.java index 741162f67..61adfdcee 100644 --- a/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/AWSHttpUtilsTests.java +++ b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/AWSHttpUtilsTests.java @@ -221,7 +221,7 @@ public void validateRequestResponse(String jsonEvent) throws Exception { try (ConfigurableApplicationContext context = SpringApplication.run(EmptyApplication.class);) { ServerlessMVC mvc = ServerlessMVC.INSTANCE((ServletWebServerApplicationContext) context); AwsProxyHttpServletResponseWriter responseWriter = new AwsProxyHttpServletResponseWriter(); - AwsProxyResponse awsResponse = AWSHttpUtils.serviceAWS(jsonEvent, mvc, mapper, responseWriter); + AwsProxyResponse awsResponse = AWSHttpUtils.processRequest(jsonEvent, mvc, mapper, responseWriter); assertEquals("hello", awsResponse.getBody()); assertEquals(200, awsResponse.getStatusCode()); } diff --git a/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/AWSWebRuntimeTests.java b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/AWSWebRuntimeTests.java index f6eb7d92d..9903e8f8b 100644 --- a/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/AWSWebRuntimeTests.java +++ b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/AWSWebRuntimeTests.java @@ -19,14 +19,14 @@ public void after() { @Test public void testWebRuntimeInitialization() throws Exception { try (ConfigurableApplicationContext context = SpringApplication.run(EmptyApplication.class);) { - assertFalse(context.getBeansOfType(AWSWebRuntimeEventLoop.class).size() > 0); + assertFalse(context.getBeansOfType(AwsSpringWebCustomRuntimeEventLoop.class).size() > 0); } System.setProperty("_HANDLER", "foo"); - AWSWebRuntimeEventLoop loop = null; + AwsSpringWebCustomRuntimeEventLoop loop = null; try (ConfigurableApplicationContext context = SpringApplication.run(EmptyApplication.class);) { Thread.sleep(100); - assertTrue(context.getBeansOfType(AWSWebRuntimeEventLoop.class).size() > 0); - loop = context.getBean(AWSWebRuntimeEventLoop.class); + assertTrue(context.getBeansOfType(AwsSpringWebCustomRuntimeEventLoop.class).size() > 0); + loop = context.getBean(AwsSpringWebCustomRuntimeEventLoop.class); assertTrue(loop.isRunning()); } assertFalse(loop.isRunning()); diff --git a/samples/springboot3/alt-pet-store/build.gradle b/samples/springboot3/alt-pet-store/build.gradles similarity index 100% rename from samples/springboot3/alt-pet-store/build.gradle rename to samples/springboot3/alt-pet-store/build.gradles diff --git a/samples/springboot3/alt-pet-store/pom.xml b/samples/springboot3/alt-pet-store/pom.xml index cf67ee6fb..a39244f9a 100644 --- a/samples/springboot3/alt-pet-store/pom.xml +++ b/samples/springboot3/alt-pet-store/pom.xml @@ -32,12 +32,6 @@ org.springframework.boot spring-boot-starter - - - - - - diff --git a/samples/springboot3/pet-store-native/.gitignore b/samples/springboot3/pet-store-native/.gitignore new file mode 100644 index 000000000..549e00a2a --- /dev/null +++ b/samples/springboot3/pet-store-native/.gitignore @@ -0,0 +1,33 @@ +HELP.md +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ diff --git a/samples/springboot3/pet-store-native/.mvn/wrapper/maven-wrapper.jar b/samples/springboot3/pet-store-native/.mvn/wrapper/maven-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..cb28b0e37c7d206feb564310fdeec0927af4123a GIT binary patch literal 62547 zcmb5V1CS=sk~Z9!wr$(CZEL#U=Co~N+O}=mwr$(Cds^S@-Tij=#=rmlVk@E|Dyp8$ z$UKz?`Q$l@GN3=8fq)=^fVx`E)Pern1@-q?PE1vZPD);!LGdpP^)C$aAFx&{CzjH` zpQV9;fd0PyFPNN=yp*_@iYmRFcvOrKbU!1a*o)t$0ex(~3z5?bw11HQYW_uDngyer za60w&wz^`W&Z!0XSH^cLNR&k>%)Vr|$}(wfBzmSbuK^)dy#xr@_NZVszJASn12dw; z-KbI5yz=2awY0>OUF)&crfPu&tVl|!>g*#ur@K=$@8N05<_Mldg}X`N6O<~3|Dpk3 zRWb!e7z<{Mr96 z^C{%ROigEIapRGbFA5g4XoQAe_Y1ii3Ci!KV`?$ zZ2Hy1VP#hVp>OOqe~m|lo@^276Ik<~*6eRSOe;$wn_0@St#cJy}qI#RP= zHVMXyFYYX%T_k3MNbtOX{<*_6Htq*o|7~MkS|A|A|8AqKl!%zTirAJGz;R<3&F7_N z)uC9$9K1M-)g0#}tnM(lO2k~W&4xT7gshgZ1-y2Yo-q9Li7%zguh7W#kGfnjo7Cl6 z!^wTtP392HU0aVB!$cPHjdK}yi7xNMp+KVZy3_u}+lBCloJ&C?#NE@y$_{Uv83*iV zhDOcv`=|CiyQ5)C4fghUmxmwBP0fvuR>aV`bZ3{Q4&6-(M@5sHt0M(}WetqItGB1C zCU-)_n-VD;(6T1%0(@6%U`UgUwgJCCdXvI#f%79Elbg4^yucgfW1^ zNF!|C39SaXsqU9kIimX0vZ`U29)>O|Kfs*hXBXC;Cs9_Zos3%8lu)JGm~c19+j8Va z)~kFfHouwMbfRHJ``%9mLj_bCx!<)O9XNq&uH(>(Q0V7-gom7$kxSpjpPiYGG{IT8 zKdjoDkkMTL9-|vXDuUL=B-K)nVaSFd5TsX0v1C$ETE1Ajnhe9ept?d;xVCWMc$MbR zL{-oP*vjp_3%f0b8h!Qija6rzq~E!#7X~8^ZUb#@rnF~sG0hx^Ok?G9dwmit494OT z_WQzm_sR_#%|I`jx5(6aJYTLv;3U#e@*^jms9#~U`eHOZZEB~yn=4UA(=_U#pYn5e zeeaDmq-$-)&)5Y}h1zDbftv>|?GjQ=)qUw*^CkcAG#o%I8i186AbS@;qrezPCQYWHe=q-5zF>xO*Kk|VTZD;t={XqrKfR|{itr~k71VS?cBc=9zgeFbpeQf*Wad-tAW7(o ze6RbNeu31Uebi}b0>|=7ZjH*J+zSj8fy|+T)+X{N8Vv^d+USG3arWZ?pz)WD)VW}P z0!D>}01W#e@VWTL8w1m|h`D(EnHc*C5#1WK4G|C5ViXO$YzKfJkda# z2c2*qXI-StLW*7_c-%Dws+D#Kkv^gL!_=GMn?Y^0J7*3le!!fTzSux%=1T$O8oy8j z%)PQ9!O+>+y+Dw*r`*}y4SpUa21pWJ$gEDXCZg8L+B!pYWd8X;jRBQkN_b=#tb6Nx zVodM4k?gF&R&P=s`B3d@M5Qvr;1;i_w1AI=*rH(G1kVRMC`_nohm~Ie5^YWYqZMV2<`J* z`i)p799U_mcUjKYn!^T&hu7`Lw$PkddV&W(ni)y|9f}rGr|i-7nnfH6nyB$Q{(*Nv zZz@~rzWM#V@sjT3ewv9c`pP@xM6D!StnV@qCdO${loe(4Gy00NDF5&@Ku;h2P+Vh7 z(X6De$cX5@V}DHXG?K^6mV>XiT768Ee^ye&Cs=2yefVcFn|G zBz$~J(ld&1j@%`sBK^^0Gs$I$q9{R}!HhVu|B@Bhb29PF(%U6#P|T|{ughrfjB@s- zZ)nWbT=6f6aVyk86h(0{NqFg#_d-&q^A@E2l0Iu0(C1@^s6Y-G0r32qll>aW3cHP# zyH`KWu&2?XrIGVB6LOgb+$1zrsW>c2!a(2Y!TnGSAg(|akb#ROpk$~$h}jiY&nWEz zmMxk4&H$8yk(6GKOLQCx$Ji-5H%$Oo4l7~@gbHzNj;iC%_g-+`hCf=YA>Z&F)I1sI z%?Mm27>#i5b5x*U%#QE0wgsN|L73Qf%Mq)QW@O+)a;#mQN?b8e#X%wHbZyA_F+`P%-1SZVnTPPMermk1Rpm#(;z^tMJqwt zDMHw=^c9%?#BcjyPGZFlGOC12RN(i`QAez>VM4#BK&Tm~MZ_!#U8PR->|l+38rIqk zap{3_ei_txm=KL<4p_ukI`9GAEZ+--)Z%)I+9LYO!c|rF=Da5DE@8%g-Zb*O-z8Tv zzbvTzeUcYFgy{b)8Q6+BPl*C}p~DiX%RHMlZf;NmCH;xy=D6Ii;tGU~ zM?k;9X_E?)-wP|VRChb4LrAL*?XD6R2L(MxRFolr6GJ$C>Ihr*nv#lBU>Yklt`-bQ zr;5c(o}R!m4PRz=CnYcQv}m?O=CA(PWBW0?)UY)5d4Kf;8-HU@=xMnA#uw{g`hK{U zB-EQG%T-7FMuUQ;r2xgBi1w69b-Jk8Kujr>`C#&kw-kx_R_GLRC}oum#c{je^h&x9 zoEe)8uUX|SahpME4SEog-5X^wQE0^I!YEHlwawJ|l^^0kD)z{o4^I$Eha$5tzD*A8 zR<*lss4U5N*JCYl;sxBaQkB3M8VT|gXibxFR-NH4Hsmw|{={*Xk)%!$IeqpW&($DQ zuf$~fL+;QIaK?EUfKSX;Gpbm8{<=v#$SrH~P-it--v1kL>3SbJS@>hAE2x_k1-iK# zRN~My-v@dGN3E#c!V1(nOH>vJ{rcOVCx$5s7B?7EKe%B`bbx(8}km#t2a z1A~COG(S4C7~h~k+3;NkxdA4gbB7bRVbm%$DXK0TSBI=Ph6f+PA@$t){_NrRLb`jp zn1u=O0C8%&`rdQgO3kEi#QqiBQcBcbG3wqPrJ8+0r<`L0Co-n8y-NbWbx;}DTq@FD z1b)B$b>Nwx^2;+oIcgW(4I`5DeLE$mWYYc7#tishbd;Y!oQLxI>?6_zq7Ej)92xAZ z!D0mfl|v4EC<3(06V8m+BS)Vx90b=xBSTwTznptIbt5u5KD54$vwl|kp#RpZuJ*k) z>jw52JS&x)9&g3RDXGV zElux37>A=`#5(UuRx&d4qxrV<38_w?#plbw03l9>Nz$Y zZS;fNq6>cGvoASa2y(D&qR9_{@tVrnvduek+riBR#VCG|4Ne^w@mf2Y;-k90%V zpA6dVw|naH;pM~VAwLcQZ|pyTEr;_S2GpkB?7)+?cW{0yE$G43`viTn+^}IPNlDo3 zmE`*)*tFe^=p+a{a5xR;H0r=&!u9y)kYUv@;NUKZ)`u-KFTv0S&FTEQc;D3d|KEKSxirI9TtAWe#hvOXV z>807~TWI~^rL?)WMmi!T!j-vjsw@f11?#jNTu^cmjp!+A1f__Dw!7oqF>&r$V7gc< z?6D92h~Y?faUD+I8V!w~8Z%ws5S{20(AkaTZc>=z`ZK=>ik1td7Op#vAnD;8S zh<>2tmEZiSm-nEjuaWVE)aUXp$BumSS;qw#Xy7-yeq)(<{2G#ap8z)+lTi( ziMb-iig6!==yk zb6{;1hs`#qO5OJQlcJ|62g!?fbI^6v-(`tAQ%Drjcm!`-$%Q#@yw3pf`mXjN>=BSH z(Nftnf50zUUTK;htPt0ONKJq1_d0!a^g>DeNCNpoyZhsnch+s|jXg1!NnEv%li2yw zL}Y=P3u`S%Fj)lhWv0vF4}R;rh4&}2YB8B!|7^}a{#Oac|%oFdMToRrWxEIEN<0CG@_j#R4%R4i0$*6xzzr}^`rI!#y9Xkr{+Rt9G$*@ zQ}XJ+_dl^9@(QYdlXLIMI_Q2uSl>N9g*YXMjddFvVouadTFwyNOT0uG$p!rGF5*`1 z&xsKPj&;t10m&pdPv+LpZd$pyI_v1IJnMD%kWn{vY=O3k1sJRYwPoDV1S4OfVz4FB z$^ygjgHCW=ySKSsoSA&wSlq83JB+O-)s>>e@a{_FjB{@=AlrX7wq>JE=n@}@fba(;n4EG| zge1i)?NE@M@DC5eEv4; z#R~0aNssmFHANL@-eDq2_jFn=MXE9y>1FZH4&v<}vEdB6Kz^l)X%%X@E#4)ahB(KY zx8RH+1*6b|o1$_lRqi^)qoLs;eV5zkKSN;HDwJIx#ceKS!A$ZJ-BpJSc*zl+D~EM2 zm@Kpq2M*kX`;gES_Dd1Y#UH`i!#1HdehqP^{DA-AW^dV(UPu|O@Hvr>?X3^~=1iaRa~AVXbj z-yGL<(5}*)su2Tj#oIt+c6Gh}$0|sUYGGDzNMX+$Oi$e&UJt3&kwu)HX+XP{es(S3 z%9C9y({_fu>^BKjI7k;mZ4DKrdqxw`IM#8{Sh?X(6WE4S6-9M}U0&e32fV$2w{`19 zd=9JfCaYm@J$;nSG3(|byYDqh>c%`JW)W*Y0&K~g6)W?AvVP&DsF_6!fG3i%j^Q>R zR_j5@NguaZB{&XjXF+~6m|utO*pxq$8?0GjW0J-e6Lnf0c@}hvom8KOnirhjOM7!n zP#Iv^0_BqJI?hR5+Dl}p!7X}^NvFOCGvh9y*hgik<&X)3UcEBCdUr$Dt8?0f&LSur ze*n!(V(7umZ%UCS>Hf(g=}39OcvGbf2+D;OZ089m_nUbdCE0PXJfnyrIlLXGh2D!m zK=C#{JmoHY1ws47L0zeWkxxV=A%V8a&E^w%;fBp`PN_ndicD@oN?p?Bu~20>;h;W` ztV=hI*Ts$6JXOwOY?sOk_1xjzNYA#40dD}|js#3V{SLhPEkn5>Ma+cGQi*#`g-*g56Q&@!dg)|1YpLai3Bu8a;l2fnD6&)MZ~hS%&J}k z2p-wG=S|5YGy*Rcnm<9VIVq%~`Q{g(Vq4V)CP257v06=M2W|8AgZO0CC_}HVQ>`VU zy;2LDlG1iwIeMj?l40_`21Qsm?d=1~6f4@_&`lp~pIeXnR)wF0z7FH&wu~L~mfmMr zY4_w6tc{ZP&sa&Ui@UxZ*!UovRT})(p!GtQh~+AMZ6wcqMXM*4r@EaUdt>;Qs2Nt8 zDCJi#^Rwx|T|j_kZi6K!X>Ir%%UxaH>m6I9Yp;Sr;DKJ@{)dz4hpG>jX?>iiXzVQ0 zR$IzL8q11KPvIWIT{hU`TrFyI0YQh`#>J4XE*3;v^07C004~FC7TlRVVC}<}LC4h_ zZjZ)2*#)JyXPHcwte!}{y%i_!{^KwF9qzIRst@oUu~4m;1J_qR;Pz1KSI{rXY5_I_ z%gWC*%bNsb;v?>+TbM$qT`_U8{-g@egY=7+SN#(?RE<2nfrWrOn2OXK!ek7v`aDrH zxCoFHyA&@^@m+#Y(*cohQ4B76me;)(t}{#7?E$_u#1fv)vUE5K;jmlgYI0$Mo!*EA zf?dx$4L(?nyFbv|AF1kB!$P_q)wk1*@L0>mSC(A8f4Rgmv1HG;QDWFj<(1oz)JHr+cP|EPET zSD~QW&W(W?1PF-iZ()b|UrnB(#wG^NR!*X}t~OS-21dpXq)h)YcdA(1A`2nzVFax9rx~WuN=SVt`OIR=eE@$^9&Gx_HCfN= zI(V`)Jn+tJPF~mS?ED7#InwS&6OfH;qDzI_8@t>In6nl zo}q{Ds*cTG*w3CH{Mw9*Zs|iDH^KqmhlLp_+wfwIS24G z{c@fdgqy^Y)RNpI7va^nYr9;18t|j=AYDMpj)j1oNE;8+QQ)ap8O??lv%jbrb*a;} z?OvnGXbtE9zt;TOyWc|$9BeSGQbfNZR`o_C!kMr|mzFvN+5;g2TgFo8DzgS2kkuw@ z=`Gq?xbAPzyf3MQ^ZXp>Gx4GwPD))qv<1EreWT!S@H-IpO{TPP1se8Yv8f@Xw>B}Y z@#;egDL_+0WDA)AuP5@5Dyefuu&0g;P>ro9Qr>@2-VDrb(-whYxmWgkRGE(KC2LwS z;ya>ASBlDMtcZCCD8h+Awq1%A|Hbx)rpn`REck#(J^SbjiHXe-jBp!?>~DC7Wb?mC z_AN+^nOt;3tPnaRZBEpB6s|hCcFouWlA{3QJHP!EPBq1``CIsgMCYD#80(bsKpvwO)0#)1{ zos6v&9c=%W0G-T@9sfSLxeGZvnHk$SnHw57+5X4!u1dvH0YwOvuZ7M^2YOKra0dqR zD`K@MTs(k@h>VeI5UYI%n7#3L_WXVnpu$Vr-g}gEE>Y8ZQQsj_wbl&t6nj{;ga4q8SN#Z6cBZepMoyv7MF-tnnZp*(8jq848yZ zsG_fP$Y-rtCAPPI7QC^nzQjlk;p3tk88!1dJuEFZ!BoB;c!T>L>xSD<#+4X%*;_IB z0bZ%-SLOi5DV7uo{z}YLKHsOHfFIYlu8h(?gRs9@bbzk&dkvw*CWnV;GTAKOZfbY9 z(nKOTQ?fRRs(pr@KsUDq@*P`YUk4j=m?FIoIr)pHUCSE84|Qcf6GucZBRt;6oq_8Z zP^R{LRMo?8>5oaye)Jgg9?H}q?%m@2bBI!XOOP1B0s$%htwA&XuR`=chDc2)ebgna zFWvevD|V882V)@vt|>eeB+@<-L0^6NN%B5BREi8K=GwHVh6X>kCN+R3l{%oJw5g>F zrj$rp$9 zhepggNYDlBLM;Q*CB&%w zW+aY{Mj{=;Rc0dkUw~k)SwgT$RVEn+1QV;%<*FZg!1OcfOcLiF@~k$`IG|E8J0?R2 zk?iDGLR*b|9#WhNLtavx0&=Nx2NII{!@1T78VEA*I#65C`b5)8cGclxKQoVFM$P({ zLwJKo9!9xN4Q8a2F`xL&_>KZfN zOK?5jP%CT{^m4_jZahnn4DrqgTr%(e_({|z2`C2NrR6=v9 z*|55wrjpExm3M&wQ^P?rQPmkI9Z9jlcB~4IfYuLaBV95OGm#E|YwBvj5Z}L~f`&wc zrFo!zLX*C{d2}OGE{YCxyPDNV(%RZ7;;6oM*5a>5LmLy~_NIuhXTy-*>*^oo1L;`o zlY#igc#sXmsfGHA{Vu$lCq$&Ok|9~pSl5Q3csNqZc-!a;O@R$G28a@Sg#&gnrYFsk z&OjZtfIdsr%RV)bh>{>f883aoWuYCPDP{_)%yQhVdYh;6(EOO=;ztX1>n-LcOvCIr zKPLkb`WG2;>r)LTp!~AlXjf-Oe3k`Chvw$l7SB2bA=x3s$;;VTFL0QcHliysKd^*n zg-SNbtPnMAIBX7uiwi&vS)`dunX$}x)f=iwHH;OS6jZ9dYJ^wQ=F#j9U{wJ9eGH^#vzm$HIm->xSO>WQ~nwLYQ8FS|?l!vWL<%j1~P<+07ZMKkTqE0F*Oy1FchM z2(Nx-db%$WC~|loN~e!U`A4)V4@A|gPZh`TA18`yO1{ z(?VA_M6SYp-A#%JEppNHsV~kgW+*Ez=?H?GV!<$F^nOd+SZX(f0IoC#@A=TDv4B2M z%G-laS}yqR0f+qnYW_e7E;5$Q!eO-%XWZML++hz$Xaq@c%2&ognqB2%k;Cs!WA6vl z{6s3fwj*0Q_odHNXd(8234^=Asmc0#8ChzaSyIeCkO(wxqC=R`cZY1|TSK)EYx{W9 z!YXa8GER#Hx<^$eY>{d;u8*+0ocvY0f#D-}KO!`zyDD$%z1*2KI>T+Xmp)%%7c$P< zvTF;ea#Zfzz51>&s<=tS74(t=Hm0dIncn~&zaxiohmQn>6x`R+%vT%~Dhc%RQ=Cj^ z&%gxxQo!zAsu6Z+Ud#P!%3is<%*dJXe!*wZ-yidw|zw|C`cR z`fiF^(yZt?p{ZX|8Ita)UC$=fg6wOve?w+8ww|^7OQ0d zN(3dmJ@mV8>74I$kQl8NM%aC+2l?ZQ2pqkMs{&q(|4hwNM z^xYnjj)q6uAK@m|H$g2ARS2($e9aqGYlEED9sT?~{isH3Sk}kjmZ05Atkgh^M6VNP zX7@!i@k$yRsDK8RA1iqi0}#Phs7y(bKYAQbO9y=~10?8cXtIC4@gF#xZS;y3mAI`h zZ^VmqwJ%W>kisQ!J6R?Zjcgar;Il%$jI*@y)B+fn^53jQd0`)=C~w%Lo?qw!q3fVi{~2arObUM{s=q)hgBn64~)W0tyi?(vlFb z>tCE=B1cbfyY=V38fUGN(#vmn1aY!@v_c70}pa(Lrle-(-SH8Nd!emQF zf3kz0cE~KzB%37B24|e=l4)L}g1AF@v%J*A;5F7li!>I0`lfO9TR+ak`xyqWnj5iwJ$>t_vp(bet2p(jRD;5Q9x2*`|FA4#5cfo8SF@cW zeO{H7C0_YJ*P@_BEvm2dB}pUDYXq@G1^Ee#NY9Q`l`$BUXb01#lmQk^{g3?aaP~(* zD;INgi#8TDZ&*@ZKhx$jA^H-H1Lp`%`O{Y{@_o!+7ST}{Ng^P;X>~Bci{|Qdf1{}p z_kK+zL;>D30r6~R?|h!5NKYOi6X&I5)|ME+NG>d9^`hxKpU^)KBOpZiU^ z;|SzGWtbaclC-%9(zR-|q}kB8H&($nsB1LPAkgcm+Qs@cAov{IXxo5PHrH(8DuEMb z3_R#>7^jjGeS7$!`}m8!8$z|)I~{dhd)SvoH9oR9#LjO{{8O&r7w{d9V1z^syn&E6 z{DG0vlQF_Yb3*|>RzVop^{$mWp|%NDYj@4{d*-@O^<(=L=DMFIQHEp-dtz@1Rumd; zadt^4B#(uUyM6aeUJkGl0GfaULpR!2Ql&q$nEV^+SiDptdPbuJ=VJ)`czZ@&HPUuj zc5dSRB&xk)dI~;6N?wkzI}}4K3i%I=EnlKGpPJ9hu?mNzH7|H0j(mN3(ubdaps3GM z1i+9gk=!$mH=L#LRDf4!mXw0;uxSUIXhl|#h*uK+fQPilJc8RCK9GNPt=X^8`*;3$ zBBo77gkGB5F8a8)*OR10nK&~8CEMPVQyhY>i`PS{L^-*WAz$ljtU%zlG1lm%%U4Zw zms0oZR8b|`>4U1X*9JLQQ>m9MF5%ppoafz^;`7DbmmIENrc$hucekkE4I83WhT%(9 zMaE;f7`g4B#vl(#tNP8$3q{$&oY*oa0HLX6D?xTW3M6f<^{%CK4OE1Pmfue`M6Dh= z&Z-zrq$^xhP%|hU&)(+2KSSpeHgX^0?gRZ5wA8@%%9~@|*Ylux1M{WQ4ekG(T+_b` zb6I)QRGp%fRF)^T?i^j&JDBhfNU9?>Sl6WVMM%S?7< ze|4gaDbPooB=F4Y=>~_+y~Q1{Ox@%q>v+_ZIOfnz5y+qy zhi+^!CE*Lv-}>g^%G=bGLqD(aTN;yHDBH#tOC=X02}QU~Xdme``Wn>N>6{VwgU~Z>g+0 zxv0`>>iSfu$baHMw8(^FL6QWe;}(U>@;8j)t)yHAOj?SdeH;evFx-kpU@nT>lsrUt zqhV}2pD^5bC4786guG1`5|fK@pE6xcT#ns)vR|^?A08G62teHaE&p`ZrCBj_Swt*~dVt=5*RK6Y{% zABqK$X59BnrK3r3u=wxklRnA1uh+q`?T0kE1YhvDWF4OY#<(+V|R@R%tdkq2huF(!Ip+EpZF3zr*|9pmKHPo)Cu z;H+^s&`Ql}u=Jt~ZWj`bAw|i-3#7(2WuRU3DU{BW8`?!O?YO1M$*MMTsaEM!5Jyp~ z!gp6yR4$O%wQ8%dyz43ZPeoJwy;o;yg=S0^Y}%|)to>=N^`!3VMf1~}OZ`Dl$q&|w z9$!i3!i1uAgPTuKSWdBrDr*N$g=E#mdqfj*h;Z}OG`{n245+g;IKfdn!&gF2OtHaD zyGDzj@@d2!P(_Ux)3v;1ABTj__{w*kaRF-1YVU`})Acgk?(T*1YqEve3=5)8bkZK* z!Tus*e$h@^u z>#zV0771Bix~r&h2FJ9)%N{>s>?2tk1$bId)1#G;OKgn-U8jUo^AK;Hu)hQEi}swD(264kAS-SBCD$R(Ro0rh8~Le zzRwxbz_JHDbD+hTX15AWmVw!#rC)-zeZahQQmo6FG1)ah3uuyIuTMof}RO!`Y3^Fxn_-G$23RDOh(@NU?r6`*S?#E50)w zpcsgDZ-iO{;EesgDQq9;p*C#QH(sp~2w^zAJWaUL%@yo)iIL6y8;e_}=dwQc%k%;H zFt5lenH*`}LWd+fPqi;exJeRZgl&nLR%|a!%1x0RQ54cgyWBYrL>sskcAtPxi&8c( zw_K?sI*3n%S;lKiYpveBN08{rgV&-B1NN5Jiu07~%n#%&f!(R(z1)xsxtRBkg#+Lv zh21zX?aYDd_f}qdA`Os*j!eC<5)iUJ&Twj7?*p%vEOGElGhpRZsccM!<k}DeC;TY;rULQs3e}lZyP#UVb=6 zB$Dkm2FaHWUXr7<{R&46sfZ)&(HXxB_=e`%LZci`s7L6c-L7iF&wdmTJz`*^=jD~* zpOZ@jcq8LezVkE^M6D9^QgZqnX&x*mr1_Cf#R9R3&{i3%v#}V$UZzGC;Or*=Dw5SXBC6NV|sGZp^#%RTimyaj@!ZuyJ z6C+r}O1TsAzV9PAa*Gd!9#FQMl)ZLHzTr99biAqA(dz-m9LeIeKny3YB=*+|#-Gq# zaErUR5Z*Wh^e<+wcm70eW;f-g=YTbMiDX)AznDM6B73)T4r%nq+*hKcKF?)#vbv?K zPMe=sFCuC*ZqsBPh-?g!m*O`}6<}Pfj}Y1n9|Y@cUdD5GX_)6Sx9pPfS7 zxkt?g6ZwJ+50C7qrh6dMFmr7qah`FskT_H=GC92vkVh$WfZa2%5L99_DxyM{$#6HQ zx$VR-Wwt!q9JL2{ybEGJr$^?!V4m_BqDqt!mbs=QjHf340+^a{)waVvP0+98(BA$M ztWr&sM=juyYgvf`(SC}+y@QtYgU>0ghJ6VbU}|kEraR&&W%#;!#KI?le%g`e>ZVPiDrneh#&1(Y?uiMo^f5qo@{JEr(p9>8GhDa+PC9yG;lX+D?hQ^fZB&Sdox219zUj_5;+n<0@Wi3@DK`MU8FM!OFJ z8*_mTA-u!Ab#95FRVWTIqAL#BVQGxE_s?>Ql|@0o9vos&r<_4d!+Q6(_270)6#lu$ zV!j$a?_V0I<(3Z=J7C-K0a^Kc1Go9p&T6yQeAD+)dG-$a&%Fo0AOte~_Z&_m2@ue~ z9cKFf-A41Dz31Ooj9FSR`l?H5UtdP?JS=UU$jF#znE1k@0g%K?KQuwZkfDI3Ai)(q z#x_Yo6WR_Y@#6I_02S&NpcP<%sw!!M_3#*8qa+*4rS@x=i{-2K#*Qr)*Q$-{<_(<| z0730e+rubnT38*m;|$-4!1r6u&Ua2kO_s-(7*NGgDTe##%I>_9uW;X__b_k)xlv$; zW%K2hsmr>5e^Z~`tS-eUgWmSF9}Yg8E}qydSVX0nYZMX_x94QK?tw2>^;raVTqstR zIrNAX2`X~|h->dTOb9IrA!i5INpLV}99ES|i0ldzC`;R$FBY5&7+TIy8%GO8SZ37_ zw=^Swk?z+j-&0-cTE|LU0q@IKRa&C6ZlXbSa2vN5r-)*f<3{wLV*uJUw980AFkWN7 zKh{?97GmVu-0rs9FB6ludy|n`gN5p~?y51aJzBg6#+-=0pWdZ2n4xTiQ=&3As-!-6 zFlb|ssAJEJL#s8(=odfz8^9b#@RrvNE4gjuEITzAd7R4+rq$yEJKXP?6D@yM7xZ&^ z@%jnE3}bteJo{p(l`hu`Yvzg9I#~>(T;>c;ufeLfc!m3D&RaQS=gAtEO-WbI+f_#| zaVpq-<%~=27U8*qlVCuI6z9@j)#R!z3{jc>&I(qT-8IBW57_$z5Qm3gVC1TcWJNc% zDk?H3%QHno@fu9nT%L^K)=#sRiRNg|=%M zR;8BE)QA4#Dsg^EakzttRg9pkfIrF3iVYVM#*_+#3X+~qeZc^WQJvEyVlO@9=0pl!ayNOh|{j0j^a z+zi_$_0QKhwArW)sJ$wji;A`?$ecbr?(4x5%2pLgh#wggbt)#T^2R3a9m+>GcrUxU z*u-WTgHAN*e!0;Wa%1k)J_P(Vdp>vwrROTVae@6Wn04q4JL-)g&bWO6PWGuN2Q*s9 zn47Q2bIn4=!P1k0jN_U#+`Ah59zRD??jY?s;U;k@%q87=dM*_yvLN0->qswJWb zImaj{Ah&`)C$u#E0mfZh;iyyWNyEg;w0v%QS5 zGXqad{`>!XZJ%+nT+DiVm;lahOGmZyeqJ-;D&!S3d%CQS4ZFM zkzq5U^O|vIsU_erz_^^$|D0E3(i*&fF-fN}8!k3ugsUmW1{&dgnk!|>z2At?h^^T@ zWN_|`?#UM!FwqmSAgD6Hw%VM|fEAlhIA~^S@d@o<`-sxtE(|<><#76_5^l)Xr|l}Q zd@7Fa8Bj1ICqcy2fKl1rD4TYd84)PG5Ee2W4Nt@NNmpJWvc3q@@*c;~%^Vasf2H`y z+~U-19wtFT?@yIFc4SE_ab?s@wEUfSkOED}+qVjjy>=eac2^S^+|_3%cjH%EUTJ&r znp9q?RbStJcT*Vi{3KDa^jr4>{5x+?!1)8c2SqiCEzE$TQ+`3KPQQnG8_Qk<^)y_o zt1Q^f{#yCUt!1e(3;E6y?>p+7sGAYLp`lA3c~Y`re9q&`c6>0?c0E2Ap5seFv92#X z1Vldj!7A8@8tWr&?%;EBQ_Fwd)8A3!wIx`V!~~h(!$pCy7=&*+*uIzG@*d%*{qG#4 zX0^}}sRN^N=p{w(+yjv%xwb!%lnVTE7l1l6gJwQmq_G83J&Y98$S!r*L8}IiIa2E= zE!0tbOuEDb*No0-KB{zjo1k#_4FHtr{!)>o+Y@bll}Sa6D^xktI0H&l{jKAK)A(iz zB-N00F?~Z}Y7tG+vp)-q*v71(C}65$-=uXx^|R$xx9zZip-V>Hqeyfd(wteM)+!!H z$s+>g4I@+`h2>C|J;PhvtOq)`xm4;CyF}R<)!ma3T{Vf_5|zo;D4YI4ZDBkE(vMeE zb#ZV;n}CgA0w8x!UC2&5Z(K)9bibj#?~>R(72lFx_Am~jS?;7mo~p+05~XGD+(wV4 zEVYnf0N5+-7O+Gc1L!sPGUHv<6=cV8}*m$m`kBs@z zy;goR(?J^JrB7uXXpD00+SD0luk!vK3wwp(N%|X!HmO{xC#OMYQ&a7Yqv-54iEUK4 zVH;)rY6)pUX~ESvQK^w|&}>J{I?YlvOhpMgt-JB}m5Br`Q9X+^8+Xa%S81hO<1t#h zbS+MljFP1J0GGNR1}KwE=cfey%;@n&@Kli+Z5d>daJjbvuO3dW{r$1FT0j zR$c9$t~P50P+NhG^krLH%k}wsQ%mm+@#c;-c9>rYy;8#(jZ|KA8RrmnN2~>w0ciU7 zGiLC?Q^{^Ox-9F()RE^>Xq(MAbGaT0^6jc>M5^*&uc@YGt5Iw4i{6_z5}H$oO`arY z4BT(POK%DnxbH>P$A;OWPb@gYS96F7`jTn6JO@hdM za>_p!1mf?ULJZb1w-+HamqN__2CtI%VK`k^(++Ga0%z*z@k0wYJDqT^)~%|4O299; zh1_iRtc7you(kOK8?Q$R7v-@Qk4+i=8GD2_zI0%{Ra`_prF{+UPW^m5MCA&4ZUpZb z2*!)KA8b--Upp~U%f+rsmCmV~!Y>Gzl#yVvZER2h;f&rkdx{r#9mc8DZMJaQXs?SL zCg3#>xR6ve8&YkP*`Z=lng|Ow+h@t*!Ial*XQg3P;VS8@E1C)VS`?L9N+rxlD7bxC z3@Ag)Vu?#ykY`ND+GvRYTUP&-KDMiqly$Z~uFXt^)4Jjk9RIs*&$?-UPM*d7&m${m zm12kaN3mV1J|c6f$>V+{lvHp~XVW3DU0;cBR>7|)4bo{xa1-ts-lYU-Q-b)_fVVl`EP5X}+J9EzT20x8XIv=m7witdu7!3Lh=KE#OyKpT1GWk{YAo^ny|fvZt<+jmsFs=l*%e& zmRkBt5ccv4O7!HAyv2~rsq*(FmMTm?@TX3&1`nu|7C^F{ad%GLuoX}Rl}6`)uHF_xlx^gVca+mGH4T8u8;q{S*x3=j;kelz^atO~)v!Q_BT z4H6%IA}bvfuk0_vweELeEl8N5w-Q1GF!@f{VKnbyYB2?}d&QvI-j}~RI_+9t9$tC2 z94m=3eLi=sQb^S5;fqP?3aaXc&`}`lq z&M8dOXvxx9Y1^u_ZQHhO+qP}nwkvJhwoz$Mp6Qcq^7M#eWm}!3U@s07hop` zW24|J{t$aB`W>uBTssEvYMyi$hkaOqWh+^(RV_1MYnE0XPgW?7sBDk=Cqs(;$qrPEflqa0ZE?A3cBfW%0RPA235Wb6@=R_d>Sez; z`spwa50bq?-zh+id~Q!T`AYn`$GHzs;jxIw(A1_Ql&f|qP}|bon#H;sjKmSDM!nyn z>bU8l%3DB3F+$}|J^da!!pN|DO!Ndc2J)wMk!+Rr1hes#V}5o(?(yQSphn|9_aU<- zn|nsDS{^x&tweP;Ft`2ur>Koo2IdXJDsr6IN)7vB41Yy-^Wbo9*2th2QA@C zE0-0Gk12YOO?d_Guu6b3&(PIL`d zh4{`k54hu9o%v1K3PGuccez-wdC<&2fp)>`qIIaf)R{5un7-vwm=>LD7ibnJ$|KyE zzw`X*tM0S|V(I3vf454PY{yA5lbE+36_<1kd=&0Xy4jfvUKZ0$Jq!AG4KS7DrE9rph;dK^6*#CIU9qu7 z?)6O`TN&MCWGmUVd1@E2ow2`vZ1A#nGo8_n!dmX77DCgAP1va*ILU+!a&$zdm6Pa6 z4#|*&3dM+r_RJb%!0}7X!An&T4a4@ejqNJ;=1YVQ{J6|oURuj8MBZ8i7l=zz%S4-; zL}=M^wU43lZVwNJgN|#xIfo$aZfY#odZ6~z?aNn=oR1@zDb=a(o3w`IGu&j>6lYxL z&MtqINe4Z>bdsHNkVIu$Dbq0wc#X-xev221e~L zbm8kJ(Xzij$gF4Ij0(yuR?H1hShSy@{WXsHyKtAedk4O!IdpR{E32Oqp{1TD{usJi zGG@{3A$x%R*pp8b$RQo4w&eDhN`&b~iZ2m3U>@9p1o5kXoEVmHX7I6Uw4dn((mFw` zilWrqFd=F5sH$&*(eJB52zaLwRe zz`sruIc=Ck75>v5P5kd>B2u=drvGPg6s&k5^W!%CDxtRO)V6_Y_QP{%7B>E~vyMLG zhrfn8kijyK&bX+rZsnSJ26!j$1x+V!Pyn|ph%sXWr9^f&lf|C;+I^Fi_4;`-LJI&F zr;5O@#4jZX=Yaw0`pUyfF4J8A9wE#7_9!X|_s8~YUzWu&#E^%4NxUA3*jK-F5R3LP2|msHBLmiMIzVpPAEX)2 zLKYjm3VI4r#7|nP^}-}rL+Q4?LqlmBnbL+R8P%8VmV{`wP0=~2)LptW_i682*sUR# z+EifOk_cWVKg-iWr^Qf4cs^3&@BFRC6n0vu{HqZzNqW1{m)3K@gi$i}O(hT`f#bT- z8PqCdSj~FncPNmMKl9i9QPH1OMhvd42zLL~qWVup#nIJRg_?7KQ-g3jGTt5ywN;Qx zwmz4dddJYIOsC8VqC2R%NQ>zm=PJH70kS|EsEB>2Otmtf-18`jUGA6kMZL3vEASDN zNX%?0+=vgsUz!dxZ@~)eU17m4pN3xGC0T;#a@b9Iu0g_v*a3|ck^s_DVA^%yH-wt= zm1)7&q6&Rq#)nc9PQ6DKD{NU=&ul10rTiIe!)x^PS~=K(wX9|?k&{Mv&S$iL9@H7= zG0w~UxKXLF003zJ-H%fGA4Db9{~#p&Bl7ki^SWwv2sfoAlrLMvza)uh;7Aa_@FL4b z4G>`j5Mn9e5JrrN#R$wiB(!6@lU@49(tawM&oma6lB$-^!Pmmo;&j57CDmKi)yesg~P;lJPy9D(!;n;^1ql)$5uYf~f z&GywSWx=ABov_%8pCx=g-gww_u26?5st=rdeExu?5dvj^C?ZZxDv@Si^nX~2qA&K= z2jr;{=L(x~9GLXrIGXs>dehU^D}_NMCMegdtNVWyx)8xHT6Qu!R>?%@RvADs9er;NMkweUBFNrBm1F5e0_>^%CwM6ui}K_MpRqLS0*@lAcj zB6TTCBv>w2qh)qU3*kN+6tPmMQx|5Z0A4n67U-nss90Ec_rDF}r)IR4PE{$8;BSt= zT%6|jyD^(w6a*A5>_|TkMqx~e$n@8{`q?|)Q&Y4UWcI!yP-8AwBQ#P`%M&ib;}pli z9KAPU_9txQ3zOM#(x}*lN8q$2(Tq1yT4RN0!t~|&RdQMXfm!81d0ZuyD}aG3r4+g` z8Aevs3E_ssRAMR+&*Q30M!J5&o%^(3$ZJ=PLZ9<@x^0nb>dm17;8EQJE>hLgR(Wc% zn_LXw|5=b$6%X zS~ClDAZ?wdQrtKcV9>_v1_IXqy)?<@cGGq#!H`DNOE1hb4*P_@tGbMy6r@iCN=NiA zL1jLwuMw&N-e9H(v7>HGwqegSgD{GSzZ@sZ?g5Y`fuZ^X2hL=qeFO(;u|QZl1|HmW zYv+kq#fq_Kzr_LaezT zqIkG6R+ve#k6!xy*}@Kz@jcRaG9g|~j5fAYegGOE0k8+qtF?EgI99h*W}Cw z7TP&T0tz4QxiW!r zF4?|!WiNo=$ZCyrom-ep7y}(MVWOWxL+9?AlhX<>p||=VzvX`lUX(EdR^e5m%Rp_q zim6JL6{>S%OKoX(0FS>c1zY|;&!%i-sSE>ybYX3&^>zb`NPj7?N^ydh=s=0fpyyz% zraFILQ17_9<ettJJt~I+sl=&CPHwz zC9dEb#QFQcY?bk11Y=tEl{t+2IG`QFmYS>ECl;kv=N6&_xJLQt>}ZQiFSf+!D*4Ar zGJ~LFB7e_2AQaxg*h{$!eJ6=smO(d2ZNmwzcy3OG@)kNymCWS44|>fP^7QkJHkE9JmLryhcxFASKb4GYkJ|u^Fj=VdF0%6kgKllkt zC|_ov2R4cJ2QjjYjT6jE#J1J<xaNC>Xm;0SX<`LuW*}*{yQ3c9{Zl=<9NP z^2g5rAdO!-b4XfeBrXa4f{M0&VDrq+ps&2C8FYl@S59?edhp~7ee>GR$zQI4r8ONi zP^OA+8zrTAxOMx5ZBS03RS@J_V`3{QsOxznx6Yt*$IuEd3%R|Ki&zZkjNvrxlPD$m z%K+rwM!`E&Z46ogXCu!3 z8use`FJJ?g_xi?~?MxZYXEu=F=XTC8P3{W*CbG3Wk)^31nD~W>*cJ@W4xg%Qqo7rq z`pUu8wL!6Cm~@niI*YmQ+NbldAlQRh?L!)upVZ)|1{2;0gh38FD&8h#V{7tR&&J}I zX1?;dBqK}5XVyv;l(%?@IVMYj3lL4r)Wx9$<99}{B92UthUfHW3DvGth^Q0-=kcJ1 z!*I9xYAc$5N$~rXV>_VzPVv`6CeX(A_j3*ZkeB~lor#8O-k+0OOYzTkri@PVRRpOP zmBV|NKlJT?y4Q82er)@lK&P%CeLbRw8f+ZC9R)twg5ayJ-Va!hbpPlhs?>297lC8 zvD*WtsmSS{t{}hMPS;JjNf)`_WzqoEt~Pd0T;+_0g*?p=dEQ0#Aemzg_czxPUspzI z^H5oelpi$Z{#zG$emQJ#$q#|K%a0_x5`|;7XGMuQ7lQB9zsnh6b75B9@>ZatHR_6c z0(k}`kfHic{V|@;ghTu>UOZ_jFClp>UT#piDniL(5ZNYXWeW0VRfBerxamg4su5<; z(}Ct2AhR@I-ro0}DdZLRtgI@dm+V`cRZjgV-H+aXm5|Mgz`aZX63i<|oHk-E)cABn z0$NR?(>fla7)Ong28FZSi9Yk0LtYl5lZw5wT!K5=fYT$avgkMKJWx~V#i@7~6_{dM zxDDPIW2l{O2Elv#i^cjYg~lGHRj(W*9gD`(FILKY$R`tL2qo&rtU*c;li!V`O$aV{ z!m|n!FAB2>MR_FVN*Ktv5+2dW4rr3YmfEheyD+48%USM#q6)w%#2}~=5yZE1LLcth zF%VtefH&#AcMx7)JNC$P>~OFuG6sK}F7V$D7m!{ixz&inpAVpFXiu^QruAw@Sc7Y2 z_A^V(2W_+KTGRp2aQSMAgyV#b3@{?5q@hPEP6oF3^}|@8GuD6iKbX;!LI!L=P#Za zL$Zuv#=x3fseRMZ()#SQcXv->xW`C|6quwqL1M&KByBj z2V`}(uL4JB-hUs6304@%QL~S6VF^6ZI=e-Nm9Tc^7gWLd*HM-^S&0d1NuObw-Y3e> zqSXR3>u^~aDQx>tHzn9x?XRk}+__h_LvS~3Fa`#+m*MB9qG(g(GY-^;wO|i#x^?CR zVsOitW{)5m7YV{kb&Z!eXmI}pxP_^kI{}#_ zgjaG)(y7RO*u`io)9E{kXo@kDHrbP;mO`v2Hei32u~HxyuS)acL!R(MUiOKsKCRtv z#H4&dEtrDz|MLy<&(dV!`Pr-J2RVuX1OUME@1%*GzLOchqoc94!9QF$QnrTrRzl`K zYz}h+XD4&p|5Pg33fh+ch;6#w*H5`@6xA;;S5)H>i$}ii2d*l_1qHxY`L3g=t? z!-H0J5>kDt$4DQ{@V3$htxCI;N+$d^K^ad8q~&)NCV6wa5(D${P!Y2w(XF!8d0GpJ zRa=xLRQ;=8`J2+A334};LOIhU`HQ*0v4Upn?w|sciL|{AJSrG_(%-(W9EZb%>EAGG zpDY?z1rQLps`nbCtzqJ#@wxU4}(j!ZQ{`g`g*SXlLah*W9 zyuh)UWoRCknQtd~Lk#BT_qjwj&Kw8U)w=owaJ;A5ae}3)y>{neYNS`|VHJdcSEBF# zBJ6a;T)u;^i#L~LVF-X7!E$SggILXMlsEy~v}K*DM2)f@U~g|Q6I-Pss@)`>fgFWx zsq&7pe!|VA-h;@=fBF{(mR1^{1>ukTYUdyF^#A+(|I_&nm{_xaKn3h4&yMyym2k-wMFg(s@ez=DPmuB%`| z6;e@HQKB(|!PU1sW)W6~x|=8m6rL~4dQ9LTk|RzL-_(_77B4I~ZG=q7K%qHiv!FD8 zmt;Vnhb{ymaydv2V;X-5p zTt2ln?kaB9&(dH_X70^@rrCfz)nwfa9LYTHXO(IPcTEf$QiEhTpl??L+`Eetyqof8 zzl=q)?KdYni!C_9b8Z3xm7r5<5ZG-0uA`u^7Dm7k4mAsQ(rkoWy*^DZJa~#y6+hNG zh?7{D9$a9LS`a@SvZ5?C{JUHovWU9KI}z8YV4pWftx21v*Q;MpU{+b@>Or(}pwO^fu0qA3_k_Bo2}lIxvmMhucG-o>O=+R6YxZ zjs!o%K1AA*q#&bs@~%YA@C;}?!7yIml1`%lT3Cvq4)%A)U0o1)7HM;mm4-ZZK2`Lj zLo?!Kq1G1y1lk>$U~_tOW=%XFoyIui^Cdk511&V}x#n4JeB7>bpQkYIkpGQRHxH$L z%tS=WHC~upIXSem>=TTv?BLsQ37AO88(X+L1bI<;Bt>eY!}wjYoBn#2RGEP49&ZH-Z_}R_JK_ z>o*_y!pOI6?Vf*{x-XT;^(_0}2twfk`*)_lLl0H-g|}BC?dm7CU|^-gNJ~rx z($>97WTKf71$?2|V$Ybpf~Aj@ZZOcb3#uRq51%4^ts-#RMrJhgm|K3QpCsPGW=2dZ zAr5-HYX!D*o#Q&2;jL%X?0{}yH}j*(JC4ck;u%=a_D6CrXyBIM&O#7QWgc?@7MCsY zfH6&xgQmG$U6Miu$iF(*6d8Mq3Z+en_Fi`6VFF=i6L8+;Hr6J zmT=k0A2T{9Ghh9@)|G5R-<3A|qe_a#ipsFs6Yd!}Lcdl8k)I22-)F^4O&GP&1ljl~ z!REpRoer@}YTSWM&mueNci|^H?GbJcfC_Y@?Y+e4Yw?Qoy@VLy_8u2d#0W~C6j(pe zyO6SqpGhB-;)%3lwMGseMkWH0EgErnd9a_pLaxbWJug8$meJoY@o-5kNv&A$MJZ=U z^fXPLqV6m3#x%4V*OYD zUPS&WHikdN<{#Yj|EFQ`UojD4`Zh*CZO4Cv`w^&*FfqBi`iXsWg%%a< zk@*c%j1+xib(4q^nHHO^y5d8iNkvczbqZ5;^ZVu%*PJ!O?X-CoNP*&tOU!5%bwUEw zQN?P*a=KKlu{`7GoA}DE=#nDibRgecw>-*da~7&wgow}|DyCJq!-Lp8a~(zR@tO1 zgu(4s4HptPGn(HmN2ayYs@g+yx1n`nU3KM{tQHhMHBw7f#gwru$=C()`aKZAl^dYc ze7fC)8EZEXOryk6AD&-4L+4cJ&M@3;;{R)mi4=`ti7IZByr^|_HNsjcNFu?mIE)jD za2j)FPwRY!R_YR-P?URm0Pti*e#5jmfK)6EvaKCT{h)kbJl{AGr1Ekt}pG?^e z*botRf-RsB8q10BTroj{ZP**)2zkXTF+{9<4@$aNDreO7%tttKkR3z`3ljd?heAJEe<0%4zYK?};Ur*!a>PbGYFFi(OF-%wyzbKeBdbkjv^i9mn@UocSS z4;J%-Q$l`zb&r*Pb`U;3@qkc=8QaPE9KwmlVwAf01sa*uI2*N`9U^3*1lLsM9dJ(4 zZBkU}os|5YT#Z;PD8xVv!yo$-n{-n4JM5ukjnTciniiT`(cZ6sD6~67e5_?8am%!w zeCLUxq~7x-!Xg#PgKV&caC@7mu<86am{WaXo(lAemt4~I$utSp(URWpYNo$RvU*$N z#%iiA+h`(E;BUg;=I!#EaxO89bUK3*v5Nc3GPmURC5TqzC|))DsFNtJICH6oBW6#q z+B(N{ey+^mk_{!@ z)VhAWXG=_0j|0f9iJ;c404PiIFqK)(AD05Xh`Fk`r$^b`v+>*g+_+h@r)e+ELJ45) z?20~u<}HQyQ5AsBz(teF9!!_GLXnm{5Z0e{Ki*@!=&3x4-RcjBn##DDzHJ|KSZ5(E z9=tFZ)p~-}x%9sCY27)2i>(E-^OiYT?_)a;yXAGR$y+E`myMd;xDA#_Q49t*E}&ql#H~|x z2J2R1_#2lt91NnF!uqW%_=HlbF?A{B{n>}9$g5QF!bh_a7LTU~Jyz}7>W5{_LAov{ zy2_dmGy)d)&7^bJyUjEw%3xj{cuG0Eo zwL*XQB*Oi=r&HIIecC1%lbE;Y-*5|cL955S+2@uR18JDL<0;;Uc2Q9JEyo1R!!sz_ z#BqnkGfbLP#oQJk3y}nwMd(3Tt^PVA#zXnYF7D0W1)#+`i?@cm}fBkKD z+Mpcuim53|v7;8Tv(KraEyOK`HvJq^;rlNzOjIbW&HJDFqW>doN&j7)`RDv#v|PQ+ z03WnB4Y4X@Fe-@%3;He*FjY1MFmkyv0>64Cp~FIDKQTwmFP~_CxZOf{8gPy}I<=JC zo%_bmue&$UU0|GG%%99eI!m#5Y1MD3AsJqG#gt3u{%sj5&tQ&xZpP%fcKdYPtr<3$ zAeqgZ=vdjA;Xi##r%!J+yhK)TDP3%C7Y#J|&N^))dRk&qJSU*b;1W%t1;j#2{l~#{ zo8QYEny2AY>N{z4S6|uBzYp>7nP_tqX#!DfgQfeY6CO7ZRJ10&$5Rc+BEPb{ns!Bi z`y;v{>LQheel`}&OniUiNtQv@;EQP5iR&MitbPCYvoZgL76Tqu#lruAI`#g9F#j!= z^FLRVg0?m$=BCaL`u{ZnNKV>N`O$SuDvY`AoyfIzL9~ zo|bs1ADoXMr{tRGL% zA#cLu%kuMrYQXJq8(&qS|UYUxdCla(;SJLYIdQp)1luCxniVg~duy zUTPo9%ev2~W}Vbm-*=!DKv$%TktO$2rF~7-W-{ODp{sL%yQY_tcupR@HlA0f#^1l8 zbi>MV~o zz)zl1a?sGv)E}kP$4v3CQgTjpSJo?s>_$e>s2i+M^D5EfrwjFAo(8E%(^ROV0vz0o z-cg0jIk24n!wxZainfH)+?MGu@kg$XgaMY-^H}z^vG~XC7z2;p2Kv`b^3S#b5ssMOJ7724v>S36dD zeypxJ<=E~sD4f5wX060RIF-AR0#{Z z=&y$r8A-e6q18lIF{@O9Mi%dYSYT6erw!@zrl=uj>o(3=M*Bg4E$#bLhNUPO+Mn}>+IVN-`>5gM7tT7jre|&*_t;Tpk%PJL z%$qScr*q7OJ6?p&;VjEZ&*A;wHv2GdJ+fE;d(Qj#pmf2WL5#s^ZrXYC8x7)>5vq_7 zMCL}T{jNMA5`}6P5#PaMJDB2~TVt;!yEP)WEDAoi9PUt89S2Cj?+E0V(=_sv4Vn6b z_kS6~X!G;PKK>vZF@gWpg8Zuh%YX^2UYPdCg7?EH#^gkdOWpy(%RnXyyrhmJT~UJw zAR;%Zgb6z(mS+o9MT|Sc6O({!i0pzk;s9?Dq)%tTW3*XdM3zhPn*`z45$Bg!P4xfy zD*{>30*JsSk?bQ-DgG62v>Vw-w`SA}{*Za7%N(d-mr@~xq5&OvPa*F2Q3Mqzzf%Oe z4N$`+<=;f5_$9nBd=PhPRU>9_2N8M`tT<-fcvc&!qkoAo4J{e3&;6(YoF8Wd&A+>; z|MSKXb~83~{=byCWHm57tRs{!AI<5papN(zKssb_p_WT@0kL0T0Z5#KLbz%zfk?f7 zR!vXBs36XaNcq5usS7<>skM_*P$e*^8y1ksiuokbsGFQ_{-8BAMfu!Z6G=88;>Fxt z|F-RU{=9i6obkTa0k~L#g;9ot8GCSxjAsyeN~1;^E=o5`m%u7dO1C*nn1gklHCBUw z;R(LgZ}sHld`c%&=S+Vx%;_I1*36P`WYx%&AboA1W@P;BvuFW+ng*wh?^aH4-b7So zG?9kFs_6ma85@wo!Z`L)B#zQAZz{Mc7S%d<*_4cKYaKRSY`#<{w?}4*Z>f2gvK`P1 zfT~v?LkvzaxnV|3^^P5UZa1I@u*4>TdXADYkent$d1q;jzE~%v?@rFYC~jB;IM5n_U0;r>5Xmdu{;2%zCwa&n>vnRC^&+dUZKy zt=@Lfsb$dsMP}Bn;3sb+u76jBKX(|0P-^P!&CUJ!;M?R?z7)$0DXkMG*ccBLj+xI) zYP=jIl88MY5Jyf@wKN--x@We~_^#kM2#Xg$0yD+2Tu^MZ1w%AIpCToT-qQbctHpc_ z>Z97ECB%ak;R<4hEt6bVqgYm(!~^Yx9?6_FUDqQQVk=HETyWpi!O^`EZ_5AoSv@VbUzsqusIZ;yX!4CsMiznO}S{4e>^0`c<)c~mC#*{90@+T@%EQ~>bovc8n_$bvqkOU7CrYe8uI5~{3O7EijeX`js z-$LNz4pJA7_V5~JA_Wl*uSrQYSh9Wm($%@jowv^fSPW<~kK&M*hAleywHd?7v{`;Y zBhL2+-O+7QK_)7XOJAbdTV-S`!I)t~GE8z+fV7y;wp#!wj75drv;R*UdSh(}u$%{VSd0gLeFp;h6FkiVz%g=EY3G#>RU;alRy;vQmk*| z@x-ba0XKE%IyL4OYw6IXzMiS(q^UDk=t(#XgkuF`{P?=k8k3r)rmhkv`vg@kiWd34 z-~t+1aV3SabTbG=nQYs>3~E<}{5@0g**LAWi*~SfRZhGcgP{e5T!0M7CU}`f@r8xI z0bx%sI!?5);-wG+Mx&S=NRfIi>V-wP(n&$X0Bhd)qI^ch%96s6&u7qpiK8ijA=X_R zk&|9f$GXf-;VgnrxV83Cp-Q!!sHH`5O^o~qZu!xny1t?(Au(EAn)D??v<1Uo;#m7-M@ovk|()C(`o>QMTp}F?> zakm3bHBKUjH-MHXDow7#Z|@wea1X9ePH;%YA)fCZ9-MD)p^(p!2E`aU9nmJlm;CXQ zkx~$WQ`Yq{1h5k>E>Ex{Z=P=)N*0b8_O({IeKg?vqQ)hk=JHe z5iqUKm!~mLP0fnRwkCO(xxTV@&p+o8wdSP$jZofYP}yEkvSc z5yD-^>04{zTP7X44q9Af&-wgt7k|XtncO&L@y-wFFR44RsPu57FRvIBaI^Pqy_*DV z@i13CsaR5@X@xH=NT3}T`_vsy!a02n80eQqya=-p7#YW`Jc0z!QglGg`1zeg6uXwI zsB~hlNMo)kFL(V3Q1<%8yoI6X7ncn-&&Uh3rL@S(6@wKAXt6Wr=a2ObI7}8$D-FoI z>AJA>WsBEMi5ba6JhJ%9EAi&ocd(ZsD|MsXwu@X;2h#|(bSWu@2{+c7soC`%uo{sMYq&Vyufb)?OI59ds)O+kyE8@G z@tlpNr0UO~}qd0HQve6njJ zda2+l$gdX7AvvGhxM6OToCuQ|Zw|9!g1)O+7>~{KNvASjp9#Cqce-or+y5xdzWL3gLWt2oa+T(I+{j(&bF1laUsJB{fOgE-B}qslaS>C z)TjzG8XecbS%a+?yT!0QmTex?E478;D|sL*oS4C-g0Tq(YoH|eyxJ#1j088C|U-w5id`%Sz7X_w#l+U9+)$|2no<}5J zRb_9@0esSr?n}HvVGbD5@$p$8k4?qOe-GNOk3-K^Mw>Xg+drCKi5@$GTeijpI;;IG ziD<&go`ptLC&^<0jw^l0aY?_pUUK+xp#0Bk66iQ29vpR)VBE{JOJ&OL^gKsN<&t<| zCMLTYMSDG5Ie9O>6Dl#T{@cscz%)}?tC#?rj>iwQ0!YUk~R z$rB-k=fa9x&631Z9Mfqj_GRoS1MzqSMEdaZ2!isP19Sr>qG8!yL(WWF)_&{F)r>KnJGSciSp!P0fqHr+G=fGO02Q#9gHK zpwz+yhpC4w*<9JO@#(MdkZcWbdCO5B!H`Z|nV?UtcBo96$BgX+7VYMwp@b-%;BrJu zMd*K!{1txv{kHKPDs9?WZrz_^o1Tq2P=+=|E=Oy4#WE{>9}*9(apqhmE`&AeBzQgQ zELFLCmb~q|6y0FCt|B}*uI*ayZ#6=$BpGtF{Jfye#Q>FZ?BPnk)*Qmd?rNG^tvFUU z_b&antYsZnUR6Q9tQUy81r$&ovT#fy;(Db4F&M*C=KxQgHDrRcVR#d+ z0(D|*9#u`w_%2o3faI{?dNd9$#5nj1PROHNq z7HJ(;7B1ThyM>a@Fo^lJb2ls2lD`}ocREH|5pKN;$>gFyM6k)kZG;lA;@kSJIqUhf zX%dhcN(Jtomz4(rNng&1br3Xx33EvCWz%o8s;SpRiKEUFd+KJ+u|gn|J85dZ)Exc&=V|Ns8Xs#P>qv6PX&VAJXJ(ILZO!WJd0 z`+|f5HrEj~isRN7?dBHotcPI7;6W48*%J(9 zftl1Tr`bKH*WNdFx+h;BZ+`p!qKl~|Zt5izh}#pU9FQKE97#$@*pf38Hr8A+`N+50U3$6h%^!4fBN zjh^cl#8qW5OZbvxCfYzKHuyeKLF4z^@~+oqlz9(Hx8vypIiUlt!(vs}_t#4@nh$s; z>FYERg*KD#Xs+W4q-V-IBQK!)M1)Aa+h+V+is)z!_=gEn&^ci7<DEEmYcoSh?WdXUsP7O4)&lQXA(BVM5jI8s6;mO}94AC0gG(`>|T)yuV1l~i-ejCCt zoejDhX0nrZDP|x9u4zp%S2UeDzV`o#pBGu1tZ-$<9TIbN=ALwhQ0=9S{8#}Uu8n-~ z5~xIvUhLSz@c@0|me$CdZCpZl(vQw@a0Y4^{T0w_>pOkwI^x4KkBf3qGmm)nG|Ps5 z_XTY~^b^mL&_*yjl~RRIi&eS(>y?y}O4-)nWyTEPpQAb#Xz8SnnfIL+nAcNL9nqV9 zRL|eyF)RKI5-kJO6}>Q89XmgY@b1&!JI>g3ryZ@jN2v3vm7O`AL!BTWNouJzV+$+Y zYY}u%i>K6=IYU2O$2TAyVjGt?wgF9xCj;?EK(8fWu!!~48`3u^W$eUlCh*91PLxu1 zRY(F7Q3s7h$Q-p&L$ucN}it*-9KR z_<wHu?!dav0$P+PI3{J8?{+l|n&2YMLV2 z+hRta$A5WpCXl1RNbYBsX8IGX{2v>U|8_I-JD56K|GexW>}F_e_g_1r?08v8Kz{V$ zT=6aGMk>ibvRO@Yrc@ezaD0%ydHkXGHrR{7>q~~tO7ChJflwa4-xL|@#YIJejC5VT zInU4CjQ9V0+lClQY=vh^s4MadwQmk7li{54Y;Ht}gkZOIh9(vfK?3kXLoD72!lHD# zwI-Jg|IhT=Y#s|tso1PWp;|aJ2}M?Y{ETyYG<86woO_b+WVRh<9eJu#i5jxKu(s~3 z4mz+@3=aNl^xt{E2_xewFIsHJfCzEkqQ0<7e|{vT>{;WlICA|DW4c@^A*osWudRAP zJut4A^wh@}XW4*&iFq|rOUqg*x%1F+hu3U6Am;CLXMF&({;q0uEWG2w2lZtg)prt` z=5@!oRH~lpncz1yO4+)?>NkO4NEgP4U~VPmfw~CEWo`!#AeTySp3qOE#{oUW>FwHkZ3rBaFeISHfiVSB7%}M) z=10EZ1Ec&l;4 zG98m5sU!pVqojGEFh8P{2|!ReQ&hfDEH2dmTVkrS;$dN~G2v-qnxn^A2VeHqY@;P} zudZD5vHtVvB*loIDF1M7AEEvS&h0;X`u}!1vj6S-NmdbeL=r{*T2J6^VA7F`S`CDd zY|=AA6|9Tu8>ND6fQhfK4;L3vAdJPBA}d6YOyKP&ZVi%z6{lbkE|VyB*p1_julR^k zqBwjkqmFK=u&e8MfArjW-(Ei8{rWso1vt5NhUdN|zpXqK{ylJ8@}wq-nV~L4bIjtt zt$&(1FTIs+aw}{&0SO4*sa0H2h&7g}VN5uYjfed5h7eGp$2Wu*@m9WIr0kxOc}fX9eOWh zFKfV>+SD$@kESKYm{F*J90XQjr$!<~v(J%&RMuQM+6CkmnYZDGlOUdq}%)VA& zl#acS%XE2KuX~7IamK`og@C`21~*cEEc#PZM6HT*Veb_l&Ej~j0zL7p0Eo`mMu(=X zJ$v;&Lya75I4C^saKROgfi(fdP0C$GM3WyZn%mm3yEI>|S&O(u{{S<}ihUp#`X&_z zmQBma;82#`C;dR5Sx09e07FvtJLhZ{9R~|$FCdU6TDNUwTc9kNct?8e@o2MpQDrkg zN?G+aYtTjiUPA=RX5o{4RYu}6;)ET>TcgL^VpfIpluJ|lQR(_)>6k%L^FZmoK-Wm- zR5qy0P)hm8yvqOL>>Z;k4U}!s?%1~7v7K~m+gh=0c9Ip_9UC3nwr$%^I>yU6`;2kV z-uJ%y-afzA7;BC7jc-=XnpHK+Kf*tcOS>f5ab2&J&5hIOfXzs=&cz|Qmrpu6Z);`R z0%3^dioK5x?o7t~SK7u5m{dyUZ#QUPqBHYn@jETeG>VU=ieZuJ;mm^j>dZM7))cw?a`w8R z%3M0R=kdOt^W^$Kq5Z%aJ(a$(*qFpy^W}Ij$h+Jnmc9eaP(vB@{@8t zz=RQ$x4XYC#enS$fxh@;cSZ|D%7ug;0z{C8I8h{KocN-cyv3UG_nk99UNS4ki^OFkYea`q`rs zG@qdMI;4ogcd5Tr`di1JBg4I*6CFvCID_2SN5&)DZG&wXW{|c+BdQ4)G9_{YGA@A* zaf}o^hQFJCFtzt&*ua~%3NylCjLtqWTfmA-@zw;@*?d&RE3O8G&d;AVC|rZrU}jx# zC-9SF`9;CbQ(?07o8Q9E12vi)EP@tOIYKEKnO@-o!ggkC)^#L-c40iZtb4Y-cS>$I zTn~+>rn*Ts>*y*z^b3-fAlne+M-*%ecrI^rmKAVv23cB`aWD?JDJ5NIafRvRr*~~C z)99Afs`BPK!5BFT)b_^8GyH*{22}yDq;be`GnPl=vW+ITnaqzl(uYOHhXi}S!P+QZ z4SwfEPuu&z4t#?6Zaw}bvN{;|80DfxCTuOdz-}iY%AO}SBj1nx1(*F%3A-zdxU0aj z`zzw9-l?C(2H7rtBA*_)*rea>G?SnBgv#L)17oe57KFyDgzE36&tlDunHKKW$?}ta ztJc>6h<^^#x1@iTYrc}__pe0yf1OnQmoTjWaCG`#Cbdb?g5kXaXd-7;tfx?>Y-gI| zt7_K}yT5WM-2?bD-}ym*?~sZ{FgkQ9tXFSF zls=QGy?fZ=+(@M>P3Y>@O{f44yU^fP>zNzIQ0(&O$JCd_!p?2;} zI6E1j@`DxzgJvqcE@zgapQ?tophO14`=14DUZ*#@%rRi``pi0lkNgidSsHGjXK8gO{drQoNqR&tRjM4>^DtW`)fiRFO4LE=Z+nCBS~|B3gZsh`Y?-$g z@8@Z$D7C!L9l=SWoE;(+*YirPLWvBd$5Ztn3J3EaGM+#pW#@{3%yksGqy(2Bt5PVE zf*fICtPp77%}5j#0G8<=v=)LR>-a3dxja8cy3m$=MZ2#$8mbLvxE%NptMd+L?mG`v zF1cANFv17DqP^P5)AYHDQWHk*s~HFq6OaJ3h#BUqUOMkh)~!(ptZ2WP!_$TBV}!@>Ta#eQS_{ffgpfiRbyw1f)X4S z_iU`lNuTy86;%!sF3yh?$5zjW4F?6E9Ts-TnA zDyx5p1h$Z3IsHv7b*Q{5(bkPc{f`2Wfxg*Z#IvQ;W_q9|GqXGj<@abo)FyPtzI~i25&o zC!cJR%0!}lLf^L2eAfZg7Z69wp{J?D6UhXr%vvAn?%)7Ngct4Hrs@LZqD9qFHYAWy z4l=2LI?ER&$He2n`RiG&nsfLv?8$Cl)&d8a-~-N`I|&EPa@Y=v@>0Gl?jlt>AUY;H z`**5bpS#VGhdp4pKbf3iEF*>-eXg_$bqt5Dc%q0+)R50>zd^l7sN5R5Z)Ut+oz-8_ zJ`Z9HE9(=wRTD)T=%GZTEi9K5naPzlfE$|3GYGLRCLsnqLi8Sc6y&iskqA&Z$#7Ng z7Q@C0)6k;J$TlQ+VKZ5)-Ff_BNoIMm+~!@Cv1yAUI-U!R)LHc@+nSUzo$GlRb+8W< zYPG%NFfr;!(RlnvBbN~~EpT6Xj5*^Z&73tdIQ$LZu`vkfzdTKa5|JJtQ_rm4g$9LO zKtgYVdW=b<2WGM3I_j|Rd8gZ3j;)S#AT(aP^d>9wrtQS_+K>pZDX^?mN!Z>f^jP@1 zlJ;i79_MgOAJa`%S9EdVn>ip{d!k6c5%zizdIoB9Nr!n`*X#%6xP1?vHKc6*6+vKx zmEt|f^02)S_u_wlW_<`7uLQU%{wdH0iojOf_=}2=(krE<*!~kn%==#0Zz`?8v@4gP zPB=-O-W=OO3tD19%eX>PZj3YfrCt0sEjgTd#b$buAgBri#)wW14x7QcHf2Cneuizz z368r7`zpf`YltXY9|2V{stf8VCHgKXVGjv$m!hdDf0gi`(Q!(Pyg~FO28Vr#!BYP| zI)qG2?Ho=1Us9dTml}-ZOR?g5Vk)f+r=dbCN*N1=qNfG>UCLeA8pd3Ub-pRx1b3FA zEn`CIMf`2Mt3>>#3RkE19o}aMzi^C`+Z>8iIPHSdTdmjCdJBtNmd9o0^LrJc9|U9c zD~=FUnSyghk7jScMWT|SHkP(&DK$Z=n&lGm+FDTpGxfoIyKV)H6^nY~INQ#=OtIT! zyB*J=(#oHf=S)MNOncW->!c0r0H#=2QzobO&f@x&Y8sYi-)Ld;83zO$9@nPPhD}yt z{P`*fT@Z(?YAmF{1)C;o?G@dfd2$c+=Av*|;P@Yz1KnclB-Z-fJQ-=+T*g>0B7!g# zQH{dHt_%wj=wlmT&m59)TQ~xK)gB6f^EY$=1zcbGf~Q>p_PzDCHR6lndGmqPY2)&w z$Th^K%1v@KeY-5DpLr4zeJcHqB`HqX0A$e)AIm(Y(hNQk5uqovcuch0v=`DU5YC3y z-5i&?5@i$icVgS3@YrU<+aBw+WUaTr5Ya9$)S>!<@Q?5PsQIz560=q4wGE3Ycs*vK z8@ys>cpbG8Ff74#oVzfy)S@LK27V5-0h|;_~=j1TTZ9_1LrbBUHb?)F4fc)&F7hX1v160!vJc!aRI>vp*bYK=CB(Qbtw7 zDr2O^J%%#zHa7M5hGBh#8(2IBAk}zdhAk$`=QYe^0P6Bb+j5X)Grmi$ z6YH?*kx9hX>KCI04iaM_wzSVD+%EWS)@DR&nWsSBc2VIZ>C(jX((ZiV0=cp}rtTO&|GMvbmE4FpBF5Rd z6ZG=>X&>N3?ZN2^11pXEP4L?XUo`qrwxgQm4X~RCttXmZAhnhu4KDK=VkKq?@@Q_Z za`*xyHrsAEsR zV(7)2+|h)%EHHLD3>Qg{>G|ns_%5g5aSzA#z91R zMDKNuIt@|t?PkPsjCxUy&fu^At*yUYdBV!R_KOyVb?DO&z$GLJh9~b|3ELsysL7U6 zp24`RH+;%C(!bWHtX&*bF!l-jEXsR_|K~XL+9c+$`<11IzZ4>se?JZh1Ds60y#7sW zoh+O!Tuqd}w)1VxzL>W?;A=$xf1Os={m;|NbvBxm+JC@H^Fj$J=?t2XqL|2KWl$3+ zz$K+#_-KW(t)MEg6zBSF8XqU$IUhHj+&VwsZqd7) ztjz$#CZrccfmFdi_1$#&wl~A*RisBaBy~)w|txu1QrvR1?)2mb&m2N$C(5MS%hSX)VJnb@ZGXB5^%(<#1L@ zL^>fBd+dEe`&hxXM<0A9tviIs^BDkByJdc~mtTYr!%F7Q1XnK2$%h$Ob30*hSP$Bt zDd#w{2Z%x^Wpv8!)hm>6u01mY!xmPgwZ#Q0148)SxJc3Udt!-&}eRO^LN ze26pQB!Jhg&Z>#FD>`C`sU44><=v>O>tJdLs!HPpV#AM32^J@Za-9J(CQjKxpzXao zQfRkWP%g9P8XV21MmoHfx{DICLSc*t4qVeQL9t}&Pz0rM}YTba@XsD=XMW@FxFM{QYQJHvM(JsUSa3mcTUl9^qcVA zBveO--fqw%{#QGR1vy;x88+qMcgzmcYc#8U`CPPt6bl?uj%w_`b~9JliftnOa|ziW z|6(q&STs_*0{KNa(Z79@{`X&JY1^+;Xa69b|Dd7D&H!hVf6&hh4NZ5v0pt&DEsMpo zMr0ak4U%PP5+e(ja@sKj)2IONU+B`cVR&53WbXAm5=K>~>@0Qh7kK*=iU^KaC~-ir zYFQA7@!SSrZyYEp95i%GCj*1WgtDId*icG=rKu~O#ZtEB2^+&4+s_Tv1;2OIjh~pG zcfHczxNp>;OeocnVoL-HyKU!i!v0vWF_jJs&O1zm%4%40S7_FVNX1;R4h^c1u9V@f z`YzP6l>w>%a#*jk(Y82xQ@`@L(*zD&H>NY`iH(iyEU5R$qwTKC5jm4>BikQGHp^)u z-RQ`UCa70hJaYQeA=HtU1;fyxkcB2oY&q&->r-G9pis)t$`508$?eDDueFdW=n5hJ z08lH$dKN$y#OEE@k{#|<%GYY=_c~fHfC@pD54KSP9{Ek@T47ez$;m$}iwR}3?)hbkwS$@p2iVH0IM$lB*XYA+#}-re|UNzCE)SOYwy z=Y!fkG4&I%3J(_H#UsV#SjHulRIVcpJ`utDTY{k&6?#fzt~@Om=L(vs6cxAJxkIWI z@H7)f2h%9!jl@C!lm+X4uu;TT6o0pd7 zteFQ(ND@djf#o2kTkjcgT=dHs7ukmP0&l8{f;o3JuHGd2Op*?p7?Ct=jA*tIg{MZk z$2Lsc0e8Tdcwrjx|_Ok?9uB3Il|^2FF%X#ck}WoIvrzQXN%kT$9NI{79Wm~gZ3`8I+O`)`n30feZ( zDO-fl6IG3c^8S;Y_M-)+^CmM0tT^g0?H#>H8!oC8W%oU!~3|DJ?)~LT9*&GAQG13zOGq6gs*={cu|(V7{R$y@{-iV*9q@AD(#Ktb}J&3&k|5Djs$)9WM7!6#EaJ_ilvbfUvyh8c?-{n zfuFrC0u6}UJZ7aj@(cNG_(CKgjQQTA-UK@-MVmick zot}6F%@jhq(*}!rVFp5d6?dg|G}M*moyLriI!PQDI;E1L1eOa6>F9E6&mdLD>^0jJ z09l?1PptuV65gm=)VYiv<5?*<+MH~*G|$~9Z3XEy@B1-M(}o&*Fr9Sv6NYAP#`h{p zbwbUE3xeJ;vD}QMqECN)!yvDHRwb7c1s6IRmW!094`?Fm!l~45w)0X`Hg+6Y0-xf# zSMemBdE)Q=e^58HR{kWrL5-H0X6pDu%o{0=#!KxGp0A;6{N5kI+EoY_eTE%2q|rwm zekNeLY-R?htk!YP2|@dbd8TWG4#G)=bXlE{^ZTb^Q$}Er zz)Fp)ul24tBtQFIegdI37`K$VR3tVdi<(fIsu{#QMx=$&CK9M8oN%3Mk;>ZPd-;Q- zn|sSKSnc-S0yrw#TlA$+p{J~u=u98s>IoL@cNLOxH=+1m?;t1bR$vR=M$US&Z8DO3 z_&zhQuId1$wVNsS=X?&s(ecIi#00o{kuPs6kpYkL$jMyGW8U7mlCVaZeEL=HsIxqm zFRLxWin8B>!Dc#9Z#t0RNQiR-@5J+=;tC7|1D*~rxcwHa5iIVD@99cCFE@BukUC-S z^iJdt?dwU)kH2VY9?|zVShMbZctzFRz5Q4tiXa^>@U%jDYq}$rSyc#p2wXr}mc0qq z^lT>$y)N(Qg0dwmEwTopneoU(y)>Mj+f{iHM0o|>ZtCg-itPj4addYz??aE)Rp&hk z_SI)%XeSf=SjZq18h!Cc>Xy&EynnxdHQ){(x@g|ZA%`3LU^KzX02c5N;F#tEk1)7v z(|V9tO3>?^X|kQ*rRBf4>mWW2$-Lx})|M7z125&VHcxsCqB!<$l1F$zCrJ+nm0f3Z z%Hq^=SKpHyV2@Y*Cu2x>fXC0SscnR*($zEB{KOniJcpn@e`PMH*_Q6*0Z^8RNCEvZ z+UU9!927p9YZ&g=bnUvQUZcdisyn;-4;ACXOe-Xor9K8Qbp{ldE17+G@VQT+9ZJQ*9dZoXfU2ue|mMhrrZk2R7&~YjFW4`BTq45UwVc6JORKU)wBCTanITh0GD}s$`C5pb(9{b9 znwee6j%?-UV)_7opOioCf5@C?@w^@g& z&68+oMmV;5JW@TT63&CSDrfYL2$L)pVseDtAwPwleEM3F^-Ufn3PpfxFmx6o zQ`Wq9x#d$e`VKn5LOXNsrqhGao7~|s(u~drPrZ+;aP!C%z4NskZstCbAibD}O%8Ij zb~C(taxco~WzJLxhL1T}3ctXMbV6}_z=IZN9L0|SxLSe`$X`<)BhM`$1&&)e_}fCh z=idVL<+u6Vn{&ksP*ZLlMo$fC`dtzF_?~L?4Rril2G4%v5^7sUa^&8aMtMX&mtapl zD(dW|cisM3fqMaB`8?QbkyiUl2g>hMB5EoS&IB8TdoC~)b$nT=`%GgU`k-)+8}`)F*~I~DXMaTP%kZftx11~?iALs5J+&Rom#p%Y z>dH}-euH4u=_V3hc6^*2WMtL!9%yRTJ93p}@aV0zdY*?xchFI>m+UivV=;aMFp0P~ zwB8P)wvV6D-GL?6hJ#g7Hy7=2i^&Od#S=j!;Rc_yjO!*4aN7{vqzg2t-R|Dav%_NDk z`H_FVlSi==(~f-#65VmQ{EE92x<03lwo5p)s=ZJ^L7PlS>132Whr zR6v~t(#I+(`usYLCoO;Rt8j&b^5g_xgs*98Gp|N}b>-`HtVm)MscD)71y?(K6DRCZV26RsHPHKk)EKKZA%C99t3$t^B0-k5@?E>A-YMbFe?>ms?J?_guHHNU(;id*>xH zTrtam+Aq?n@-y@uY@A?hy?1qX^eLu_RaH4Ave?A8NapgQF=C%XI7wlcCf4<6BRo_% zBXxxc*A6-3CruF?3i8HOdbc%>N=-iiOF+9HX|ht6SCkz;A^am&qi_I&qk1B(x<=(m z>QG)nswCOLl_1{SZ@_eE#m^qb6#6DoMsB*)`17ui+XvF%(}|J4G$z2G*;E!1ERnAH z@q%=#uV6kBddqy4=g>!VTV)9*1=i{wJ}Ep!I*?)uJdA(LwE?(!?;}_u=^M2NShWC_ z*7l4aBJ=!QVU2-iehgb`$vOI8zkm{W%QO~?xOD;NgI;Iqa3#^$^U5D&McReLe&qs# zR<^@QpR4#W~Laz+QBsPt@3L#KF`Yr8}jgHe;5(cfpQ=;Zjtbt;c%y^#-m=hqOT z;KAYakW+$w0&F}>K10&SiPcD9SrDOuczj@U#W})5jGU-_htU`U6Q%wdy((%?J}y+$ z=$4jw1N nJo)qTxG{D(`3*#8tY|67hJRF;)r6F|#I`Ar6I0aafRa=kr-Z0I^}9xf^u;G5iEQCbpv3b#S#%H|HYHsQaHK$! zU#3Fpz8*^pK%RRmX<_09eIVziB0jOgPgFnI-*QcwEBtBiO#v!>{W1cLNXyw3D9M|A z*oGy(u8BkDA1c;MsXmpK^-~pl=We^RYnhZ4bz*)Q)C2G+E3tgx9PzU0T>c|1ilS!T zyE=bz`=wskDiOi!@!l?Y))#%{FM`}7r~X)i1)1*c6_2Q!_1{)fp%cS|YF+Q-CB%d< z=zYus`Vt@Mx*a7V)=mpLS$-5viaKgNB=+zN657qy0qR94!cTtX-Z%KBCg4OKw7b=t zr=`7q5Ox=lJ%!G5WIyNQC1xpqYU0{!I$hyrk!6%De$gp<_*Gc?ES(OwY8U^)Kjgc{ zSlhpXDb|;{+y9`u{EuMz54rlky2~p6xX2>MV6BZ&k`$q%q7v(xYps2wr9e8^4<;CB zc)eAT~B^rjzO6<4BDDH;il6 zFsM8jL+agQ;zazW(uiQjM%fPf2N~_p{cy29XP11_lQFpt`t#9nlk}>fv((FZt-dBa zuMIc4HmPHW04n0TTG9ug9;&OV9euL$Ib|+M7}}L~z4e%%%b|r~6OQj(S2d7XfYn#xp8;KQ55UYu#gY*De5j6Cc z#R%?rqwpy7I1(kpU7B*Pq=etXeYUn04jg%ZPjYqQNa$==yTG=6KX+=;i2Xg+kjV2T*Gc!(ef z`Q4fR*TA=M5-}z+s%YO+!K{k}S**ic&>o4_Tmv$EQTOp7F6TXPCj-UTXy?OQ=%*y62Qajk{rXbR%jMCOFMiVE3KekQa4xR}B%=iPtd8BXo~q$OX_ zSp910{Ew;m|GATsq_XiJ3w@s(jrj^NDtr(Dp!`Ve!Oq?|EJ9=vY2>IfrV{rT%(jiY zi}W@jA2iqd=?q>s;3%?@oi7~Ndo3Ge-2!zX58j(w&zVlPuXm3rcHb7O0RsM|!Ys(b zh(=*&Aywo3vuJoWZnU!u2_4bNkDTc&&bCYc%T zM~~xYxS#3KXFzQ@OXdc%9QDOxqiTd_> zT;(DX9{5dIuC4pO_xy+3{Ov)1I7j!Z)6&nHUvTRP>VU5dm#849icG)cvl0QOPkCIzG^lOp4#UcNr`VhBp(Ha%8@KPlvT*5u!v_$b#b~%sn3K{mu zaxeD%Q~{;Lw03ZAq(Pc-IVj>n*h3l2{sqioCMGatQY0kx zi`1(WWDQ=;gmLSGptEQ%UFC)th@|71<8eiRtX&Mx@#1q#nMF_BMfQdS>!!Qkx2o}= zuqRi?`UOX5P3fP%M+71Q$ctH4Av}bXED#fQ`KR4!b~60nsAv^*M7c-x`|~B}XIuq% zlqIJOf>WvlhQ@Uw$du|14)tZ?; zPNZ|xZSwp1y+d4sut8E4*l2JWR|~o0A9vD-?zC-w zDc@=wE1YKb*OMSi_Kx}&w;#h3>sHp|8^hnA3w?-WK)X?@Z2dgV7`9Cupf-B2RE4x^ zwlw+~!V9C^tyb`J;m2}ksD`w}G9`yu(^--{SQ+wt^Fu4Li~Fft!3QO`upSkAU?o;# z(1Q%GUVWbbkTK-M=T+ULkk3s6Dc9`G4CO6|=&-S&D+rbJQ$`Y-xL~ol;kc(l)VbU>{&>bV+*?ua;$bnDc29RW+Ig16)Vf6=L|fMR_P2b7>6}0 zdlB#-gj|j*C~M=F^2=K*k~=tl6YM3SXXi&K-`EvEXnWz&4D-^hQRBJI3gKKDj^6|> z*WhHSim1qAffNt60Mve9lfw^+&0bx-AM0%j>QP3%W=S@(l=(nrJ678mRQ(#+sI@d{ zdb#5fo#T;hK7xJ=M58wZf|?DHwD%!OZ3JrTGV5#{cfQwuiMvz%!CQ}CubJ7`z?@rSF<+KHNV2goc)a6hP0oHB@3LLKSH2w{um&J*z1Ka2 zLIR>lvOvh>Oxe%?3A@v<_T|}${zf_&@C~^FCo#jB(W9VLO?DX{)n(BQ0(V0`mI|9Y z#U3WwxixJkU_NTvA>5q(A@r2dnEXJp#6B=pww$XGU}~1~c``UKqQb=^*2P|4Dq*_! zhY^i61Sy%T5$Td0O6^C>h(xVvT!}Y##WeT8+s+Uuz=7)~V$>!zU;%d>H)rm*6^IrsCma%|cifwDLk_ z!^W2voQ)D;I$=v2E>iSaBw!d7aD+|LWl2iD!cBw`Q5p1~fk_xGiPi8e^mY&#viTAk zmaKL8m;JQ4bY(n6uBZt02z#noMMxTfF-RzjKre-c+@B)#J3pN-Zv7F}JtAwNk3j?OkpVCL6W1)Q$FLAj zGI!tX;g`O{%pt=0|q54Jyj##w*4e*|_;Us2Tn?!#^R(>u}|FAw1G_ z#wQsagnj9$TAC`2B_XgB$wNq~Sxgl?#0+QWWcB{G`c6~&SosbtRt}Tukw`TQ!oG1= zYyL(y<;Wh+H24>=E}Gs=Hs2%fg;&Qdvr74{E!R?Bd zIRQ?{{xkLJ_44P@y3^#(Be%(pk%$liKbUUo76wSoVfJmt9iTKL3z{uW6L&?jYg>EY zsx{kRiW@q%<$VZvbS(TKKTO4{Ad6l^IeY(F^3}=mX9|FZmQ`~RErNxlBPl3ast}W$T4V?SW=6kIGn@-^`qJv| zZXwhK4Kl1a4E}nLI`rdOi?^pd6;LZ-|8G&INHgOeC5q{_#s+SXb0r(;5ryHFsoTJD zx$VtNDh=-Tx3t!NTlk=hgAaSM)#U}e>_-Ex(|JoX*hWmBPPdTIa-2(BIOUJ|Iddy| zwY*J%z%W$}*;uSoB!BIJB6N6UhQUIQE_yz_qzI>J^KBi}BY>=s6i!&Tc@qiz!=i?7 zxiX$U`wY+pL|g$eMs`>($`tgd_(wYg79#sL4Fo+aAXig?OQz2#X0Qak(8U8^&8==C z#-0^IygzQfJG4SWwS5vko2aaOJn*kM+f1-)aG{T43VJAgxdP(fJ4&U{XR90*#a)G8+clOwdF?hJ?D) zmxu>0>M|g_QRHe_7G|q6o`C>9x4xd$Gl7lAuR~+FtNid=%DRsnf}YI*yOToWO%xnP zY*1G5yDnTGv{{xg5FhWU65q3-|-(+-rJ2WCeSJn(7Az>ej4Jp9+l-GyZ_| zJ8}>iA4g|}q1AhEEv#uWR&$g&Uyht?fVU(qk(j?^D`))s>oG08pow!f>P1u71P%oL2)UC4GeS87&G?{)NE;D=my1Q9{~;y zJULE=bG6jXE28Y11YmoZoo945`MM*`v%5b=_02*0cwzDve#3(4M}NPt`)?SCa|7*q z-94ks(R6WH-l9fE4m4}10WSu&O`|;ZCIT%vL$_pbABY!}s33@~gIvZ0H4co|=_-T$ zF#lC7r`89_+RL9wYN=E3YwR?2{$^ki(KKd>smX(Wh*^VmQh|Ob5$n_%N{!{9xP~LJO0^=V?BK8AbCEFBhDd$^yih$>U z(o{RReCU{#zHSEavFNdc8Yt<%N9pd1flD{ZVSWQu*ea1t#$J5f6*6;tCx=&;EIN^S}*3s%=M#)`~=nz!&Q0&{EP|9nzWyS<#!QxP;!E8&3D}?QKh^ zqGum|+;xu9QE=F#fe2ws5+y1Igr&l`fLyLKry=1}(W+2W`waeOR`ZXlW1B{|;4sE3 zn^ZVlR11hiV~p<~TaSen8I~ay#7Ql=-_|U@$8yjZsZ=Vi+^`JV2+kn+oiSUi%omO_+7}saXnJ9 z5ETilbag(g#jZPopCgJu+n@(i7g}3EK2@N zd64$77H5a`i%b%a^iRjMaprwzWz(`=7E6QY)o)gek7H)yZ-BLw^6FAoHwTj9nJtWc ztKaytMlWGLg29W{?gr|rx&snb@XyvR_}x3fmC>d=-nQp5ab3*whTw}DfUcKlMDDx` z-%?ek^*|Kqooy#>2lfklZ|jN4X$&n6f)RNNPl(+0S>t(8xSeOGj~X0CGRrWmm(WXT z))DDW_t&y$D#2`9<-+JT0x1==26*gpWPV~IF=rePVF%e-I&y$@5eo~A+>yZ&z6&7> z*INESfBHGNegTWga&d@;n;FSCGyW?}e_Qw#GTLHo*fWxuuG@I~5VA!A1pOdRTiPA~ z^AGe(yo=9bwLJD}@oDf$d+34~=(vIuPtOKiP}obDc|?@hY}J*@V|UynBeAkYa?S{@ z_f$U=K+>deTAi&=a*xv>Ruyw$UsTWY=Yn=xjf;s)6NQu>_niQ_idmzIwuL`Scf)f= zyzK?D5a5)^D@H&qN%F6Zd0JeXX*Knbe~VLe^gi|?JK67&mB4jrapV-$`hCQT;C{%T z*pjxB+Y|~LD9bmMN%Iq}S$F$x1yWU7@GcR91V8h;!O2I5MN_rq*gRx(k8T!1WSDTp zr9eJO4$~H94aG^6k5p8k=kFJ>4lnY0q_Bsa$@vTRW6uY?slH|Qt)Yu6Yun&pfJ zBi!h;6x?FDs&79#PT*HSCEUsKws#s%TFy*=2PAfb`>gEPBn+D-WdfXA?MkB=<8kb_ z1+4D11mdHG0EcAyg4dneLtfJ8)RyHQl@6hWJNe(d_EjyCHf7%Xsd)S4A-4COz{G@% z5xQ!P>AS@H@;4Ws)N91)3A6PleMe2<& z!(zv#%Uc?N`(Xmm)OJPYt)BM`nRjoWA&P0Yxl@c9Y02zlPH1J5l$nhPrMwu=atkz4 z)a-1+OEL;d@ctx=s<<+3Sv1VYy0RYmiji|#hy$66#`5;u~BkH4^$EGZ-Y4xyZ=%3KuaeLYKAUr$xMtIh_5mga> zPz<#G0mQ7IxEw-yO}BueN}RaFlg$RwCDB)vLF$wDu%qZyLYsPKdcbHD23$qn9i#JFqIo#OK?u7db2-$GatzO!On87%}Br};~#}n zziVB;qf_4(K$u>Qyz$ln_kBGS!CD-t4Y}9oxL@7@Sx*?NOAzdeINUD>Hl#*V%pfA; zSA`==YatS*G*crJ3`3ll4)vKss&)UtY#7ZxiVoG%9(4<%`WWcjX2jV(^g7Yhj+h5J z$5=?S=tuCyEt74^6jo@6y|@~N>&cVfFNtaRl=)Gm!vR;Bc$3-;ySCI$%kdmjQ|si` z{$q_YCe6vjy6re9jGN|`43D``)1PODtz0)vhV4XV36nVpOnMx2uM%qZ<3TtcI%>BQ zf0(J`{JqPPJxw>k#&nIvoZ5e9Sno)B2r+E0G} z@&M|zf4E0Q$O*NBR2I;?i7N} z@2^Su#`%qeX}m3cbSojiLk#84kvW1fICNPS`OyT0SpUoA0(s^2m~J<^eKE!dhJx_N zG_T}0&(<*an>oF=@?6?55g&IxSgY3?7|@pmDRE6gJyJNPH6un~%0hZ@?h=hI6O$b^ z)29#<4$E)cE-5IFbRpk9JVrw$$966UDyw;Iym4OY4Fc!&s1ZH4BJ1-$9<)Zt1c)N- zU^&9hsk6z?3%<9kGKHW|6~k;&cghtWz`oz`_YjVuvy;B;T67=L2c6=8`7WyTBv*QH zNv*bo1#KOk{O&)@&pkd*?v+kcJ8tM>AGx$~WMhH{L40_N=bkrVg+^p!H)IqXCQf2_ z0fPig=8CEo>p4vE(nc^DKbZ|9_Xo}$i4zJ`jVh95; z5%aNP3@``=EJ=Vt9U`y+$YtX;%OPzgZ_3+;+mh{p#W&y4-%%Bf`LhOy-*kB0qnB^m z_nBTz_b?-`F$*ymByshU>D)za2g`0j^ioo;A#QeL@x3@|+_!=YXA5f6Xg(Ack&WOg zJ<2i|Fd6OmyH!@YSMVxb;=M)ZDhBt)4`5T*>cUXWPG#%@$&*>K&u3#|`fm2mj*FKVf?du{xZ}WKWETTFhq6_fO$PS5(ItF=3~pFp~*j z!ys1<4EL1)#{`mz@gW|t-FpPkd%pK)n_Rb)F;z7cQ6dym_>YI3&e!=!m006oS3Mjq{q ze%hNzW=G0jpfl2K(x`CDuZCsJV*hm9T~%5n7R_g}VFpk`G((D^MWVMAmRp--T{`P; zwMgD<;e`fm`g3|fPns|6qnd{|FCHY*YAguXH(?%sx%4+Gu|Y)_8mk4EljxmP+MP`* z`SUbI{TCIN2OV+$y#g->Jqv#$wL;}4xJmah#$0`v^ughM_XjTA$B}ux)JZuY5-GW4 zKy440I+w=ZtE-_i+0xImq}vyzD68?8;94-5L~_O6Ty>X3itdA-x?6P(c4jkr+f!H( zUDeqiG>3bn^Sf8(`_YwqPeJ9&-@OCQZm4X{FfRMeBtN4E9Ca@;GVpU*L>lVb;@=PH zTQvTr?^jKyCKh&ZVOI*<y%T*Aw(XCPrFC=39*y$A`FSzxBiQ#W+uW10d8&gYp4{teh;^p@anft+z$5!Hv&@h0X-@xJG>hbTCxjDwMiWK@1b%8wYL6BrV zT41m}tX8g-`P@vj4T!Mlk8F0S!MA`^J=SCy9-jdwDe^hVDa`WwyI^H@ryt=F5y6>b zT8&iI6&j8edAfX^ycgWbnMZQ26Q~`LmdEScKC8|~$Jgyw(>18NAQ$9AwCRmri!96L zp^)b0P2CR-9S%cG$#rU}MXnx21T#031o>2VrDs@sa-FpjfvgLPW>Q&LHUoNOtmkt# zoDZ=5OGp{^vO~=p29^`aXd8K?(+f-bW`N$U;-o;%f?RcR!k02Nod2h^^8ly%Z67#E zC3|IOuj~^YBO=Fklo@3mvd6I{Z*&FZ>iq* zxh|JuJoo2$p8MJ3zO@dQ;%1#~Mrm48 zB0053{1bDi_a@jo<4!@!`w4}B(&Qb`~IeSBh zu+_yIYl2Wgk+?x4pCmAM>x_SqBPUj#c`C`k>_fp@qPlAAwD$!zOxRkL7;=|nu(#ut zyF^;&hm-D_;ji{d6rOloACu5*NkF4IC3@rifMG(|^Skv$H&^YnYL*rpw=UCi;JOuz zN*NX(7wZXS4tF@6PIWAs%*j!$RoL*3sh)}iry%thDvN5AUM888q_(>|Tzt|Yea3AyMYBgm$H_`F^v2%)bux)3s znFIEBDK;-JS5SH|;1?afJb<*=c5puu=w%tv#ihn*R!^Hd$KWAp4$#`joJ*)$kNtZ z2Al6h>Z>(u?3tmzA4^d+jLKx{97!Pb4;CX&u;M||**7zXI7hO6nrdMx*Xa=|-`#1^ zBQ?Ha&7cd7hN=%y4yUp?zl8~Lo;%mQrDe8!ce-W_K94FFMN*g(w8q-_K5S+c0{o29X&PzpV;UJE^!xnFc%b@>kvW4m#xiOj-L*DadC&2N#0Us z;<-(m1WB7$=j6hjcPC6JB)D3T2#IC`ibu#yi!uK7W2!j|Z>~RaJ*&XXy#ytIk2DIp z5?Qd^s90_?ILjU#>ZWk5HXts}grg_!Gmgm!d?eLGR7xEP zvTCrslV~94ym5_i<5oqy(@@?wN}lIdtiY8=?|Ng!XeYnly`@9wCGx2S$3x|0x8T2h zz7A85Vb2>s44rKpI_4Y7_Pnd2^mYj2%^jM|Du>u4`^Psda^JIP%*DK6bo`Vf&f{!% zDTYCwF5Nhi=)QhU2$@eQv&ZzxsX+Hl+gP6kW|e!n9IU2>Vh~cioI{>4WvR}t*4Hpz z%5z?HjLGoka}Q3AbX9AkY|Yjf^M(>@tBAI9JO5pDCQu0R3Nns>)LC#vB2p96C*?K? zvX$un$sBDx$1=+NNj*@Oa@u*b@O*XBr_sg@8sCUq-|LK!MUmC)epklrv}5O_^<{NP zX16|c$9Wtbks3y7geI^tF5oRZJu;v zwkW8j+8Ccxo9stEDOT_Go&j%$KCgVO7pm+^%PKEPBZqbMw%s@732XS{cX+wCSjH1s z5)bc=g**<^NNsroY` z?}fHHlgu^B?2r{^^gQ&j zbF~T((>|Yg&C5WKL8DCnl1}Z3!YHFW2S1|;Xr0`Uz-;=FxEwYc4QpeAtnm7^f~uzX zl;xA!?>MLR?tL80Iudm;mi{!ewL91KhG7Hsa-XepKi<2mc6%zf0GwtbfJ1Zf-<@Xu z#|XWDzv|04t)&9Id!UxAAkN{t5qC%%8-WV3i;3duS19%m2||Y{!3pR1=g|zQYAMqc zff)_2nj-O4wfxy;UNM?|Uieo!^J$A*uDe>@V(NKH;KS;Y_dtE8${p>RdcrW;=2*fj4~d?OG0l-(g?ik}vz} z)5-wDppVts>K-=|@{=!53?=8)Jw#RGpS_FWpbwtn}{v!JEJ$q-sr7F6&OPBuI# zuVNFMPte79XgEu!P&qRq8u4J>r%$l-IQ00Lin90(_KtC)aR_de zxN=pY2<1b29_^AG2WJIGmmX4rv3$!`l15{e(H!1^+x9voZ6;882YAE12q7+lgy+>) zj|s0CyzI9=Mo!R}&LXB`&DYpZ7c?0r(&KNV+~TULd0y^e;G{KVR4nL0KvU9mr8&$^ zxrM-9P8zE`J?aZ(iB~Rz<{vvnk2HaZU#K$aVFfYnbAXVUOLU#As5JvS%+26 zi$sNuPY}dLGUS$0g&;oBqhzv2dY`l3@6Na403M!Sh${B|7(y|_cONa;6BrtUe@ZzV z7SThtHT8k?Rwc)(Z}@BP#H@JJHz&GR&M=E@P9KJ89yQKmRh&I~%vbL1L-K3E>7>CH z)Y!=jXVb1iPrAoAZZ3}3wU*5~nrV!ZjL5zqJ<@NwjHCZC>68Cc<{&E_#S;E*jOdjtg?uKN|l`P8sjz&Qf7a^z9 z;{3-8T+H4y99_zc;JYIvs!sk$G}` z??mt*Mm9Z@glCZb!X?!xXD-21sFDPEpZOK{sbQseQ$%6~b;n+*z0hRoR}0Pe>B|#t z$XrVcXv8M|q*Z8MY&r9J0A=d^1bHpjrUXu)qEj~$%%=gZp`^~%O*lzxUquG^p6;n; z^(3HL+hx4gRP?4N*b2p9!^|2~rcw3!9nQj$vmZusbXYz_x^AVc`3qBFm(jS9ueU5h z^AnNnbswfQ2Jq=W=T+p-V|nQco@bOAH$pLQZ+BKH8E$iM>IDz z3|wc?QP`yI=X5YTlp8h}%p6{Deq?S0QD$Ug>ih1SdPZg237Rl{S~=Ha4~-ckMoIWMn+X@@`V6 z#HHZj>MQbt$Qqp*9T(cjc^lxZ7UO(>PwzF-qEr(wo`vaulxdall|KP`7p4gd`23&Jy=#sAes*0diLB(U$Nx46VQvP)8idSs8^zaV91xw*O-JMH=)FoJshRob|_)O)ojtfP))WHCr(;*2;VMQ75^ zfN@a^f#o<|*9X;3IcGodLUz-3i~FAu+zI4c5h+nW^h_!^)b*B_xw-l4O$TB(ixaqW ziMoa%i=BeS<-F45kMO;Tw|FWa`G2c!SuOA3CbowPhF6csf1|&qqugUrj;UgGHm| z;j^yoH?MZhR;AYOW_XW2Lg2j%%ejL)B@*bUMD`g<#Z${1+fa57r7X82 zcqY-cfPnK%Y^3@szRner zt)bBToYCph6Jv*W+&t?&9FG4(Iu2w46 z4B#AcFy_^J@f*6<{>CN}Sj969*DYV*e7<61U>GoN{tz!Do90+jApFueVY_IW(MQF; zl?4yA_(MvMwN&pWKVyg{3uU_+y6RMdot2vu%mC?st=N0pf-~JZXE?3JFf)j<{1xsU z`2ephz)#HzsWEP!inHm2hI(V(~@W zY7gGU-lO52cHD&SY)>QHgy$=>^X%u0TQZfCizro!*weMyvZC=;MWOawdAx~`3C*W` z%^#^$uRP;gyqEE0<(i8xcQY$oc+6mY#z{-XFxsO1(cN8Y)>p;^q9|5bk`Z*p|c!?(rErw#y;yT(%@c7trQBv6cj)$3>pI z>tz+;IB?D=aQV=s(n)o63*yn8dX1m7#Z4G{%fF@K2o5n3jxR~mU?nzMi#;}8e#(>{ zy{Z4!AI)jZ8TY;nq1aq}tq;~=zzoTv)er06oeX3;9{uP{LWR*2%9cmE%S^`~!BW>X zn3PZFTf3g*dG68~^1*q@#^Ge(_8puPEFLD8OS|0b2a{5e=N4S%;~f3tC>F6UxK#v9 z)N-#Mv8=ePCh1KsUKD1A8jF_%$MPf|_yCN9oy%*@um6D{w*2|4GY zb}gafrSC+f=b*W{)!a!fqwZ9)K>fk=i4qf!4M?0v{CMNTo2A9}mQzV=%3UT&i{3{W z>ulG#M!K7%jPf6Mjff9BMslgQq3zIogY);Cv3v;&b#;^=sh#(Bn%W)H*bHNaLwdpq z85%fUTUJJNjYO_426T2TBj0D{6t zw&S_HZ|C?pI_2q(9Fas&@uJs6nVX;P*5K#6p|#)_(8PM-{L(;2wl`ma{ZAd5gA)?y z>0GSLoK<*FwW+G8@-M3vcffg7I(qm7lzF)n`Q9iCvp*mn7=|CjlpG{x z&r0n}XLWZ!>=lynUr7D`6n`7a_ZgT< zm!i;&?Fb0Q2QmqmCHfZ7ex=_tU~(7b)L?RIvPyEAU=gLIZ-VTAA~WR00yKyTXg^(G zqWLZJs!FnQYMOH3*fN&Tn(IKMLf{Ki?pRo8zZJ6YVyj)y0^)-sR}2-)%mI(Aw2AgT zbbp1T{qB(OSNJd0cVBH^tI>HR(q+#*lmi@LWe*rZz&M2h1L_=50uZ1e*n#E*`6?aw zj`ka&JpceRGe@}Ey1)Q~O}0qHRg4K_u>4e1arvJ7Q9!=t5AuzG`n=a-f0}{+lnCE#zu$`oVn44eS&T?N*wz~t~E&oQDBrB_MSg z_yVrQehWbD0xHX|v-hpselAu;O7s;P*!uAT`dr~}Lie=tknaGoiU?;*8Cwgala-65 zosOB4mATbdXJFujzgA4?UkCKE093A1KM?W&Pw>A?IACqg1z~IZYkdP70EeCfjii(n z3k%ax?4|rY(87N&_vhsyVK1zp@uils|B%`(V4e3%sj5f|i(eIhiSg-fHK1Pb0-mS^ zeh?WA7#{hhNci5e;?n*iVy|)iJiR>|8{TN3!=VBC2dN)~^ISSW_(g<^rHr$)nVrdA z39BMa5wl5q+5F@)4b%5-> zA^-P20l_e^S2PTa&HE2wf3jf)#)2ITVXzndeuMpPo8}kphQKhegB%QO+yBpDpgkcl z1nlPp14#+^bIA7__h16pMFECzKJ3p4`;Rf$gnr%{!5#oG42AH&X8hV8061%4W91ku z`OW_hyI+uBOqYXkVC&BqoKWmv;|{O|4d#Nay<)gkxBr^^N48(VDF7Sj#H1i3>9138 zkhxAU7;M)I18&d!Yw!V9zQA0tp(G4<8U5GX{YoYCQ?p56FxcD-2FwO5fqyx@__=$L zeK6Sg3>XQv)qz1?zW-k$_j`-)tf+yRU_%fXrenc>$^70d1Q-W?T#vy;6#Y-Q-<2)+ z5iTl6MA7j9m&oBhRXTKr*$3gec z3E;zX457RGZwUvD$l&8e42Qb^cbq>zYy@ive8`2N9vk=#6+AQlZZ7qk=?(ap1q0n0 z{B9Fte-{Gi-Tvax1)M+d1}Fyg@9X~sh1m|hsDcZuYOnxriBPN;z)q3<=-yBN2iM6V A?*IS* literal 0 HcmV?d00001 diff --git a/samples/springboot3/pet-store-native/.mvn/wrapper/maven-wrapper.properties b/samples/springboot3/pet-store-native/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 000000000..7d02699af --- /dev/null +++ b/samples/springboot3/pet-store-native/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,18 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you 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 +# +# http://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. +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.7/apache-maven-3.8.7-bin.zip +wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar diff --git a/samples/springboot3/pet-store-native/Dockerfile b/samples/springboot3/pet-store-native/Dockerfile new file mode 100644 index 000000000..b86403b6c --- /dev/null +++ b/samples/springboot3/pet-store-native/Dockerfile @@ -0,0 +1,43 @@ +FROM arm64v8/amazonlinux:2 + +RUN yum -y update \ + && yum install -y tar unzip gzip bzip2-devel ed gcc gcc-c++ gcc-gfortran \ + less libcurl-devel openssl openssl-devel readline-devel xz-devel \ + zlib-devel glibc-static libcxx libcxx-devel llvm-toolset-7 zlib-static \ + && rm -rf /var/cache/yum + +ENV GRAAL_VERSION 21.0.2 +ENV GRAAL_FOLDERNAME graalvm-community-openjdk-${GRAAL_VERSION} +ENV ARCHITECTURE aarch64 +RUN curl -4 -L https://github.com/graalvm/graalvm-ce-builds/releases/download/jdk-${GRAAL_VERSION}/graalvm-community-jdk-${GRAAL_VERSION}_linux-${ARCHITECTURE}_bin.tar.gz | tar -xvz +RUN mv graalvm-community-openjdk-${GRAAL_VERSION}* /usr/lib/graalvm +RUN rm -rf $GRAAL_FOLDERNAME + +# Graal maven plugin requires Maven 3.3.x +ENV MVN_VERSION 3.6.3 +ENV MVN_FOLDERNAME apache-maven-${MVN_VERSION} +ENV MVN_FILENAME apache-maven-${MVN_VERSION}-bin.tar.gz +RUN curl -4 -L https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/${MVN_VERSION}/${MVN_FILENAME} | tar -xvz +RUN mv $MVN_FOLDERNAME /usr/lib/maven +RUN rm -rf $MVN_FOLDERNAME + +# Gradle +ENV GRADLE_VERSION 7.4.1 +ENV GRADLE_FOLDERNAME gradle-${GRADLE_VERSION} +ENV GRADLE_FILENAME gradle-${GRADLE_VERSION}-bin.zip +RUN curl -LO https://services.gradle.org/distributions/gradle-${GRADLE_VERSION}-bin.zip +RUN unzip gradle-${GRADLE_VERSION}-bin.zip +RUN mv $GRADLE_FOLDERNAME /usr/lib/gradle +RUN rm -rf $GRADLE_FOLDERNAME + +VOLUME /project +WORKDIR /project + +#RUN /usr/lib/graalvm/bin/gu install native-image +#RUN ln -s /usr/lib/graalvm/bin/native-image /usr/bin/native-image +RUN ln -s /usr/lib/maven/bin/mvn /usr/bin/mvn +RUN ln -s /usr/lib/gradle/bin/gradle /usr/bin/gradle + +ENV JAVA_HOME /usr/lib/graalvm + +WORKDIR /pet-store-native diff --git a/samples/springboot3/pet-store-native/README.md b/samples/springboot3/pet-store-native/README.md new file mode 100644 index 000000000..07eac9c73 --- /dev/null +++ b/samples/springboot3/pet-store-native/README.md @@ -0,0 +1,44 @@ +In this sample, you'll build a native GraalVM image for running web workloads in AWS Lambda. + + +## To build the sample on macOS (Apple silicon arm64) + +You first need to build the function, then you will deploy it to AWS Lambda. + +### Step 1 - Build the native image + +Before starting the build, you must clone or download the code in **function-sample-aws-native**. + +1. Change into the project directory: `samples/springboot3/function-sample-aws-serverless-web-native` +2. Run the following to build a Docker container image which will be used to create the Lambda function zip file. + ``` + docker build -t "al2-graalvm21:native-web" . + ``` +3. Start the container + ``` + docker run -dit -v `pwd`:`pwd` -w `pwd` -v ~/.m2:/root/.m2 al2-graalvm21:native-web + ``` +4. In Docker, open the image terminal. + + > Your working directory should default to the project root. Verify by running `ls` to view the files. + +6. From inside the container, build the Lambda function: + ``` + ./mvnw clean -Pnative native:compile -DskipTests + ``` + +After the build finishes, you need to deploy the function. +You can do it manually or you can use SAM (AWS Serverless Application Model) with the included template.yaml file. +If you chose SAM simply execute the following command. + ``` + sam deploy --guided + ``` + This will deploy your application and will attach an AWS API Gateway +Once the deployment is finished you shouild see the following: +``` +Key ServerlessWebNativeApi +Description URL for application +Value https://xxxxxxxx.execute-api.us-east-2.amazonaws.com/pets +``` + +You can now simply execute GET on this URL and see the listing fo all pets. diff --git a/samples/springboot3/pet-store-native/mvnw b/samples/springboot3/pet-store-native/mvnw new file mode 100755 index 000000000..8d937f4c1 --- /dev/null +++ b/samples/springboot3/pet-store-native/mvnw @@ -0,0 +1,308 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you 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 +# +# http://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. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Apache Maven Wrapper startup batch script, version 3.2.0 +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ] ; then + + if [ -f /usr/local/etc/mavenrc ] ; then + . /usr/local/etc/mavenrc + fi + + if [ -f /etc/mavenrc ] ; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ] ; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false; +darwin=false; +mingw=false +case "$(uname)" in + CYGWIN*) cygwin=true ;; + MINGW*) mingw=true;; + Darwin*) darwin=true + # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home + # See https://developer.apple.com/library/mac/qa/qa1170/_index.html + if [ -z "$JAVA_HOME" ]; then + if [ -x "/usr/libexec/java_home" ]; then + JAVA_HOME="$(/usr/libexec/java_home)"; export JAVA_HOME + else + JAVA_HOME="/Library/Java/Home"; export JAVA_HOME + fi + fi + ;; +esac + +if [ -z "$JAVA_HOME" ] ; then + if [ -r /etc/gentoo-release ] ; then + JAVA_HOME=$(java-config --jre-home) + fi +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$JAVA_HOME" ] && + JAVA_HOME=$(cygpath --unix "$JAVA_HOME") + [ -n "$CLASSPATH" ] && + CLASSPATH=$(cygpath --path --unix "$CLASSPATH") +fi + +# For Mingw, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$JAVA_HOME" ] && [ -d "$JAVA_HOME" ] && + JAVA_HOME="$(cd "$JAVA_HOME" || (echo "cannot cd into $JAVA_HOME."; exit 1); pwd)" +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="$(which javac)" + if [ -n "$javaExecutable" ] && ! [ "$(expr "\"$javaExecutable\"" : '\([^ ]*\)')" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=$(which readlink) + if [ ! "$(expr "$readLink" : '\([^ ]*\)')" = "no" ]; then + if $darwin ; then + javaHome="$(dirname "\"$javaExecutable\"")" + javaExecutable="$(cd "\"$javaHome\"" && pwd -P)/javac" + else + javaExecutable="$(readlink -f "\"$javaExecutable\"")" + fi + javaHome="$(dirname "\"$javaExecutable\"")" + javaHome=$(expr "$javaHome" : '\(.*\)/bin') + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="$(\unset -f command 2>/dev/null; \command -v java)" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + if [ -z "$1" ] + then + echo "Path not specified to find_maven_basedir" + return 1 + fi + + basedir="$1" + wdir="$1" + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + # workaround for JBEAP-8937 (on Solaris 10/Sparc) + if [ -d "${wdir}" ]; then + wdir=$(cd "$wdir/.." || exit 1; pwd) + fi + # end of workaround + done + printf '%s' "$(cd "$basedir" || exit 1; pwd)" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + # Remove \r in case we run on Windows within Git Bash + # and check out the repository with auto CRLF management + # enabled. Otherwise, we may read lines that are delimited with + # \r\n and produce $'-Xarg\r' rather than -Xarg due to word + # splitting rules. + tr -s '\r\n' ' ' < "$1" + fi +} + +log() { + if [ "$MVNW_VERBOSE" = true ]; then + printf '%s\n' "$1" + fi +} + +BASE_DIR=$(find_maven_basedir "$(dirname "$0")") +if [ -z "$BASE_DIR" ]; then + exit 1; +fi + +MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}; export MAVEN_PROJECTBASEDIR +log "$MAVEN_PROJECTBASEDIR" + +########################################################################################## +# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +# This allows using the maven wrapper in projects that prohibit checking in binary data. +########################################################################################## +wrapperJarPath="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" +if [ -r "$wrapperJarPath" ]; then + log "Found $wrapperJarPath" +else + log "Couldn't find $wrapperJarPath, downloading it ..." + + if [ -n "$MVNW_REPOURL" ]; then + wrapperUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" + else + wrapperUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" + fi + while IFS="=" read -r key value; do + # Remove '\r' from value to allow usage on windows as IFS does not consider '\r' as a separator ( considers space, tab, new line ('\n'), and custom '=' ) + safeValue=$(echo "$value" | tr -d '\r') + case "$key" in (wrapperUrl) wrapperUrl="$safeValue"; break ;; + esac + done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties" + log "Downloading from: $wrapperUrl" + + if $cygwin; then + wrapperJarPath=$(cygpath --path --windows "$wrapperJarPath") + fi + + if command -v wget > /dev/null; then + log "Found wget ... using wget" + [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--quiet" + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + wget $QUIET "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" + else + wget $QUIET --http-user="$MVNW_USERNAME" --http-password="$MVNW_PASSWORD" "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" + fi + elif command -v curl > /dev/null; then + log "Found curl ... using curl" + [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--silent" + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + curl $QUIET -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath" + else + curl $QUIET --user "$MVNW_USERNAME:$MVNW_PASSWORD" -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath" + fi + else + log "Falling back to using Java to download" + javaSource="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.java" + javaClass="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.class" + # For Cygwin, switch paths to Windows format before running javac + if $cygwin; then + javaSource=$(cygpath --path --windows "$javaSource") + javaClass=$(cygpath --path --windows "$javaClass") + fi + if [ -e "$javaSource" ]; then + if [ ! -e "$javaClass" ]; then + log " - Compiling MavenWrapperDownloader.java ..." + ("$JAVA_HOME/bin/javac" "$javaSource") + fi + if [ -e "$javaClass" ]; then + log " - Running MavenWrapperDownloader.java ..." + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$wrapperUrl" "$wrapperJarPath") || rm -f "$wrapperJarPath" + fi + fi + fi +fi +########################################################################################## +# End of extension +########################################################################################## + +# If specified, validate the SHA-256 sum of the Maven wrapper jar file +wrapperSha256Sum="" +while IFS="=" read -r key value; do + case "$key" in (wrapperSha256Sum) wrapperSha256Sum=$value; break ;; + esac +done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties" +if [ -n "$wrapperSha256Sum" ]; then + wrapperSha256Result=false + if command -v sha256sum > /dev/null; then + if echo "$wrapperSha256Sum $wrapperJarPath" | sha256sum -c > /dev/null 2>&1; then + wrapperSha256Result=true + fi + elif command -v shasum > /dev/null; then + if echo "$wrapperSha256Sum $wrapperJarPath" | shasum -a 256 -c > /dev/null 2>&1; then + wrapperSha256Result=true + fi + else + echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." + echo "Please install either command, or disable validation by removing 'wrapperSha256Sum' from your maven-wrapper.properties." + exit 1 + fi + if [ $wrapperSha256Result = false ]; then + echo "Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised." >&2 + echo "Investigate or delete $wrapperJarPath to attempt a clean download." >&2 + echo "If you updated your Maven version, you need to update the specified wrapperSha256Sum property." >&2 + exit 1 + fi +fi + +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$JAVA_HOME" ] && + JAVA_HOME=$(cygpath --path --windows "$JAVA_HOME") + [ -n "$CLASSPATH" ] && + CLASSPATH=$(cygpath --path --windows "$CLASSPATH") + [ -n "$MAVEN_PROJECTBASEDIR" ] && + MAVEN_PROJECTBASEDIR=$(cygpath --path --windows "$MAVEN_PROJECTBASEDIR") +fi + +# Provide a "standardized" way to retrieve the CLI args that will +# work with both Windows and non-Windows executions. +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $*" +export MAVEN_CMD_LINE_ARGS + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +# shellcheck disable=SC2086 # safe args +exec "$JAVACMD" \ + $MAVEN_OPTS \ + $MAVEN_DEBUG_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/samples/springboot3/pet-store-native/mvnw.cmd b/samples/springboot3/pet-store-native/mvnw.cmd new file mode 100644 index 000000000..f80fbad3e --- /dev/null +++ b/samples/springboot3/pet-store-native/mvnw.cmd @@ -0,0 +1,205 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Apache Maven Wrapper startup batch script, version 3.2.0 +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM set title of command window +title %0 +@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %* +if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd" %* +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +set WRAPPER_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" + +FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperUrl" SET WRAPPER_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + if "%MVNW_VERBOSE%" == "true" ( + echo Found %WRAPPER_JAR% + ) +) else ( + if not "%MVNW_REPOURL%" == "" ( + SET WRAPPER_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" + ) + if "%MVNW_VERBOSE%" == "true" ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %WRAPPER_URL% + ) + + powershell -Command "&{"^ + "$webclient = new-object System.Net.WebClient;"^ + "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ + "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ + "}"^ + "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%WRAPPER_URL%', '%WRAPPER_JAR%')"^ + "}" + if "%MVNW_VERBOSE%" == "true" ( + echo Finished downloading %WRAPPER_JAR% + ) +) +@REM End of extension + +@REM If specified, validate the SHA-256 sum of the Maven wrapper jar file +SET WRAPPER_SHA_256_SUM="" +FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperSha256Sum" SET WRAPPER_SHA_256_SUM=%%B +) +IF NOT %WRAPPER_SHA_256_SUM%=="" ( + powershell -Command "&{"^ + "$hash = (Get-FileHash \"%WRAPPER_JAR%\" -Algorithm SHA256).Hash.ToLower();"^ + "If('%WRAPPER_SHA_256_SUM%' -ne $hash){"^ + " Write-Output 'Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised.';"^ + " Write-Output 'Investigate or delete %WRAPPER_JAR% to attempt a clean download.';"^ + " Write-Output 'If you updated your Maven version, you need to update the specified wrapperSha256Sum property.';"^ + " exit 1;"^ + "}"^ + "}" + if ERRORLEVEL 1 goto error +) + +@REM Provide a "standardized" way to retrieve the CLI args that will +@REM work with both Windows and non-Windows executions. +set MAVEN_CMD_LINE_ARGS=%* + +%MAVEN_JAVA_EXE% ^ + %JVM_CONFIG_MAVEN_PROPS% ^ + %MAVEN_OPTS% ^ + %MAVEN_DEBUG_OPTS% ^ + -classpath %WRAPPER_JAR% ^ + "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^ + %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat" +if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%"=="on" pause + +if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE% + +cmd /C exit /B %ERROR_CODE% diff --git a/samples/springboot3/pet-store-native/pom.xml b/samples/springboot3/pet-store-native/pom.xml new file mode 100644 index 000000000..1c33325e4 --- /dev/null +++ b/samples/springboot3/pet-store-native/pom.xml @@ -0,0 +1,122 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 3.2.0-SNAPSHOT + + + com.amazonaws.serverless.sample + pet-store-native + 0.0.1-SNAPSHOT + pet-store-native + Sample of AWS with Spring Native + + 21 + 2022.0.5-SNAPSHOT + + + + org.springframework.boot + spring-boot-starter + + + com.amazonaws.serverless + aws-serverless-java-container-springboot3 + 2.0.0-SNAPSHOT + + + com.amazonaws + aws-lambda-java-events + 3.9.0 + + + com.amazonaws + aws-lambda-java-core + 1.1.0 + provided + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + org.springframework.cloud + spring-cloud-dependencies + ${spring-cloud.version} + pom + import + + + + + + + native + + + + org.springframework.boot + spring-boot-maven-plugin + + -agentlib:native-image-agent=config-merge-dir=src/main/resources/META-INF/native-image/ --enable-preview + + --enable-preview + + + + + org.graalvm.buildtools + native-maven-plugin + + + --enable-url-protocols=http --enable-preview + + + + + + build + + package + + + test + + test + + test + + + + + maven-assembly-plugin + + + native-zip + package + + single + + false + + + + + src/assembly/native.xml + + + + + + + + \ No newline at end of file diff --git a/samples/springboot3/pet-store-native/src/assembly/java.xml b/samples/springboot3/pet-store-native/src/assembly/java.xml new file mode 100644 index 000000000..bd4961b58 --- /dev/null +++ b/samples/springboot3/pet-store-native/src/assembly/java.xml @@ -0,0 +1,31 @@ + + java-zip + + zip + + + + + target/classes + / + + + src/shell/java + / + true + 0775 + + bootstrap + + + + + + /lib + false + runtime + + + \ No newline at end of file diff --git a/samples/springboot3/pet-store-native/src/assembly/native.xml b/samples/springboot3/pet-store-native/src/assembly/native.xml new file mode 100644 index 000000000..9bd97a5b7 --- /dev/null +++ b/samples/springboot3/pet-store-native/src/assembly/native.xml @@ -0,0 +1,29 @@ + + native-zip + + zip + + + + + src/shell/native + / + true + 0775 + + bootstrap + + + + target + / + true + 0775 + + pet-store-native + + + + \ No newline at end of file diff --git a/samples/springboot3/pet-store-native/src/main/java/com/amazonaws/serverless/sample/springboot3/DemoApplication.java b/samples/springboot3/pet-store-native/src/main/java/com/amazonaws/serverless/sample/springboot3/DemoApplication.java new file mode 100644 index 000000000..bf53a01f8 --- /dev/null +++ b/samples/springboot3/pet-store-native/src/main/java/com/amazonaws/serverless/sample/springboot3/DemoApplication.java @@ -0,0 +1,12 @@ +package com.amazonaws.serverless.sample.springboot3; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class DemoApplication { + + public static void main(String[] args) throws Exception { + SpringApplication.run(DemoApplication.class, args); + } +} diff --git a/samples/springboot3/pet-store-native/src/main/java/com/amazonaws/serverless/sample/springboot3/HelloController.java b/samples/springboot3/pet-store-native/src/main/java/com/amazonaws/serverless/sample/springboot3/HelloController.java new file mode 100644 index 000000000..2c3fcfb01 --- /dev/null +++ b/samples/springboot3/pet-store-native/src/main/java/com/amazonaws/serverless/sample/springboot3/HelloController.java @@ -0,0 +1,17 @@ +package com.amazonaws.serverless.sample.springboot3; + +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class HelloController { + + public HelloController() { + System.out.println("Creating controller"); + } + + @GetMapping("/hello") + public String something(){ + return "Hello World"; + } +} diff --git a/samples/springboot3/pet-store-native/src/main/java/com/amazonaws/serverless/sample/springboot3/controller/PetsController.java b/samples/springboot3/pet-store-native/src/main/java/com/amazonaws/serverless/sample/springboot3/controller/PetsController.java new file mode 100644 index 000000000..849286fec --- /dev/null +++ b/samples/springboot3/pet-store-native/src/main/java/com/amazonaws/serverless/sample/springboot3/controller/PetsController.java @@ -0,0 +1,82 @@ +/* + * Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance + * with the License. A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.sample.springboot3.controller; + + + +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; + +import com.amazonaws.serverless.sample.springboot3.model.Pet; +import com.amazonaws.serverless.sample.springboot3.model.PetData; + +import java.security.Principal; +import java.util.Optional; +import java.util.UUID; + + +@RestController +@EnableWebMvc +public class PetsController { + @PostMapping(path = "/pets") + public Pet createPet(@RequestBody Pet newPet) { + System.out.println("==> Creating Pet: " + newPet); + if (newPet.getName() == null || newPet.getBreed() == null) { + return null; + } + + Pet dbPet = newPet; + dbPet.setId(UUID.randomUUID().toString()); + return dbPet; + } + + @GetMapping(path = "/pets") + public Pet[] listPets(@RequestParam("limit") Optional limit, Principal principal) { + System.out.println("==> Listing Pets"); + 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(path = "/pets/{petId}") + public Pet listPets() { + System.out.println("==> Listing Pets"); + 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/samples/springboot3/pet-store-native/src/main/java/com/amazonaws/serverless/sample/springboot3/filter/CognitoIdentityFilter.java b/samples/springboot3/pet-store-native/src/main/java/com/amazonaws/serverless/sample/springboot3/filter/CognitoIdentityFilter.java new file mode 100644 index 000000000..d6ccae765 --- /dev/null +++ b/samples/springboot3/pet-store-native/src/main/java/com/amazonaws/serverless/sample/springboot3/filter/CognitoIdentityFilter.java @@ -0,0 +1,69 @@ +package com.amazonaws.serverless.sample.springboot3.filter; + + +import com.amazonaws.serverless.proxy.RequestReader; +import com.amazonaws.serverless.proxy.model.AwsProxyRequestContext; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import jakarta.servlet.Filter; +import jakarta.servlet.FilterChain; +import jakarta.servlet.FilterConfig; +import jakarta.servlet.ServletException; +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; + +import java.io.IOException; + + +/** + * Simple Filter implementation that looks for a Cognito identity id in the API Gateway request context + * and stores the value in a request attribute. The filter is registered with aws-serverless-java-container + * in the onStartup method from the {@link com.amazonaws.serverless.sample.springboot3.StreamLambdaHandler} class. + */ +public class CognitoIdentityFilter implements Filter { + public static final String COGNITO_IDENTITY_ATTRIBUTE = "com.amazonaws.serverless.cognitoId"; + + private static Logger log = LoggerFactory.getLogger(CognitoIdentityFilter.class); + + @Override + public void init(FilterConfig filterConfig) + throws ServletException { + // nothing to do in init + } + + + @Override + public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) + throws IOException, ServletException { + Object apiGwContext = servletRequest.getAttribute(RequestReader.API_GATEWAY_CONTEXT_PROPERTY); + if (apiGwContext == null) { + log.warn("API Gateway context is null"); + filterChain.doFilter(servletRequest, servletResponse); + return; + } + if (!AwsProxyRequestContext.class.isAssignableFrom(apiGwContext.getClass())) { + log.warn("API Gateway context object is not of valid type"); + filterChain.doFilter(servletRequest, servletResponse); + } + + AwsProxyRequestContext ctx = (AwsProxyRequestContext)apiGwContext; + if (ctx.getIdentity() == null) { + log.warn("Identity context is null"); + filterChain.doFilter(servletRequest, servletResponse); + } + String cognitoIdentityId = ctx.getIdentity().getCognitoIdentityId(); + if (cognitoIdentityId == null || "".equals(cognitoIdentityId.trim())) { + log.warn("Cognito identity id in request is null"); + } + servletRequest.setAttribute(COGNITO_IDENTITY_ATTRIBUTE, cognitoIdentityId); + filterChain.doFilter(servletRequest, servletResponse); + } + + + @Override + public void destroy() { + // nothing to do in destroy + } +} diff --git a/samples/springboot3/pet-store-native/src/main/java/com/amazonaws/serverless/sample/springboot3/model/Error.java b/samples/springboot3/pet-store-native/src/main/java/com/amazonaws/serverless/sample/springboot3/model/Error.java new file mode 100644 index 000000000..320f21582 --- /dev/null +++ b/samples/springboot3/pet-store-native/src/main/java/com/amazonaws/serverless/sample/springboot3/model/Error.java @@ -0,0 +1,29 @@ +/* + * Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance + * with the License. A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.sample.springboot3.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/samples/springboot3/pet-store-native/src/main/java/com/amazonaws/serverless/sample/springboot3/model/Pet.java b/samples/springboot3/pet-store-native/src/main/java/com/amazonaws/serverless/sample/springboot3/model/Pet.java new file mode 100644 index 000000000..4f0c4ba8e --- /dev/null +++ b/samples/springboot3/pet-store-native/src/main/java/com/amazonaws/serverless/sample/springboot3/model/Pet.java @@ -0,0 +1,55 @@ +/* + * Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance + * with the License. A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.sample.springboot3.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/samples/springboot3/pet-store-native/src/main/java/com/amazonaws/serverless/sample/springboot3/model/PetData.java b/samples/springboot3/pet-store-native/src/main/java/com/amazonaws/serverless/sample/springboot3/model/PetData.java new file mode 100644 index 000000000..68ea3c18b --- /dev/null +++ b/samples/springboot3/pet-store-native/src/main/java/com/amazonaws/serverless/sample/springboot3/model/PetData.java @@ -0,0 +1,117 @@ +/* + * Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance + * with the License. A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.sample.springboot3.model; + + +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.GregorianCalendar; +import java.util.List; +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/samples/springboot3/pet-store-native/src/main/resources/META-INF/.gitignore b/samples/springboot3/pet-store-native/src/main/resources/META-INF/.gitignore new file mode 100644 index 000000000..0726bbaa2 --- /dev/null +++ b/samples/springboot3/pet-store-native/src/main/resources/META-INF/.gitignore @@ -0,0 +1 @@ +/native-image/ diff --git a/samples/springboot3/pet-store-native/src/main/resources/application.properties b/samples/springboot3/pet-store-native/src/main/resources/application.properties new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/samples/springboot3/pet-store-native/src/main/resources/application.properties @@ -0,0 +1 @@ + diff --git a/samples/springboot3/pet-store-native/src/shell/java/bootstrap b/samples/springboot3/pet-store-native/src/shell/java/bootstrap new file mode 100644 index 000000000..4586728a7 --- /dev/null +++ b/samples/springboot3/pet-store-native/src/shell/java/bootstrap @@ -0,0 +1,7 @@ +#!/bin/sh + +cd ${LAMBDA_TASK_ROOT:-.} + +java -Dspring.main.web-application-type=none -Dlogging.level.org.springframework=DEBUG \ + -noverify -XX:TieredStopAtLevel=1 -Xss256K -XX:MaxMetaspaceSize=128M \ + -cp .:`echo lib/*.jar | tr ' ' :` com.amazonaws.serverless.sample.springboot3.DemoApplication \ No newline at end of file diff --git a/samples/springboot3/pet-store-native/src/shell/native/bootstrap b/samples/springboot3/pet-store-native/src/shell/native/bootstrap new file mode 100644 index 000000000..0156b090b --- /dev/null +++ b/samples/springboot3/pet-store-native/src/shell/native/bootstrap @@ -0,0 +1,5 @@ +#!/bin/sh + +cd ${LAMBDA_TASK_ROOT:-.} + +./pet-store-native -Dlogging.level.org.springframework=DEBUG -Dlogging.level.com.amazonaws.serverless.proxy.spring=DEBUG diff --git a/samples/springboot3/pet-store-native/template.yaml b/samples/springboot3/pet-store-native/template.yaml new file mode 100644 index 000000000..bb6ace59e --- /dev/null +++ b/samples/springboot3/pet-store-native/template.yaml @@ -0,0 +1,33 @@ +AWSTemplateFormatVersion: '2010-09-09' +Transform: AWS::Serverless-2016-10-31 +Description: Serverless Java Container GraalVM +Resources: + ServerlessWebNativeFunction: + Type: AWS::Serverless::Function + Properties: + MemorySize: 512 + FunctionName: pet-store-native + Timeout: 15 + CodeUri: ./target/pet-store-native-0.0.1-SNAPSHOT-native-zip.zip + Handler: NOP + Runtime: provided.al2 + Architectures: + - arm64 + Events: + HttpApiEvent: + Type: HttpApi + Properties: + TimeoutInMillis: 20000 + PayloadFormatVersion: '1.0' + +Globals: + Api: + # API Gateway regional endpoints + EndpointConfiguration: REGIONAL +Outputs: + ServerlessWebNativeApi: + Description: URL for application + Value: !Sub 'https://${ServerlessHttpApi}.execute-api.${AWS::Region}.amazonaws.com/pets' + Export: + Name: ServerlessWebNativeApi + \ No newline at end of file From 0b9384f40da14066b8121ab3a62d201b4395036f Mon Sep 17 00:00:00 2001 From: Oleg Zhurakousky Date: Wed, 24 Jan 2024 21:50:40 +0100 Subject: [PATCH 547/888] Fix gradle file name --- samples/springboot3/alt-pet-store/{build.gradles => build.gradle} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename samples/springboot3/alt-pet-store/{build.gradles => build.gradle} (100%) diff --git a/samples/springboot3/alt-pet-store/build.gradles b/samples/springboot3/alt-pet-store/build.gradle similarity index 100% rename from samples/springboot3/alt-pet-store/build.gradles rename to samples/springboot3/alt-pet-store/build.gradle From cc462ff952ef8d6bb3dc617f0bfb5bbda57ab6c5 Mon Sep 17 00:00:00 2001 From: mbfreder Date: Wed, 24 Jan 2024 13:53:20 -0800 Subject: [PATCH 548/888] Deleted unused imports --- samples/springboot3/graphql-pet-store/README.md | 2 +- .../serverless/sample/springboot3/Application.java | 6 ------ samples/springboot3/graphql-pet-store/template.yml | 2 +- 3 files changed, 2 insertions(+), 8 deletions(-) diff --git a/samples/springboot3/graphql-pet-store/README.md b/samples/springboot3/graphql-pet-store/README.md index 7d18a0dd7..e5bfad120 100644 --- a/samples/springboot3/graphql-pet-store/README.md +++ b/samples/springboot3/graphql-pet-store/README.md @@ -1,4 +1,4 @@ -# Serverless Spring Boot 3 and Spring-graphQl example +# Serverless Spring Boot 3 with GraphQL example A basic pet store written with the [Spring Boot 3 framework](https://projects.spring.io/spring-boot/). Unlike older examples, this example uses the [Spring for GraphQl](https://docs.spring.io/spring-graphql/reference/) library. diff --git a/samples/springboot3/graphql-pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/Application.java b/samples/springboot3/graphql-pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/Application.java index 678477a27..9cf0ea610 100644 --- a/samples/springboot3/graphql-pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/Application.java +++ b/samples/springboot3/graphql-pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/Application.java @@ -5,19 +5,13 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; import org.springframework.context.annotation.Bean; 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; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; - @SpringBootApplication @Import({ PetsController.class }) diff --git a/samples/springboot3/graphql-pet-store/template.yml b/samples/springboot3/graphql-pet-store/template.yml index c6543b15f..ce5dcc6b1 100644 --- a/samples/springboot3/graphql-pet-store/template.yml +++ b/samples/springboot3/graphql-pet-store/template.yml @@ -14,7 +14,7 @@ Resources: Handler: com.amazonaws.serverless.sample.springboot3.StreamLambdaHandler::handleRequest Runtime: java21 CodeUri: . - MemorySize: 1512 + MemorySize: 1024 Policies: AWSLambdaBasicExecutionRole Timeout: 60 Events: From ec852727da1c15f5d6e9ad361efdba73bc9bd383 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 25 Jan 2024 09:05:27 +0000 Subject: [PATCH 549/888] chore(deps-dev): bump org.apache.httpcomponents.client5:httpclient5 Bumps [org.apache.httpcomponents.client5:httpclient5](https://github.com/apache/httpcomponents-client) from 5.3 to 5.3.1. - [Changelog](https://github.com/apache/httpcomponents-client/blob/rel/v5.3.1/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.3...rel/v5.3.1) --- updated-dependencies: - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 0caa7b78d..541d6bcce 100644 --- a/pom.xml +++ b/pom.xml @@ -119,7 +119,7 @@ org.apache.httpcomponents.client5 httpclient5 - 5.3 + 5.3.1 test From f532873c1c893581cb86f92b7c7464dd756c7486 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 25 Jan 2024 09:05:32 +0000 Subject: [PATCH 550/888] chore(deps-dev): bump org.mockito:mockito-core from 5.9.0 to 5.10.0 Bumps [org.mockito:mockito-core](https://github.com/mockito/mockito) from 5.9.0 to 5.10.0. - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](https://github.com/mockito/mockito/compare/v5.9.0...v5.10.0) --- updated-dependencies: - dependency-name: org.mockito:mockito-core dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 0caa7b78d..04a4b58ea 100644 --- a/pom.xml +++ b/pom.xml @@ -81,7 +81,7 @@ 2.16.1 2.0.11 5.10.1 - 5.9.0 + 5.10.0 1.3 UTF-8 From 8f0fc79094c8d7025d47ce21d384b08d871a341e Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Thu, 25 Jan 2024 13:44:40 +0100 Subject: [PATCH 551/888] feat: native Spring Web workloads (#335) - consistent naming --- ...java => AwsSpringHttpProcessingUtils.java} | 44 ++++--------------- .../AwsSpringWebCustomRuntimeEventLoop.java | 4 +- ...va => AwsSpringWebRuntimeInitializer.java} | 4 +- ...pringDelegatingLambdaContainerHandler.java | 2 +- .../main/resources/META-INF/spring.factories | 2 +- ...=> AwsSpringHttpProcessingUtilsTests.java} | 8 ++-- 6 files changed, 18 insertions(+), 46 deletions(-) rename aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/{AWSHttpUtils.java => AwsSpringHttpProcessingUtils.java} (84%) rename aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/{AWSWebRuntimeInitializer.java => AwsSpringWebRuntimeInitializer.java} (92%) rename aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/{AWSHttpUtilsTests.java => AwsSpringHttpProcessingUtilsTests.java} (96%) diff --git a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AWSHttpUtils.java b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringHttpProcessingUtils.java similarity index 84% rename from aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AWSHttpUtils.java rename to aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringHttpProcessingUtils.java index e19226b84..25a9c9cda 100644 --- a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AWSHttpUtils.java +++ b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringHttpProcessingUtils.java @@ -30,16 +30,16 @@ import jakarta.servlet.ServletContext; import jakarta.servlet.http.HttpServletRequest; -class AWSHttpUtils { +class AwsSpringHttpProcessingUtils { - private static Log logger = LogFactory.getLog(AWSHttpUtils.class); + private static Log logger = LogFactory.getLog(AwsSpringHttpProcessingUtils.class); - private AWSHttpUtils() { + private AwsSpringHttpProcessingUtils() { } public static AwsProxyResponse processRequest(String gatewayEvent, ServerlessMVC mvc, ObjectMapper mapper, AwsProxyHttpServletResponseWriter responseWriter) { - HttpServletRequest request = AWSHttpUtils.generateHttpServletRequest(gatewayEvent, null, mvc.getServletContext(), mapper); + HttpServletRequest request = AwsSpringHttpProcessingUtils.generateHttpServletRequest(gatewayEvent, null, mvc.getServletContext(), mapper); CountDownLatch latch = new CountDownLatch(1); AwsHttpServletResponse response = new AwsHttpServletResponse(request, latch); try { @@ -56,7 +56,7 @@ public static AwsProxyResponse processRequest(String gatewayEvent, ServerlessMVC public static String extractVersion() { try { - String path = AWSHttpUtils.class.getProtectionDomain().getCodeSource().getLocation().toString(); + String path = AwsSpringHttpProcessingUtils.class.getProtectionDomain().getCodeSource().getLocation().toString(); int endIndex = path.lastIndexOf('.'); if (endIndex < 0) { return "UNKNOWN-VERSION"; @@ -94,8 +94,8 @@ public static HttpServletRequest generateHttpServletRequest(String jsonRequest, ? new AwsHttpApiV2SecurityContextWriter() : new AwsProxySecurityContextWriter(); HttpServletRequest httpServletRequest = "2.0".equals(_request.get("version")) - ? AWSHttpUtils.generateRequest2(jsonRequest, lambdaContext, securityWriter, mapper, servletContext) - : AWSHttpUtils.generateRequest1(jsonRequest, lambdaContext, securityWriter, mapper, servletContext); + ? AwsSpringHttpProcessingUtils.generateRequest2(jsonRequest, lambdaContext, securityWriter, mapper, servletContext) + : AwsSpringHttpProcessingUtils.generateRequest1(jsonRequest, lambdaContext, securityWriter, mapper, servletContext); return httpServletRequest; } @@ -155,33 +155,5 @@ private static T readValue(String json, Class clazz, ObjectMapper mapper) throw new IllegalStateException(e); } } - -// public static class ProxyServletConfig implements ServletConfig { -// -// private final ServletContext servletContext; -// -// public ProxyServletConfig(ServletContext servletContext) { -// this.servletContext = servletContext; -// } -// -// @Override -// public String getServletName() { -// return DispatcherServletAutoConfiguration.DEFAULT_DISPATCHER_SERVLET_BEAN_NAME; -// } -// -// @Override -// public ServletContext getServletContext() { -// return this.servletContext; -// } -// -// @Override -// public Enumeration getInitParameterNames() { -// return Collections.enumeration(new ArrayList()); -// } -// -// @Override -// public String getInitParameter(String name) { -// return null; -// } -// } + } diff --git a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringWebCustomRuntimeEventLoop.java b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringWebCustomRuntimeEventLoop.java index 4bb81059f..705cc80cc 100644 --- a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringWebCustomRuntimeEventLoop.java +++ b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringWebCustomRuntimeEventLoop.java @@ -57,7 +57,7 @@ public final class AwsSpringWebCustomRuntimeEventLoop implements SmartLifecycle private static final String LAMBDA_RUNTIME_URL_TEMPLATE = "http://{0}/{1}/runtime/invocation/next"; private static final String LAMBDA_INVOCATION_URL_TEMPLATE = "http://{0}/{1}/runtime/invocation/{2}/response"; private static final String USER_AGENT_VALUE = String.format("spring-cloud-function/%s-%s", - System.getProperty("java.runtime.version"), AWSHttpUtils.extractVersion()); + System.getProperty("java.runtime.version"), AwsSpringHttpProcessingUtils.extractVersion()); private final ServletWebServerApplicationContext applicationContext; @@ -128,7 +128,7 @@ private void eventLoop(ServletWebServerApplicationContext context) { try { logger.debug("Submitting request to the user's web application"); - AwsProxyResponse awsResponse = AWSHttpUtils.processRequest(incomingEvent.getBody(), mvc, mapper, responseWriter); + AwsProxyResponse awsResponse = AwsSpringHttpProcessingUtils.processRequest(incomingEvent.getBody(), mvc, mapper, responseWriter); if (logger.isDebugEnabled()) { logger.debug("Received response - body: " + awsResponse.getBody() + "; status: " + awsResponse.getStatusCode() + "; headers: " + awsResponse.getHeaders()); diff --git a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AWSWebRuntimeInitializer.java b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringWebRuntimeInitializer.java similarity index 92% rename from aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AWSWebRuntimeInitializer.java rename to aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringWebRuntimeInitializer.java index e6dbd878f..4f47121df 100644 --- a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AWSWebRuntimeInitializer.java +++ b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringWebRuntimeInitializer.java @@ -32,9 +32,9 @@ * @author Dave Syer * @author Oleg Zhurakousky */ -public class AWSWebRuntimeInitializer implements ApplicationContextInitializer { +public class AwsSpringWebRuntimeInitializer implements ApplicationContextInitializer { - private static Log logger = LogFactory.getLog(AWSWebRuntimeInitializer.class); + private static Log logger = LogFactory.getLog(AwsSpringWebRuntimeInitializer.class); @Override public void initialize(GenericApplicationContext context) { diff --git a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/SpringDelegatingLambdaContainerHandler.java b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/SpringDelegatingLambdaContainerHandler.java index 7bbd8347b..47d78fca3 100644 --- a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/SpringDelegatingLambdaContainerHandler.java +++ b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/SpringDelegatingLambdaContainerHandler.java @@ -61,7 +61,7 @@ public SpringDelegatingLambdaContainerHandler(Class... startupClasses) { @Override public void handleRequest(InputStream input, OutputStream output, Context lambdaContext) throws IOException { - HttpServletRequest httpServletRequest = AWSHttpUtils + HttpServletRequest httpServletRequest = AwsSpringHttpProcessingUtils .generateHttpServletRequest(input, lambdaContext, this.mvc.getServletContext(), this.mapper); CountDownLatch latch = new CountDownLatch(1); AwsHttpServletResponse httpServletResponse = new AwsHttpServletResponse(httpServletRequest, latch); diff --git a/aws-serverless-java-container-springboot3/src/main/resources/META-INF/spring.factories b/aws-serverless-java-container-springboot3/src/main/resources/META-INF/spring.factories index a50819954..cd5c2e70b 100644 --- a/aws-serverless-java-container-springboot3/src/main/resources/META-INF/spring.factories +++ b/aws-serverless-java-container-springboot3/src/main/resources/META-INF/spring.factories @@ -1,2 +1,2 @@ org.springframework.context.ApplicationContextInitializer=\ -com.amazonaws.serverless.proxy.spring.AWSWebRuntimeInitializer +com.amazonaws.serverless.proxy.spring.AwsSpringWebRuntimeInitializer diff --git a/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/AWSHttpUtilsTests.java b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/AwsSpringHttpProcessingUtilsTests.java similarity index 96% rename from aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/AWSHttpUtilsTests.java rename to aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/AwsSpringHttpProcessingUtilsTests.java index 61adfdcee..d77322b1a 100644 --- a/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/AWSHttpUtilsTests.java +++ b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/AwsSpringHttpProcessingUtilsTests.java @@ -30,7 +30,7 @@ import jakarta.servlet.http.HttpServletRequest; -public class AWSHttpUtilsTests { +public class AwsSpringHttpProcessingUtilsTests { private static String API_GATEWAY_EVENT = "{\n" + " \"version\": \"1.0\",\n" @@ -195,7 +195,7 @@ public static Collection data() { public void validateHttpServletRequestGenerationWithInputStream(String jsonEvent) { ByteArrayInputStream inputStream = new ByteArrayInputStream(jsonEvent.getBytes(StandardCharsets.UTF_8)); ServerlessServletContext servletContext = new ServerlessServletContext(); - HttpServletRequest request = AWSHttpUtils.generateHttpServletRequest(inputStream, null, servletContext, mapper); + HttpServletRequest request = AwsSpringHttpProcessingUtils.generateHttpServletRequest(inputStream, null, servletContext, mapper); // spot check some headers assertEquals("curl/7.79.1", request.getHeader("User-Agent")); assertEquals("443", request.getHeader("X-Forwarded-Port")); @@ -207,7 +207,7 @@ public void validateHttpServletRequestGenerationWithInputStream(String jsonEvent @ParameterizedTest public void validateHttpServletRequestGenerationWithJson(String jsonEvent) { ServerlessServletContext servletContext = new ServerlessServletContext(); - HttpServletRequest request = AWSHttpUtils.generateHttpServletRequest(jsonEvent, null, servletContext, mapper); + HttpServletRequest request = AwsSpringHttpProcessingUtils.generateHttpServletRequest(jsonEvent, null, servletContext, mapper); // spot check some headers assertEquals("curl/7.79.1", request.getHeader("User-Agent")); assertEquals("443", request.getHeader("X-Forwarded-Port")); @@ -221,7 +221,7 @@ public void validateRequestResponse(String jsonEvent) throws Exception { try (ConfigurableApplicationContext context = SpringApplication.run(EmptyApplication.class);) { ServerlessMVC mvc = ServerlessMVC.INSTANCE((ServletWebServerApplicationContext) context); AwsProxyHttpServletResponseWriter responseWriter = new AwsProxyHttpServletResponseWriter(); - AwsProxyResponse awsResponse = AWSHttpUtils.processRequest(jsonEvent, mvc, mapper, responseWriter); + AwsProxyResponse awsResponse = AwsSpringHttpProcessingUtils.processRequest(jsonEvent, mvc, mapper, responseWriter); assertEquals("hello", awsResponse.getBody()); assertEquals(200, awsResponse.getStatusCode()); } From 1bd5f7241766c715c9966c0f869fd73cbe58b649 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Thu, 25 Jan 2024 13:49:13 +0100 Subject: [PATCH 552/888] feat: native Spring Web workloads (#335) - polishing --- .../serverless/proxy/spring/AwsSpringHttpProcessingUtils.java | 2 +- .../proxy/spring/AwsSpringWebCustomRuntimeEventLoop.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringHttpProcessingUtils.java b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringHttpProcessingUtils.java index 25a9c9cda..e1bf9fe7e 100644 --- a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringHttpProcessingUtils.java +++ b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringHttpProcessingUtils.java @@ -132,7 +132,7 @@ private static HttpServletRequest generateRequest2(String request, Context lambd ServerlessHttpServletRequest httpRequest = new ServerlessHttpServletRequest(servletContext, v2Request.getRequestContext().getHttp().getMethod(), v2Request.getRequestContext().getHttp().getPath()); - v2Request.getHeaders().forEach((k,v) -> httpRequest.setHeader(k, v)); + v2Request.getHeaders().forEach(httpRequest::setHeader); if (StringUtils.hasText(v2Request.getBody())) { httpRequest.setContentType("application/json"); diff --git a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringWebCustomRuntimeEventLoop.java b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringWebCustomRuntimeEventLoop.java index 705cc80cc..7e19683c6 100644 --- a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringWebCustomRuntimeEventLoop.java +++ b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringWebCustomRuntimeEventLoop.java @@ -63,7 +63,7 @@ public final class AwsSpringWebCustomRuntimeEventLoop implements SmartLifecycle private volatile boolean running; - private ExecutorService executor = Executors.newSingleThreadExecutor(); + private final ExecutorService executor = Executors.newSingleThreadExecutor(); public AwsSpringWebCustomRuntimeEventLoop(ServletWebServerApplicationContext applicationContext) { this.applicationContext = applicationContext; From 227b2a7654cccf75b368872313e3f2c91f30c05f Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Thu, 25 Jan 2024 14:06:03 +0100 Subject: [PATCH 553/888] feat: native Spring Web workloads (#335) - use newer dependency versions for sample --- samples/springboot3/pet-store-native/pom.xml | 25 +++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/samples/springboot3/pet-store-native/pom.xml b/samples/springboot3/pet-store-native/pom.xml index 1c33325e4..6ca921205 100644 --- a/samples/springboot3/pet-store-native/pom.xml +++ b/samples/springboot3/pet-store-native/pom.xml @@ -6,7 +6,7 @@ org.springframework.boot spring-boot-starter-parent - 3.2.0-SNAPSHOT + 3.2.2 com.amazonaws.serverless.sample @@ -31,12 +31,12 @@ com.amazonaws aws-lambda-java-events - 3.9.0 + 3.11.4 com.amazonaws aws-lambda-java-core - 1.1.0 + 1.2.3 provided @@ -119,4 +119,23 @@ + + + + spring-snapshots + Spring Snapshots + https://repo.spring.io/snapshot + + true + + + + spring-milestones + Spring Milestones + https://repo.spring.io/milestone + + false + + + \ No newline at end of file From 01606c1fbcd50b918d95cdc84f0d7056a1d8b889 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Thu, 25 Jan 2024 14:07:26 +0100 Subject: [PATCH 554/888] feat: native Spring Web workloads (#335) - removed System.out.println in favor of proper logging --- .../proxy/spring/AwsSpringWebCustomRuntimeEventLoop.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringWebCustomRuntimeEventLoop.java b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringWebCustomRuntimeEventLoop.java index 7e19683c6..4c3484a24 100644 --- a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringWebCustomRuntimeEventLoop.java +++ b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringWebCustomRuntimeEventLoop.java @@ -143,9 +143,6 @@ private void eventLoop(ServletWebServerApplicationContext context) { logger.debug("Response sent: body: " + result.getBody() + "; status: " + result.getStatusCode() + "; headers: " + result.getHeaders()); } - System.out.println("==> status " + result.getStatusCode()); - System.out.println("==> body " + result.getBody()); - logger.debug("Response submitted back to the AWS Gateway"); if (logger.isInfoEnabled()) { logger.info("Result POST status: " + result); } From 4ff8c4169a935c7b660cdcf11bb3cdcc585924bd Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Thu, 25 Jan 2024 16:18:15 +0100 Subject: [PATCH 555/888] feat: native Spring Web workloads (#335) - update sample to Amazon Linux 2023 --- .../springboot3/pet-store-native/Dockerfile | 31 +++++++------------ .../pet-store-native/template.yaml | 2 +- 2 files changed, 13 insertions(+), 20 deletions(-) diff --git a/samples/springboot3/pet-store-native/Dockerfile b/samples/springboot3/pet-store-native/Dockerfile index b86403b6c..d885d9261 100644 --- a/samples/springboot3/pet-store-native/Dockerfile +++ b/samples/springboot3/pet-store-native/Dockerfile @@ -1,25 +1,25 @@ -FROM arm64v8/amazonlinux:2 +FROM public.ecr.aws/amazonlinux/amazonlinux:2023 RUN yum -y update \ - && yum install -y tar unzip gzip bzip2-devel ed gcc gcc-c++ gcc-gfortran \ + && yum install -y unzip tar gzip bzip2-devel ed gcc gcc-c++ gcc-gfortran \ less libcurl-devel openssl openssl-devel readline-devel xz-devel \ - zlib-devel glibc-static libcxx libcxx-devel llvm-toolset-7 zlib-static \ + zlib-devel glibc-static zlib-static \ && rm -rf /var/cache/yum +# Graal VM ENV GRAAL_VERSION 21.0.2 -ENV GRAAL_FOLDERNAME graalvm-community-openjdk-${GRAAL_VERSION} -ENV ARCHITECTURE aarch64 -RUN curl -4 -L https://github.com/graalvm/graalvm-ce-builds/releases/download/jdk-${GRAAL_VERSION}/graalvm-community-jdk-${GRAAL_VERSION}_linux-${ARCHITECTURE}_bin.tar.gz | tar -xvz +ENV GRAAL_FILENAME graalvm-community-jdk-${GRAAL_VERSION}_linux-x64_bin.tar.gz +RUN curl -4 -L https://github.com/graalvm/graalvm-ce-builds/releases/download/jdk-${GRAAL_VERSION}/${GRAAL_FILENAME} | tar -xvz RUN mv graalvm-community-openjdk-${GRAAL_VERSION}* /usr/lib/graalvm -RUN rm -rf $GRAAL_FOLDERNAME +ENV JAVA_HOME /usr/lib/graalvm -# Graal maven plugin requires Maven 3.3.x -ENV MVN_VERSION 3.6.3 +# Maven +ENV MVN_VERSION 3.9.6 ENV MVN_FOLDERNAME apache-maven-${MVN_VERSION} ENV MVN_FILENAME apache-maven-${MVN_VERSION}-bin.tar.gz -RUN curl -4 -L https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/${MVN_VERSION}/${MVN_FILENAME} | tar -xvz +RUN curl -4 -L https://archive.apache.org/dist/maven/maven-3/${MVN_VERSION}/binaries/${MVN_FILENAME} | tar -xvz RUN mv $MVN_FOLDERNAME /usr/lib/maven -RUN rm -rf $MVN_FOLDERNAME +RUN ln -s /usr/lib/maven/bin/mvn /usr/bin/mvn # Gradle ENV GRADLE_VERSION 7.4.1 @@ -28,16 +28,9 @@ ENV GRADLE_FILENAME gradle-${GRADLE_VERSION}-bin.zip RUN curl -LO https://services.gradle.org/distributions/gradle-${GRADLE_VERSION}-bin.zip RUN unzip gradle-${GRADLE_VERSION}-bin.zip RUN mv $GRADLE_FOLDERNAME /usr/lib/gradle -RUN rm -rf $GRADLE_FOLDERNAME +RUN ln -s /usr/lib/gradle/bin/gradle /usr/bin/gradle VOLUME /project WORKDIR /project -#RUN /usr/lib/graalvm/bin/gu install native-image -#RUN ln -s /usr/lib/graalvm/bin/native-image /usr/bin/native-image -RUN ln -s /usr/lib/maven/bin/mvn /usr/bin/mvn -RUN ln -s /usr/lib/gradle/bin/gradle /usr/bin/gradle - -ENV JAVA_HOME /usr/lib/graalvm - WORKDIR /pet-store-native diff --git a/samples/springboot3/pet-store-native/template.yaml b/samples/springboot3/pet-store-native/template.yaml index bb6ace59e..e081c7710 100644 --- a/samples/springboot3/pet-store-native/template.yaml +++ b/samples/springboot3/pet-store-native/template.yaml @@ -10,7 +10,7 @@ Resources: Timeout: 15 CodeUri: ./target/pet-store-native-0.0.1-SNAPSHOT-native-zip.zip Handler: NOP - Runtime: provided.al2 + Runtime: provided.al2023 Architectures: - arm64 Events: From 9be742ab075cdee6f9ad62e3894b90c432678625 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Thu, 25 Jan 2024 16:47:17 +0100 Subject: [PATCH 556/888] feat: native Spring Web workloads (#335) - update README for sample --- samples/springboot3/pet-store-native/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/samples/springboot3/pet-store-native/README.md b/samples/springboot3/pet-store-native/README.md index 07eac9c73..831353e5a 100644 --- a/samples/springboot3/pet-store-native/README.md +++ b/samples/springboot3/pet-store-native/README.md @@ -7,9 +7,9 @@ You first need to build the function, then you will deploy it to AWS Lambda. ### Step 1 - Build the native image -Before starting the build, you must clone or download the code in **function-sample-aws-native**. +Before starting the build, you must clone or download the code in **pet-store-native**. -1. Change into the project directory: `samples/springboot3/function-sample-aws-serverless-web-native` +1. Change into the project directory: `samples/springboot3/pet-store-native` 2. Run the following to build a Docker container image which will be used to create the Lambda function zip file. ``` docker build -t "al2-graalvm21:native-web" . From cb178853f6e9bf0f0f4e0b0c6cd43c35e32bee0e Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 26 Jan 2024 09:08:43 +0100 Subject: [PATCH 557/888] feat: native Spring Web workloads (#335) - use latest runtime version --- samples/springboot3/alt-pet-store/template.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/springboot3/alt-pet-store/template.yml b/samples/springboot3/alt-pet-store/template.yml index 8a51c8d1d..c883f0850 100644 --- a/samples/springboot3/alt-pet-store/template.yml +++ b/samples/springboot3/alt-pet-store/template.yml @@ -14,7 +14,7 @@ Resources: # AutoPublishAlias: bcn FunctionName: pet-store-boot-3 Handler: com.amazonaws.serverless.proxy.spring.SpringDelegatingLambdaContainerHandler::handleRequest - Runtime: java17 + Runtime: java21 SnapStart: ApplyOn: PublishedVersions CodeUri: . From 3ef9aab69464519abce3158f4e93713540b56e24 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 26 Jan 2024 11:04:24 +0100 Subject: [PATCH 558/888] feat: native Spring Web workloads (#335) - native and non-native Handler should use same processing logic --- .../proxy/AsyncInitializationWrapper.java | 2 +- .../spring/AwsSpringHttpProcessingUtils.java | 10 +++++++--- .../AwsSpringWebCustomRuntimeEventLoop.java | 6 ++++-- .../SpringDelegatingLambdaContainerHandler.java | 16 +++------------- .../AwsSpringHttpProcessingUtilsTests.java | 4 +++- 5 files changed, 18 insertions(+), 20 deletions(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/AsyncInitializationWrapper.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/AsyncInitializationWrapper.java index f5264e5f8..b6b9b037d 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/AsyncInitializationWrapper.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/AsyncInitializationWrapper.java @@ -47,7 +47,7 @@ public class AsyncInitializationWrapper extends InitializationWrapper { private static final boolean ASYNC_INIT_DISABLED = !INITIALIZATION_TYPE.equals(INITIALIZATION_TYPE_ON_DEMAND); private static final int INIT_GRACE_TIME_MS = Integer.parseInt(System.getenv().getOrDefault( INIT_GRACE_TIME_ENVIRONMENT_VARIABLE_NAME, Integer.toString(DEFAULT_INIT_GRACE_TIME_MS))); - public static final int LAMBDA_MAX_INIT_TIME_MS = 10_000; + private static final int LAMBDA_MAX_INIT_TIME_MS = 10_000; private CountDownLatch initializationLatch; private final long actualStartTime; diff --git a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringHttpProcessingUtils.java b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringHttpProcessingUtils.java index e1bf9fe7e..d268bd2e4 100644 --- a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringHttpProcessingUtils.java +++ b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringHttpProcessingUtils.java @@ -33,18 +33,22 @@ class AwsSpringHttpProcessingUtils { private static Log logger = LogFactory.getLog(AwsSpringHttpProcessingUtils.class); + private static final int LAMBDA_MAX_REQUEST_DURATION_MINUTES = 15; private AwsSpringHttpProcessingUtils() { } - public static AwsProxyResponse processRequest(String gatewayEvent, ServerlessMVC mvc, ObjectMapper mapper, AwsProxyHttpServletResponseWriter responseWriter) { - HttpServletRequest request = AwsSpringHttpProcessingUtils.generateHttpServletRequest(gatewayEvent, null, mvc.getServletContext(), mapper); + public static AwsProxyResponse processRequest(HttpServletRequest request, ServerlessMVC mvc, + AwsProxyHttpServletResponseWriter responseWriter) { CountDownLatch latch = new CountDownLatch(1); AwsHttpServletResponse response = new AwsHttpServletResponse(request, latch); try { mvc.service(request, response); - latch.await(AsyncInitializationWrapper.LAMBDA_MAX_INIT_TIME_MS, TimeUnit.SECONDS); + boolean requestTimedOut = !latch.await(LAMBDA_MAX_REQUEST_DURATION_MINUTES, TimeUnit.MINUTES); // timeout is potentially lower as user configures it + if (requestTimedOut) { + logger.warn("request timed out after " + LAMBDA_MAX_REQUEST_DURATION_MINUTES + " minutes"); + } AwsProxyResponse awsResponse = responseWriter.writeResponse(response, null); return awsResponse; } diff --git a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringWebCustomRuntimeEventLoop.java b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringWebCustomRuntimeEventLoop.java index 4c3484a24..db71d56c0 100644 --- a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringWebCustomRuntimeEventLoop.java +++ b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringWebCustomRuntimeEventLoop.java @@ -127,8 +127,10 @@ private void eventLoop(ServletWebServerApplicationContext context) { try { logger.debug("Submitting request to the user's web application"); - - AwsProxyResponse awsResponse = AwsSpringHttpProcessingUtils.processRequest(incomingEvent.getBody(), mvc, mapper, responseWriter); + + 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()); diff --git a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/SpringDelegatingLambdaContainerHandler.java b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/SpringDelegatingLambdaContainerHandler.java index 47d78fca3..f1a3b526e 100644 --- a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/SpringDelegatingLambdaContainerHandler.java +++ b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/SpringDelegatingLambdaContainerHandler.java @@ -3,13 +3,11 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; +import com.amazonaws.serverless.proxy.model.AwsProxyResponse; import org.springframework.cloud.function.serverless.web.FunctionClassUtils; import org.springframework.cloud.function.serverless.web.ServerlessMVC; -import com.amazonaws.serverless.proxy.internal.servlet.AwsHttpServletResponse; import com.amazonaws.serverless.proxy.internal.servlet.AwsProxyHttpServletResponseWriter; import com.amazonaws.services.lambda.runtime.Context; import com.amazonaws.services.lambda.runtime.RequestStreamHandler; @@ -63,15 +61,7 @@ public SpringDelegatingLambdaContainerHandler(Class... startupClasses) { public void handleRequest(InputStream input, OutputStream output, Context lambdaContext) throws IOException { HttpServletRequest httpServletRequest = AwsSpringHttpProcessingUtils .generateHttpServletRequest(input, lambdaContext, this.mvc.getServletContext(), this.mapper); - CountDownLatch latch = new CountDownLatch(1); - AwsHttpServletResponse httpServletResponse = new AwsHttpServletResponse(httpServletRequest, latch); - try { - this.mvc.service(httpServletRequest, httpServletResponse); - latch.await(10, TimeUnit.SECONDS); - this.mapper.writeValue(output, responseWriter.writeResponse(httpServletResponse, lambdaContext)); - } - catch (Exception e) { - throw new IllegalStateException(e); - } + AwsProxyResponse awsProxyResponse = AwsSpringHttpProcessingUtils.processRequest(httpServletRequest, mvc, responseWriter); + this.mapper.writeValue(output, awsProxyResponse); } } diff --git a/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/AwsSpringHttpProcessingUtilsTests.java b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/AwsSpringHttpProcessingUtilsTests.java index d77322b1a..a04361e7e 100644 --- a/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/AwsSpringHttpProcessingUtilsTests.java +++ b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/AwsSpringHttpProcessingUtilsTests.java @@ -221,7 +221,9 @@ public void validateRequestResponse(String jsonEvent) throws Exception { try (ConfigurableApplicationContext context = SpringApplication.run(EmptyApplication.class);) { ServerlessMVC mvc = ServerlessMVC.INSTANCE((ServletWebServerApplicationContext) context); AwsProxyHttpServletResponseWriter responseWriter = new AwsProxyHttpServletResponseWriter(); - AwsProxyResponse awsResponse = AwsSpringHttpProcessingUtils.processRequest(jsonEvent, mvc, mapper, responseWriter); + AwsProxyResponse awsResponse = AwsSpringHttpProcessingUtils.processRequest( + AwsSpringHttpProcessingUtils.generateHttpServletRequest(jsonEvent, null, + mvc.getServletContext(), mapper), mvc, responseWriter); assertEquals("hello", awsResponse.getBody()); assertEquals(200, awsResponse.getStatusCode()); } From c21a826a9b9409689586243f52e2a87b164405b0 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 26 Jan 2024 11:24:57 +0100 Subject: [PATCH 559/888] feat: native Spring Web workloads (#335) - add -march=compatibility to avoid infrequent CPU features error --- samples/springboot3/pet-store-native/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/springboot3/pet-store-native/pom.xml b/samples/springboot3/pet-store-native/pom.xml index 6ca921205..c02774bbf 100644 --- a/samples/springboot3/pet-store-native/pom.xml +++ b/samples/springboot3/pet-store-native/pom.xml @@ -78,7 +78,7 @@ native-maven-plugin - --enable-url-protocols=http --enable-preview + --enable-url-protocols=http --enable-preview -march=compatibility From 1fa314ba6f020029cb81bd37cd2827f52d20684f Mon Sep 17 00:00:00 2001 From: kibeom lee <70303094+2012160085@users.noreply.github.com> Date: Sat, 27 Jan 2024 01:31:09 +0900 Subject: [PATCH 560/888] Refactor Dispatch Start Check for Atomicity --- .../serverless/proxy/internal/servlet/AwsAsyncContext.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContext.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContext.java index 98e7ef8ec..d64af8966 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContext.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsAsyncContext.java @@ -69,12 +69,11 @@ public boolean hasOriginalRequestAndResponse() { @Override public void dispatch() { log.debug("Dispatching request"); + if (dispatched.get()) { throw new IllegalStateException("Dispatching already started"); } - if (!dispatchStarted.get()) { - dispatchStarted.set(true); - } else { + if (dispatchStarted.getAndSet(true)) { dispatched.set(true); notifyListeners(NotificationType.START_ASYNC, null); } From 16cce27e23bf55bdc153ace416cbf8f18240cb78 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 26 Jan 2024 18:16:20 +0100 Subject: [PATCH 561/888] chore: don't run dependency check everytime (NVD API limits) but using CI instead --- .../workflows/continuous-integration-workflow.yml | 13 +++++++++++++ aws-serverless-java-container-core/pom.xml | 7 ------- aws-serverless-java-container-jersey/pom.xml | 7 ------- aws-serverless-java-container-spring/pom.xml | 7 ------- aws-serverless-java-container-springboot3/pom.xml | 7 ------- 5 files changed, 13 insertions(+), 28 deletions(-) diff --git a/.github/workflows/continuous-integration-workflow.yml b/.github/workflows/continuous-integration-workflow.yml index b0acd32ad..cca7cfe78 100644 --- a/.github/workflows/continuous-integration-workflow.yml +++ b/.github/workflows/continuous-integration-workflow.yml @@ -94,3 +94,16 @@ jobs: # - uses: actions/checkout@v3 # - name: Build latest # run: ./gha_build.sh struts true true + + owasp-dependency-check: + name: Verify dependencies with OWASP checker + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Set up JDK 17 + uses: actions/setup-java@v3 + with: + distribution: 'corretto' + java-version: 17 + - name: Build latest + run: mvn -q org.owasp:dependency-check-maven:check \ No newline at end of file diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 2a290f85f..77417a01a 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -160,13 +160,6 @@ 7 false - - - - check - - - diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index 4bc7456e1..926e8df7b 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -198,13 +198,6 @@ 7 false - - - - check - - - diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 5a5ff5470..776c720c9 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -241,13 +241,6 @@ 7 false - - - - check - - - diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index 9b4d941c9..42a1edf7b 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -276,13 +276,6 @@ 7 false - - - - check - - - From e1acefc727741e0ae0e9c4d34ce52afd41b7265e Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 26 Jan 2024 20:48:13 +0100 Subject: [PATCH 562/888] chore: don't run dependency check everytime (NVD API limits) but using CI instead --- .../continuous-integration-workflow.yml | 15 +-------------- .github/workflows/owasp-dependency-check.yml | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 14 deletions(-) create mode 100644 .github/workflows/owasp-dependency-check.yml diff --git a/.github/workflows/continuous-integration-workflow.yml b/.github/workflows/continuous-integration-workflow.yml index cca7cfe78..fec3f5ca9 100644 --- a/.github/workflows/continuous-integration-workflow.yml +++ b/.github/workflows/continuous-integration-workflow.yml @@ -93,17 +93,4 @@ jobs: # steps: # - uses: actions/checkout@v3 # - name: Build latest -# run: ./gha_build.sh struts true true - - owasp-dependency-check: - name: Verify dependencies with OWASP checker - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - name: Set up JDK 17 - uses: actions/setup-java@v3 - with: - distribution: 'corretto' - java-version: 17 - - name: Build latest - run: mvn -q org.owasp:dependency-check-maven:check \ No newline at end of file +# run: ./gha_build.sh struts true true \ No newline at end of file diff --git a/.github/workflows/owasp-dependency-check.yml b/.github/workflows/owasp-dependency-check.yml new file mode 100644 index 000000000..fa2657740 --- /dev/null +++ b/.github/workflows/owasp-dependency-check.yml @@ -0,0 +1,18 @@ +name: OWASP dependency check +on: + schedule: + - cron: "10 10 * * 3" + +jobs: + owasp-dependency-check: + name: Verify dependencies with OWASP checker + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Set up JDK 17 + uses: actions/setup-java@v3 + with: + distribution: 'corretto' + java-version: 17 + - name: Build latest + run: mvn -q package org.owasp:dependency-check-maven:check \ No newline at end of file From 4533c4be0338b136687f85e234bdb3a6a62cbe23 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Tue, 30 Jan 2024 07:42:52 +0100 Subject: [PATCH 563/888] feat: native Spring Web workloads (#335) - use spring-cloud-function-serverless-web 4.0.6 release --- aws-serverless-java-container-springboot3/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index 3b3cbd2bc..b6b9c749b 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -25,7 +25,7 @@ org.springframework.cloud spring-cloud-function-serverless-web - 4.0.6-SNAPSHOT + 4.0.6 com.amazonaws.serverless From 948f76c57de10d3887b93df83b446c1963ef5238 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Tue, 30 Jan 2024 08:00:09 +0100 Subject: [PATCH 564/888] chore(deps): use ${springboot.version} for spring-boot-starter-data-jpa --- aws-serverless-java-container-springboot3/pom.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index 96518a79a..ecd0d6ab3 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -194,7 +194,7 @@ org.springframework.boot spring-boot-starter-data-jpa - 3.2.1 + ${springboot.version} test @@ -326,8 +326,8 @@ org.apache.maven.plugins maven-compiler-plugin - 10 - 10 + 17 + 17 From 58b296fb49c403aacef133ffe483eff2d4c2a6e7 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Tue, 30 Jan 2024 11:41:27 +0100 Subject: [PATCH 565/888] refactor: extract InitializableLambdaContainerHandler interface to be used by SpringDelegatingLambdaContainerHandler later on --- .../proxy/AsyncInitializationWrapper.java | 16 +++++----- .../proxy/InitializationWrapper.java | 8 ++--- .../InitializableLambdaContainerHandler.java | 31 +++++++++++++++++++ .../internal/LambdaContainerHandler.java | 3 +- 4 files changed, 45 insertions(+), 13 deletions(-) create mode 100644 aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/InitializableLambdaContainerHandler.java diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/AsyncInitializationWrapper.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/AsyncInitializationWrapper.java index b6b9b037d..57f4e8a06 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/AsyncInitializationWrapper.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/AsyncInitializationWrapper.java @@ -13,7 +13,7 @@ package com.amazonaws.serverless.proxy; import com.amazonaws.serverless.exceptions.ContainerInitializationException; -import com.amazonaws.serverless.proxy.internal.LambdaContainerHandler; +import com.amazonaws.serverless.proxy.internal.InitializableLambdaContainerHandler; import com.amazonaws.services.lambda.runtime.Context; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import org.slf4j.Logger; @@ -26,10 +26,10 @@ /** * An async implementation of the InitializationWrapper interface. This initializer calls the - * {@link LambdaContainerHandler#initialize()} in a separate thread. Then uses a latch to wait for the maximum Lambda + * {@link InitializableLambdaContainerHandler#initialize()} in a separate thread. Then uses a latch to wait for the maximum Lambda * initialization time of 10 seconds, if the initialize method takes longer than 10 seconds to return, the - * {@link #start(LambdaContainerHandler)} returns control to the caller and lets the initialization thread continue in - * the background. The {@link LambdaContainerHandler#proxy(Object, Context)} automatically waits for the latch of the + * {@link #start(InitializableLambdaContainerHandler)} returns control to the caller and lets the initialization thread continue in + * the background. The {@link com.amazonaws.serverless.proxy.internal.LambdaContainerHandler#proxy(Object, Context)} automatically waits for the latch of the * initializer to be released. * * The constructor of this class expects an epoch long. This is meant to be as close as possible to the time the Lambda @@ -72,7 +72,7 @@ public AsyncInitializationWrapper() { } @Override - public void start(LambdaContainerHandler handler) throws ContainerInitializationException { + public void start(InitializableLambdaContainerHandler handler) throws ContainerInitializationException { if(ASYNC_INIT_DISABLED){ log.info("Async init disabled due to \"{}\" initialization", INITIALIZATION_TYPE); super.start(handler); @@ -107,18 +107,18 @@ public long getActualStartTimeMs() { @Override public CountDownLatch getInitializationLatch() { - if(ASYNC_INIT_DISABLED){ + if (ASYNC_INIT_DISABLED){ return super.getInitializationLatch(); } return initializationLatch; } private static class AsyncInitializer implements Runnable { - private LambdaContainerHandler handler; + private final InitializableLambdaContainerHandler handler; private CountDownLatch initLatch; private Logger log = LoggerFactory.getLogger(AsyncInitializationWrapper.class); - AsyncInitializer(CountDownLatch latch, LambdaContainerHandler h) { + AsyncInitializer(CountDownLatch latch, InitializableLambdaContainerHandler h) { initLatch = latch; handler = h; } diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/InitializationWrapper.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/InitializationWrapper.java index f7c96f8f4..a261b6cc8 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/InitializationWrapper.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/InitializationWrapper.java @@ -13,13 +13,13 @@ package com.amazonaws.serverless.proxy; import com.amazonaws.serverless.exceptions.ContainerInitializationException; -import com.amazonaws.serverless.proxy.internal.LambdaContainerHandler; +import com.amazonaws.serverless.proxy.internal.InitializableLambdaContainerHandler; import java.util.concurrent.CountDownLatch; /** - * This class is in charge of initializing a {@link LambdaContainerHandler}. - * In most cases, this means calling the {@link LambdaContainerHandler#initialize()} method. Some implementations may + * This class is in charge of initializing a {@link InitializableLambdaContainerHandler}. + * In most cases, this means calling the {@link InitializableLambdaContainerHandler#initialize()} method. Some implementations may * require additional initialization steps, in this case implementations should provide their own * InitializationWrapper. This library includes an async implementation of this class * {@link AsyncInitializationWrapper} for frameworks that are likely to take longer than 10 seconds to start. @@ -31,7 +31,7 @@ public class InitializationWrapper { * @param handler The container handler to be initializer * @throws ContainerInitializationException If anything goes wrong during container initialization. */ - public void start(LambdaContainerHandler handler) throws ContainerInitializationException { + public void start(InitializableLambdaContainerHandler handler) throws ContainerInitializationException { handler.initialize(); } diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/InitializableLambdaContainerHandler.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/InitializableLambdaContainerHandler.java new file mode 100644 index 000000000..daf4a69d9 --- /dev/null +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/InitializableLambdaContainerHandler.java @@ -0,0 +1,31 @@ +/* + * Copyright 2024 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance + * with the License. A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.proxy.internal; + +import com.amazonaws.serverless.exceptions.ContainerInitializationException; + +/** + * Interface to define initialization/ cold-start related methods. + * See also the documentation for + * + * AWS Lambda Execution Environments. + */ +public interface InitializableLambdaContainerHandler { + + /** + * This method is called on the first (cold) invocation + * + * @throws ContainerInitializationException in case initialization fails + */ + void initialize() throws ContainerInitializationException; +} diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/LambdaContainerHandler.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/LambdaContainerHandler.java index f14251600..ff978456b 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/LambdaContainerHandler.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/LambdaContainerHandler.java @@ -45,7 +45,8 @@ * @param The request type for the wrapped Java container * @param The response or response writer type for the wrapped Java container */ -public abstract class LambdaContainerHandler { +public abstract class LambdaContainerHandler + implements InitializableLambdaContainerHandler { //------------------------------------------------------------- // Constants From 88f6e4aa07b3cecf644bb4c0d96f366f10a03377 Mon Sep 17 00:00:00 2001 From: Oleg Zhurakousky Date: Tue, 30 Jan 2024 15:27:39 +0100 Subject: [PATCH 566/888] GH-754 Fix request parameter parsing While concentrating on REST we somehow ignored standard request parameters. This fix addresses it for both v1 and v2 requests as well as adds tests and additional endpoint to a sample to verify Resolves #754 polishing --- .../spring/AwsSpringHttpProcessingUtils.java | 22 ++++++++++++++++- ...DelegatingLambdaContainerHandlerTests.java | 24 ++++++++++++++++++- .../spring/servletapp/ServletApplication.java | 18 ++++++++++++-- samples/springboot3/alt-pet-store/README.md | 19 ++++++++++++++- .../controller/PetsController.java | 13 ++++++++++ 5 files changed, 91 insertions(+), 5 deletions(-) diff --git a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringHttpProcessingUtils.java b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringHttpProcessingUtils.java index d268bd2e4..c7e507f39 100644 --- a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringHttpProcessingUtils.java +++ b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringHttpProcessingUtils.java @@ -2,7 +2,10 @@ import java.io.InputStream; import java.nio.charset.StandardCharsets; +import java.util.Iterator; import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; @@ -10,6 +13,7 @@ import org.apache.commons.logging.LogFactory; import org.springframework.cloud.function.serverless.web.ServerlessHttpServletRequest; import org.springframework.cloud.function.serverless.web.ServerlessMVC; +import org.springframework.util.CollectionUtils; import org.springframework.util.FileCopyUtils; import org.springframework.util.MultiValueMapAdapter; import org.springframework.util.StringUtils; @@ -109,6 +113,9 @@ private static HttpServletRequest generateRequest1(String request, Context lambd AwsProxyRequest v1Request = readValue(request, AwsProxyRequest.class, mapper); ServerlessHttpServletRequest httpRequest = new ServerlessHttpServletRequest(servletContext, v1Request.getHttpMethod(), v1Request.getPath()); + + populateQueryStringparameters(v1Request.getQueryStringParameters(), httpRequest); + if (v1Request.getMultiValueHeaders() != null) { MultiValueMapAdapter headers = new MultiValueMapAdapter(v1Request.getMultiValueHeaders()); httpRequest.setHeaders(headers); @@ -128,16 +135,21 @@ private static HttpServletRequest generateRequest1(String request, Context lambd securityWriter.writeSecurityContext(v1Request, lambdaContext)); return httpRequest; } + + @SuppressWarnings({ "rawtypes", "unchecked" }) private static HttpServletRequest generateRequest2(String request, Context lambdaContext, SecurityContextWriter securityWriter, ObjectMapper mapper, ServletContext servletContext) { HttpApiV2ProxyRequest v2Request = readValue(request, HttpApiV2ProxyRequest.class, mapper); + + ServerlessHttpServletRequest httpRequest = new ServerlessHttpServletRequest(servletContext, v2Request.getRequestContext().getHttp().getMethod(), v2Request.getRequestContext().getHttp().getPath()); + populateQueryStringparameters(v2Request.getQueryStringParameters(), httpRequest); v2Request.getHeaders().forEach(httpRequest::setHeader); - + if (StringUtils.hasText(v2Request.getBody())) { httpRequest.setContentType("application/json"); httpRequest.setContent(v2Request.getBody().getBytes(StandardCharsets.UTF_8)); @@ -151,6 +163,14 @@ private static HttpServletRequest generateRequest2(String request, Context lambd return httpRequest; } + private static void populateQueryStringparameters(Map requestParameters, ServerlessHttpServletRequest httpRequest) { + if (!CollectionUtils.isEmpty(requestParameters)) { + for (Entry entry : requestParameters.entrySet()) { + httpRequest.setParameter(entry.getKey(), entry.getValue()); + } + } + } + private static T readValue(String json, Class clazz, ObjectMapper mapper) { try { return mapper.readValue(json, clazz); diff --git a/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/SpringDelegatingLambdaContainerHandlerTests.java b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/SpringDelegatingLambdaContainerHandlerTests.java index dabc30e24..ff1f209b5 100644 --- a/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/SpringDelegatingLambdaContainerHandlerTests.java +++ b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/SpringDelegatingLambdaContainerHandlerTests.java @@ -13,6 +13,7 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; +import org.springframework.cloud.function.serverless.web.ServerlessServletContext; import org.springframework.util.CollectionUtils; import com.amazonaws.serverless.proxy.spring.servletapp.MessageData; @@ -72,12 +73,16 @@ public class SpringDelegatingLambdaContainerHandlerTests { + " },\n" + " \"queryStringParameters\": {\n" + " \"abc\": \"xyz\",\n" + + " \"name\": \"Ricky\",\n" + " \"foo\": \"baz\"\n" + " },\n" + " \"multiValueQueryStringParameters\": {\n" + " \"abc\": [\n" + " \"xyz\"\n" + " ],\n" + + " \"name\": [\n" + + " \"Ricky\"\n" + + " ],\n" + " \"foo\": [\n" + " \"bar\",\n" + " \"baz\"\n" @@ -124,7 +129,7 @@ public class SpringDelegatingLambdaContainerHandlerTests { " \"version\": \"2.0\",\n" + " \"routeKey\": \"$default\",\n" + " \"rawPath\": \"/my/path\",\n" + - " \"rawQueryString\": \"parameter1=value1¶meter1=value2¶meter2=value\",\n" + + " \"rawQueryString\": \"parameter1=value1¶meter1=value2&name=Ricky¶meter2=value\",\n" + " \"cookies\": [\n" + " \"cookie1\",\n" + " \"cookie2\"\n" + @@ -135,6 +140,7 @@ public class SpringDelegatingLambdaContainerHandlerTests { " },\n" + " \"queryStringParameters\": {\n" + " \"parameter1\": \"value1,value2\",\n" + + " \"name\": \"Ricky\",\n" + " \"parameter2\": \"value\"\n" + " },\n" + " \"requestContext\": {\n" + @@ -202,6 +208,22 @@ public static Collection data() { return Arrays.asList(new String[]{API_GATEWAY_EVENT, API_GATEWAY_EVENT_V2}); } + @MethodSource("data") + @ParameterizedTest + public void validateComplesrequest(String jsonEvent) throws Exception { + initServletAppTest(); + InputStream targetStream = new ByteArrayInputStream(this.generateHttpRequest(jsonEvent, "POST", + "/foo/male/list/24", "{\"name\":\"bob\"}", null)); + ByteArrayOutputStream output = new ByteArrayOutputStream(); + handler.handleRequest(targetStream, output, null); + Map result = mapper.readValue(output.toString(StandardCharsets.UTF_8), Map.class); + assertEquals(200, result.get("statusCode")); + String[] respponseBody = ((String) result.get("body")).split("/"); + assertEquals("male", respponseBody[0]); + assertEquals("24", respponseBody[1]); + assertEquals("Ricky", respponseBody[2]); + } + @MethodSource("data") @ParameterizedTest public void testAsyncPost(String jsonEvent) throws Exception { diff --git a/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/ServletApplication.java b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/ServletApplication.java index 0cb001ed1..9f01859aa 100644 --- a/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/ServletApplication.java +++ b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/servletapp/ServletApplication.java @@ -1,9 +1,13 @@ package com.amazonaws.serverless.proxy.spring.servletapp; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; -import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Import; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; @SpringBootApplication(exclude = { org.springframework.boot.autoconfigure.security.reactive.ReactiveUserDetailsServiceAutoConfiguration.class, @@ -14,5 +18,15 @@ org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration.class }) @Import(MessageController.class) +@RestController public class ServletApplication { + + @RequestMapping(path = "/foo/{gender}/list/{age}", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE) + public String complexRequest( + @PathVariable("gender") String gender, + @PathVariable("age") String age, + @RequestParam("name") String name + ) { + return gender + "/" + age + "/" + name; + } } diff --git a/samples/springboot3/alt-pet-store/README.md b/samples/springboot3/alt-pet-store/README.md index d8cf8383d..b91cd42f6 100644 --- a/samples/springboot3/alt-pet-store/README.md +++ b/samples/springboot3/alt-pet-store/README.md @@ -36,4 +36,21 @@ PetStoreApi - URL for application https://xxxxxxxxxx.execute-api.us-w --------------------------------------------------------------------------------------------------------- $ curl https://xxxxxxxxxx.execute-api.us-west-2.amazonaws.com/pets -``` \ No newline at end of file +``` + +You can also try a complex request passing both path and request parameters to complex endpoint such as this: + + +``` +@RequestMapping(path = "/foo/{gender}/bar/{age}", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE) +public String complexRequest(@RequestBody String body, + @PathVariable("gender") String gender, + @PathVariable("age") String age, + @RequestParam("name") String name +) +``` +For example. + +``` +curl -d '{"key1":"value1", "key2":"value2"}' -H "Content-Type: application/json" -X POST https://zuhd709386.execute-api.us-east-2.amazonaws.com/foo/male/bar/25?name=Ricky +``` diff --git a/samples/springboot3/alt-pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/controller/PetsController.java b/samples/springboot3/alt-pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/controller/PetsController.java index 680e629d3..769db35f3 100644 --- a/samples/springboot3/alt-pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/controller/PetsController.java +++ b/samples/springboot3/alt-pet-store/src/main/java/com/amazonaws/serverless/sample/springboot3/controller/PetsController.java @@ -17,6 +17,8 @@ import com.amazonaws.serverless.sample.springboot3.model.Pet; import com.amazonaws.serverless.sample.springboot3.model.PetData; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @@ -32,6 +34,7 @@ @RestController @EnableWebMvc public class PetsController { + @RequestMapping(path = "/pets", method = RequestMethod.POST) public Pet createPet(@RequestBody Pet newPet) { if (newPet.getName() == null || newPet.getBreed() == null) { @@ -73,5 +76,15 @@ public Pet listPets() { newPet.setName(PetData.getRandomName()); return newPet; } + + @RequestMapping(path = "/foo/{gender}/bar/{age}", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE) + public String complexRequest(@RequestBody String body, + @PathVariable("gender") String gender, + @PathVariable("age") String age, + @RequestParam("name") String name + ) { + System.out.println("Body: " + body + " - " + gender + "/" + age + "/" + name); + return gender + "/" + age + "/" + name; + } } From 9c181eccdf4613aeee16c44e327df1f5169b448e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 31 Jan 2024 07:18:41 +0000 Subject: [PATCH 567/888] chore(deps-dev): bump com.h2database:h2 from 2.2.222 to 2.2.224 Bumps [com.h2database:h2](https://github.com/h2database/h2database) from 2.2.222 to 2.2.224. - [Release notes](https://github.com/h2database/h2database/releases) - [Commits](https://github.com/h2database/h2database/compare/version-2.2.222...version-2.2.224) --- updated-dependencies: - dependency-name: com.h2database:h2 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- aws-serverless-java-container-springboot3/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index ecd0d6ab3..93373d31f 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -226,7 +226,7 @@ com.h2database h2 - 2.2.222 + 2.2.224 test From 316c7a4094a5c066f07ca98ef24f00d6d432eb83 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Wed, 31 Jan 2024 10:47:40 +0100 Subject: [PATCH 568/888] chore: add new samples to dependabot config --- .github/dependabot.yml | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 81c896308..7633e7636 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -25,6 +25,26 @@ updates: directory: "/samples/springboot3/pet-store" schedule: interval: "weekly" + - package-ecosystem: maven + directory: "/samples/springboot3/alt-pet-store" + schedule: + interval: "weekly" + - package-ecosystem: gradle + directory: "/samples/springboot3/alt-pet-store" + schedule: + interval: "weekly" + - package-ecosystem: maven + directory: "/samples/springboot3/graphql-pet-store" + schedule: + interval: "weekly" + - package-ecosystem: maven + directory: "/samples/springboot3/pet-store-native" + schedule: + interval: "weekly" + - package-ecosystem: gradle + directory: "/samples/springboot3/pet-store-native" + schedule: + interval: "weekly" - package-ecosystem: maven directory: "/samples/jersey/pet-store" schedule: From 5da788a70f84a14df1aace1693d5fce2f49297b0 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Wed, 31 Jan 2024 10:57:40 +0100 Subject: [PATCH 569/888] chore: modify CI build to check for backwards compatibility --- .../continuous-integration-workflow.yml | 34 +++++++------------ 1 file changed, 12 insertions(+), 22 deletions(-) diff --git a/.github/workflows/continuous-integration-workflow.yml b/.github/workflows/continuous-integration-workflow.yml index fec3f5ca9..2718637a1 100644 --- a/.github/workflows/continuous-integration-workflow.yml +++ b/.github/workflows/continuous-integration-workflow.yml @@ -58,12 +58,8 @@ jobs: java-version: 17 - name: Build latest run: ./gha_build.sh spring true true -# - name: Build Spring 5.0 -# run: ./gha_build.sh spring false false -Dspring.version=5.0.20.RELEASE -Dspring-security.version=5.0.19.RELEASE -Ddependency-check.skip=true -# - name: Build Spring 5.1 -# run: ./gha_build.sh spring false false -Dspring.version=5.1.20.RELEASE -Dspring-security.version=5.1.13.RELEASE -Ddependency-check.skip=true -# - name: Build Spring 5.2 -# run: ./gha_build.sh spring false false -Dspring.version=5.2.21.RELEASE -Dspring-security.version=5.2.15.RELEASE -Ddependency-check.skip=true + - name: Build with Spring 6.0.x + run: ./gha_build.sh spring false false -Dspring.version=6.0.16 -Dspring-security.version=6.1.6 -Ddependency-check.skip=true build_springboot3: name: Build and test SpringBoot 3 @@ -77,20 +73,14 @@ jobs: java-version: 17 - name: Build latest run: ./gha_build.sh springboot3 true true - # https://github.com/spring-projects/spring-boot/wiki/Supported-Versions -# - name: Build Spring Boot 2.2 -# run: ./gha_build.sh springboot2 false false -Dspringboot.version=2.2.13.RELEASE -Dspring.version=5.2.15.RELEASE -Dspringsecurity.version=5.2.8.RELEASE -Ddependency-check.skip=true -# - name: Build Spring Boot 2.3 -# run: ./gha_build.sh springboot2 false false -Dspringboot.version=2.3.12.RELEASE -Dspring.version=5.2.15.RELEASE -Dspringsecurity.version=5.3.9.RELEASE -Ddependency-check.skip=true -# - name: Build Spring Boot 2.4 -# run: ./gha_build.sh springboot2 false false -Dspringboot.version=2.4.13 -Dspring.version=5.3.13 -Dspringsecurity.version=5.4.9 -Ddependency-check.skip=true -# - name: Build Spring Boot 2.5 -# run: ./gha_build.sh springboot2 false false -Dspringboot.version=2.5.14 -Dspring.version=5.3.20 -Dspringsecurity.version=5.5.8 -Ddependency-check.skip=true + # Build with additional supported versions https://spring.io/projects/spring-boot#support + - name: Build with Spring Boot 3.1.x + run: ./gha_build.sh springboot3 false false -Dspringboot.version=3.1.8 -Dspring.version=6.0.16 -Dspringsecurity.version=6.1.6 -Ddependency-check.skip=true -# build_struts2: -# name: Build and test Struts -# runs-on: ubuntu-latest -# steps: -# - uses: actions/checkout@v3 -# - name: Build latest -# run: ./gha_build.sh struts true true \ No newline at end of file + build_struts2: + name: Build and test Struts + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Build latest + run: ./gha_build.sh struts true true \ No newline at end of file From 638fc69e3595bb097b7e8b3b1f2a5ac7a2fa8b6f Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Wed, 31 Jan 2024 11:04:03 +0100 Subject: [PATCH 570/888] chore: modify CI build to include all samples --- gha_build.sh | 37 +++++++++++++++---------------------- 1 file changed, 15 insertions(+), 22 deletions(-) diff --git a/gha_build.sh b/gha_build.sh index 036ac4bee..f89c61103 100755 --- a/gha_build.sh +++ b/gha_build.sh @@ -51,10 +51,6 @@ function archetype { if [[ "$?" -ne 0 ]]; then exit 1 fi -# cd ${ARCHETYPE_TEST_DIR}/${PROJ_NAME} && ./gradlew wrapper --gradle-version 5.0 -# if [[ "$?" -ne 0 ]]; then -# exit 1 -# fi cd ${ARCHETYPE_TEST_DIR}/${PROJ_NAME} && ./gradlew -q clean build if [[ "$?" -ne 0 ]]; then exit 1 @@ -62,24 +58,21 @@ function archetype { } function sample { - # force to pet store for now. In the future we may loop over all samples - SAMPLE_FOLDER=${WORKING_DIR}/samples/$1/pet-store - cd ${SAMPLE_FOLDER} && mvn -q clean package - if [[ "$?" -ne 0 ]]; then - exit 1 - fi - cd ${SAMPLE_FOLDER} && gradle -q wrapper - if [[ "$?" -ne 0 ]]; then - exit 1 - fi -# cd ${SAMPLE_FOLDER} && ./gradlew wrapper --gradle-version 5.0 -# if [[ "$?" -ne 0 ]]; then -# exit 1 -# fi - cd ${SAMPLE_FOLDER} && ./gradlew -q clean build - if [[ "$?" -ne 0 ]]; then - exit 1 - fi + for d in ${WORKING_DIR}/samples/$1/*/ ; do + SAMPLE_FOLDER="$d" + cd ${SAMPLE_FOLDER} && mvn -q clean package + if [[ "$?" -ne 0 ]]; then + exit 1 + fi + cd ${SAMPLE_FOLDER} && gradle -q wrapper + if [[ "$?" -ne 0 ]]; then + exit 1 + fi + cd ${SAMPLE_FOLDER} && ./gradlew -q clean build + if [[ "$?" -ne 0 ]]; then + exit 1 + fi + done } # set up the master pom otherwise we won't be able to find new dependencies From f5c679199852091daf44d37d240c10b2c498d240 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Wed, 31 Jan 2024 11:28:14 +0100 Subject: [PATCH 571/888] chore: modify CI build to check for backwards compatibility --- .github/workflows/continuous-integration-workflow.yml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/.github/workflows/continuous-integration-workflow.yml b/.github/workflows/continuous-integration-workflow.yml index 2718637a1..c304624f9 100644 --- a/.github/workflows/continuous-integration-workflow.yml +++ b/.github/workflows/continuous-integration-workflow.yml @@ -58,8 +58,8 @@ jobs: java-version: 17 - name: Build latest run: ./gha_build.sh spring true true - - name: Build with Spring 6.0.x - run: ./gha_build.sh spring false false -Dspring.version=6.0.16 -Dspring-security.version=6.1.6 -Ddependency-check.skip=true +# - name: Build with Spring 6.0.x +# run: ./gha_build.sh spring false false -Dspring.version=6.0.16 -Dspring-security.version=6.1.6 -Ddependency-check.skip=true build_springboot3: name: Build and test SpringBoot 3 @@ -82,5 +82,10 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 + - name: Set up JDK 17 + uses: actions/setup-java@v3 + with: + distribution: 'corretto' + java-version: 17 - name: Build latest run: ./gha_build.sh struts true true \ No newline at end of file From db50d8a688c81147916ec4be671faa7807bd9b4d Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Wed, 31 Jan 2024 11:30:05 +0100 Subject: [PATCH 572/888] chore(deps): use Spring Cloud release BOM instead of SNAPSHOT --- samples/springboot3/pet-store-native/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/springboot3/pet-store-native/pom.xml b/samples/springboot3/pet-store-native/pom.xml index c02774bbf..6d69941b6 100644 --- a/samples/springboot3/pet-store-native/pom.xml +++ b/samples/springboot3/pet-store-native/pom.xml @@ -16,7 +16,7 @@ Sample of AWS with Spring Native 21 - 2022.0.5-SNAPSHOT + 2022.0.5 From 803230cf38ac8f122e3aae6b00e7e9d82777109f Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Wed, 31 Jan 2024 11:36:34 +0100 Subject: [PATCH 573/888] chore: use Java 17 as compilation baseline (no 21 features in use) --- samples/springboot3/graphql-pet-store/pom.xml | 2 +- samples/springboot3/pet-store-native/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/samples/springboot3/graphql-pet-store/pom.xml b/samples/springboot3/graphql-pet-store/pom.xml index 35535e2a4..ed781b9e3 100644 --- a/samples/springboot3/graphql-pet-store/pom.xml +++ b/samples/springboot3/graphql-pet-store/pom.xml @@ -25,7 +25,7 @@ - 21 + 17 diff --git a/samples/springboot3/pet-store-native/pom.xml b/samples/springboot3/pet-store-native/pom.xml index 6d69941b6..2348fb8d8 100644 --- a/samples/springboot3/pet-store-native/pom.xml +++ b/samples/springboot3/pet-store-native/pom.xml @@ -15,7 +15,7 @@ pet-store-native Sample of AWS with Spring Native - 21 + 17 2022.0.5 From 928d826f094c93b274d52027b2a03fc733f9cfcf Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Wed, 31 Jan 2024 14:32:44 +0100 Subject: [PATCH 574/888] chore: modify CI build to make gradle optional --- gha_build.sh | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/gha_build.sh b/gha_build.sh index f89c61103..247e09105 100755 --- a/gha_build.sh +++ b/gha_build.sh @@ -64,13 +64,15 @@ function sample { if [[ "$?" -ne 0 ]]; then exit 1 fi - cd ${SAMPLE_FOLDER} && gradle -q wrapper - if [[ "$?" -ne 0 ]]; then - exit 1 - fi - cd ${SAMPLE_FOLDER} && ./gradlew -q clean build - if [[ "$?" -ne 0 ]]; then - exit 1 + if [ -n "$(find ${SAMPLE_FOLDER} -name '*gradle*' | head -1)" ]; then + cd ${SAMPLE_FOLDER} && gradle -q wrapper + if [[ "$?" -ne 0 ]]; then + exit 1 + fi + cd ${SAMPLE_FOLDER} && ./gradlew -q clean build + if [[ "$?" -ne 0 ]]; then + exit 1 + fi fi done } From 87076f2d802b7ec806d1c4ef8f4f2970122af3d4 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Wed, 31 Jan 2024 14:37:34 +0100 Subject: [PATCH 575/888] chore: modify CI build for Struts (not released at the moment) --- .github/workflows/continuous-integration-workflow.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/continuous-integration-workflow.yml b/.github/workflows/continuous-integration-workflow.yml index c304624f9..741ef5c2d 100644 --- a/.github/workflows/continuous-integration-workflow.yml +++ b/.github/workflows/continuous-integration-workflow.yml @@ -88,4 +88,6 @@ jobs: distribution: 'corretto' java-version: 17 - name: Build latest - run: ./gha_build.sh struts true true \ No newline at end of file + run: ./gha_build.sh struts false false +# temporarily disabled archetype and samples as Struts is not released at the moment +# run: ./gha_build.sh struts true true \ No newline at end of file From a3c4b69e68786225f8ae7e0ab12f8e1e4e3c6209 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Wed, 31 Jan 2024 14:59:20 +0100 Subject: [PATCH 576/888] chore: don't run dependency check everytime (NVD API limits) but using CI instead --- aws-serverless-java-container-struts/pom.xml | 7 ------- 1 file changed, 7 deletions(-) diff --git a/aws-serverless-java-container-struts/pom.xml b/aws-serverless-java-container-struts/pom.xml index 0cd2a4aa9..beed495f9 100644 --- a/aws-serverless-java-container-struts/pom.xml +++ b/aws-serverless-java-container-struts/pom.xml @@ -195,13 +195,6 @@ 7 false - - - - check - - - From 96e8253922eb266d176197789f64e3773ffc060a Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 5 Feb 2024 06:49:17 +0100 Subject: [PATCH 577/888] chore(deps): update JUnit to 5.10.2, closes #759 --- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- pom.xml | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle index ad5acbacd..b23f0b90f 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle @@ -23,7 +23,7 @@ dependencies { testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") testImplementation("org.apache.httpcomponents.client5:httpclient5:5.2.1") - testImplementation(platform("org.junit:junit-bom:5.10.1")) + testImplementation(platform("org.junit:junit-bom:5.10.2")) testImplementation("org.junit.jupiter:junit-jupiter") } diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml index d5f7c0c7e..a52141649 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml @@ -17,7 +17,7 @@ 3.1.5 2.16.1 - 5.10.1 + 5.10.2 diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index 1f1d1af7c..d26a9630d 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -19,7 +19,7 @@ dependencies { testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") testImplementation("org.apache.httpcomponents.client5:httpclient5:5.2.1") - testImplementation(platform("org.junit:junit-bom:5.10.1")) + testImplementation(platform("org.junit:junit-bom:5.10.2")) testImplementation("org.junit.jupiter:junit-jupiter") } diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index 5aa0330b2..48ce0a0d1 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -17,7 +17,7 @@ 1.8 1.8 6.1.3 - 5.10.1 + 5.10.2 2.22.1 diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle index 2f2ebee1a..2eff24495 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle @@ -15,7 +15,7 @@ dependencies { testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") testImplementation("org.apache.httpcomponents.client5:httpclient5:5.2.1") - testImplementation(platform("org.junit:junit-bom:5.10.1")) + testImplementation(platform("org.junit:junit-bom:5.10.2")) testImplementation("org.junit.jupiter:junit-jupiter") } diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml index f990dda8b..ef49a79f2 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml @@ -21,7 +21,7 @@ 17 - 5.10.1 + 5.10.2 diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle index c579ff711..803913771 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle @@ -43,7 +43,7 @@ dependencies { testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") testImplementation("org.apache.httpcomponents.client5:httpclient5:5.2.1") - testImplementation(platform("org.junit:junit-bom:5.10.1")) + testImplementation(platform("org.junit:junit-bom:5.10.2")) testImplementation("org.junit.jupiter:junit-jupiter") testImplementation('org.apache.struts:struts2-junit-plugin:7.0.0-M1') { exclude group: 'org.apache.struts', module: 'struts2-core' diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml index 30ec31d71..91b764f03 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml @@ -17,7 +17,7 @@ 1.8 7.0.0-M1 2.16.1 - 5.10.1 + 5.10.2 2.22.1 diff --git a/pom.xml b/pom.xml index 0c1dac880..74f0bbc3e 100644 --- a/pom.xml +++ b/pom.xml @@ -80,7 +80,7 @@ 9.0.9 2.16.1 2.0.11 - 5.10.1 + 5.10.2 5.10.0 1.3 UTF-8 From eae6ce8fa9b2d4f94cd6e1a5293ad721e8f7b45a Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 5 Feb 2024 07:00:58 +0100 Subject: [PATCH 578/888] chore(deps): update Struts to 7.0.0-M2 for testing --- aws-serverless-java-container-struts/pom.xml | 12 +----------- .../main/resources/archetype-resources/build.gradle | 10 +++++----- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/struts/pet-store/build.gradle | 8 ++++---- samples/struts/pet-store/pom.xml | 2 +- 5 files changed, 12 insertions(+), 22 deletions(-) diff --git a/aws-serverless-java-container-struts/pom.xml b/aws-serverless-java-container-struts/pom.xml index beed495f9..d04470e6d 100644 --- a/aws-serverless-java-container-struts/pom.xml +++ b/aws-serverless-java-container-struts/pom.xml @@ -15,7 +15,7 @@ - 7.0.0-M1 + 7.0.0-M2 @@ -38,16 +38,6 @@ org.apache.struts struts2-core ${struts.version} - - - org.apache.commons - commons-fileupload2-jakarta - - - commons-io - commons-io - - org.apache.struts diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle index 803913771..499ede045 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle @@ -18,19 +18,19 @@ dependencies { exclude group: 'org.apache.logging.log4j', module: 'log4j-api' exclude group: 'org.apache.logging.log4j', module: 'log4j-to-slf4j' } - implementation ('org.apache.struts:struts2-convention-plugin:7.0.0-M1') { + implementation ('org.apache.struts:struts2-convention-plugin:7.0.0-M2') { exclude group: 'org.apache.struts', module: 'struts2-core' } - implementation ('org.apache.struts:struts2-rest-plugin:7.0.0-M1') { + implementation ('org.apache.struts:struts2-rest-plugin:7.0.0-M2') { exclude group: 'org.apache.struts', module: 'struts2-core' } - implementation ('org.apache.struts:struts2-bean-validation-plugin:7.0.0-M1') { + implementation ('org.apache.struts:struts2-bean-validation-plugin:7.0.0-M2') { exclude group: 'org.apache.struts', module: 'struts2-core' } implementation ('com.jgeppert.struts2:struts2-aws-lambda-support-plugin:1.4.2') { exclude group: 'org.apache.struts', module: 'struts2-core' } - implementation ('org.apache.struts:struts2-core:7.0.0-M1') { + implementation ('org.apache.struts:struts2-core:7.0.0-M2') { exclude group: 'org.apache.logging.log4j', module: 'log4j-api' } implementation ('org.hibernate.validator:hibernate-validator:6.1.7.Final') @@ -45,7 +45,7 @@ dependencies { testImplementation("org.apache.httpcomponents.client5:httpclient5:5.2.1") testImplementation(platform("org.junit:junit-bom:5.10.2")) testImplementation("org.junit.jupiter:junit-jupiter") - testImplementation('org.apache.struts:struts2-junit-plugin:7.0.0-M1') { + testImplementation('org.apache.struts:struts2-junit-plugin:7.0.0-M2') { exclude group: 'org.apache.struts', module: 'struts2-core' } } diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml index 91b764f03..64fe17396 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml @@ -15,7 +15,7 @@ 1.8 1.8 - 7.0.0-M1 + 7.0.0-M2 2.16.1 5.10.2 2.22.1 diff --git a/samples/struts/pet-store/build.gradle b/samples/struts/pet-store/build.gradle index 11296662f..cca8f65e7 100644 --- a/samples/struts/pet-store/build.gradle +++ b/samples/struts/pet-store/build.gradle @@ -14,10 +14,10 @@ configurations { dependencies { implementation ( 'com.amazonaws.serverless:aws-serverless-java-container-struts:[2.0-SNAPSHOT,)', - 'org.apache.struts:struts2-convention-plugin:7.0.0-M1', - 'org.apache.struts:struts2-rest-plugin:7.0.0-M1', - 'org.apache.struts:struts2-bean-validation-plugin:7.0.0-M1', - 'org.apache.struts:struts2-junit-plugin:7.0.0-M1', + 'org.apache.struts:struts2-convention-plugin:7.0.0-M2', + 'org.apache.struts:struts2-rest-plugin:7.0.0-M2', + 'org.apache.struts:struts2-bean-validation-plugin:7.0.0-M2', + 'org.apache.struts:struts2-junit-plugin:7.0.0-M2', 'com.jgeppert.struts2:struts2-aws-lambda-support-plugin:1.4.2', 'org.hibernate.validator:hibernate-validator:6.1.7.Final', 'org.glassfish:jakarta.el:5.0.0-M1', diff --git a/samples/struts/pet-store/pom.xml b/samples/struts/pet-store/pom.xml index c9fc14f92..b23a44802 100644 --- a/samples/struts/pet-store/pom.xml +++ b/samples/struts/pet-store/pom.xml @@ -26,7 +26,7 @@ 1.8 1.8 - 7.0.0-M1 + 7.0.0-M2 2.16.1 4.13.2 2.22.1 From 755752d4749b08160ea7472485f09d79e1e5eeb7 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 5 Feb 2024 07:04:14 +0100 Subject: [PATCH 579/888] chore(deps): update Struts to 7.0.0-M2 for testing --- aws-serverless-java-container-struts/pom.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/aws-serverless-java-container-struts/pom.xml b/aws-serverless-java-container-struts/pom.xml index d04470e6d..f7a8f3846 100644 --- a/aws-serverless-java-container-struts/pom.xml +++ b/aws-serverless-java-container-struts/pom.xml @@ -38,6 +38,12 @@ org.apache.struts struts2-core ${struts.version} + + + commons-io + commons-io + + org.apache.struts From 5ed73c02138194e617ac7c5ad4fb66363cfea2d0 Mon Sep 17 00:00:00 2001 From: Maximilian Schellhorn Date: Mon, 5 Feb 2024 17:09:06 +0100 Subject: [PATCH 580/888] GraalVM sample --- .../springboot3/pet-store-native/Dockerfile | 2 +- .../springboot3/pet-store-native/README.md | 28 ++++++------------- samples/springboot3/pet-store-native/pom.xml | 2 -- .../pet-store-native/template.yaml | 5 ++-- 4 files changed, 13 insertions(+), 24 deletions(-) diff --git a/samples/springboot3/pet-store-native/Dockerfile b/samples/springboot3/pet-store-native/Dockerfile index d885d9261..8c3955861 100644 --- a/samples/springboot3/pet-store-native/Dockerfile +++ b/samples/springboot3/pet-store-native/Dockerfile @@ -25,7 +25,7 @@ RUN ln -s /usr/lib/maven/bin/mvn /usr/bin/mvn ENV GRADLE_VERSION 7.4.1 ENV GRADLE_FOLDERNAME gradle-${GRADLE_VERSION} ENV GRADLE_FILENAME gradle-${GRADLE_VERSION}-bin.zip -RUN curl -LO https://services.gradle.org/distributions/gradle-${GRADLE_VERSION}-bin.zip +RUN curl -LO https://services.gradle.org/distributions/gradle-${GRADLE_VERSION}-bin.zip RUN unzip gradle-${GRADLE_VERSION}-bin.zip RUN mv $GRADLE_FOLDERNAME /usr/lib/gradle RUN ln -s /usr/lib/gradle/bin/gradle /usr/bin/gradle diff --git a/samples/springboot3/pet-store-native/README.md b/samples/springboot3/pet-store-native/README.md index 831353e5a..c890090f7 100644 --- a/samples/springboot3/pet-store-native/README.md +++ b/samples/springboot3/pet-store-native/README.md @@ -1,7 +1,7 @@ In this sample, you'll build a native GraalVM image for running web workloads in AWS Lambda. -## To build the sample on macOS (Apple silicon arm64) +## To build the sample You first need to build the function, then you will deploy it to AWS Lambda. @@ -10,31 +10,21 @@ You first need to build the function, then you will deploy it to AWS Lambda. Before starting the build, you must clone or download the code in **pet-store-native**. 1. Change into the project directory: `samples/springboot3/pet-store-native` -2. Run the following to build a Docker container image which will be used to create the Lambda function zip file. +2. Run the following to build a Docker container image which will include all the necessary dependencies to build the application ``` - docker build -t "al2-graalvm21:native-web" . + docker build -t al2023-graalvm21:native-web . ``` -3. Start the container +3. Build the application within the previously created build image ``` - docker run -dit -v `pwd`:`pwd` -w `pwd` -v ~/.m2:/root/.m2 al2-graalvm21:native-web + docker run -it -v `pwd`:`pwd` -w `pwd` -v ~/.m2:/root/.m2 al2023-graalvm21:native-web ./mvnw clean -Pnative package -DskipTests ``` -4. In Docker, open the image terminal. - - > Your working directory should default to the project root. Verify by running `ls` to view the files. - -6. From inside the container, build the Lambda function: - ``` - ./mvnw clean -Pnative native:compile -DskipTests - ``` - -After the build finishes, you need to deploy the function. -You can do it manually or you can use SAM (AWS Serverless Application Model) with the included template.yaml file. -If you chose SAM simply execute the following command. +4. After the build finishes, you need to deploy the function: ``` sam deploy --guided ``` - This will deploy your application and will attach an AWS API Gateway -Once the deployment is finished you shouild see the following: + +This will deploy your application and will attach an AWS API Gateway +Once the deployment is finished you should see the following: ``` Key ServerlessWebNativeApi Description URL for application diff --git a/samples/springboot3/pet-store-native/pom.xml b/samples/springboot3/pet-store-native/pom.xml index 2348fb8d8..045c8eb96 100644 --- a/samples/springboot3/pet-store-native/pom.xml +++ b/samples/springboot3/pet-store-native/pom.xml @@ -69,8 +69,6 @@ -agentlib:native-image-agent=config-merge-dir=src/main/resources/META-INF/native-image/ --enable-preview - --enable-preview - diff --git a/samples/springboot3/pet-store-native/template.yaml b/samples/springboot3/pet-store-native/template.yaml index e081c7710..dc05e1be7 100644 --- a/samples/springboot3/pet-store-native/template.yaml +++ b/samples/springboot3/pet-store-native/template.yaml @@ -11,8 +11,9 @@ Resources: CodeUri: ./target/pet-store-native-0.0.1-SNAPSHOT-native-zip.zip Handler: NOP Runtime: provided.al2023 - Architectures: - - arm64 +# If you want to build for ARM64 uncomment the following lines +# Architectures: +# - arm64 Events: HttpApiEvent: Type: HttpApi From 6e5fa5205ae0bd5efacb35eb9daa3a84d36acf03 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 6 Feb 2024 06:02:39 +0000 Subject: [PATCH 581/888] chore(deps): bump slf4j.version from 2.0.11 to 2.0.12 Bumps `slf4j.version` from 2.0.11 to 2.0.12. Updates `org.slf4j:slf4j-api` from 2.0.11 to 2.0.12 Updates `org.slf4j:slf4j-simple` from 2.0.11 to 2.0.12 --- updated-dependencies: - dependency-name: org.slf4j:slf4j-api dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.slf4j:slf4j-simple dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 74f0bbc3e..5d409adb9 100644 --- a/pom.xml +++ b/pom.xml @@ -79,7 +79,7 @@ 0.7 9.0.9 2.16.1 - 2.0.11 + 2.0.12 5.10.2 5.10.0 1.3 From c35a5eb1d45588fe20b894d6b8d65ead11f1c795 Mon Sep 17 00:00:00 2001 From: deki Date: Tue, 6 Feb 2024 06:20:52 +0000 Subject: [PATCH 582/888] chore: release - prepare release aws-serverless-java-container-2.0.0 --- aws-serverless-java-container-core/pom.xml | 4 ++-- aws-serverless-java-container-jersey/pom.xml | 8 ++++---- aws-serverless-java-container-spring/pom.xml | 8 ++++---- aws-serverless-java-container-springboot3/pom.xml | 8 ++++---- aws-serverless-jersey-archetype/pom.xml | 6 +++--- aws-serverless-spring-archetype/pom.xml | 6 +++--- aws-serverless-springboot3-archetype/pom.xml | 6 +++--- pom.xml | 4 ++-- 8 files changed, 25 insertions(+), 25 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 77417a01a..5af14d2ac 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Core Allows Java applications written for a servlet container to run in AWS Lambda https://aws.amazon.com/lambda - 2.0.0-SNAPSHOT + 2.0.0 com.amazonaws.serverless aws-serverless-java-container - 2.0.0-SNAPSHOT + 2.0.0 .. diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index 926e8df7b..befc26a3e 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Jersey implementation Allows Java applications written for Jersey to run in AWS Lambda https://aws.amazon.com/lambda - 2.0.0-SNAPSHOT + 2.0.0 com.amazonaws.serverless aws-serverless-java-container - 2.0.0-SNAPSHOT + 2.0.0 .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.0.0-SNAPSHOT + 2.0.0 com.fasterxml.jackson.core @@ -35,7 +35,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.0.0-SNAPSHOT + 2.0.0 tests test-jar test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 776c720c9..bed19c802 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spring implementation Allows Java applications written for the Spring framework to run in AWS Lambda https://aws.amazon.com/lambda - 2.0.0-SNAPSHOT + 2.0.0 com.amazonaws.serverless aws-serverless-java-container - 2.0.0-SNAPSHOT + 2.0.0 .. @@ -25,12 +25,12 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.0.0-SNAPSHOT + 2.0.0 com.amazonaws.serverless aws-serverless-java-container-core - 2.0.0-SNAPSHOT + 2.0.0 tests test-jar test diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index 93373d31f..a1b658e3a 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -3,7 +3,7 @@ aws-serverless-java-container com.amazonaws.serverless - 2.0.0-SNAPSHOT + 2.0.0 4.0.0 @@ -12,7 +12,7 @@ AWS Serverless Java container support - SpringBoot 3 implementation Allows Java applications written for SpringBoot 3 to run in AWS Lambda https://aws.amazon.com/lambda - 2.0.0-SNAPSHOT + 2.0.0 6.1.3 @@ -30,12 +30,12 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.0.0-SNAPSHOT + 2.0.0 com.amazonaws.serverless aws-serverless-java-container-core - 2.0.0-SNAPSHOT + 2.0.0 tests test-jar test diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index 15fd76b80..a1b21a9be 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.0.0-SNAPSHOT + 2.0.0 com.amazonaws.serverless.archetypes aws-serverless-jersey-archetype - 2.0.0-SNAPSHOT + 2.0.0 maven-archetype https://github.com/aws/serverless-java-container.git - HEAD + aws-serverless-java-container-2.0.0 diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index b5891f921..0b2849cbd 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.0.0-SNAPSHOT + 2.0.0 com.amazonaws.serverless.archetypes aws-serverless-spring-archetype - 2.0.0-SNAPSHOT + 2.0.0 maven-archetype https://github.com/aws/serverless-java-container.git - HEAD + aws-serverless-java-container-2.0.0 diff --git a/aws-serverless-springboot3-archetype/pom.xml b/aws-serverless-springboot3-archetype/pom.xml index a6cf366b3..32f3e2304 100644 --- a/aws-serverless-springboot3-archetype/pom.xml +++ b/aws-serverless-springboot3-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.0.0-SNAPSHOT + 2.0.0 com.amazonaws.serverless.archetypes aws-serverless-springboot3-archetype - 2.0.0-SNAPSHOT + 2.0.0 maven-archetype https://github.com/aws/serverless-java-container.git - HEAD + aws-serverless-java-container-2.0.0 diff --git a/pom.xml b/pom.xml index 5d409adb9..e5542dcaf 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazonaws.serverless aws-serverless-java-container pom - 2.0.0-SNAPSHOT + 2.0.0 AWS Serverless Java container A Java framework to run Spring, Spring Boot, Jersey, Spark, and Struts applications inside AWS Lambda https://github.com/aws/serverless-java-container @@ -37,7 +37,7 @@ https://github.com/aws/serverless-java-container scm:git:https://github.com/aws/serverless-java-container.git - HEAD + aws-serverless-java-container-2.0.0 From cda4585fd8125a56f978705ecaf92e610520d458 Mon Sep 17 00:00:00 2001 From: deki Date: Tue, 6 Feb 2024 06:20:54 +0000 Subject: [PATCH 583/888] chore: release - prepare for next development iteration --- aws-serverless-java-container-core/pom.xml | 4 ++-- aws-serverless-java-container-jersey/pom.xml | 8 ++++---- aws-serverless-java-container-spring/pom.xml | 8 ++++---- aws-serverless-java-container-springboot3/pom.xml | 8 ++++---- aws-serverless-jersey-archetype/pom.xml | 6 +++--- aws-serverless-spring-archetype/pom.xml | 6 +++--- aws-serverless-springboot3-archetype/pom.xml | 6 +++--- pom.xml | 4 ++-- 8 files changed, 25 insertions(+), 25 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 5af14d2ac..8f743057a 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Core Allows Java applications written for a servlet container to run in AWS Lambda https://aws.amazon.com/lambda - 2.0.0 + 2.1.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 2.0.0 + 2.1.0-SNAPSHOT .. diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index befc26a3e..4ee96cea5 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Jersey implementation Allows Java applications written for Jersey to run in AWS Lambda https://aws.amazon.com/lambda - 2.0.0 + 2.1.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 2.0.0 + 2.1.0-SNAPSHOT .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.0.0 + 2.1.0-SNAPSHOT com.fasterxml.jackson.core @@ -35,7 +35,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.0.0 + 2.1.0-SNAPSHOT tests test-jar test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index bed19c802..6154ca2e5 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spring implementation Allows Java applications written for the Spring framework to run in AWS Lambda https://aws.amazon.com/lambda - 2.0.0 + 2.1.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 2.0.0 + 2.1.0-SNAPSHOT .. @@ -25,12 +25,12 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.0.0 + 2.1.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container-core - 2.0.0 + 2.1.0-SNAPSHOT tests test-jar test diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index a1b658e3a..a36c66657 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -3,7 +3,7 @@ aws-serverless-java-container com.amazonaws.serverless - 2.0.0 + 2.1.0-SNAPSHOT 4.0.0 @@ -12,7 +12,7 @@ AWS Serverless Java container support - SpringBoot 3 implementation Allows Java applications written for SpringBoot 3 to run in AWS Lambda https://aws.amazon.com/lambda - 2.0.0 + 2.1.0-SNAPSHOT 6.1.3 @@ -30,12 +30,12 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.0.0 + 2.1.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container-core - 2.0.0 + 2.1.0-SNAPSHOT tests test-jar test diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index a1b21a9be..f4ae15675 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.0.0 + 2.1.0-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-jersey-archetype - 2.0.0 + 2.1.0-SNAPSHOT maven-archetype https://github.com/aws/serverless-java-container.git - aws-serverless-java-container-2.0.0 + HEAD diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index 0b2849cbd..07c5e4e90 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.0.0 + 2.1.0-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-spring-archetype - 2.0.0 + 2.1.0-SNAPSHOT maven-archetype https://github.com/aws/serverless-java-container.git - aws-serverless-java-container-2.0.0 + HEAD diff --git a/aws-serverless-springboot3-archetype/pom.xml b/aws-serverless-springboot3-archetype/pom.xml index 32f3e2304..a1057f354 100644 --- a/aws-serverless-springboot3-archetype/pom.xml +++ b/aws-serverless-springboot3-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.0.0 + 2.1.0-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-springboot3-archetype - 2.0.0 + 2.1.0-SNAPSHOT maven-archetype https://github.com/aws/serverless-java-container.git - aws-serverless-java-container-2.0.0 + HEAD diff --git a/pom.xml b/pom.xml index e5542dcaf..959b6ab21 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazonaws.serverless aws-serverless-java-container pom - 2.0.0 + 2.1.0-SNAPSHOT AWS Serverless Java container A Java framework to run Spring, Spring Boot, Jersey, Spark, and Struts applications inside AWS Lambda https://github.com/aws/serverless-java-container @@ -37,7 +37,7 @@ https://github.com/aws/serverless-java-container scm:git:https://github.com/aws/serverless-java-container.git - aws-serverless-java-container-2.0.0 + HEAD From f326bb2c5d01d3c6cb4811fad8643add5da97ed5 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Tue, 6 Feb 2024 10:35:40 +0100 Subject: [PATCH 584/888] fix: Changed Maven version range to resolve both SNAPSHOTs and released versions --- samples/springboot3/alt-pet-store/pom.xml | 2 +- samples/springboot3/graphql-pet-store/pom.xml | 2 +- samples/springboot3/pet-store-native/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/samples/springboot3/alt-pet-store/pom.xml b/samples/springboot3/alt-pet-store/pom.xml index afda4120e..dcefb27d0 100644 --- a/samples/springboot3/alt-pet-store/pom.xml +++ b/samples/springboot3/alt-pet-store/pom.xml @@ -37,7 +37,7 @@ com.amazonaws.serverless aws-serverless-java-container-springboot3 - 2.0.0-SNAPSHOT + [2.0.0-SNAPSHOT,),[2.0.0-M1,) diff --git a/samples/springboot3/graphql-pet-store/pom.xml b/samples/springboot3/graphql-pet-store/pom.xml index ed781b9e3..df71fb76e 100644 --- a/samples/springboot3/graphql-pet-store/pom.xml +++ b/samples/springboot3/graphql-pet-store/pom.xml @@ -51,7 +51,7 @@ com.amazonaws.serverless aws-serverless-java-container-springboot3 - 2.0.0-SNAPSHOT + [2.0.0-SNAPSHOT,),[2.0.0-M1,) diff --git a/samples/springboot3/pet-store-native/pom.xml b/samples/springboot3/pet-store-native/pom.xml index 045c8eb96..857be1b0b 100644 --- a/samples/springboot3/pet-store-native/pom.xml +++ b/samples/springboot3/pet-store-native/pom.xml @@ -26,7 +26,7 @@ com.amazonaws.serverless aws-serverless-java-container-springboot3 - 2.0.0-SNAPSHOT + [2.0.0-SNAPSHOT,),[2.0.0-M1,) com.amazonaws From 10ce3d85ac7416a3a94461bfe961d008b83e5d2f Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Tue, 6 Feb 2024 10:51:37 +0100 Subject: [PATCH 585/888] chore: adjust versions after release --- aws-serverless-java-container-struts/pom.xml | 8 ++++---- aws-serverless-struts-archetype/pom.xml | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/aws-serverless-java-container-struts/pom.xml b/aws-serverless-java-container-struts/pom.xml index f7a8f3846..ff4071933 100644 --- a/aws-serverless-java-container-struts/pom.xml +++ b/aws-serverless-java-container-struts/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Struts implementation Allows Java applications written for the Struts framework to run in AWS Lambda https://aws.amazon.com/lambda - 2.0.0-SNAPSHOT + 2.1.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 2.0.0-SNAPSHOT + 2.1.0-SNAPSHOT @@ -23,12 +23,12 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.0.0-SNAPSHOT + 2.0.0 com.amazonaws.serverless aws-serverless-java-container-core - 2.0.0-SNAPSHOT + 2.0.0 tests test-jar test diff --git a/aws-serverless-struts-archetype/pom.xml b/aws-serverless-struts-archetype/pom.xml index 0e12ca517..27c530046 100644 --- a/aws-serverless-struts-archetype/pom.xml +++ b/aws-serverless-struts-archetype/pom.xml @@ -4,12 +4,12 @@ com.amazonaws.serverless aws-serverless-java-container - 2.0.0-SNAPSHOT + 2.1.0-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-struts-archetype - 2.0.0-SNAPSHOT + 2.1.0-SNAPSHOT maven-archetype From 2623b12b418a7102170e2d2e1452123372f1e418 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Tue, 6 Feb 2024 11:02:34 +0100 Subject: [PATCH 586/888] add blogpost --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 174576470..b88fb16db 100644 --- a/README.md +++ b/README.md @@ -44,6 +44,10 @@ public class StreamLambdaHandler implements RequestStreamHandler { ## Public Examples +### Blogs + +- [Re-platforming Java applications using the updated AWS Serverless Java Container](https://aws.amazon.com/blogs/compute/re-platforming-java-applications-using-the-updated-aws-serverless-java-container/) + ### Workshops - [Java on AWS Lambda](https://catalog.workshops.aws/java-on-aws-lambda) From Serverful to Serverless Java with AWS Lambda in 2 hours From 776c7979c9200009402cb34ea07b97c55395d4ef Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Feb 2024 04:24:23 +0000 Subject: [PATCH 587/888] chore(deps): bump com.github.spotbugs:spotbugs-maven-plugin Bumps [com.github.spotbugs:spotbugs-maven-plugin](https://github.com/spotbugs/spotbugs-maven-plugin) from 4.8.3.0 to 4.8.3.1. - [Release notes](https://github.com/spotbugs/spotbugs-maven-plugin/releases) - [Commits](https://github.com/spotbugs/spotbugs-maven-plugin/compare/spotbugs-maven-plugin-4.8.3.0...spotbugs-maven-plugin-4.8.3.1) --- updated-dependencies: - dependency-name: com.github.spotbugs:spotbugs-maven-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 959b6ab21..3af72a5d3 100644 --- a/pom.xml +++ b/pom.xml @@ -249,7 +249,7 @@ com.github.spotbugs spotbugs-maven-plugin - 4.8.3.0 + 4.8.3.1 com.amazonaws.serverless.sample diff --git a/samples/springboot3/pet-store/build.gradle b/samples/springboot3/pet-store/build.gradle index b59cc9720..602b56338 100644 --- a/samples/springboot3/pet-store/build.gradle +++ b/samples/springboot3/pet-store/build.gradle @@ -9,7 +9,7 @@ repositories { dependencies { implementation ( - implementation('org.springframework.boot:spring-boot-starter-web:3.2.2') { + implementation('org.springframework.boot:spring-boot-starter-web:3.2.3') { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat' }, 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:[2.0-SNAPSHOT,)', diff --git a/samples/springboot3/pet-store/pom.xml b/samples/springboot3/pet-store/pom.xml index 04de7678e..287096561 100644 --- a/samples/springboot3/pet-store/pom.xml +++ b/samples/springboot3/pet-store/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 3.2.2 + 3.2.3 From 3e282bca95e1cfdb621d5cc7b094b136af41f734 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 26 Feb 2024 09:50:53 +0100 Subject: [PATCH 590/888] chore(deps): Update maven-shade-plugin to 3.5.2 --- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/jersey/pet-store/pom.xml | 2 +- samples/spring/pet-store/pom.xml | 2 +- samples/springboot3/alt-pet-store/pom.xml | 2 +- samples/springboot3/graphql-pet-store/pom.xml | 2 +- samples/springboot3/pet-store/pom.xml | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml index a52141649..8f01b03a6 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml @@ -107,7 +107,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.5.1 + 3.5.2 false diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index 2bcfc0d81..e5807be42 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -119,7 +119,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.5.1 + 3.5.2 package diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml index e444e3fa2..a6184962c 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml @@ -83,7 +83,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.5.1 + 3.5.2 false diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index 7a5ed7fba..c7400aa81 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -85,7 +85,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.5.1 + 3.5.2 false diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index 31865e36f..e2618e879 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -95,7 +95,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.5.1 + 3.5.2 package diff --git a/samples/springboot3/alt-pet-store/pom.xml b/samples/springboot3/alt-pet-store/pom.xml index ca0a96251..9ed6784f9 100644 --- a/samples/springboot3/alt-pet-store/pom.xml +++ b/samples/springboot3/alt-pet-store/pom.xml @@ -49,7 +49,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.5.1 + 3.5.2 false diff --git a/samples/springboot3/graphql-pet-store/pom.xml b/samples/springboot3/graphql-pet-store/pom.xml index 442aecdd7..8857b1c0c 100644 --- a/samples/springboot3/graphql-pet-store/pom.xml +++ b/samples/springboot3/graphql-pet-store/pom.xml @@ -63,7 +63,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.5.1 + 3.5.2 false diff --git a/samples/springboot3/pet-store/pom.xml b/samples/springboot3/pet-store/pom.xml index 287096561..f0ae6a3ee 100644 --- a/samples/springboot3/pet-store/pom.xml +++ b/samples/springboot3/pet-store/pom.xml @@ -55,7 +55,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.5.1 + 3.5.2 false From 4e83ca47c8d66cd1ceaf7d442213013941e8c75f Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 26 Feb 2024 09:51:27 +0100 Subject: [PATCH 591/888] chore(deps): Update Log4J to 2.23.0 --- .../src/main/resources/archetype-resources/build.gradle | 6 +++--- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 6 +++--- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/spring/pet-store/build.gradle | 6 +++--- samples/spring/pet-store/pom.xml | 2 +- samples/struts/pet-store/build.gradle | 4 ++-- samples/struts/pet-store/pom.xml | 2 +- 8 files changed, 15 insertions(+), 15 deletions(-) diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index 79570e92a..a79ea420a 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -10,9 +10,9 @@ dependencies { 'org.springframework:spring-webmvc:6.1.4', 'org.springframework:spring-context:6.1.4', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[2.0-SNAPSHOT,)', - 'org.apache.logging.log4j:log4j-core:2.22.1', - 'org.apache.logging.log4j:log4j-api:2.22.1', - 'org.apache.logging.log4j:log4j-slf4j-impl:2.22.1', + 'org.apache.logging.log4j:log4j-core:2.23.0', + 'org.apache.logging.log4j:log4j-api:2.23.0', + 'org.apache.logging.log4j:log4j-slf4j-impl:2.23.0', 'com.fasterxml.jackson.core:jackson-databind:2.16.1', 'com.amazonaws:aws-lambda-java-log4j2:1.6.0', ) diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index e5807be42..37fd08e1e 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -18,7 +18,7 @@ 1.8 6.1.4 5.10.2 - 2.22.1 + 2.23.0 diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle index 499ede045..a0cb6e805 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle @@ -36,9 +36,9 @@ dependencies { implementation ('org.hibernate.validator:hibernate-validator:6.1.7.Final') implementation ('com.fasterxml.jackson.core:jackson-databind:2.16.1') implementation ('com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.16.1') - implementation ('org.apache.logging.log4j:log4j-core:2.22.1') - implementation ('org.apache.logging.log4j:log4j-api:2.22.1') - implementation ('org.apache.logging.log4j:log4j-slf4j-impl:2.22.1') + implementation ('org.apache.logging.log4j:log4j-core:2.23.0') + implementation ('org.apache.logging.log4j:log4j-api:2.23.0') + implementation ('org.apache.logging.log4j:log4j-slf4j-impl:2.23.0') implementation ('com.amazonaws:aws-lambda-java-log4j2:1.6.0') testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml index 64fe17396..616f9e6b6 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml @@ -18,7 +18,7 @@ 7.0.0-M2 2.16.1 5.10.2 - 2.22.1 + 2.23.0 diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index 6662c379d..1c90ee09c 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -10,9 +10,9 @@ dependencies { 'org.springframework:spring-webmvc:6.1.4', 'org.springframework:spring-context:6.1.4', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[2.0-SNAPSHOT,)', - 'org.apache.logging.log4j:log4j-core:2.22.1', - 'org.apache.logging.log4j:log4j-api:2.22.1', - 'org.apache.logging.log4j:log4j-slf4j-impl:2.22.1', + 'org.apache.logging.log4j:log4j-core:2.23.0', + 'org.apache.logging.log4j:log4j-api:2.23.0', + 'org.apache.logging.log4j:log4j-slf4j-impl:2.23.0', 'com.fasterxml.jackson.core:jackson-databind:2.16.1', 'com.amazonaws:aws-lambda-java-log4j2:1.6.0', ) diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index e2618e879..d271fadaa 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -25,7 +25,7 @@ 6.1.4 - 2.22.1 + 2.23.0 17 17 diff --git a/samples/struts/pet-store/build.gradle b/samples/struts/pet-store/build.gradle index cca8f65e7..8396babfa 100644 --- a/samples/struts/pet-store/build.gradle +++ b/samples/struts/pet-store/build.gradle @@ -24,8 +24,8 @@ dependencies { 'jakarta.el:jakarta.el-api:5.0.1', 'com.fasterxml.jackson.core:jackson-databind:2.16.1', 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.16.1', - 'org.apache.logging.log4j:log4j-core:2.22.1', - 'org.apache.logging.log4j:log4j-api:2.22.1', + 'org.apache.logging.log4j:log4j-core:2.23.0', + 'org.apache.logging.log4j:log4j-api:2.23.0', 'com.amazonaws:aws-lambda-java-log4j2:1.6.0', ) } diff --git a/samples/struts/pet-store/pom.xml b/samples/struts/pet-store/pom.xml index b23a44802..02fbd8fe4 100644 --- a/samples/struts/pet-store/pom.xml +++ b/samples/struts/pet-store/pom.xml @@ -29,7 +29,7 @@ 7.0.0-M2 2.16.1 4.13.2 - 2.22.1 + 2.23.0 From 38ce9172e75c71e0281fa1d0d63e6625016fcc96 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 26 Feb 2024 10:03:28 +0100 Subject: [PATCH 592/888] chore(deps): Update Struts to 7.0.0-M3 --- aws-serverless-java-container-struts/pom.xml | 2 +- .../main/resources/archetype-resources/build.gradle | 10 +++++----- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/struts/pet-store/build.gradle | 8 ++++---- samples/struts/pet-store/pom.xml | 2 +- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/aws-serverless-java-container-struts/pom.xml b/aws-serverless-java-container-struts/pom.xml index ff4071933..0ce204cad 100644 --- a/aws-serverless-java-container-struts/pom.xml +++ b/aws-serverless-java-container-struts/pom.xml @@ -15,7 +15,7 @@ - 7.0.0-M2 + 7.0.0-M3 diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle index a0cb6e805..05d94f004 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle @@ -18,19 +18,19 @@ dependencies { exclude group: 'org.apache.logging.log4j', module: 'log4j-api' exclude group: 'org.apache.logging.log4j', module: 'log4j-to-slf4j' } - implementation ('org.apache.struts:struts2-convention-plugin:7.0.0-M2') { + implementation ('org.apache.struts:struts2-convention-plugin:7.0.0-M3') { exclude group: 'org.apache.struts', module: 'struts2-core' } - implementation ('org.apache.struts:struts2-rest-plugin:7.0.0-M2') { + implementation ('org.apache.struts:struts2-rest-plugin:7.0.0-M3') { exclude group: 'org.apache.struts', module: 'struts2-core' } - implementation ('org.apache.struts:struts2-bean-validation-plugin:7.0.0-M2') { + implementation ('org.apache.struts:struts2-bean-validation-plugin:7.0.0-M3') { exclude group: 'org.apache.struts', module: 'struts2-core' } implementation ('com.jgeppert.struts2:struts2-aws-lambda-support-plugin:1.4.2') { exclude group: 'org.apache.struts', module: 'struts2-core' } - implementation ('org.apache.struts:struts2-core:7.0.0-M2') { + implementation ('org.apache.struts:struts2-core:7.0.0-M3') { exclude group: 'org.apache.logging.log4j', module: 'log4j-api' } implementation ('org.hibernate.validator:hibernate-validator:6.1.7.Final') @@ -45,7 +45,7 @@ dependencies { testImplementation("org.apache.httpcomponents.client5:httpclient5:5.2.1") testImplementation(platform("org.junit:junit-bom:5.10.2")) testImplementation("org.junit.jupiter:junit-jupiter") - testImplementation('org.apache.struts:struts2-junit-plugin:7.0.0-M2') { + testImplementation('org.apache.struts:struts2-junit-plugin:7.0.0-M3') { exclude group: 'org.apache.struts', module: 'struts2-core' } } diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml index 616f9e6b6..b157b1603 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml @@ -15,7 +15,7 @@ 1.8 1.8 - 7.0.0-M2 + 7.0.0-M3 2.16.1 5.10.2 2.23.0 diff --git a/samples/struts/pet-store/build.gradle b/samples/struts/pet-store/build.gradle index 8396babfa..c0eba57e4 100644 --- a/samples/struts/pet-store/build.gradle +++ b/samples/struts/pet-store/build.gradle @@ -14,10 +14,10 @@ configurations { dependencies { implementation ( 'com.amazonaws.serverless:aws-serverless-java-container-struts:[2.0-SNAPSHOT,)', - 'org.apache.struts:struts2-convention-plugin:7.0.0-M2', - 'org.apache.struts:struts2-rest-plugin:7.0.0-M2', - 'org.apache.struts:struts2-bean-validation-plugin:7.0.0-M2', - 'org.apache.struts:struts2-junit-plugin:7.0.0-M2', + 'org.apache.struts:struts2-convention-plugin:7.0.0-M3', + 'org.apache.struts:struts2-rest-plugin:7.0.0-M3', + 'org.apache.struts:struts2-bean-validation-plugin:7.0.0-M3', + 'org.apache.struts:struts2-junit-plugin:7.0.0-M3', 'com.jgeppert.struts2:struts2-aws-lambda-support-plugin:1.4.2', 'org.hibernate.validator:hibernate-validator:6.1.7.Final', 'org.glassfish:jakarta.el:5.0.0-M1', diff --git a/samples/struts/pet-store/pom.xml b/samples/struts/pet-store/pom.xml index 02fbd8fe4..9e389939c 100644 --- a/samples/struts/pet-store/pom.xml +++ b/samples/struts/pet-store/pom.xml @@ -26,7 +26,7 @@ 1.8 1.8 - 7.0.0-M2 + 7.0.0-M3 2.16.1 4.13.2 2.23.0 From d22f63ff32987d5c3ad5479ba639b28a7153dec6 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 26 Feb 2024 10:25:22 +0100 Subject: [PATCH 593/888] chore: disable CI build for Struts as it is not released right now --- .../continuous-integration-workflow.yml | 25 +++++++++---------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/.github/workflows/continuous-integration-workflow.yml b/.github/workflows/continuous-integration-workflow.yml index 741ef5c2d..dd2e7b1cd 100644 --- a/.github/workflows/continuous-integration-workflow.yml +++ b/.github/workflows/continuous-integration-workflow.yml @@ -77,17 +77,16 @@ jobs: - name: Build with Spring Boot 3.1.x run: ./gha_build.sh springboot3 false false -Dspringboot.version=3.1.8 -Dspring.version=6.0.16 -Dspringsecurity.version=6.1.6 -Ddependency-check.skip=true - build_struts2: - name: Build and test Struts - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - name: Set up JDK 17 - uses: actions/setup-java@v3 - with: - distribution: 'corretto' - java-version: 17 - - name: Build latest - run: ./gha_build.sh struts false false -# temporarily disabled archetype and samples as Struts is not released at the moment +# temporarily disabled as Struts is not released at the moment +# build_struts2: +# name: Build and test Struts +# runs-on: ubuntu-latest +# steps: +# - uses: actions/checkout@v3 +# - name: Set up JDK 17 +# uses: actions/setup-java@v3 +# with: +# distribution: 'corretto' +# java-version: 17 +# - name: Build latest # run: ./gha_build.sh struts true true \ No newline at end of file From 04aa97fe0eb581e4ab9386603fb37c0735d45b63 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Mar 2024 04:41:52 +0000 Subject: [PATCH 594/888] chore(deps): bump com.h3xstream.findsecbugs:findsecbugs-plugin Bumps [com.h3xstream.findsecbugs:findsecbugs-plugin](https://github.com/find-sec-bugs/find-sec-bugs) from 1.12.0 to 1.13.0. - [Release notes](https://github.com/find-sec-bugs/find-sec-bugs/releases) - [Changelog](https://github.com/find-sec-bugs/find-sec-bugs/blob/master/CHANGELOG.md) - [Commits](https://github.com/find-sec-bugs/find-sec-bugs/compare/version-1.12.0...version-1.13.0) --- updated-dependencies: - dependency-name: com.h3xstream.findsecbugs:findsecbugs-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 3af72a5d3..a9c4a7c27 100644 --- a/pom.xml +++ b/pom.xml @@ -270,7 +270,7 @@ com.h3xstream.findsecbugs findsecbugs-plugin - 1.12.0 + 1.13.0 From acfb5fd4e5729d6ba5f8fbd7d5df81bfe44c2329 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Mar 2024 04:42:16 +0000 Subject: [PATCH 595/888] chore(deps-dev): bump org.mockito:mockito-core from 5.10.0 to 5.11.0 Bumps [org.mockito:mockito-core](https://github.com/mockito/mockito) from 5.10.0 to 5.11.0. - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](https://github.com/mockito/mockito/compare/v5.10.0...v5.11.0) --- updated-dependencies: - dependency-name: org.mockito:mockito-core dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 3af72a5d3..8cb137adb 100644 --- a/pom.xml +++ b/pom.xml @@ -81,7 +81,7 @@ 2.16.1 2.0.12 5.10.2 - 5.10.0 + 5.11.0 1.3 UTF-8 From 333b52139ceefef145a7871959c2bb79c2152e4e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Mar 2024 04:42:21 +0000 Subject: [PATCH 596/888] chore(deps-dev): bump jakarta.activation:jakarta.activation-api Bumps [jakarta.activation:jakarta.activation-api](https://github.com/jakartaee/jaf-api) from 2.1.2 to 2.1.3. - [Release notes](https://github.com/jakartaee/jaf-api/releases) - [Commits](https://github.com/jakartaee/jaf-api/compare/2.1.2...2.1.3) --- updated-dependencies: - dependency-name: jakarta.activation:jakarta.activation-api dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- aws-serverless-java-container-spring/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index b2f1c12d6..09aa41f10 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -67,7 +67,7 @@ jakarta.activation jakarta.activation-api - 2.1.2 + 2.1.3 test From b577efa56cd27ce0ecd7d6df499e0196a8a21513 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 22 Mar 2024 13:46:49 +0100 Subject: [PATCH 597/888] chore(deps): Update Spring dependencies (framework to 6.1.5, security to 6.2.3, boot to 3.2.4) --- aws-serverless-java-container-core/pom.xml | 2 +- aws-serverless-java-container-spring/pom.xml | 4 ++-- aws-serverless-java-container-springboot3/pom.xml | 6 +++--- .../src/main/resources/archetype-resources/build.gradle | 4 ++-- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/spring/pet-store/build.gradle | 4 ++-- samples/spring/pet-store/pom.xml | 2 +- samples/springboot3/alt-pet-store/build.gradle | 2 +- samples/springboot3/alt-pet-store/pom.xml | 2 +- samples/springboot3/graphql-pet-store/pom.xml | 2 +- samples/springboot3/pet-store-native/pom.xml | 2 +- samples/springboot3/pet-store/build.gradle | 2 +- samples/springboot3/pet-store/pom.xml | 2 +- 15 files changed, 20 insertions(+), 20 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index ab040a112..05e2f75d9 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -60,7 +60,7 @@ org.springframework.security spring-security-web - 6.2.2 + 6.2.3 test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index b2f1c12d6..236634ec5 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -16,8 +16,8 @@ - 6.1.4 - 6.2.2 + 6.1.5 + 6.2.3 diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index 6560ee0c7..23ceec081 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -15,9 +15,9 @@ 2.1.0-SNAPSHOT - 6.1.4 - 3.2.3 - 6.2.2 + 6.1.5 + 3.2.4 + 6.2.3 diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index a79ea420a..1c2300ba7 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -7,8 +7,8 @@ repositories { dependencies { implementation ( - 'org.springframework:spring-webmvc:6.1.4', - 'org.springframework:spring-context:6.1.4', + 'org.springframework:spring-webmvc:6.1.5', + 'org.springframework:spring-context:6.1.5', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[2.0-SNAPSHOT,)', 'org.apache.logging.log4j:log4j-core:2.23.0', 'org.apache.logging.log4j:log4j-api:2.23.0', diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index 37fd08e1e..2c83b024f 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 1.8 - 6.1.4 + 6.1.5 5.10.2 2.23.0 diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle index 6fe3e6df2..58322b33b 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle @@ -9,7 +9,7 @@ repositories { dependencies { implementation ( - 'org.springframework.boot:spring-boot-starter-web:3.2.3', + 'org.springframework.boot:spring-boot-starter-web:3.2.4', 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:[2.0-SNAPSHOT,)', ) diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml index a6184962c..ece2d44fc 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ org.springframework.boot spring-boot-starter-parent - 3.2.3 + 3.2.4 diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index 1c90ee09c..3c5194f6f 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -7,8 +7,8 @@ repositories { dependencies { implementation ( - 'org.springframework:spring-webmvc:6.1.4', - 'org.springframework:spring-context:6.1.4', + 'org.springframework:spring-webmvc:6.1.5', + 'org.springframework:spring-context:6.1.5', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[2.0-SNAPSHOT,)', 'org.apache.logging.log4j:log4j-core:2.23.0', 'org.apache.logging.log4j:log4j-api:2.23.0', diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index d271fadaa..279c4d1fb 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -24,7 +24,7 @@ - 6.1.4 + 6.1.5 2.23.0 17 17 diff --git a/samples/springboot3/alt-pet-store/build.gradle b/samples/springboot3/alt-pet-store/build.gradle index 602b56338..746782c86 100644 --- a/samples/springboot3/alt-pet-store/build.gradle +++ b/samples/springboot3/alt-pet-store/build.gradle @@ -9,7 +9,7 @@ repositories { dependencies { implementation ( - implementation('org.springframework.boot:spring-boot-starter-web:3.2.3') { + implementation('org.springframework.boot:spring-boot-starter-web:3.2.4') { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat' }, 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:[2.0-SNAPSHOT,)', diff --git a/samples/springboot3/alt-pet-store/pom.xml b/samples/springboot3/alt-pet-store/pom.xml index 9ed6784f9..90388e15e 100644 --- a/samples/springboot3/alt-pet-store/pom.xml +++ b/samples/springboot3/alt-pet-store/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 3.2.3 + 3.2.4 diff --git a/samples/springboot3/graphql-pet-store/pom.xml b/samples/springboot3/graphql-pet-store/pom.xml index 8857b1c0c..dd28aef85 100644 --- a/samples/springboot3/graphql-pet-store/pom.xml +++ b/samples/springboot3/graphql-pet-store/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 3.2.3 + 3.2.4 diff --git a/samples/springboot3/pet-store-native/pom.xml b/samples/springboot3/pet-store-native/pom.xml index c5a6e6f70..ae5dbda1f 100644 --- a/samples/springboot3/pet-store-native/pom.xml +++ b/samples/springboot3/pet-store-native/pom.xml @@ -6,7 +6,7 @@ org.springframework.boot spring-boot-starter-parent - 3.2.3 + 3.2.4 com.amazonaws.serverless.sample diff --git a/samples/springboot3/pet-store/build.gradle b/samples/springboot3/pet-store/build.gradle index 602b56338..746782c86 100644 --- a/samples/springboot3/pet-store/build.gradle +++ b/samples/springboot3/pet-store/build.gradle @@ -9,7 +9,7 @@ repositories { dependencies { implementation ( - implementation('org.springframework.boot:spring-boot-starter-web:3.2.3') { + implementation('org.springframework.boot:spring-boot-starter-web:3.2.4') { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat' }, 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:[2.0-SNAPSHOT,)', diff --git a/samples/springboot3/pet-store/pom.xml b/samples/springboot3/pet-store/pom.xml index f0ae6a3ee..a4390bd9d 100644 --- a/samples/springboot3/pet-store/pom.xml +++ b/samples/springboot3/pet-store/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 3.2.3 + 3.2.4 From b39343812a00680fe6ce644a71dafbbbe4f4da65 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 22 Mar 2024 14:14:19 +0100 Subject: [PATCH 598/888] chore(deps): Update Jackson to 2.17.0 --- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/build.gradle | 4 ++-- .../src/main/resources/archetype-resources/pom.xml | 2 +- pom.xml | 2 +- samples/jersey/pet-store/build.gradle | 2 +- samples/jersey/pet-store/pom.xml | 2 +- samples/spring/pet-store/build.gradle | 2 +- samples/struts/pet-store/build.gradle | 4 ++-- samples/struts/pet-store/pom.xml | 2 +- 11 files changed, 13 insertions(+), 13 deletions(-) diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle index b23f0b90f..d4a6549ba 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle @@ -8,7 +8,7 @@ repositories { dependencies { implementation ( 'com.amazonaws.serverless:aws-serverless-java-container-jersey:[2.0-SNAPSHOT,)', - 'com.fasterxml.jackson.core:jackson-databind:2.16.1', + 'com.fasterxml.jackson.core:jackson-databind:2.17.0', ) implementation("org.glassfish.jersey.media:jersey-media-json-jackson:3.1.5") { diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml index 8f01b03a6..be45d80a5 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 3.1.5 - 2.16.1 + 2.17.0 5.10.2 diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index 1c2300ba7..1bc4c4c0e 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -13,7 +13,7 @@ dependencies { 'org.apache.logging.log4j:log4j-core:2.23.0', 'org.apache.logging.log4j:log4j-api:2.23.0', 'org.apache.logging.log4j:log4j-slf4j-impl:2.23.0', - 'com.fasterxml.jackson.core:jackson-databind:2.16.1', + 'com.fasterxml.jackson.core:jackson-databind:2.17.0', 'com.amazonaws:aws-lambda-java-log4j2:1.6.0', ) diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle index 05d94f004..48cecba3e 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle @@ -34,8 +34,8 @@ dependencies { exclude group: 'org.apache.logging.log4j', module: 'log4j-api' } implementation ('org.hibernate.validator:hibernate-validator:6.1.7.Final') - implementation ('com.fasterxml.jackson.core:jackson-databind:2.16.1') - implementation ('com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.16.1') + implementation ('com.fasterxml.jackson.core:jackson-databind:2.17.0') + implementation ('com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.17.0') implementation ('org.apache.logging.log4j:log4j-core:2.23.0') implementation ('org.apache.logging.log4j:log4j-api:2.23.0') implementation ('org.apache.logging.log4j:log4j-slf4j-impl:2.23.0') diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml index b157b1603..e18351a65 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 1.8 7.0.0-M3 - 2.16.1 + 2.17.0 5.10.2 2.23.0 diff --git a/pom.xml b/pom.xml index cddde7bc1..437e8ae34 100644 --- a/pom.xml +++ b/pom.xml @@ -78,7 +78,7 @@ 0.7 9.0.9 - 2.16.1 + 2.17.0 2.0.12 5.10.2 5.11.0 diff --git a/samples/jersey/pet-store/build.gradle b/samples/jersey/pet-store/build.gradle index 475f60fa0..9d9b88465 100644 --- a/samples/jersey/pet-store/build.gradle +++ b/samples/jersey/pet-store/build.gradle @@ -8,7 +8,7 @@ repositories { dependencies { implementation ( 'com.amazonaws.serverless:aws-serverless-java-container-jersey:[2.0-SNAPSHOT,)', - 'com.fasterxml.jackson.core:jackson-databind:2.16.1', + 'com.fasterxml.jackson.core:jackson-databind:2.17.0', ) implementation("org.glassfish.jersey.media:jersey-media-json-jackson:3.1.5") { diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index c7400aa81..c2e91ef44 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -27,7 +27,7 @@ 1.8 1.8 3.1.5 - 2.16.1 + 2.17.0 diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index 3c5194f6f..1a82fd4f9 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -13,7 +13,7 @@ dependencies { 'org.apache.logging.log4j:log4j-core:2.23.0', 'org.apache.logging.log4j:log4j-api:2.23.0', 'org.apache.logging.log4j:log4j-slf4j-impl:2.23.0', - 'com.fasterxml.jackson.core:jackson-databind:2.16.1', + 'com.fasterxml.jackson.core:jackson-databind:2.17.0', 'com.amazonaws:aws-lambda-java-log4j2:1.6.0', ) } diff --git a/samples/struts/pet-store/build.gradle b/samples/struts/pet-store/build.gradle index c0eba57e4..557a1d290 100644 --- a/samples/struts/pet-store/build.gradle +++ b/samples/struts/pet-store/build.gradle @@ -22,8 +22,8 @@ dependencies { 'org.hibernate.validator:hibernate-validator:6.1.7.Final', 'org.glassfish:jakarta.el:5.0.0-M1', 'jakarta.el:jakarta.el-api:5.0.1', - 'com.fasterxml.jackson.core:jackson-databind:2.16.1', - 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.16.1', + 'com.fasterxml.jackson.core:jackson-databind:2.17.0', + 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.17.0', 'org.apache.logging.log4j:log4j-core:2.23.0', 'org.apache.logging.log4j:log4j-api:2.23.0', 'com.amazonaws:aws-lambda-java-log4j2:1.6.0', diff --git a/samples/struts/pet-store/pom.xml b/samples/struts/pet-store/pom.xml index 9e389939c..f720e9c9a 100644 --- a/samples/struts/pet-store/pom.xml +++ b/samples/struts/pet-store/pom.xml @@ -27,7 +27,7 @@ 1.8 1.8 7.0.0-M3 - 2.16.1 + 2.17.0 4.13.2 2.23.0 From 96e0e7cc563a5be44799d2766b54b6fe470c01eb Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 22 Mar 2024 14:15:08 +0100 Subject: [PATCH 599/888] chore(deps): Update maven-assembly-plugin to 3.7.0 --- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/jersey/pet-store/pom.xml | 2 +- samples/spring/pet-store/pom.xml | 2 +- samples/springboot3/alt-pet-store/pom.xml | 2 +- samples/springboot3/graphql-pet-store/pom.xml | 2 +- samples/springboot3/pet-store/pom.xml | 2 +- samples/struts/pet-store/pom.xml | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml index be45d80a5..f2eb920c3 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml @@ -172,7 +172,7 @@ org.apache.maven.plugins maven-assembly-plugin - 3.6.0 + 3.7.0 zip-assembly diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index 2c83b024f..1f759772b 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -195,7 +195,7 @@ org.apache.maven.plugins maven-assembly-plugin - 3.6.0 + 3.7.0 zip-assembly diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml index ece2d44fc..3947c9de6 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml @@ -155,7 +155,7 @@ org.apache.maven.plugins maven-assembly-plugin - 3.6.0 + 3.7.0 zip-assembly diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml index e18351a65..fe83e8869 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml @@ -157,7 +157,7 @@ org.apache.maven.plugins maven-assembly-plugin - 3.6.0 + 3.7.0 src/main/assembly/dist.xml diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index c2e91ef44..7ed1aa1f5 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -150,7 +150,7 @@ org.apache.maven.plugins maven-assembly-plugin - 3.6.0 + 3.7.0 zip-assembly diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index 279c4d1fb..46efbe5d9 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -171,7 +171,7 @@ org.apache.maven.plugins maven-assembly-plugin - 3.6.0 + 3.7.0 zip-assembly diff --git a/samples/springboot3/alt-pet-store/pom.xml b/samples/springboot3/alt-pet-store/pom.xml index 90388e15e..a2855b876 100644 --- a/samples/springboot3/alt-pet-store/pom.xml +++ b/samples/springboot3/alt-pet-store/pom.xml @@ -121,7 +121,7 @@ org.apache.maven.plugins maven-assembly-plugin - 3.6.0 + 3.7.0 zip-assembly diff --git a/samples/springboot3/graphql-pet-store/pom.xml b/samples/springboot3/graphql-pet-store/pom.xml index dd28aef85..c566bfcae 100644 --- a/samples/springboot3/graphql-pet-store/pom.xml +++ b/samples/springboot3/graphql-pet-store/pom.xml @@ -135,7 +135,7 @@ org.apache.maven.plugins maven-assembly-plugin - 3.6.0 + 3.7.0 zip-assembly diff --git a/samples/springboot3/pet-store/pom.xml b/samples/springboot3/pet-store/pom.xml index a4390bd9d..8bee4a39f 100644 --- a/samples/springboot3/pet-store/pom.xml +++ b/samples/springboot3/pet-store/pom.xml @@ -127,7 +127,7 @@ org.apache.maven.plugins maven-assembly-plugin - 3.6.0 + 3.7.0 zip-assembly diff --git a/samples/struts/pet-store/pom.xml b/samples/struts/pet-store/pom.xml index f720e9c9a..f29dc226f 100644 --- a/samples/struts/pet-store/pom.xml +++ b/samples/struts/pet-store/pom.xml @@ -148,7 +148,7 @@ org.apache.maven.plugins maven-assembly-plugin - 3.6.0 + 3.7.0 src/main/assembly/dist.xml From 0ba5586ae1b0c1f805251dff2dc36891a86f26c9 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 22 Mar 2024 14:16:11 +0100 Subject: [PATCH 600/888] chore(deps): Update Log4J to 2.23.1 --- .../src/main/resources/archetype-resources/build.gradle | 6 +++--- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 6 +++--- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/spring/pet-store/build.gradle | 6 +++--- samples/spring/pet-store/pom.xml | 2 +- samples/struts/pet-store/build.gradle | 4 ++-- samples/struts/pet-store/pom.xml | 2 +- 8 files changed, 15 insertions(+), 15 deletions(-) diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index 1bc4c4c0e..0a4d5d6b7 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -10,9 +10,9 @@ dependencies { 'org.springframework:spring-webmvc:6.1.5', 'org.springframework:spring-context:6.1.5', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[2.0-SNAPSHOT,)', - 'org.apache.logging.log4j:log4j-core:2.23.0', - 'org.apache.logging.log4j:log4j-api:2.23.0', - 'org.apache.logging.log4j:log4j-slf4j-impl:2.23.0', + 'org.apache.logging.log4j:log4j-core:2.23.1', + 'org.apache.logging.log4j:log4j-api:2.23.1', + 'org.apache.logging.log4j:log4j-slf4j-impl:2.23.1', 'com.fasterxml.jackson.core:jackson-databind:2.17.0', 'com.amazonaws:aws-lambda-java-log4j2:1.6.0', ) diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index 1f759772b..c40b951d6 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -18,7 +18,7 @@ 1.8 6.1.5 5.10.2 - 2.23.0 + 2.23.1 diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle index 48cecba3e..f8b3469d5 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle @@ -36,9 +36,9 @@ dependencies { implementation ('org.hibernate.validator:hibernate-validator:6.1.7.Final') implementation ('com.fasterxml.jackson.core:jackson-databind:2.17.0') implementation ('com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.17.0') - implementation ('org.apache.logging.log4j:log4j-core:2.23.0') - implementation ('org.apache.logging.log4j:log4j-api:2.23.0') - implementation ('org.apache.logging.log4j:log4j-slf4j-impl:2.23.0') + implementation ('org.apache.logging.log4j:log4j-core:2.23.1') + implementation ('org.apache.logging.log4j:log4j-api:2.23.1') + implementation ('org.apache.logging.log4j:log4j-slf4j-impl:2.23.1') implementation ('com.amazonaws:aws-lambda-java-log4j2:1.6.0') testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml index fe83e8869..ad4979312 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml @@ -18,7 +18,7 @@ 7.0.0-M3 2.17.0 5.10.2 - 2.23.0 + 2.23.1 diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index 1a82fd4f9..304891e8f 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -10,9 +10,9 @@ dependencies { 'org.springframework:spring-webmvc:6.1.5', 'org.springframework:spring-context:6.1.5', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[2.0-SNAPSHOT,)', - 'org.apache.logging.log4j:log4j-core:2.23.0', - 'org.apache.logging.log4j:log4j-api:2.23.0', - 'org.apache.logging.log4j:log4j-slf4j-impl:2.23.0', + 'org.apache.logging.log4j:log4j-core:2.23.1', + 'org.apache.logging.log4j:log4j-api:2.23.1', + 'org.apache.logging.log4j:log4j-slf4j-impl:2.23.1', 'com.fasterxml.jackson.core:jackson-databind:2.17.0', 'com.amazonaws:aws-lambda-java-log4j2:1.6.0', ) diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index 46efbe5d9..584b96582 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -25,7 +25,7 @@ 6.1.5 - 2.23.0 + 2.23.1 17 17 diff --git a/samples/struts/pet-store/build.gradle b/samples/struts/pet-store/build.gradle index 557a1d290..66fb4929b 100644 --- a/samples/struts/pet-store/build.gradle +++ b/samples/struts/pet-store/build.gradle @@ -24,8 +24,8 @@ dependencies { 'jakarta.el:jakarta.el-api:5.0.1', 'com.fasterxml.jackson.core:jackson-databind:2.17.0', 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.17.0', - 'org.apache.logging.log4j:log4j-core:2.23.0', - 'org.apache.logging.log4j:log4j-api:2.23.0', + 'org.apache.logging.log4j:log4j-core:2.23.1', + 'org.apache.logging.log4j:log4j-api:2.23.1', 'com.amazonaws:aws-lambda-java-log4j2:1.6.0', ) } diff --git a/samples/struts/pet-store/pom.xml b/samples/struts/pet-store/pom.xml index f29dc226f..f854cd33d 100644 --- a/samples/struts/pet-store/pom.xml +++ b/samples/struts/pet-store/pom.xml @@ -29,7 +29,7 @@ 7.0.0-M3 2.17.0 4.13.2 - 2.23.0 + 2.23.1 From 10b41f5de02cf618aad688999ee92c0dcd47fdfd Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 22 Mar 2024 14:46:55 +0100 Subject: [PATCH 601/888] chore(deps): Update maven-assembly-plugin to 3.7.1 --- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/jersey/pet-store/pom.xml | 2 +- samples/spring/pet-store/pom.xml | 2 +- samples/springboot3/alt-pet-store/pom.xml | 2 +- samples/springboot3/graphql-pet-store/pom.xml | 2 +- samples/springboot3/pet-store/pom.xml | 2 +- samples/struts/pet-store/pom.xml | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml index f2eb920c3..a6defc76a 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml @@ -172,7 +172,7 @@ org.apache.maven.plugins maven-assembly-plugin - 3.7.0 + 3.7.1 zip-assembly diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index c40b951d6..a218c78d7 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -195,7 +195,7 @@ org.apache.maven.plugins maven-assembly-plugin - 3.7.0 + 3.7.1 zip-assembly diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml index 3947c9de6..80bc10761 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml @@ -155,7 +155,7 @@ org.apache.maven.plugins maven-assembly-plugin - 3.7.0 + 3.7.1 zip-assembly diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml index ad4979312..f4655f0c7 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml @@ -157,7 +157,7 @@ org.apache.maven.plugins maven-assembly-plugin - 3.7.0 + 3.7.1 src/main/assembly/dist.xml diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index 7ed1aa1f5..6c7b1ed50 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -150,7 +150,7 @@ org.apache.maven.plugins maven-assembly-plugin - 3.7.0 + 3.7.1 zip-assembly diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index 584b96582..a0803162d 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -171,7 +171,7 @@ org.apache.maven.plugins maven-assembly-plugin - 3.7.0 + 3.7.1 zip-assembly diff --git a/samples/springboot3/alt-pet-store/pom.xml b/samples/springboot3/alt-pet-store/pom.xml index a2855b876..5dc89a9b4 100644 --- a/samples/springboot3/alt-pet-store/pom.xml +++ b/samples/springboot3/alt-pet-store/pom.xml @@ -121,7 +121,7 @@ org.apache.maven.plugins maven-assembly-plugin - 3.7.0 + 3.7.1 zip-assembly diff --git a/samples/springboot3/graphql-pet-store/pom.xml b/samples/springboot3/graphql-pet-store/pom.xml index c566bfcae..6b78c1a88 100644 --- a/samples/springboot3/graphql-pet-store/pom.xml +++ b/samples/springboot3/graphql-pet-store/pom.xml @@ -135,7 +135,7 @@ org.apache.maven.plugins maven-assembly-plugin - 3.7.0 + 3.7.1 zip-assembly diff --git a/samples/springboot3/pet-store/pom.xml b/samples/springboot3/pet-store/pom.xml index 8bee4a39f..5ae6787a2 100644 --- a/samples/springboot3/pet-store/pom.xml +++ b/samples/springboot3/pet-store/pom.xml @@ -127,7 +127,7 @@ org.apache.maven.plugins maven-assembly-plugin - 3.7.0 + 3.7.1 zip-assembly diff --git a/samples/struts/pet-store/pom.xml b/samples/struts/pet-store/pom.xml index f854cd33d..04b43c51f 100644 --- a/samples/struts/pet-store/pom.xml +++ b/samples/struts/pet-store/pom.xml @@ -148,7 +148,7 @@ org.apache.maven.plugins maven-assembly-plugin - 3.7.0 + 3.7.1 src/main/assembly/dist.xml From c029401a65ed1ea95d3a3886756c6ecfaa3815e5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 25 Mar 2024 04:52:49 +0000 Subject: [PATCH 602/888] chore(deps): bump org.apache.maven.plugins:maven-compiler-plugin Bumps [org.apache.maven.plugins:maven-compiler-plugin](https://github.com/apache/maven-compiler-plugin) from 3.12.1 to 3.13.0. - [Release notes](https://github.com/apache/maven-compiler-plugin/releases) - [Commits](https://github.com/apache/maven-compiler-plugin/compare/maven-compiler-plugin-3.12.1...maven-compiler-plugin-3.13.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-compiler-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 437e8ae34..622eb6b09 100644 --- a/pom.xml +++ b/pom.xml @@ -190,7 +190,7 @@ org.apache.maven.plugins maven-compiler-plugin - 3.12.1 + 3.13.0 1.8 1.8 From 5857ab43dd37f11be1c950177d147800045edb1b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 25 Mar 2024 04:52:55 +0000 Subject: [PATCH 603/888] chore(deps): bump org.apache.maven.plugins:maven-gpg-plugin Bumps [org.apache.maven.plugins:maven-gpg-plugin](https://github.com/apache/maven-gpg-plugin) from 3.1.0 to 3.2.1. - [Release notes](https://github.com/apache/maven-gpg-plugin/releases) - [Commits](https://github.com/apache/maven-gpg-plugin/compare/maven-gpg-plugin-3.1.0...maven-gpg-plugin-3.2.1) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-gpg-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 437e8ae34..4397e6a43 100644 --- a/pom.xml +++ b/pom.xml @@ -292,7 +292,7 @@ org.apache.maven.plugins maven-gpg-plugin - 3.1.0 + 3.2.1 sign-artifacts From a3b98a749692cff04db15345a08a399380fb24b0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 25 Mar 2024 04:53:02 +0000 Subject: [PATCH 604/888] chore(deps): bump org.owasp:dependency-check-maven from 9.0.9 to 9.0.10 Bumps [org.owasp:dependency-check-maven](https://github.com/jeremylong/DependencyCheck) from 9.0.9 to 9.0.10. - [Release notes](https://github.com/jeremylong/DependencyCheck/releases) - [Changelog](https://github.com/jeremylong/DependencyCheck/blob/main/CHANGELOG.md) - [Commits](https://github.com/jeremylong/DependencyCheck/compare/v9.0.9...v9.0.10) --- updated-dependencies: - dependency-name: org.owasp:dependency-check-maven dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 437e8ae34..f095ebe40 100644 --- a/pom.xml +++ b/pom.xml @@ -77,7 +77,7 @@ 0.7 - 9.0.9 + 9.0.10 2.17.0 2.0.12 5.10.2 From 17afb9a418f9a66b2a91e3483fa84eed626aaa2f Mon Sep 17 00:00:00 2001 From: Oleg Zhurakousky Date: Tue, 26 Mar 2024 11:52:47 +0100 Subject: [PATCH 605/888] GH-805 Fix web context initialization during snapstart Also updated to s-c-function-serverless-webb 4.1.1-SNAPSHOT This commit forces wait for full context initialization if context is created during snapstart creation --- aws-serverless-java-container-springboot3/pom.xml | 2 +- .../proxy/spring/SpringDelegatingLambdaContainerHandler.java | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index 23ceec081..def9c9015 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -25,7 +25,7 @@ org.springframework.cloud spring-cloud-function-serverless-web - 4.0.6 + 4.1.1-SNAPSHOT com.amazonaws.serverless diff --git a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/SpringDelegatingLambdaContainerHandler.java b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/SpringDelegatingLambdaContainerHandler.java index f1a3b526e..56ebe8305 100644 --- a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/SpringDelegatingLambdaContainerHandler.java +++ b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/SpringDelegatingLambdaContainerHandler.java @@ -53,6 +53,10 @@ public SpringDelegatingLambdaContainerHandler() { public SpringDelegatingLambdaContainerHandler(Class... startupClasses) { this.startupClasses = startupClasses; this.mvc = ServerlessMVC.INSTANCE(this.startupClasses); + if (System.getenv().containsKey("AWS_LAMBDA_INITIALIZATION_TYPE") + && System.getenv().get("AWS_LAMBDA_INITIALIZATION_TYPE").equals("snap-start")) { + mvc.waitForContext(); + } this.mapper = new ObjectMapper(); this.responseWriter = new AwsProxyHttpServletResponseWriter(); } From bae68010a8ee07e89cfe160ada60fddf5297e8c0 Mon Sep 17 00:00:00 2001 From: Jonathan Ifegunni Date: Tue, 26 Mar 2024 15:44:51 -0700 Subject: [PATCH 606/888] Add support for Iam Authorizer --- .../proxy/model/HttpApiV2AuthorizerMap.java | 32 ++++++- .../proxy/model/HttpApiV2IamAuthorizer.java | 68 +++++++++++++++ .../model/HttpApiV2ProxyRequestTest.java | 85 +++++++++++++++++-- 3 files changed, 176 insertions(+), 9 deletions(-) create mode 100644 aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/HttpApiV2IamAuthorizer.java diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/HttpApiV2AuthorizerMap.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/HttpApiV2AuthorizerMap.java index 4fff028c4..2cf6d77a6 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/HttpApiV2AuthorizerMap.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/HttpApiV2AuthorizerMap.java @@ -34,16 +34,21 @@ public class HttpApiV2AuthorizerMap extends HashMap { private static final String JWT_KEY = "jwt"; private static final String LAMBDA_KEY = "lambda"; + private static final String IAM_KEY = "iam"; private static final long serialVersionUID = 42L; public HttpApiV2JwtAuthorizer getJwtAuthorizer() { - return (HttpApiV2JwtAuthorizer)get(JWT_KEY); + return (HttpApiV2JwtAuthorizer) get(JWT_KEY); } public Map getLambdaAuthorizerContext() { return (Map) get(LAMBDA_KEY); } + public HttpApiV2IamAuthorizer getIamAuthorizer() { + return (HttpApiV2IamAuthorizer) get(IAM_KEY); + } + public boolean isJwt() { return containsKey(JWT_KEY); } @@ -52,10 +57,18 @@ public boolean isLambda() { return containsKey(LAMBDA_KEY); } + public boolean isIam() { + return containsKey(IAM_KEY); + } + public void putJwtAuthorizer(HttpApiV2JwtAuthorizer jwt) { put(JWT_KEY, jwt); } + public void putIamAuthorizer(HttpApiV2IamAuthorizer iam) { + put(IAM_KEY, iam); + } + public static class HttpApiV2AuthorizerDeserializer extends StdDeserializer { private static final long serialVersionUID = 42L; @@ -64,11 +77,13 @@ public HttpApiV2AuthorizerDeserializer() { } @Override - public HttpApiV2AuthorizerMap deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException { + public HttpApiV2AuthorizerMap deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) + throws IOException, JsonProcessingException { HttpApiV2AuthorizerMap map = new HttpApiV2AuthorizerMap(); JsonNode node = jsonParser.getCodec().readTree(jsonParser); if (node.has(JWT_KEY)) { - HttpApiV2JwtAuthorizer authorizer = LambdaContainerHandler.getObjectMapper().treeToValue(node.get(JWT_KEY), HttpApiV2JwtAuthorizer.class); + HttpApiV2JwtAuthorizer authorizer = LambdaContainerHandler.getObjectMapper() + .treeToValue(node.get(JWT_KEY), HttpApiV2JwtAuthorizer.class); map.putJwtAuthorizer(authorizer); } if (node.has(LAMBDA_KEY)) { @@ -76,6 +91,11 @@ public HttpApiV2AuthorizerMap deserialize(JsonParser jsonParser, Deserialization TypeFactory.defaultInstance().constructMapType(HashMap.class, String.class, Object.class)); map.put(LAMBDA_KEY, context); } + if (node.has(IAM_KEY)) { + HttpApiV2IamAuthorizer iam_authorizer = LambdaContainerHandler.getObjectMapper() + .treeToValue(node.get(IAM_KEY), HttpApiV2IamAuthorizer.class); + map.putIamAuthorizer(iam_authorizer); + } // we ignore other, unknown values return map; } @@ -89,7 +109,8 @@ public HttpApiV2AuthorizerSerializer() { } @Override - public void serialize(HttpApiV2AuthorizerMap httpApiV2AuthorizerMap, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { + public void serialize(HttpApiV2AuthorizerMap httpApiV2AuthorizerMap, JsonGenerator jsonGenerator, + SerializerProvider serializerProvider) throws IOException { jsonGenerator.writeStartObject(); if (httpApiV2AuthorizerMap.isJwt()) { jsonGenerator.writeObjectField(JWT_KEY, httpApiV2AuthorizerMap.getJwtAuthorizer()); @@ -97,6 +118,9 @@ public void serialize(HttpApiV2AuthorizerMap httpApiV2AuthorizerMap, JsonGenerat if (httpApiV2AuthorizerMap.isLambda()) { jsonGenerator.writeObjectField(LAMBDA_KEY, httpApiV2AuthorizerMap.getLambdaAuthorizerContext()); } + if (httpApiV2AuthorizerMap.isIam()) { + jsonGenerator.writeObjectField(IAM_KEY, httpApiV2AuthorizerMap.get(IAM_KEY)); + } jsonGenerator.writeEndObject(); } } diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/HttpApiV2IamAuthorizer.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/HttpApiV2IamAuthorizer.java new file mode 100644 index 000000000..d2a0952ec --- /dev/null +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/HttpApiV2IamAuthorizer.java @@ -0,0 +1,68 @@ +package com.amazonaws.serverless.proxy.model; + +public class HttpApiV2IamAuthorizer { + public String accessKey; + public String accountId; + public String callerId; + public String cognitoIdentity; + public String principalOrgId; + public String userArn; + public String userId; + + public String getAccessKey() { + return accessKey; + } + + public String getAccountId() { + return accountId; + } + + public String getCallerId() { + return callerId; + } + + public String getCognitoIdentity() { + return cognitoIdentity; + } + + public String getPrincipalOrgId() { + return principalOrgId; + } + + public String getUserArn() { + return userArn; + } + + public String getUserId() { + return userId; + } + + public void setAccessKey(String accessKey) { + this.accessKey = accessKey; + } + + public void setAccountId(String accountId) { + this.accountId = accountId; + } + + public void setCallerId(String callerId) { + this.callerId = callerId; + } + + public void setCognitoIdentity(String cognitoIdentity) { + this.cognitoIdentity = cognitoIdentity; + } + + public void setPrincipalOrgId(String principalOrgId) { + this.principalOrgId = principalOrgId; + } + + public void setUserArn(String userArn) { + this.userArn = userArn; + } + + public void setUserId(String userId) { + this.userId = userId; + } + +} \ No newline at end of file diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/model/HttpApiV2ProxyRequestTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/model/HttpApiV2ProxyRequestTest.java index 3aa7cfdfc..20ff4dff2 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/model/HttpApiV2ProxyRequestTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/model/HttpApiV2ProxyRequestTest.java @@ -129,11 +129,55 @@ public class HttpApiV2ProxyRequestTest { " \"isBase64Encoded\": false,\n" + " \"stageVariables\": {\"stageVariable1\": \"value1\", \"stageVariable2\": \"value2\"}\n" + " }\n"; + private static final String IAM_AUTHORIZER = "{\n" + + " \"version\": \"2.0\",\n" + + " \"routeKey\": \"$default\",\n" + + " \"rawPath\": \"/my/path\",\n" + + " \"rawQueryString\": \"parameter1=value1¶meter1=value2¶meter2=value\",\n" + + " \"cookies\": [ \"cookie1\", \"cookie2\" ],\n" + + " \"headers\": {\n" + + " \"Header1\": \"value1\",\n" + + " \"Header2\": \"value2\"\n" + + " },\n" + + " \"queryStringParameters\": { \"parameter1\": \"value1,value2\", \"parameter2\": \"value\" },\n" + + " \"requestContext\": {\n" + + " \"accountId\": \"123456789012\",\n" + + " \"apiId\": \"api-id\",\n" + + " \"authorizer\": { \"iam\": {\n" + + " \"accessKey\": \"AKIAIOSFODNN7EXAMPLE\",\n" + + " \"accountId\": \"123456789012\",\n" + + " \"callerId\": \"AIDACKCEVSQ6C2EXAMPLE\",\n" + + " \"cognitoIdentity\": null,\n" + + " \"principalOrgId\": \"AIDACKCEVSQORGEXAMPLE\",\n" + + " \"userArn\": \"arn:aws:iam::111122223333:user/example-user\",\n" + + " \"userId\": \"AIDACOSFODNN7EXAMPLE2\"\n" + + " }" + + " },\n" + + " \"domainName\": \"id.execute-api.us-east-1.amazonaws.com\",\n" + + " \"domainPrefix\": \"id\",\n" + + " \"http\": {\n" + + " \"method\": \"POST\",\n" + + " \"path\": \"/my/path\",\n" + + " \"protocol\": \"HTTP/1.1\",\n" + + " \"sourceIp\": \"IP\",\n" + + " \"userAgent\": \"agent\"\n" + + " },\n" + + " \"requestId\": \"id\",\n" + + " \"routeKey\": \"$default\",\n" + + " \"stage\": \"$default\",\n" + + " \"time\": \"12/Mar/2020:19:03:58 +0000\",\n" + + " \"timeEpoch\": 1583348638390\n" + + " },\n" + + " \"body\": \"Hello from Lambda\",\n" + + " \"isBase64Encoded\": false,\n" + + " \"stageVariables\": {\"stageVariable1\": \"value1\", \"stageVariable2\": \"value2\"}\n" + + " }\n"; @Test void deserialize_fromJsonString_authorizerPopulatedCorrectly() { try { - HttpApiV2ProxyRequest req = LambdaContainerHandler.getObjectMapper().readValue(BASE_PROXY_REQUEST, HttpApiV2ProxyRequest.class); + HttpApiV2ProxyRequest req = LambdaContainerHandler.getObjectMapper().readValue(BASE_PROXY_REQUEST, + HttpApiV2ProxyRequest.class); assertTrue(req.getRequestContext().getAuthorizer().getJwtAuthorizer().getClaims().containsKey("claim1")); assertEquals(2, req.getRequestContext().getAuthorizer().getJwtAuthorizer().getScopes().size()); assertEquals(RequestSource.API_GATEWAY, req.getRequestSource()); @@ -146,10 +190,12 @@ void deserialize_fromJsonString_authorizerPopulatedCorrectly() { @Test void deserialize_fromJsonString_authorizerEmptyMap() { try { - HttpApiV2ProxyRequest req = LambdaContainerHandler.getObjectMapper().readValue(NO_AUTH_PROXY, HttpApiV2ProxyRequest.class); + HttpApiV2ProxyRequest req = LambdaContainerHandler.getObjectMapper().readValue(NO_AUTH_PROXY, + HttpApiV2ProxyRequest.class); assertNotNull(req.getRequestContext().getAuthorizer()); assertFalse(req.getRequestContext().getAuthorizer().isJwt()); assertFalse(req.getRequestContext().getAuthorizer().isLambda()); + assertFalse(req.getRequestContext().getAuthorizer().isIam()); } catch (JsonProcessingException e) { e.printStackTrace(); fail("Exception while parsing request" + e.getMessage()); @@ -159,7 +205,8 @@ void deserialize_fromJsonString_authorizerEmptyMap() { @Test void deserialize_fromJsonString_lambdaAuthorizer() { try { - HttpApiV2ProxyRequest req = LambdaContainerHandler.getObjectMapper().readValue(LAMBDA_AUTHORIZER, HttpApiV2ProxyRequest.class); + HttpApiV2ProxyRequest req = LambdaContainerHandler.getObjectMapper().readValue(LAMBDA_AUTHORIZER, + HttpApiV2ProxyRequest.class); assertNotNull(req.getRequestContext().getAuthorizer()); assertFalse(req.getRequestContext().getAuthorizer().isJwt()); assertTrue(req.getRequestContext().getAuthorizer().isLambda()); @@ -171,10 +218,38 @@ void deserialize_fromJsonString_lambdaAuthorizer() { } } + @Test + void deserialize_fromJsonString_iamAuthorizer() { + try { + HttpApiV2ProxyRequest req = LambdaContainerHandler.getObjectMapper().readValue(IAM_AUTHORIZER, + HttpApiV2ProxyRequest.class); + assertNotNull(req.getRequestContext().getAuthorizer()); + assertFalse(req.getRequestContext().getAuthorizer().isJwt()); + assertFalse(req.getRequestContext().getAuthorizer().isLambda()); + assertTrue(req.getRequestContext().getAuthorizer().isIam()); + assertEquals("AKIAIOSFODNN7EXAMPLE", + req.getRequestContext().getAuthorizer().getIamAuthorizer().getAccessKey()); + assertEquals("123456789012", req.getRequestContext().getAuthorizer().getIamAuthorizer().getAccountId()); + assertEquals("AIDACKCEVSQ6C2EXAMPLE", + req.getRequestContext().getAuthorizer().getIamAuthorizer().getCallerId()); + assertNull(req.getRequestContext().getAuthorizer().getIamAuthorizer().getCognitoIdentity()); + assertEquals("AIDACKCEVSQORGEXAMPLE", + req.getRequestContext().getAuthorizer().getIamAuthorizer().getPrincipalOrgId()); + assertEquals("arn:aws:iam::111122223333:user/example-user", + req.getRequestContext().getAuthorizer().getIamAuthorizer().getUserArn()); + assertEquals("AIDACOSFODNN7EXAMPLE2", + req.getRequestContext().getAuthorizer().getIamAuthorizer().getUserId()); + } catch (JsonProcessingException e) { + e.printStackTrace(); + fail("Exception while parsing request" + e.getMessage()); + } + } + @Test void deserialize_fromJsonString_isBase64EncodedPopulates() { try { - HttpApiV2ProxyRequest req = LambdaContainerHandler.getObjectMapper().readValue(BASE_PROXY_REQUEST, HttpApiV2ProxyRequest.class); + HttpApiV2ProxyRequest req = LambdaContainerHandler.getObjectMapper().readValue(BASE_PROXY_REQUEST, + HttpApiV2ProxyRequest.class); assertFalse(req.isBase64Encoded()); req = LambdaContainerHandler.getObjectMapper().readValue(NO_AUTH_PROXY, HttpApiV2ProxyRequest.class); assertTrue(req.isBase64Encoded()); @@ -207,4 +282,4 @@ void serialize_toJsonString_authorizerPopulatesCorrectly() { fail("Exception while serializing request" + e.getMessage()); } } -} +} \ No newline at end of file From 79f2f49dbe9327de203921aeac75c330af678ffa Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Apr 2024 04:16:00 +0000 Subject: [PATCH 607/888] chore(deps): bump org.owasp:dependency-check-maven from 9.0.10 to 9.1.0 Bumps [org.owasp:dependency-check-maven](https://github.com/jeremylong/DependencyCheck) from 9.0.10 to 9.1.0. - [Release notes](https://github.com/jeremylong/DependencyCheck/releases) - [Changelog](https://github.com/jeremylong/DependencyCheck/blob/main/CHANGELOG.md) - [Commits](https://github.com/jeremylong/DependencyCheck/compare/v9.0.10...v9.1.0) --- updated-dependencies: - dependency-name: org.owasp:dependency-check-maven dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 5e81487ec..44a8ad306 100644 --- a/pom.xml +++ b/pom.xml @@ -77,7 +77,7 @@ 0.7 - 9.0.10 + 9.1.0 2.17.0 2.0.12 5.10.2 From 1469b1dc11a86f1a6a3b0a0f21db590df300fbc8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Apr 2024 04:16:19 +0000 Subject: [PATCH 608/888] chore(deps): bump org.apache.maven.plugins:maven-gpg-plugin Bumps [org.apache.maven.plugins:maven-gpg-plugin](https://github.com/apache/maven-gpg-plugin) from 3.2.1 to 3.2.2. - [Release notes](https://github.com/apache/maven-gpg-plugin/releases) - [Commits](https://github.com/apache/maven-gpg-plugin/compare/maven-gpg-plugin-3.2.1...maven-gpg-plugin-3.2.2) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-gpg-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 5e81487ec..13e6daf65 100644 --- a/pom.xml +++ b/pom.xml @@ -292,7 +292,7 @@ org.apache.maven.plugins maven-gpg-plugin - 3.2.1 + 3.2.2 sign-artifacts From 82340e139f6f23cff101960bb462a56ef7bbb036 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Thu, 4 Apr 2024 15:09:35 +0200 Subject: [PATCH 609/888] chore(deps): Update to spring-cloud-function-serverless-web 4.1.1 release --- aws-serverless-java-container-springboot3/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index def9c9015..50a4f5422 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -25,7 +25,7 @@ org.springframework.cloud spring-cloud-function-serverless-web - 4.1.1-SNAPSHOT + 4.1.1 com.amazonaws.serverless From 2d3174cfd300f061f9ddd0b44d317a3d90b7bd93 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Thu, 4 Apr 2024 15:20:48 +0200 Subject: [PATCH 610/888] fix: Reinitialization of Spring context when using SnapStart #805 --- .../proxy/AsyncInitializationWrapper.java | 14 +++----- .../proxy/InitializationTypeHelper.java | 33 +++++++++++++++++++ ...pringDelegatingLambdaContainerHandler.java | 4 +-- 3 files changed, 40 insertions(+), 11 deletions(-) create mode 100644 aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/InitializationTypeHelper.java diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/AsyncInitializationWrapper.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/AsyncInitializationWrapper.java index 57f4e8a06..12e1590ab 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/AsyncInitializationWrapper.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/AsyncInitializationWrapper.java @@ -41,17 +41,13 @@ public class AsyncInitializationWrapper extends InitializationWrapper { private static final int DEFAULT_INIT_GRACE_TIME_MS = 150; private static final String INIT_GRACE_TIME_ENVIRONMENT_VARIABLE_NAME = "AWS_SERVERLESS_JAVA_CONTAINER_INIT_GRACE_TIME"; - private static final String INITIALIZATION_TYPE_ENVIRONMENT_VARIABLE_NAME = "AWS_LAMBDA_INITIALIZATION_TYPE"; - private static final String INITIALIZATION_TYPE_ON_DEMAND = "on-demand"; - private static final String INITIALIZATION_TYPE = System.getenv().getOrDefault(INITIALIZATION_TYPE_ENVIRONMENT_VARIABLE_NAME,INITIALIZATION_TYPE_ON_DEMAND); - private static final boolean ASYNC_INIT_DISABLED = !INITIALIZATION_TYPE.equals(INITIALIZATION_TYPE_ON_DEMAND); private static final int INIT_GRACE_TIME_MS = Integer.parseInt(System.getenv().getOrDefault( INIT_GRACE_TIME_ENVIRONMENT_VARIABLE_NAME, Integer.toString(DEFAULT_INIT_GRACE_TIME_MS))); private static final int LAMBDA_MAX_INIT_TIME_MS = 10_000; private CountDownLatch initializationLatch; private final long actualStartTime; - private Logger log = LoggerFactory.getLogger(AsyncInitializationWrapper.class); + private final Logger log = LoggerFactory.getLogger(AsyncInitializationWrapper.class); /** @@ -73,8 +69,8 @@ public AsyncInitializationWrapper() { @Override public void start(InitializableLambdaContainerHandler handler) throws ContainerInitializationException { - if(ASYNC_INIT_DISABLED){ - log.info("Async init disabled due to \"{}\" initialization", INITIALIZATION_TYPE); + if (InitializationTypeHelper.isAsyncInitializationDisabled()){ + log.info("Async init disabled due to \"{}\" initialization", InitializationTypeHelper.getInitializationType()); super.start(handler); return; } @@ -107,7 +103,7 @@ public long getActualStartTimeMs() { @Override public CountDownLatch getInitializationLatch() { - if (ASYNC_INIT_DISABLED){ + if (InitializationTypeHelper.isAsyncInitializationDisabled()){ return super.getInitializationLatch(); } return initializationLatch; @@ -116,7 +112,7 @@ public CountDownLatch getInitializationLatch() { private static class AsyncInitializer implements Runnable { private final InitializableLambdaContainerHandler handler; private CountDownLatch initLatch; - private Logger log = LoggerFactory.getLogger(AsyncInitializationWrapper.class); + private final Logger log = LoggerFactory.getLogger(AsyncInitializationWrapper.class); AsyncInitializer(CountDownLatch latch, InitializableLambdaContainerHandler h) { initLatch = latch; diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/InitializationTypeHelper.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/InitializationTypeHelper.java new file mode 100644 index 000000000..c40c5ecca --- /dev/null +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/InitializationTypeHelper.java @@ -0,0 +1,33 @@ +/* + * Copyright 2024 Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance + * with the License. A copy of the License is located at + * + * http://aws.amazon.com/apache2.0/ + * + * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.proxy; + +/** + * Utility class that helps determine the initialization type + */ +public final class InitializationTypeHelper { + + private static final String INITIALIZATION_TYPE_ENVIRONMENT_VARIABLE_NAME = "AWS_LAMBDA_INITIALIZATION_TYPE"; + private static final String INITIALIZATION_TYPE_ON_DEMAND = "on-demand"; + private static final String INITIALIZATION_TYPE = System.getenv().getOrDefault(INITIALIZATION_TYPE_ENVIRONMENT_VARIABLE_NAME, + INITIALIZATION_TYPE_ON_DEMAND); + private static final boolean ASYNC_INIT_DISABLED = !INITIALIZATION_TYPE.equals(INITIALIZATION_TYPE_ON_DEMAND); + + public static boolean isAsyncInitializationDisabled() { + return ASYNC_INIT_DISABLED; + } + + public static String getInitializationType() { + return INITIALIZATION_TYPE; + } +} diff --git a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/SpringDelegatingLambdaContainerHandler.java b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/SpringDelegatingLambdaContainerHandler.java index 56ebe8305..1af435c0f 100644 --- a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/SpringDelegatingLambdaContainerHandler.java +++ b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/SpringDelegatingLambdaContainerHandler.java @@ -4,6 +4,7 @@ import java.io.InputStream; import java.io.OutputStream; +import com.amazonaws.serverless.proxy.InitializationTypeHelper; import com.amazonaws.serverless.proxy.model.AwsProxyResponse; import org.springframework.cloud.function.serverless.web.FunctionClassUtils; import org.springframework.cloud.function.serverless.web.ServerlessMVC; @@ -53,8 +54,7 @@ public SpringDelegatingLambdaContainerHandler() { public SpringDelegatingLambdaContainerHandler(Class... startupClasses) { this.startupClasses = startupClasses; this.mvc = ServerlessMVC.INSTANCE(this.startupClasses); - if (System.getenv().containsKey("AWS_LAMBDA_INITIALIZATION_TYPE") - && System.getenv().get("AWS_LAMBDA_INITIALIZATION_TYPE").equals("snap-start")) { + if (InitializationTypeHelper.isAsyncInitializationDisabled()) { mvc.waitForContext(); } this.mapper = new ObjectMapper(); From c0551dd0f752ef05bd90fcad86e8413c7dd86ee4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Apr 2024 04:57:30 +0000 Subject: [PATCH 611/888] chore(deps): bump org.jacoco:jacoco-maven-plugin from 0.8.11 to 0.8.12 Bumps [org.jacoco:jacoco-maven-plugin](https://github.com/jacoco/jacoco) from 0.8.11 to 0.8.12. - [Release notes](https://github.com/jacoco/jacoco/releases) - [Commits](https://github.com/jacoco/jacoco/compare/v0.8.11...v0.8.12) --- updated-dependencies: - dependency-name: org.jacoco:jacoco-maven-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 52d0f19a7..59a1c2f2f 100644 --- a/pom.xml +++ b/pom.xml @@ -278,7 +278,7 @@ org.jacoco jacoco-maven-plugin - 0.8.11 + 0.8.12 From 07ade4bd8eaefee50e3757e6e6aa282da4ae883b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Apr 2024 04:57:33 +0000 Subject: [PATCH 612/888] chore(deps): bump org.apache.maven.plugins:maven-source-plugin Bumps [org.apache.maven.plugins:maven-source-plugin](https://github.com/apache/maven-source-plugin) from 3.3.0 to 3.3.1. - [Commits](https://github.com/apache/maven-source-plugin/compare/maven-source-plugin-3.3.0...maven-source-plugin-3.3.1) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-source-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 52d0f19a7..d0a5c5586 100644 --- a/pom.xml +++ b/pom.xml @@ -318,7 +318,7 @@ org.apache.maven.plugins maven-source-plugin - 3.3.0 + 3.3.1 attach-sources From 928cd123be1424dda9eaae6b898faa12ea80b8e5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Apr 2024 04:57:39 +0000 Subject: [PATCH 613/888] chore(deps): bump com.github.spotbugs:spotbugs-annotations Bumps [com.github.spotbugs:spotbugs-annotations](https://github.com/spotbugs/spotbugs) from 4.8.3 to 4.8.4. - [Release notes](https://github.com/spotbugs/spotbugs/releases) - [Changelog](https://github.com/spotbugs/spotbugs/blob/master/CHANGELOG.md) - [Commits](https://github.com/spotbugs/spotbugs/compare/4.8.3...4.8.4) --- updated-dependencies: - dependency-name: com.github.spotbugs:spotbugs-annotations dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 52d0f19a7..453be633c 100644 --- a/pom.xml +++ b/pom.xml @@ -140,7 +140,7 @@ com.github.spotbugs spotbugs-annotations - 4.8.3 + 4.8.4 provided From 1ad9d575ba53ad322fea7a9b59e4a08ad3e54cc3 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 8 Apr 2024 09:23:58 +0200 Subject: [PATCH 614/888] chore(deps): Update Jersey to 3.1.6 --- aws-serverless-java-container-jersey/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 4 ++-- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/jersey/pet-store/build.gradle | 4 ++-- samples/jersey/pet-store/pom.xml | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index 683ff7e7c..f93cee62a 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -16,7 +16,7 @@ - 3.1.5 + 3.1.6 diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle index d4a6549ba..9bcd5f819 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle @@ -11,13 +11,13 @@ dependencies { 'com.fasterxml.jackson.core:jackson-databind:2.17.0', ) - implementation("org.glassfish.jersey.media:jersey-media-json-jackson:3.1.5") { + implementation("org.glassfish.jersey.media:jersey-media-json-jackson:3.1.6") { exclude group: 'com.fasterxml.jackson.core', module: "jackson-annotations" exclude group: 'com.fasterxml.jackson.core', module: "jackson-databind" exclude group: 'com.fasterxml.jackson.core', module: "jackson-core" } - implementation("org.glassfish.jersey.inject:jersey-hk2:3.1.5") { + implementation("org.glassfish.jersey.inject:jersey-hk2:3.1.6") { exclude group: 'javax.inject', module: "javax.inject" } diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml index a6defc76a..54654aeef 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml @@ -15,7 +15,7 @@ 1.8 1.8 - 3.1.5 + 3.1.6 2.17.0 5.10.2 diff --git a/samples/jersey/pet-store/build.gradle b/samples/jersey/pet-store/build.gradle index 9d9b88465..04755d37f 100644 --- a/samples/jersey/pet-store/build.gradle +++ b/samples/jersey/pet-store/build.gradle @@ -11,13 +11,13 @@ dependencies { 'com.fasterxml.jackson.core:jackson-databind:2.17.0', ) - implementation("org.glassfish.jersey.media:jersey-media-json-jackson:3.1.5") { + implementation("org.glassfish.jersey.media:jersey-media-json-jackson:3.1.6") { exclude group: 'com.fasterxml.jackson.core', module: "jackson-annotations" exclude group: 'com.fasterxml.jackson.core', module: "jackson-databind" exclude group: 'com.fasterxml.jackson.core', module: "jackson-core" } - implementation("org.glassfish.jersey.inject:jersey-hk2:3.1.5") { + implementation("org.glassfish.jersey.inject:jersey-hk2:3.1.6") { exclude group: 'javax.inject', module: "javax.inject" } } diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index 6c7b1ed50..5bf6da30d 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -26,7 +26,7 @@ 1.8 1.8 - 3.1.5 + 3.1.6 2.17.0 From efd68be7438b99bf8071515789f6582e108dd61f Mon Sep 17 00:00:00 2001 From: deki Date: Mon, 8 Apr 2024 08:41:37 +0000 Subject: [PATCH 615/888] chore: release - prepare release aws-serverless-java-container-2.0.1 --- aws-serverless-java-container-core/pom.xml | 4 ++-- aws-serverless-java-container-jersey/pom.xml | 8 ++++---- aws-serverless-java-container-spring/pom.xml | 8 ++++---- aws-serverless-java-container-springboot3/pom.xml | 8 ++++---- aws-serverless-jersey-archetype/pom.xml | 6 +++--- aws-serverless-spring-archetype/pom.xml | 6 +++--- aws-serverless-springboot3-archetype/pom.xml | 6 +++--- pom.xml | 4 ++-- 8 files changed, 25 insertions(+), 25 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 05e2f75d9..0e9c9e65f 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Core Allows Java applications written for a servlet container to run in AWS Lambda https://aws.amazon.com/lambda - 2.1.0-SNAPSHOT + 2.0.1 com.amazonaws.serverless aws-serverless-java-container - 2.1.0-SNAPSHOT + 2.0.1 .. diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index f93cee62a..95ae04d52 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Jersey implementation Allows Java applications written for Jersey to run in AWS Lambda https://aws.amazon.com/lambda - 2.1.0-SNAPSHOT + 2.0.1 com.amazonaws.serverless aws-serverless-java-container - 2.1.0-SNAPSHOT + 2.0.1 .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.1.0-SNAPSHOT + 2.0.1 com.fasterxml.jackson.core @@ -35,7 +35,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.1.0-SNAPSHOT + 2.0.1 tests test-jar test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 665470224..129a280b3 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spring implementation Allows Java applications written for the Spring framework to run in AWS Lambda https://aws.amazon.com/lambda - 2.1.0-SNAPSHOT + 2.0.1 com.amazonaws.serverless aws-serverless-java-container - 2.1.0-SNAPSHOT + 2.0.1 .. @@ -25,12 +25,12 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.1.0-SNAPSHOT + 2.0.1 com.amazonaws.serverless aws-serverless-java-container-core - 2.1.0-SNAPSHOT + 2.0.1 tests test-jar test diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index 50a4f5422..b0192475c 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -3,7 +3,7 @@ aws-serverless-java-container com.amazonaws.serverless - 2.1.0-SNAPSHOT + 2.0.1 4.0.0 @@ -12,7 +12,7 @@ AWS Serverless Java container support - SpringBoot 3 implementation Allows Java applications written for SpringBoot 3 to run in AWS Lambda https://aws.amazon.com/lambda - 2.1.0-SNAPSHOT + 2.0.1 6.1.5 @@ -30,12 +30,12 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.1.0-SNAPSHOT + 2.0.1 com.amazonaws.serverless aws-serverless-java-container-core - 2.1.0-SNAPSHOT + 2.0.1 tests test-jar test diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index f4ae15675..186b23a2f 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.1.0-SNAPSHOT + 2.0.1 com.amazonaws.serverless.archetypes aws-serverless-jersey-archetype - 2.1.0-SNAPSHOT + 2.0.1 maven-archetype https://github.com/aws/serverless-java-container.git - HEAD + aws-serverless-java-container-2.0.1 diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index 07c5e4e90..77bec6e3f 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.1.0-SNAPSHOT + 2.0.1 com.amazonaws.serverless.archetypes aws-serverless-spring-archetype - 2.1.0-SNAPSHOT + 2.0.1 maven-archetype https://github.com/aws/serverless-java-container.git - HEAD + aws-serverless-java-container-2.0.1 diff --git a/aws-serverless-springboot3-archetype/pom.xml b/aws-serverless-springboot3-archetype/pom.xml index a1057f354..efde5bb27 100644 --- a/aws-serverless-springboot3-archetype/pom.xml +++ b/aws-serverless-springboot3-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.1.0-SNAPSHOT + 2.0.1 com.amazonaws.serverless.archetypes aws-serverless-springboot3-archetype - 2.1.0-SNAPSHOT + 2.0.1 maven-archetype https://github.com/aws/serverless-java-container.git - HEAD + aws-serverless-java-container-2.0.1 diff --git a/pom.xml b/pom.xml index 24d8afe19..836490d0e 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazonaws.serverless aws-serverless-java-container pom - 2.1.0-SNAPSHOT + 2.0.1 AWS Serverless Java container A Java framework to run Spring, Spring Boot, Jersey, Spark, and Struts applications inside AWS Lambda https://github.com/aws/serverless-java-container @@ -37,7 +37,7 @@ https://github.com/aws/serverless-java-container scm:git:https://github.com/aws/serverless-java-container.git - HEAD + aws-serverless-java-container-2.0.1 From cec132c75e5f64b54c7c98abffd22cec69d6a36c Mon Sep 17 00:00:00 2001 From: deki Date: Mon, 8 Apr 2024 08:41:38 +0000 Subject: [PATCH 616/888] chore: release - prepare for next development iteration --- aws-serverless-java-container-core/pom.xml | 4 ++-- aws-serverless-java-container-jersey/pom.xml | 8 ++++---- aws-serverless-java-container-spring/pom.xml | 8 ++++---- aws-serverless-java-container-springboot3/pom.xml | 8 ++++---- aws-serverless-jersey-archetype/pom.xml | 6 +++--- aws-serverless-spring-archetype/pom.xml | 6 +++--- aws-serverless-springboot3-archetype/pom.xml | 6 +++--- pom.xml | 4 ++-- 8 files changed, 25 insertions(+), 25 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 0e9c9e65f..05e2f75d9 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Core Allows Java applications written for a servlet container to run in AWS Lambda https://aws.amazon.com/lambda - 2.0.1 + 2.1.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 2.0.1 + 2.1.0-SNAPSHOT .. diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index 95ae04d52..f93cee62a 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Jersey implementation Allows Java applications written for Jersey to run in AWS Lambda https://aws.amazon.com/lambda - 2.0.1 + 2.1.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 2.0.1 + 2.1.0-SNAPSHOT .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.0.1 + 2.1.0-SNAPSHOT com.fasterxml.jackson.core @@ -35,7 +35,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.0.1 + 2.1.0-SNAPSHOT tests test-jar test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 129a280b3..665470224 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spring implementation Allows Java applications written for the Spring framework to run in AWS Lambda https://aws.amazon.com/lambda - 2.0.1 + 2.1.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 2.0.1 + 2.1.0-SNAPSHOT .. @@ -25,12 +25,12 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.0.1 + 2.1.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container-core - 2.0.1 + 2.1.0-SNAPSHOT tests test-jar test diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index b0192475c..50a4f5422 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -3,7 +3,7 @@ aws-serverless-java-container com.amazonaws.serverless - 2.0.1 + 2.1.0-SNAPSHOT 4.0.0 @@ -12,7 +12,7 @@ AWS Serverless Java container support - SpringBoot 3 implementation Allows Java applications written for SpringBoot 3 to run in AWS Lambda https://aws.amazon.com/lambda - 2.0.1 + 2.1.0-SNAPSHOT 6.1.5 @@ -30,12 +30,12 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.0.1 + 2.1.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container-core - 2.0.1 + 2.1.0-SNAPSHOT tests test-jar test diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index 186b23a2f..f4ae15675 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.0.1 + 2.1.0-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-jersey-archetype - 2.0.1 + 2.1.0-SNAPSHOT maven-archetype https://github.com/aws/serverless-java-container.git - aws-serverless-java-container-2.0.1 + HEAD diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index 77bec6e3f..07c5e4e90 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.0.1 + 2.1.0-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-spring-archetype - 2.0.1 + 2.1.0-SNAPSHOT maven-archetype https://github.com/aws/serverless-java-container.git - aws-serverless-java-container-2.0.1 + HEAD diff --git a/aws-serverless-springboot3-archetype/pom.xml b/aws-serverless-springboot3-archetype/pom.xml index efde5bb27..a1057f354 100644 --- a/aws-serverless-springboot3-archetype/pom.xml +++ b/aws-serverless-springboot3-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.0.1 + 2.1.0-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-springboot3-archetype - 2.0.1 + 2.1.0-SNAPSHOT maven-archetype https://github.com/aws/serverless-java-container.git - aws-serverless-java-container-2.0.1 + HEAD diff --git a/pom.xml b/pom.xml index 836490d0e..24d8afe19 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazonaws.serverless aws-serverless-java-container pom - 2.0.1 + 2.1.0-SNAPSHOT AWS Serverless Java container A Java framework to run Spring, Spring Boot, Jersey, Spark, and Struts applications inside AWS Lambda https://github.com/aws/serverless-java-container @@ -37,7 +37,7 @@ https://github.com/aws/serverless-java-container scm:git:https://github.com/aws/serverless-java-container.git - aws-serverless-java-container-2.0.1 + HEAD From aaacbc8f721fc3a0405904c5bcd0741964952fca Mon Sep 17 00:00:00 2001 From: deki Date: Mon, 8 Apr 2024 09:06:27 +0000 Subject: [PATCH 617/888] chore: release - prepare release aws-serverless-java-container-2.0.1 --- aws-serverless-java-container-core/pom.xml | 4 ++-- aws-serverless-java-container-jersey/pom.xml | 8 ++++---- aws-serverless-java-container-spring/pom.xml | 8 ++++---- aws-serverless-java-container-springboot3/pom.xml | 8 ++++---- aws-serverless-jersey-archetype/pom.xml | 6 +++--- aws-serverless-spring-archetype/pom.xml | 6 +++--- aws-serverless-springboot3-archetype/pom.xml | 6 +++--- pom.xml | 4 ++-- 8 files changed, 25 insertions(+), 25 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 05e2f75d9..0e9c9e65f 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Core Allows Java applications written for a servlet container to run in AWS Lambda https://aws.amazon.com/lambda - 2.1.0-SNAPSHOT + 2.0.1 com.amazonaws.serverless aws-serverless-java-container - 2.1.0-SNAPSHOT + 2.0.1 .. diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index f93cee62a..95ae04d52 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Jersey implementation Allows Java applications written for Jersey to run in AWS Lambda https://aws.amazon.com/lambda - 2.1.0-SNAPSHOT + 2.0.1 com.amazonaws.serverless aws-serverless-java-container - 2.1.0-SNAPSHOT + 2.0.1 .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.1.0-SNAPSHOT + 2.0.1 com.fasterxml.jackson.core @@ -35,7 +35,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.1.0-SNAPSHOT + 2.0.1 tests test-jar test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 665470224..129a280b3 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spring implementation Allows Java applications written for the Spring framework to run in AWS Lambda https://aws.amazon.com/lambda - 2.1.0-SNAPSHOT + 2.0.1 com.amazonaws.serverless aws-serverless-java-container - 2.1.0-SNAPSHOT + 2.0.1 .. @@ -25,12 +25,12 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.1.0-SNAPSHOT + 2.0.1 com.amazonaws.serverless aws-serverless-java-container-core - 2.1.0-SNAPSHOT + 2.0.1 tests test-jar test diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index 50a4f5422..b0192475c 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -3,7 +3,7 @@ aws-serverless-java-container com.amazonaws.serverless - 2.1.0-SNAPSHOT + 2.0.1 4.0.0 @@ -12,7 +12,7 @@ AWS Serverless Java container support - SpringBoot 3 implementation Allows Java applications written for SpringBoot 3 to run in AWS Lambda https://aws.amazon.com/lambda - 2.1.0-SNAPSHOT + 2.0.1 6.1.5 @@ -30,12 +30,12 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.1.0-SNAPSHOT + 2.0.1 com.amazonaws.serverless aws-serverless-java-container-core - 2.1.0-SNAPSHOT + 2.0.1 tests test-jar test diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index f4ae15675..186b23a2f 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.1.0-SNAPSHOT + 2.0.1 com.amazonaws.serverless.archetypes aws-serverless-jersey-archetype - 2.1.0-SNAPSHOT + 2.0.1 maven-archetype https://github.com/aws/serverless-java-container.git - HEAD + aws-serverless-java-container-2.0.1 diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index 07c5e4e90..77bec6e3f 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.1.0-SNAPSHOT + 2.0.1 com.amazonaws.serverless.archetypes aws-serverless-spring-archetype - 2.1.0-SNAPSHOT + 2.0.1 maven-archetype https://github.com/aws/serverless-java-container.git - HEAD + aws-serverless-java-container-2.0.1 diff --git a/aws-serverless-springboot3-archetype/pom.xml b/aws-serverless-springboot3-archetype/pom.xml index a1057f354..efde5bb27 100644 --- a/aws-serverless-springboot3-archetype/pom.xml +++ b/aws-serverless-springboot3-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.1.0-SNAPSHOT + 2.0.1 com.amazonaws.serverless.archetypes aws-serverless-springboot3-archetype - 2.1.0-SNAPSHOT + 2.0.1 maven-archetype https://github.com/aws/serverless-java-container.git - HEAD + aws-serverless-java-container-2.0.1 diff --git a/pom.xml b/pom.xml index 24d8afe19..836490d0e 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazonaws.serverless aws-serverless-java-container pom - 2.1.0-SNAPSHOT + 2.0.1 AWS Serverless Java container A Java framework to run Spring, Spring Boot, Jersey, Spark, and Struts applications inside AWS Lambda https://github.com/aws/serverless-java-container @@ -37,7 +37,7 @@ https://github.com/aws/serverless-java-container scm:git:https://github.com/aws/serverless-java-container.git - HEAD + aws-serverless-java-container-2.0.1 From 38bbea7216e89733dc4612a74b0a7a0dc365188c Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 8 Apr 2024 11:18:17 +0200 Subject: [PATCH 618/888] chore: Set versions back to SNAPSHOT to rerun release build This reverts commit aaacbc8f721fc3a0405904c5bcd0741964952fca. --- aws-serverless-java-container-core/pom.xml | 4 ++-- aws-serverless-java-container-jersey/pom.xml | 8 ++++---- aws-serverless-java-container-spring/pom.xml | 8 ++++---- aws-serverless-java-container-springboot3/pom.xml | 8 ++++---- aws-serverless-jersey-archetype/pom.xml | 6 +++--- aws-serverless-spring-archetype/pom.xml | 6 +++--- aws-serverless-springboot3-archetype/pom.xml | 6 +++--- pom.xml | 4 ++-- 8 files changed, 25 insertions(+), 25 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 0e9c9e65f..05e2f75d9 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Core Allows Java applications written for a servlet container to run in AWS Lambda https://aws.amazon.com/lambda - 2.0.1 + 2.1.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 2.0.1 + 2.1.0-SNAPSHOT .. diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index 95ae04d52..f93cee62a 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Jersey implementation Allows Java applications written for Jersey to run in AWS Lambda https://aws.amazon.com/lambda - 2.0.1 + 2.1.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 2.0.1 + 2.1.0-SNAPSHOT .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.0.1 + 2.1.0-SNAPSHOT com.fasterxml.jackson.core @@ -35,7 +35,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.0.1 + 2.1.0-SNAPSHOT tests test-jar test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 129a280b3..665470224 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spring implementation Allows Java applications written for the Spring framework to run in AWS Lambda https://aws.amazon.com/lambda - 2.0.1 + 2.1.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 2.0.1 + 2.1.0-SNAPSHOT .. @@ -25,12 +25,12 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.0.1 + 2.1.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container-core - 2.0.1 + 2.1.0-SNAPSHOT tests test-jar test diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index b0192475c..50a4f5422 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -3,7 +3,7 @@ aws-serverless-java-container com.amazonaws.serverless - 2.0.1 + 2.1.0-SNAPSHOT 4.0.0 @@ -12,7 +12,7 @@ AWS Serverless Java container support - SpringBoot 3 implementation Allows Java applications written for SpringBoot 3 to run in AWS Lambda https://aws.amazon.com/lambda - 2.0.1 + 2.1.0-SNAPSHOT 6.1.5 @@ -30,12 +30,12 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.0.1 + 2.1.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container-core - 2.0.1 + 2.1.0-SNAPSHOT tests test-jar test diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index 186b23a2f..f4ae15675 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.0.1 + 2.1.0-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-jersey-archetype - 2.0.1 + 2.1.0-SNAPSHOT maven-archetype https://github.com/aws/serverless-java-container.git - aws-serverless-java-container-2.0.1 + HEAD diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index 77bec6e3f..07c5e4e90 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.0.1 + 2.1.0-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-spring-archetype - 2.0.1 + 2.1.0-SNAPSHOT maven-archetype https://github.com/aws/serverless-java-container.git - aws-serverless-java-container-2.0.1 + HEAD diff --git a/aws-serverless-springboot3-archetype/pom.xml b/aws-serverless-springboot3-archetype/pom.xml index efde5bb27..a1057f354 100644 --- a/aws-serverless-springboot3-archetype/pom.xml +++ b/aws-serverless-springboot3-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.0.1 + 2.1.0-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-springboot3-archetype - 2.0.1 + 2.1.0-SNAPSHOT maven-archetype https://github.com/aws/serverless-java-container.git - aws-serverless-java-container-2.0.1 + HEAD diff --git a/pom.xml b/pom.xml index 836490d0e..24d8afe19 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazonaws.serverless aws-serverless-java-container pom - 2.0.1 + 2.1.0-SNAPSHOT AWS Serverless Java container A Java framework to run Spring, Spring Boot, Jersey, Spark, and Struts applications inside AWS Lambda https://github.com/aws/serverless-java-container @@ -37,7 +37,7 @@ https://github.com/aws/serverless-java-container scm:git:https://github.com/aws/serverless-java-container.git - aws-serverless-java-container-2.0.1 + HEAD From df173dd113f3355769a5efd8f64ca8aad1075d88 Mon Sep 17 00:00:00 2001 From: deki Date: Mon, 8 Apr 2024 09:25:48 +0000 Subject: [PATCH 619/888] chore: release - prepare release aws-serverless-java-container-2.0.1 --- aws-serverless-java-container-core/pom.xml | 4 ++-- aws-serverless-java-container-jersey/pom.xml | 8 ++++---- aws-serverless-java-container-spring/pom.xml | 8 ++++---- aws-serverless-java-container-springboot3/pom.xml | 8 ++++---- aws-serverless-jersey-archetype/pom.xml | 6 +++--- aws-serverless-spring-archetype/pom.xml | 6 +++--- aws-serverless-springboot3-archetype/pom.xml | 6 +++--- pom.xml | 4 ++-- 8 files changed, 25 insertions(+), 25 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 05e2f75d9..0e9c9e65f 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Core Allows Java applications written for a servlet container to run in AWS Lambda https://aws.amazon.com/lambda - 2.1.0-SNAPSHOT + 2.0.1 com.amazonaws.serverless aws-serverless-java-container - 2.1.0-SNAPSHOT + 2.0.1 .. diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index f93cee62a..95ae04d52 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Jersey implementation Allows Java applications written for Jersey to run in AWS Lambda https://aws.amazon.com/lambda - 2.1.0-SNAPSHOT + 2.0.1 com.amazonaws.serverless aws-serverless-java-container - 2.1.0-SNAPSHOT + 2.0.1 .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.1.0-SNAPSHOT + 2.0.1 com.fasterxml.jackson.core @@ -35,7 +35,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.1.0-SNAPSHOT + 2.0.1 tests test-jar test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 665470224..129a280b3 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spring implementation Allows Java applications written for the Spring framework to run in AWS Lambda https://aws.amazon.com/lambda - 2.1.0-SNAPSHOT + 2.0.1 com.amazonaws.serverless aws-serverless-java-container - 2.1.0-SNAPSHOT + 2.0.1 .. @@ -25,12 +25,12 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.1.0-SNAPSHOT + 2.0.1 com.amazonaws.serverless aws-serverless-java-container-core - 2.1.0-SNAPSHOT + 2.0.1 tests test-jar test diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index 50a4f5422..b0192475c 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -3,7 +3,7 @@ aws-serverless-java-container com.amazonaws.serverless - 2.1.0-SNAPSHOT + 2.0.1 4.0.0 @@ -12,7 +12,7 @@ AWS Serverless Java container support - SpringBoot 3 implementation Allows Java applications written for SpringBoot 3 to run in AWS Lambda https://aws.amazon.com/lambda - 2.1.0-SNAPSHOT + 2.0.1 6.1.5 @@ -30,12 +30,12 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.1.0-SNAPSHOT + 2.0.1 com.amazonaws.serverless aws-serverless-java-container-core - 2.1.0-SNAPSHOT + 2.0.1 tests test-jar test diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index f4ae15675..186b23a2f 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.1.0-SNAPSHOT + 2.0.1 com.amazonaws.serverless.archetypes aws-serverless-jersey-archetype - 2.1.0-SNAPSHOT + 2.0.1 maven-archetype https://github.com/aws/serverless-java-container.git - HEAD + aws-serverless-java-container-2.0.1 diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index 07c5e4e90..77bec6e3f 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.1.0-SNAPSHOT + 2.0.1 com.amazonaws.serverless.archetypes aws-serverless-spring-archetype - 2.1.0-SNAPSHOT + 2.0.1 maven-archetype https://github.com/aws/serverless-java-container.git - HEAD + aws-serverless-java-container-2.0.1 diff --git a/aws-serverless-springboot3-archetype/pom.xml b/aws-serverless-springboot3-archetype/pom.xml index a1057f354..efde5bb27 100644 --- a/aws-serverless-springboot3-archetype/pom.xml +++ b/aws-serverless-springboot3-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.1.0-SNAPSHOT + 2.0.1 com.amazonaws.serverless.archetypes aws-serverless-springboot3-archetype - 2.1.0-SNAPSHOT + 2.0.1 maven-archetype https://github.com/aws/serverless-java-container.git - HEAD + aws-serverless-java-container-2.0.1 diff --git a/pom.xml b/pom.xml index 24d8afe19..836490d0e 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazonaws.serverless aws-serverless-java-container pom - 2.1.0-SNAPSHOT + 2.0.1 AWS Serverless Java container A Java framework to run Spring, Spring Boot, Jersey, Spark, and Struts applications inside AWS Lambda https://github.com/aws/serverless-java-container @@ -37,7 +37,7 @@ https://github.com/aws/serverless-java-container scm:git:https://github.com/aws/serverless-java-container.git - HEAD + aws-serverless-java-container-2.0.1 From 08c5069952b307bf8ac20a09b3c039d7eef94ba2 Mon Sep 17 00:00:00 2001 From: deki Date: Mon, 8 Apr 2024 09:25:50 +0000 Subject: [PATCH 620/888] chore: release - prepare for next development iteration --- aws-serverless-java-container-core/pom.xml | 4 ++-- aws-serverless-java-container-jersey/pom.xml | 8 ++++---- aws-serverless-java-container-spring/pom.xml | 8 ++++---- aws-serverless-java-container-springboot3/pom.xml | 8 ++++---- aws-serverless-jersey-archetype/pom.xml | 6 +++--- aws-serverless-spring-archetype/pom.xml | 6 +++--- aws-serverless-springboot3-archetype/pom.xml | 6 +++--- pom.xml | 4 ++-- 8 files changed, 25 insertions(+), 25 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 0e9c9e65f..05e2f75d9 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Core Allows Java applications written for a servlet container to run in AWS Lambda https://aws.amazon.com/lambda - 2.0.1 + 2.1.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 2.0.1 + 2.1.0-SNAPSHOT .. diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index 95ae04d52..f93cee62a 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Jersey implementation Allows Java applications written for Jersey to run in AWS Lambda https://aws.amazon.com/lambda - 2.0.1 + 2.1.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 2.0.1 + 2.1.0-SNAPSHOT .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.0.1 + 2.1.0-SNAPSHOT com.fasterxml.jackson.core @@ -35,7 +35,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.0.1 + 2.1.0-SNAPSHOT tests test-jar test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 129a280b3..665470224 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spring implementation Allows Java applications written for the Spring framework to run in AWS Lambda https://aws.amazon.com/lambda - 2.0.1 + 2.1.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 2.0.1 + 2.1.0-SNAPSHOT .. @@ -25,12 +25,12 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.0.1 + 2.1.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container-core - 2.0.1 + 2.1.0-SNAPSHOT tests test-jar test diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index b0192475c..50a4f5422 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -3,7 +3,7 @@ aws-serverless-java-container com.amazonaws.serverless - 2.0.1 + 2.1.0-SNAPSHOT 4.0.0 @@ -12,7 +12,7 @@ AWS Serverless Java container support - SpringBoot 3 implementation Allows Java applications written for SpringBoot 3 to run in AWS Lambda https://aws.amazon.com/lambda - 2.0.1 + 2.1.0-SNAPSHOT 6.1.5 @@ -30,12 +30,12 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.0.1 + 2.1.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container-core - 2.0.1 + 2.1.0-SNAPSHOT tests test-jar test diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index 186b23a2f..f4ae15675 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.0.1 + 2.1.0-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-jersey-archetype - 2.0.1 + 2.1.0-SNAPSHOT maven-archetype https://github.com/aws/serverless-java-container.git - aws-serverless-java-container-2.0.1 + HEAD diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index 77bec6e3f..07c5e4e90 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.0.1 + 2.1.0-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-spring-archetype - 2.0.1 + 2.1.0-SNAPSHOT maven-archetype https://github.com/aws/serverless-java-container.git - aws-serverless-java-container-2.0.1 + HEAD diff --git a/aws-serverless-springboot3-archetype/pom.xml b/aws-serverless-springboot3-archetype/pom.xml index efde5bb27..a1057f354 100644 --- a/aws-serverless-springboot3-archetype/pom.xml +++ b/aws-serverless-springboot3-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.0.1 + 2.1.0-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-springboot3-archetype - 2.0.1 + 2.1.0-SNAPSHOT maven-archetype https://github.com/aws/serverless-java-container.git - aws-serverless-java-container-2.0.1 + HEAD diff --git a/pom.xml b/pom.xml index 836490d0e..24d8afe19 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazonaws.serverless aws-serverless-java-container pom - 2.0.1 + 2.1.0-SNAPSHOT AWS Serverless Java container A Java framework to run Spring, Spring Boot, Jersey, Spark, and Struts applications inside AWS Lambda https://github.com/aws/serverless-java-container @@ -37,7 +37,7 @@ https://github.com/aws/serverless-java-container scm:git:https://github.com/aws/serverless-java-container.git - aws-serverless-java-container-2.0.1 + HEAD From b0058d1914ecb67a15f62329d35ee3ef1d5b8339 Mon Sep 17 00:00:00 2001 From: mbfreder Date: Sun, 7 Apr 2024 22:01:27 -0700 Subject: [PATCH 621/888] fix remoteHost for ALB --- .../servlet/AwsProxyHttpServletRequest.java | 23 +++++++++++++++---- .../AwsProxyHttpServletRequestTest.java | 12 ++++++++++ .../testutils/AwsProxyRequestBuilder.java | 3 ++- 3 files changed, 33 insertions(+), 5 deletions(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java index 3e92d43dc..31fc7c2c8 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java @@ -21,13 +21,15 @@ import com.amazonaws.serverless.proxy.model.RequestSource; import com.amazonaws.services.lambda.runtime.Context; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import jakarta.servlet.*; -import jakarta.servlet.http.*; +import jakarta.servlet.http.Cookie; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpUpgradeHandler; import jakarta.ws.rs.core.HttpHeaders; import jakarta.ws.rs.core.SecurityContext; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.io.BufferedReader; import java.io.IOException; @@ -441,6 +443,13 @@ public String getRemoteAddr() { @Override public String getRemoteHost() { + if (Objects.nonNull(request.getRequestContext().getElb())) { + String host_header = request.getHeaders().get(HttpHeaders.HOST); + + // the host header has the form host:port, so we split the string to get the host part + return Arrays.asList(host_header.split(":")).get(0); + } + return request.getMultiValueHeaders().getFirst(HttpHeaders.HOST); } @@ -471,6 +480,12 @@ public RequestDispatcher getRequestDispatcher(String s) { @Override public int getRemotePort() { + if (Objects.nonNull(request.getRequestContext().getElb())) { + String hostHeader = request.getHeaders().get(HttpHeaders.HOST); + String port = Arrays.asList(hostHeader.split(":")).get(1); + if (Objects.nonNull(port)) + return Integer.parseInt(port); + } return 0; } diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestTest.java index 76507508b..45c38843e 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestTest.java @@ -651,6 +651,18 @@ void serverName_albHostHeader_returnsHostHeader() { assertEquals("testapi.us-east-1.elb.amazonaws.com", serverName); } + @Test + void getRemoteHost_albHostHeader_returnsHostHeader() { + initAwsProxyHttpServletRequestTest("ALB"); + AwsProxyRequest proxyReq = new AwsProxyRequestBuilder("/test", "GET") + .alb().build(); + proxyReq.getHeaders().put(HttpHeaders.HOST, "testapi.us-east-1.elb.amazonaws.com"); + HttpServletRequest servletRequest = new AwsProxyHttpServletRequest(proxyReq, null, null); + + String host = servletRequest.getRemoteHost(); + assertEquals("testapi.us-east-1.elb.amazonaws.com", host); + } + private AwsProxyRequestBuilder getRequestWithHeaders() { return new AwsProxyRequestBuilder("/hello", "GET") .header(CUSTOM_HEADER_KEY, CUSTOM_HEADER_VALUE) diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/testutils/AwsProxyRequestBuilder.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/testutils/AwsProxyRequestBuilder.java index 9df66a891..40f0ae7ad 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/testutils/AwsProxyRequestBuilder.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/testutils/AwsProxyRequestBuilder.java @@ -70,7 +70,8 @@ public AwsProxyRequestBuilder(AwsProxyRequest req) { public AwsProxyRequestBuilder(String path, String httpMethod) { this.request = new AwsProxyRequest(); - this.request.setMultiValueHeaders(new Headers()); // avoid NPE + this.request.setMultiValueHeaders(new Headers());// avoid NPE + this.request.setHeaders(new SingleValueHeaders()); this.request.setHttpMethod(httpMethod); this.request.setPath(path); this.request.setMultiValueQueryStringParameters(new MultiValuedTreeMap<>()); From e6e43077925566ec6ff3ba8ec354a49e7504f9c8 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Tue, 9 Apr 2024 08:34:04 +0200 Subject: [PATCH 622/888] Update README.md both 1.x and 2.x are ready for use in production --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index b88fb16db..9df70fdff 100644 --- a/README.md +++ b/README.md @@ -5,10 +5,10 @@ Serverless Java Container natively supports API Gateway's proxy integration mode Currently the following versions are maintained: -| Version | Branch | Java Enterprise support | Spring versions | JAX-RS/ Jersey version | Struts support | Spark support | -|--------------------------|--------|-------------------------|-----------------|------------------------|----------------|---------------| -| 1.x (stable) | [1.x](https://github.com/aws/serverless-java-container/tree/1.x) | Java EE (javax.*) | 5.x (Boot 2.x) | 2.x | :white_check_mark: | :white_check_mark: | -| 2.x (under development) | [main](https://github.com/aws/serverless-java-container/tree/main) | Jakarta EE (jakarta.*) | 6.x (Boot 3.x) | 3.x | :x: | :x: | +| Version | Branch | Java Enterprise support | Spring versions | JAX-RS/ Jersey version | Struts support | Spark support | +|---------|--------|-------------------------|-----------------|------------------------|----------------|---------------| +| 1.x | [1.x](https://github.com/aws/serverless-java-container/tree/1.x) | Java EE (javax.*) | 5.x (Boot 2.x) | 2.x | :white_check_mark: | :white_check_mark: | +| 2.x | [main](https://github.com/aws/serverless-java-container/tree/main) | Jakarta EE (jakarta.*) | 6.x (Boot 3.x) | 3.x | :x: | :x: | Follow the quick start guides in [our wiki](https://github.com/aws/serverless-java-container/wiki) to integrate Serverless Java Container with your project: * [Spring quick start](https://github.com/aws/serverless-java-container/wiki/Quick-start---Spring) @@ -58,4 +58,4 @@ public class StreamLambdaHandler implements RequestStreamHandler { ### Java samples with different frameworks -- [Dagger, Micronaut, Quarkus, Spring Boot](https://github.com/aws-samples/serverless-java-frameworks-samples/) \ No newline at end of file +- [Dagger, Micronaut, Quarkus, Spring Boot](https://github.com/aws-samples/serverless-java-frameworks-samples/) From 2e33b439a9e0bc0dd072c896816b88dea2bc5d94 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Apr 2024 04:14:45 +0000 Subject: [PATCH 623/888] chore(deps): bump com.amazonaws:aws-lambda-java-events Bumps [com.amazonaws:aws-lambda-java-events](https://github.com/aws/aws-lambda-java-libs) from 3.11.4 to 3.11.5. - [Commits](https://github.com/aws/aws-lambda-java-libs/commits) --- updated-dependencies: - dependency-name: com.amazonaws:aws-lambda-java-events dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- samples/springboot3/pet-store-native/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/springboot3/pet-store-native/pom.xml b/samples/springboot3/pet-store-native/pom.xml index ae5dbda1f..78e609c35 100644 --- a/samples/springboot3/pet-store-native/pom.xml +++ b/samples/springboot3/pet-store-native/pom.xml @@ -31,7 +31,7 @@ com.amazonaws aws-lambda-java-events - 3.11.4 + 3.11.5 com.amazonaws From 4076e132cb49fd01ae4a3934fd008fad7aa5911c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Apr 2024 04:43:10 +0000 Subject: [PATCH 624/888] chore(deps): bump com.github.spotbugs:spotbugs-maven-plugin Bumps [com.github.spotbugs:spotbugs-maven-plugin](https://github.com/spotbugs/spotbugs-maven-plugin) from 4.8.3.1 to 4.8.4.0. - [Release notes](https://github.com/spotbugs/spotbugs-maven-plugin/releases) - [Commits](https://github.com/spotbugs/spotbugs-maven-plugin/compare/spotbugs-maven-plugin-4.8.3.1...spotbugs-maven-plugin-4.8.4.0) --- updated-dependencies: - dependency-name: com.github.spotbugs:spotbugs-maven-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 24d8afe19..d1d11e878 100644 --- a/pom.xml +++ b/pom.xml @@ -249,7 +249,7 @@ com.github.spotbugs spotbugs-maven-plugin - 4.8.3.1 + 4.8.4.0 com.amazonaws.serverless.sample diff --git a/samples/springboot3/pet-store/build.gradle b/samples/springboot3/pet-store/build.gradle index 746782c86..0ddec053b 100644 --- a/samples/springboot3/pet-store/build.gradle +++ b/samples/springboot3/pet-store/build.gradle @@ -9,7 +9,7 @@ repositories { dependencies { implementation ( - implementation('org.springframework.boot:spring-boot-starter-web:3.2.4') { + implementation('org.springframework.boot:spring-boot-starter-web:3.2.5') { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat' }, 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:[2.0-SNAPSHOT,)', diff --git a/samples/springboot3/pet-store/pom.xml b/samples/springboot3/pet-store/pom.xml index a206581b2..10c186a02 100644 --- a/samples/springboot3/pet-store/pom.xml +++ b/samples/springboot3/pet-store/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 3.2.4 + 3.2.5 From 50121959b5b296c7580a58832aaf00117bd29083 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 22 Apr 2024 10:19:57 +0200 Subject: [PATCH 630/888] chore(deps): Update maven-jar-plugin to 3.4.1 --- aws-serverless-java-container-core/pom.xml | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- pom.xml | 2 +- samples/jersey/pet-store/pom.xml | 2 +- samples/spring/pet-store/pom.xml | 2 +- samples/springboot3/alt-pet-store/pom.xml | 2 +- samples/springboot3/graphql-pet-store/pom.xml | 2 +- samples/springboot3/pet-store/pom.xml | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 9d002fb71..a6278f9e3 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -70,7 +70,7 @@ org.apache.maven.plugins maven-jar-plugin - 3.4.0 + 3.4.1 diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml index 8c5384dbf..a28137a87 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml @@ -134,7 +134,7 @@ org.apache.maven.plugins maven-jar-plugin - 3.4.0 + 3.4.1 default-jar diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index f96559fd2..20222c7b5 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -157,7 +157,7 @@ org.apache.maven.plugins maven-jar-plugin - 3.4.0 + 3.4.1 default-jar diff --git a/pom.xml b/pom.xml index c53efed81..f7af293d0 100644 --- a/pom.xml +++ b/pom.xml @@ -216,7 +216,7 @@ org.apache.maven.plugins maven-jar-plugin - 3.4.0 + 3.4.1 org.apache.maven.plugins diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index 9964add6e..3914eba44 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -112,7 +112,7 @@ org.apache.maven.plugins maven-jar-plugin - 3.4.0 + 3.4.1 default-jar diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index 42499a766..b81b475ac 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -133,7 +133,7 @@ org.apache.maven.plugins maven-jar-plugin - 3.4.0 + 3.4.1 default-jar diff --git a/samples/springboot3/alt-pet-store/pom.xml b/samples/springboot3/alt-pet-store/pom.xml index 1a6c39059..0da1dcebc 100644 --- a/samples/springboot3/alt-pet-store/pom.xml +++ b/samples/springboot3/alt-pet-store/pom.xml @@ -83,7 +83,7 @@ org.apache.maven.plugins maven-jar-plugin - 3.4.0 + 3.4.1 default-jar diff --git a/samples/springboot3/graphql-pet-store/pom.xml b/samples/springboot3/graphql-pet-store/pom.xml index 15cef264c..5e5fd76ae 100644 --- a/samples/springboot3/graphql-pet-store/pom.xml +++ b/samples/springboot3/graphql-pet-store/pom.xml @@ -97,7 +97,7 @@ org.apache.maven.plugins maven-jar-plugin - 3.4.0 + 3.4.1 default-jar diff --git a/samples/springboot3/pet-store/pom.xml b/samples/springboot3/pet-store/pom.xml index 10c186a02..40120a6af 100644 --- a/samples/springboot3/pet-store/pom.xml +++ b/samples/springboot3/pet-store/pom.xml @@ -89,7 +89,7 @@ org.apache.maven.plugins maven-jar-plugin - 3.4.0 + 3.4.1 default-jar From 964a8dffdf7eb56020852d5986decefa1df0a4bf Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Tue, 23 Apr 2024 17:13:02 +0200 Subject: [PATCH 631/888] chore(deps): remove jakarta.el:jakarta.el-api test dependency definition --- aws-serverless-java-container-spring/pom.xml | 7 ------- 1 file changed, 7 deletions(-) diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index b24689e8a..103991c5d 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -84,13 +84,6 @@ test - - jakarta.el - jakarta.el-api - 5.0.1 - test - - org.glassfish.expressly expressly From 2005a5c13c7550facaa8f6e421f98afc952263e1 Mon Sep 17 00:00:00 2001 From: Oleg Zhurakousky Date: Thu, 25 Apr 2024 17:44:28 +0200 Subject: [PATCH 632/888] Uograde SCF to 4.1.2-SNAPSHOT --- aws-serverless-java-container-springboot3/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index 24c0a9c7c..61ccfb0f0 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -25,7 +25,7 @@ org.springframework.cloud spring-cloud-function-serverless-web - 4.1.1 + 4.1.2-SNAPSHOT com.amazonaws.serverless From 290bd1043c06888410d261fc2b0c6dc7941113f5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 29 Apr 2024 04:43:06 +0000 Subject: [PATCH 633/888] chore(deps): bump commons-codec:commons-codec from 1.16.1 to 1.17.0 Bumps [commons-codec:commons-codec](https://github.com/apache/commons-codec) from 1.16.1 to 1.17.0. - [Changelog](https://github.com/apache/commons-codec/blob/master/RELEASE-NOTES.txt) - [Commits](https://github.com/apache/commons-codec/compare/rel/commons-codec-1.16.1...rel/commons-codec-1.17.0) --- updated-dependencies: - dependency-name: commons-codec:commons-codec dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- aws-serverless-java-container-jersey/pom.xml | 2 +- aws-serverless-java-container-spring/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index f93cee62a..09f9205dc 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -64,7 +64,7 @@ commons-codec commons-codec - 1.16.1 + 1.17.0 test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 103991c5d..3c33400ac 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -53,7 +53,7 @@ commons-codec commons-codec - 1.16.1 + 1.17.0 test From 04a0e635e399c92ea0d22c80b8efd92e4530991b Mon Sep 17 00:00:00 2001 From: mbfreder Date: Sun, 28 Apr 2024 23:48:17 -0700 Subject: [PATCH 634/888] fix ArrayIndexOutOfBoundsException on getRemotePort() --- .../internal/servlet/AwsProxyHttpServletRequest.java | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java index 31fc7c2c8..063f71435 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java @@ -444,10 +444,10 @@ public String getRemoteAddr() { @Override public String getRemoteHost() { if (Objects.nonNull(request.getRequestContext().getElb())) { - String host_header = request.getHeaders().get(HttpHeaders.HOST); + String hostHeader = request.getHeaders().get(HttpHeaders.HOST); // the host header has the form host:port, so we split the string to get the host part - return Arrays.asList(host_header.split(":")).get(0); + return Arrays.asList(hostHeader.split(":")).get(0); } return request.getMultiValueHeaders().getFirst(HttpHeaders.HOST); @@ -481,10 +481,9 @@ public RequestDispatcher getRequestDispatcher(String s) { @Override public int getRemotePort() { if (Objects.nonNull(request.getRequestContext().getElb())) { - String hostHeader = request.getHeaders().get(HttpHeaders.HOST); - String port = Arrays.asList(hostHeader.split(":")).get(1); - if (Objects.nonNull(port)) - return Integer.parseInt(port); + String hostHeader = request.getHeaders().get(PORT_HEADER_NAME); + if (Objects.nonNull(hostHeader)) + return Integer.parseInt(hostHeader); } return 0; } From dbbb6611c79753815ed77f9493c42667dd6da929 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 29 Apr 2024 14:31:37 +0200 Subject: [PATCH 635/888] chore(deps): Update maven-shade-plugin to 3.5.3 --- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/jersey/pet-store/pom.xml | 2 +- samples/spring/pet-store/pom.xml | 2 +- samples/springboot3/alt-pet-store/pom.xml | 2 +- samples/springboot3/graphql-pet-store/pom.xml | 2 +- samples/springboot3/pet-store/pom.xml | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml index a28137a87..991ff68bf 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml @@ -107,7 +107,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.5.2 + 3.5.3 false diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index 20222c7b5..d93cc6cde 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -119,7 +119,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.5.2 + 3.5.3 package diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml index 0a9f1bc64..4afcfb58d 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml @@ -83,7 +83,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.5.2 + 3.5.3 false diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index 3914eba44..5fa5b867d 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -85,7 +85,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.5.2 + 3.5.3 false diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index b81b475ac..0900907a6 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -95,7 +95,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.5.2 + 3.5.3 package diff --git a/samples/springboot3/alt-pet-store/pom.xml b/samples/springboot3/alt-pet-store/pom.xml index 0da1dcebc..d5e2690d8 100644 --- a/samples/springboot3/alt-pet-store/pom.xml +++ b/samples/springboot3/alt-pet-store/pom.xml @@ -49,7 +49,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.5.2 + 3.5.3 false diff --git a/samples/springboot3/graphql-pet-store/pom.xml b/samples/springboot3/graphql-pet-store/pom.xml index 5e5fd76ae..ff513322a 100644 --- a/samples/springboot3/graphql-pet-store/pom.xml +++ b/samples/springboot3/graphql-pet-store/pom.xml @@ -63,7 +63,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.5.2 + 3.5.3 false diff --git a/samples/springboot3/pet-store/pom.xml b/samples/springboot3/pet-store/pom.xml index 40120a6af..5d267786e 100644 --- a/samples/springboot3/pet-store/pom.xml +++ b/samples/springboot3/pet-store/pom.xml @@ -55,7 +55,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.5.2 + 3.5.3 false From e7afb3fb23b72709a10110fdf72c3b6d22770da3 Mon Sep 17 00:00:00 2001 From: mbfreder Date: Mon, 29 Apr 2024 09:37:40 -0700 Subject: [PATCH 636/888] fix port header var naming --- .../proxy/internal/servlet/AwsProxyHttpServletRequest.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java index 063f71435..9a18fc8e5 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java @@ -481,9 +481,10 @@ public RequestDispatcher getRequestDispatcher(String s) { @Override public int getRemotePort() { if (Objects.nonNull(request.getRequestContext().getElb())) { - String hostHeader = request.getHeaders().get(PORT_HEADER_NAME); - if (Objects.nonNull(hostHeader)) - return Integer.parseInt(hostHeader); + String portHeader = request.getHeaders().get(PORT_HEADER_NAME); + if (Objects.nonNull(portHeader)) { + return Integer.parseInt(portHeader); + } } return 0; } From 46d96376daffc1159872d5ebad9e35c43b0df6f7 Mon Sep 17 00:00:00 2001 From: mbfreder Date: Mon, 29 Apr 2024 23:28:33 -0700 Subject: [PATCH 637/888] update getRomteAddr() --- .../proxy/internal/servlet/AwsHttpServletRequest.java | 1 + .../proxy/internal/servlet/AwsProxyHttpServletRequest.java | 3 +++ 2 files changed, 4 insertions(+) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java index d17270d98..b76fd216e 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java @@ -76,6 +76,7 @@ public abstract class AwsHttpServletRequest implements HttpServletRequest { static final String PROTOCOL_HEADER_NAME = "X-Forwarded-Proto"; static final String HOST_HEADER_NAME = "Host"; static final String PORT_HEADER_NAME = "X-Forwarded-Port"; + static final String CLIENT_IP_HEADER = "X-Forwarded-For"; //------------------------------------------------------------- diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java index 9a18fc8e5..17d04a57c 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java @@ -437,6 +437,9 @@ public String getRemoteAddr() { if (request.getRequestContext() == null || request.getRequestContext().getIdentity() == null) { return "127.0.0.1"; } + if (request.getRequestContext().getElb() != null) { + return request.getHeaders().get(CLIENT_IP_HEADER); + } return request.getRequestContext().getIdentity().getSourceIp(); } From 6fcdd4c0a73baf8669091ec57715fed6fcf3ed99 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 May 2024 04:46:13 +0000 Subject: [PATCH 638/888] chore(deps): bump com.github.spotbugs:spotbugs-maven-plugin Bumps [com.github.spotbugs:spotbugs-maven-plugin](https://github.com/spotbugs/spotbugs-maven-plugin) from 4.8.4.0 to 4.8.5.0. - [Release notes](https://github.com/spotbugs/spotbugs-maven-plugin/releases) - [Commits](https://github.com/spotbugs/spotbugs-maven-plugin/compare/spotbugs-maven-plugin-4.8.4.0...spotbugs-maven-plugin-4.8.5.0) --- updated-dependencies: - dependency-name: com.github.spotbugs:spotbugs-maven-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 89648fed0..683fc40dd 100644 --- a/pom.xml +++ b/pom.xml @@ -249,7 +249,7 @@ com.github.spotbugs spotbugs-maven-plugin - 4.8.4.0 + 4.8.5.0 com.amazonaws.serverless.sample diff --git a/samples/springboot3/pet-store/build.gradle b/samples/springboot3/pet-store/build.gradle index 0ddec053b..9a4987860 100644 --- a/samples/springboot3/pet-store/build.gradle +++ b/samples/springboot3/pet-store/build.gradle @@ -9,7 +9,7 @@ repositories { dependencies { implementation ( - implementation('org.springframework.boot:spring-boot-starter-web:3.2.5') { + implementation('org.springframework.boot:spring-boot-starter-web:3.2.6') { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat' }, 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:[2.0-SNAPSHOT,)', diff --git a/samples/springboot3/pet-store/pom.xml b/samples/springboot3/pet-store/pom.xml index 74479a1fa..2340a3664 100644 --- a/samples/springboot3/pet-store/pom.xml +++ b/samples/springboot3/pet-store/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 3.2.5 + 3.2.6 From 9d635d06f1fca980b20f6ec28826039b56b5bfb8 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 27 May 2024 12:55:43 +0200 Subject: [PATCH 648/888] chore(deps): Update Jersey dependency to 3.1.7 --- aws-serverless-java-container-jersey/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 4 ++-- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/jersey/pet-store/build.gradle | 4 ++-- samples/jersey/pet-store/pom.xml | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index 09f9205dc..757a84e7a 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -16,7 +16,7 @@ - 3.1.6 + 3.1.7 diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle index f0d0400c4..346ad59b9 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle @@ -11,13 +11,13 @@ dependencies { 'com.fasterxml.jackson.core:jackson-databind:2.17.1', ) - implementation("org.glassfish.jersey.media:jersey-media-json-jackson:3.1.6") { + implementation("org.glassfish.jersey.media:jersey-media-json-jackson:3.1.7") { exclude group: 'com.fasterxml.jackson.core', module: "jackson-annotations" exclude group: 'com.fasterxml.jackson.core', module: "jackson-databind" exclude group: 'com.fasterxml.jackson.core', module: "jackson-core" } - implementation("org.glassfish.jersey.inject:jersey-hk2:3.1.6") { + implementation("org.glassfish.jersey.inject:jersey-hk2:3.1.7") { exclude group: 'javax.inject', module: "javax.inject" } diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml index ead8bda1c..63fca8319 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml @@ -15,7 +15,7 @@ 1.8 1.8 - 3.1.6 + 3.1.7 2.17.1 5.10.2 diff --git a/samples/jersey/pet-store/build.gradle b/samples/jersey/pet-store/build.gradle index d74bbf0e6..086c66fcd 100644 --- a/samples/jersey/pet-store/build.gradle +++ b/samples/jersey/pet-store/build.gradle @@ -11,13 +11,13 @@ dependencies { 'com.fasterxml.jackson.core:jackson-databind:2.17.1', ) - implementation("org.glassfish.jersey.media:jersey-media-json-jackson:3.1.6") { + implementation("org.glassfish.jersey.media:jersey-media-json-jackson:3.1.7") { exclude group: 'com.fasterxml.jackson.core', module: "jackson-annotations" exclude group: 'com.fasterxml.jackson.core', module: "jackson-databind" exclude group: 'com.fasterxml.jackson.core', module: "jackson-core" } - implementation("org.glassfish.jersey.inject:jersey-hk2:3.1.6") { + implementation("org.glassfish.jersey.inject:jersey-hk2:3.1.7") { exclude group: 'javax.inject', module: "javax.inject" } } diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index b623ccc68..5348598aa 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -26,7 +26,7 @@ 1.8 1.8 - 3.1.6 + 3.1.7 2.17.1 From 0c7a6288ab46d71b276bbe11b15875dc551cac75 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 31 May 2024 08:29:34 +0200 Subject: [PATCH 649/888] chore(deps): Update spring-cloud-function-serverless-web to 4.1.2 --- aws-serverless-java-container-springboot3/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index 5a0019e54..4c669a8df 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -25,7 +25,7 @@ org.springframework.cloud spring-cloud-function-serverless-web - 4.1.2-SNAPSHOT + 4.1.2 com.amazonaws.serverless From e2c90ae37dd0eae055884ca62e3b8a7406acd80d Mon Sep 17 00:00:00 2001 From: deki Date: Fri, 31 May 2024 06:45:22 +0000 Subject: [PATCH 650/888] chore: release - prepare release aws-serverless-java-container-2.0.2 --- aws-serverless-java-container-core/pom.xml | 4 ++-- aws-serverless-java-container-jersey/pom.xml | 8 ++++---- aws-serverless-java-container-spring/pom.xml | 8 ++++---- aws-serverless-java-container-springboot3/pom.xml | 8 ++++---- aws-serverless-jersey-archetype/pom.xml | 6 +++--- aws-serverless-spring-archetype/pom.xml | 6 +++--- aws-serverless-springboot3-archetype/pom.xml | 6 +++--- pom.xml | 4 ++-- 8 files changed, 25 insertions(+), 25 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index a6278f9e3..096d79a07 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Core Allows Java applications written for a servlet container to run in AWS Lambda https://aws.amazon.com/lambda - 2.1.0-SNAPSHOT + 2.0.2 com.amazonaws.serverless aws-serverless-java-container - 2.1.0-SNAPSHOT + 2.0.2 .. diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index 757a84e7a..cf3446a56 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Jersey implementation Allows Java applications written for Jersey to run in AWS Lambda https://aws.amazon.com/lambda - 2.1.0-SNAPSHOT + 2.0.2 com.amazonaws.serverless aws-serverless-java-container - 2.1.0-SNAPSHOT + 2.0.2 .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.1.0-SNAPSHOT + 2.0.2 com.fasterxml.jackson.core @@ -35,7 +35,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.1.0-SNAPSHOT + 2.0.2 tests test-jar test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 8aa10630f..7a1e41c1b 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spring implementation Allows Java applications written for the Spring framework to run in AWS Lambda https://aws.amazon.com/lambda - 2.1.0-SNAPSHOT + 2.0.2 com.amazonaws.serverless aws-serverless-java-container - 2.1.0-SNAPSHOT + 2.0.2 .. @@ -25,12 +25,12 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.1.0-SNAPSHOT + 2.0.2 com.amazonaws.serverless aws-serverless-java-container-core - 2.1.0-SNAPSHOT + 2.0.2 tests test-jar test diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index 4c669a8df..d04b91a99 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -3,7 +3,7 @@ aws-serverless-java-container com.amazonaws.serverless - 2.1.0-SNAPSHOT + 2.0.2 4.0.0 @@ -12,7 +12,7 @@ AWS Serverless Java container support - SpringBoot 3 implementation Allows Java applications written for SpringBoot 3 to run in AWS Lambda https://aws.amazon.com/lambda - 2.1.0-SNAPSHOT + 2.0.2 6.1.8 @@ -30,12 +30,12 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.1.0-SNAPSHOT + 2.0.2 com.amazonaws.serverless aws-serverless-java-container-core - 2.1.0-SNAPSHOT + 2.0.2 tests test-jar test diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index f4ae15675..bdd7de91d 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.1.0-SNAPSHOT + 2.0.2 com.amazonaws.serverless.archetypes aws-serverless-jersey-archetype - 2.1.0-SNAPSHOT + 2.0.2 maven-archetype https://github.com/aws/serverless-java-container.git - HEAD + aws-serverless-java-container-2.0.2 diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index 07c5e4e90..39ca9e580 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.1.0-SNAPSHOT + 2.0.2 com.amazonaws.serverless.archetypes aws-serverless-spring-archetype - 2.1.0-SNAPSHOT + 2.0.2 maven-archetype https://github.com/aws/serverless-java-container.git - HEAD + aws-serverless-java-container-2.0.2 diff --git a/aws-serverless-springboot3-archetype/pom.xml b/aws-serverless-springboot3-archetype/pom.xml index a1057f354..845f1b622 100644 --- a/aws-serverless-springboot3-archetype/pom.xml +++ b/aws-serverless-springboot3-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.1.0-SNAPSHOT + 2.0.2 com.amazonaws.serverless.archetypes aws-serverless-springboot3-archetype - 2.1.0-SNAPSHOT + 2.0.2 maven-archetype https://github.com/aws/serverless-java-container.git - HEAD + aws-serverless-java-container-2.0.2 diff --git a/pom.xml b/pom.xml index b1c832040..b5f3a0b01 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazonaws.serverless aws-serverless-java-container pom - 2.1.0-SNAPSHOT + 2.0.2 AWS Serverless Java container A Java framework to run Spring, Spring Boot, Jersey, Spark, and Struts applications inside AWS Lambda https://github.com/aws/serverless-java-container @@ -37,7 +37,7 @@ https://github.com/aws/serverless-java-container scm:git:https://github.com/aws/serverless-java-container.git - HEAD + aws-serverless-java-container-2.0.2 From 9da0d7d3216db80cd37f5e2aea557672d682a3e7 Mon Sep 17 00:00:00 2001 From: deki Date: Fri, 31 May 2024 06:45:24 +0000 Subject: [PATCH 651/888] chore: release - prepare for next development iteration --- aws-serverless-java-container-core/pom.xml | 4 ++-- aws-serverless-java-container-jersey/pom.xml | 8 ++++---- aws-serverless-java-container-spring/pom.xml | 8 ++++---- aws-serverless-java-container-springboot3/pom.xml | 8 ++++---- aws-serverless-jersey-archetype/pom.xml | 6 +++--- aws-serverless-spring-archetype/pom.xml | 6 +++--- aws-serverless-springboot3-archetype/pom.xml | 6 +++--- pom.xml | 4 ++-- 8 files changed, 25 insertions(+), 25 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 096d79a07..a6278f9e3 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Core Allows Java applications written for a servlet container to run in AWS Lambda https://aws.amazon.com/lambda - 2.0.2 + 2.1.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 2.0.2 + 2.1.0-SNAPSHOT .. diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index cf3446a56..757a84e7a 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Jersey implementation Allows Java applications written for Jersey to run in AWS Lambda https://aws.amazon.com/lambda - 2.0.2 + 2.1.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 2.0.2 + 2.1.0-SNAPSHOT .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.0.2 + 2.1.0-SNAPSHOT com.fasterxml.jackson.core @@ -35,7 +35,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.0.2 + 2.1.0-SNAPSHOT tests test-jar test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 7a1e41c1b..8aa10630f 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spring implementation Allows Java applications written for the Spring framework to run in AWS Lambda https://aws.amazon.com/lambda - 2.0.2 + 2.1.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 2.0.2 + 2.1.0-SNAPSHOT .. @@ -25,12 +25,12 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.0.2 + 2.1.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container-core - 2.0.2 + 2.1.0-SNAPSHOT tests test-jar test diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index d04b91a99..4c669a8df 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -3,7 +3,7 @@ aws-serverless-java-container com.amazonaws.serverless - 2.0.2 + 2.1.0-SNAPSHOT 4.0.0 @@ -12,7 +12,7 @@ AWS Serverless Java container support - SpringBoot 3 implementation Allows Java applications written for SpringBoot 3 to run in AWS Lambda https://aws.amazon.com/lambda - 2.0.2 + 2.1.0-SNAPSHOT 6.1.8 @@ -30,12 +30,12 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.0.2 + 2.1.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container-core - 2.0.2 + 2.1.0-SNAPSHOT tests test-jar test diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index bdd7de91d..f4ae15675 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.0.2 + 2.1.0-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-jersey-archetype - 2.0.2 + 2.1.0-SNAPSHOT maven-archetype https://github.com/aws/serverless-java-container.git - aws-serverless-java-container-2.0.2 + HEAD diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index 39ca9e580..07c5e4e90 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.0.2 + 2.1.0-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-spring-archetype - 2.0.2 + 2.1.0-SNAPSHOT maven-archetype https://github.com/aws/serverless-java-container.git - aws-serverless-java-container-2.0.2 + HEAD diff --git a/aws-serverless-springboot3-archetype/pom.xml b/aws-serverless-springboot3-archetype/pom.xml index 845f1b622..a1057f354 100644 --- a/aws-serverless-springboot3-archetype/pom.xml +++ b/aws-serverless-springboot3-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.0.2 + 2.1.0-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-springboot3-archetype - 2.0.2 + 2.1.0-SNAPSHOT maven-archetype https://github.com/aws/serverless-java-container.git - aws-serverless-java-container-2.0.2 + HEAD diff --git a/pom.xml b/pom.xml index b5f3a0b01..b1c832040 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazonaws.serverless aws-serverless-java-container pom - 2.0.2 + 2.1.0-SNAPSHOT AWS Serverless Java container A Java framework to run Spring, Spring Boot, Jersey, Spark, and Struts applications inside AWS Lambda https://github.com/aws/serverless-java-container @@ -37,7 +37,7 @@ https://github.com/aws/serverless-java-container scm:git:https://github.com/aws/serverless-java-container.git - aws-serverless-java-container-2.0.2 + HEAD From a4ae7b4ad5c40dbf9ed1926c10955114ecbfcb6c Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 31 May 2024 10:39:24 +0200 Subject: [PATCH 652/888] chore(deps): Update Spring dependencies (security to 6.3.0, boot to 3.3.0) --- aws-serverless-java-container-core/pom.xml | 2 +- aws-serverless-java-container-spring/pom.xml | 2 +- aws-serverless-java-container-springboot3/pom.xml | 4 ++-- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/springboot3/alt-pet-store/build.gradle | 2 +- samples/springboot3/alt-pet-store/pom.xml | 2 +- samples/springboot3/graphql-pet-store/pom.xml | 2 +- samples/springboot3/pet-store-native/pom.xml | 2 +- samples/springboot3/pet-store/build.gradle | 2 +- samples/springboot3/pet-store/pom.xml | 2 +- 11 files changed, 12 insertions(+), 12 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index a6278f9e3..6f2e18f45 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -60,7 +60,7 @@ org.springframework.security spring-security-web - 6.2.4 + 6.3.0 test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 8aa10630f..9fa13e6ce 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -17,7 +17,7 @@ 6.1.8 - 6.2.4 + 6.3.0 diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index 4c669a8df..7abc29eef 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -16,8 +16,8 @@ 6.1.8 - 3.2.6 - 6.2.4 + 3.3.0 + 6.3.0 diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle index 816ebaec2..c71d8e6ea 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle @@ -9,7 +9,7 @@ repositories { dependencies { implementation ( - 'org.springframework.boot:spring-boot-starter-web:3.2.6', + 'org.springframework.boot:spring-boot-starter-web:3.3.0', 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:[2.0-SNAPSHOT,)', ) diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml index 2396c0ef1..9c032f77b 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ org.springframework.boot spring-boot-starter-parent - 3.2.6 + 3.3.0 diff --git a/samples/springboot3/alt-pet-store/build.gradle b/samples/springboot3/alt-pet-store/build.gradle index 9a4987860..b4d110a08 100644 --- a/samples/springboot3/alt-pet-store/build.gradle +++ b/samples/springboot3/alt-pet-store/build.gradle @@ -9,7 +9,7 @@ repositories { dependencies { implementation ( - implementation('org.springframework.boot:spring-boot-starter-web:3.2.6') { + implementation('org.springframework.boot:spring-boot-starter-web:3.3.0') { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat' }, 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:[2.0-SNAPSHOT,)', diff --git a/samples/springboot3/alt-pet-store/pom.xml b/samples/springboot3/alt-pet-store/pom.xml index c2cf4da03..4c091d29b 100644 --- a/samples/springboot3/alt-pet-store/pom.xml +++ b/samples/springboot3/alt-pet-store/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 3.2.6 + 3.3.0 diff --git a/samples/springboot3/graphql-pet-store/pom.xml b/samples/springboot3/graphql-pet-store/pom.xml index 581b13bd8..e522132e7 100644 --- a/samples/springboot3/graphql-pet-store/pom.xml +++ b/samples/springboot3/graphql-pet-store/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 3.2.6 + 3.3.0 diff --git a/samples/springboot3/pet-store-native/pom.xml b/samples/springboot3/pet-store-native/pom.xml index d7a6fb449..826c647e4 100644 --- a/samples/springboot3/pet-store-native/pom.xml +++ b/samples/springboot3/pet-store-native/pom.xml @@ -6,7 +6,7 @@ org.springframework.boot spring-boot-starter-parent - 3.2.6 + 3.3.0 com.amazonaws.serverless.sample diff --git a/samples/springboot3/pet-store/build.gradle b/samples/springboot3/pet-store/build.gradle index 9a4987860..b4d110a08 100644 --- a/samples/springboot3/pet-store/build.gradle +++ b/samples/springboot3/pet-store/build.gradle @@ -9,7 +9,7 @@ repositories { dependencies { implementation ( - implementation('org.springframework.boot:spring-boot-starter-web:3.2.6') { + implementation('org.springframework.boot:spring-boot-starter-web:3.3.0') { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat' }, 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:[2.0-SNAPSHOT,)', diff --git a/samples/springboot3/pet-store/pom.xml b/samples/springboot3/pet-store/pom.xml index 2340a3664..7fe8681e6 100644 --- a/samples/springboot3/pet-store/pom.xml +++ b/samples/springboot3/pet-store/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 3.2.6 + 3.3.0 From 2e481ce0a98e959f6cee47a56dbe9cc1d2e6a1ce Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 31 May 2024 10:42:31 +0200 Subject: [PATCH 653/888] chore(deps): Update Jakarta Websocket to 2.2.0 --- aws-serverless-java-container-springboot3/pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index 7abc29eef..4ecc79d68 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -180,14 +180,14 @@ jakarta.websocket jakarta.websocket-api - 2.1.1 + 2.2.0 test jakarta.websocket jakarta.websocket-client-api - 2.1.1 + 2.2.0 test From 038acbd84ea0589239f1555cc4d326774550d85e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Jun 2024 04:29:46 +0000 Subject: [PATCH 654/888] chore(deps): bump org.apache.maven.plugins:maven-enforcer-plugin Bumps [org.apache.maven.plugins:maven-enforcer-plugin](https://github.com/apache/maven-enforcer) from 3.4.1 to 3.5.0. - [Release notes](https://github.com/apache/maven-enforcer/releases) - [Commits](https://github.com/apache/maven-enforcer/compare/enforcer-3.4.1...enforcer-3.5.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-enforcer-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index b1c832040..c0956faa9 100644 --- a/pom.xml +++ b/pom.xml @@ -169,7 +169,7 @@ org.apache.maven.plugins maven-enforcer-plugin - 3.4.1 + 3.5.0 enforce From 9a9ddb674cd076993460069dd7cb090b9b988870 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Jun 2024 04:29:51 +0000 Subject: [PATCH 655/888] chore(deps): bump org.apache.maven.plugins:maven-javadoc-plugin Bumps [org.apache.maven.plugins:maven-javadoc-plugin](https://github.com/apache/maven-javadoc-plugin) from 3.6.3 to 3.7.0. - [Release notes](https://github.com/apache/maven-javadoc-plugin/releases) - [Commits](https://github.com/apache/maven-javadoc-plugin/compare/maven-javadoc-plugin-3.6.3...maven-javadoc-plugin-3.7.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-javadoc-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index b1c832040..f9f2175d2 100644 --- a/pom.xml +++ b/pom.xml @@ -201,7 +201,7 @@ org.apache.maven.plugins maven-javadoc-plugin - 3.6.3 + 3.7.0 org.apache.maven.plugins From 95328c3e0b8dacd9e7b60cf16a2586ed70da7b20 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Tue, 4 Jun 2024 07:02:40 +0200 Subject: [PATCH 656/888] chore(deps): Update maven-shade-plugin to 3.6.0 --- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/jersey/pet-store/pom.xml | 2 +- samples/spring/pet-store/pom.xml | 2 +- samples/springboot3/alt-pet-store/pom.xml | 2 +- samples/springboot3/graphql-pet-store/pom.xml | 2 +- samples/springboot3/pet-store/pom.xml | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml index 63fca8319..191ba74f5 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml @@ -107,7 +107,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.5.3 + 3.6.0 false diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index 89035bf68..d88b57972 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -119,7 +119,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.5.3 + 3.6.0 package diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml index 9c032f77b..f1a0d5013 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml @@ -83,7 +83,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.5.3 + 3.6.0 false diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index 5348598aa..549e8b8b7 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -85,7 +85,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.5.3 + 3.6.0 false diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index 6aae5db92..fbd76b978 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -95,7 +95,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.5.3 + 3.6.0 package diff --git a/samples/springboot3/alt-pet-store/pom.xml b/samples/springboot3/alt-pet-store/pom.xml index 4c091d29b..7d39cd9a9 100644 --- a/samples/springboot3/alt-pet-store/pom.xml +++ b/samples/springboot3/alt-pet-store/pom.xml @@ -49,7 +49,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.5.3 + 3.6.0 false diff --git a/samples/springboot3/graphql-pet-store/pom.xml b/samples/springboot3/graphql-pet-store/pom.xml index e522132e7..6e6db6ca8 100644 --- a/samples/springboot3/graphql-pet-store/pom.xml +++ b/samples/springboot3/graphql-pet-store/pom.xml @@ -63,7 +63,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.5.3 + 3.6.0 false diff --git a/samples/springboot3/pet-store/pom.xml b/samples/springboot3/pet-store/pom.xml index 7fe8681e6..3c6c3a927 100644 --- a/samples/springboot3/pet-store/pom.xml +++ b/samples/springboot3/pet-store/pom.xml @@ -55,7 +55,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.5.3 + 3.6.0 false From 7b73750b93381934b895200df7ad462362d078e1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Jun 2024 04:25:20 +0000 Subject: [PATCH 657/888] chore(deps): bump org.apache.maven.plugins:maven-surefire-plugin Bumps [org.apache.maven.plugins:maven-surefire-plugin](https://github.com/apache/maven-surefire) from 3.2.5 to 3.3.0. - [Release notes](https://github.com/apache/maven-surefire/releases) - [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.2.5...surefire-3.3.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-surefire-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index e9c467e53..237b38f54 100644 --- a/pom.xml +++ b/pom.xml @@ -206,7 +206,7 @@ org.apache.maven.plugins maven-surefire-plugin - 3.2.5 + 3.3.0 org.apache.maven.plugins From 2af97118475fbf417a427fa6493726d7f1992885 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Jun 2024 04:25:26 +0000 Subject: [PATCH 658/888] chore(deps): bump org.apache.maven.plugins:maven-release-plugin Bumps [org.apache.maven.plugins:maven-release-plugin](https://github.com/apache/maven-release) from 3.0.1 to 3.1.0. - [Release notes](https://github.com/apache/maven-release/releases) - [Commits](https://github.com/apache/maven-release/compare/maven-release-3.0.1...maven-release-3.1.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-release-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index e9c467e53..4bfdb1512 100644 --- a/pom.xml +++ b/pom.xml @@ -236,7 +236,7 @@ org.apache.maven.plugins maven-release-plugin - 3.0.1 + 3.1.0 serverless-java-container-release clean verify install From 9463113c314b16fcad299f2455ac68ccb5c52660 Mon Sep 17 00:00:00 2001 From: mbfreder Date: Wed, 19 Jun 2024 06:55:59 -0700 Subject: [PATCH 659/888] fix: Error with version 2.0.2 when multi-value header is active in alb --- .../servlet/AwsProxyHttpServletRequest.java | 29 ++++++++++++------- .../AwsProxyHttpServletRequestTest.java | 16 +++++++++- 2 files changed, 33 insertions(+), 12 deletions(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java index 17d04a57c..fe514e65d 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java @@ -437,8 +437,10 @@ public String getRemoteAddr() { if (request.getRequestContext() == null || request.getRequestContext().getIdentity() == null) { return "127.0.0.1"; } - if (request.getRequestContext().getElb() != null) { - return request.getHeaders().get(CLIENT_IP_HEADER); + if (request.getRequestSource().equals(RequestSource.ALB)) { + return Objects.nonNull(request.getHeaders()) ? + request.getHeaders().get(CLIENT_IP_HEADER) : + request.getMultiValueHeaders().getFirst(CLIENT_IP_HEADER); } return request.getRequestContext().getIdentity().getSourceIp(); } @@ -446,14 +448,16 @@ public String getRemoteAddr() { @Override public String getRemoteHost() { - if (Objects.nonNull(request.getRequestContext().getElb())) { - String hostHeader = request.getHeaders().get(HttpHeaders.HOST); - - // the host header has the form host:port, so we split the string to get the host part - return Arrays.asList(hostHeader.split(":")).get(0); + String hostHeader; + if (request.getRequestSource().equals(RequestSource.ALB)) { + hostHeader = Objects.nonNull(request.getHeaders()) ? + request.getHeaders().get(HttpHeaders.HOST) : + request.getMultiValueHeaders().getFirst(HttpHeaders.HOST); + } else { + hostHeader = request.getMultiValueHeaders().getFirst(HttpHeaders.HOST); } - - return request.getMultiValueHeaders().getFirst(HttpHeaders.HOST); + // the host header has the form host:port, so we split the string to get the host part + return Arrays.asList(hostHeader.split(":")).get(0); } @@ -483,8 +487,11 @@ public RequestDispatcher getRequestDispatcher(String s) { @Override public int getRemotePort() { - if (Objects.nonNull(request.getRequestContext().getElb())) { - String portHeader = request.getHeaders().get(PORT_HEADER_NAME); + if (request.getRequestSource().equals(RequestSource.ALB)) { + String portHeader; + portHeader = Objects.nonNull(request.getHeaders()) ? + request.getHeaders().get(PORT_HEADER_NAME) : + request.getMultiValueHeaders().getFirst(PORT_HEADER_NAME); if (Objects.nonNull(portHeader)) { return Integer.parseInt(portHeader); } diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestTest.java index 45c38843e..4edcf5241 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestTest.java @@ -652,10 +652,11 @@ void serverName_albHostHeader_returnsHostHeader() { } @Test - void getRemoteHost_albHostHeader_returnsHostHeader() { + void getRemoteHost_albHostHeader_singleValue_returnsHostHeader() { initAwsProxyHttpServletRequestTest("ALB"); AwsProxyRequest proxyReq = new AwsProxyRequestBuilder("/test", "GET") .alb().build(); + proxyReq.setMultiValueHeaders(null); proxyReq.getHeaders().put(HttpHeaders.HOST, "testapi.us-east-1.elb.amazonaws.com"); HttpServletRequest servletRequest = new AwsProxyHttpServletRequest(proxyReq, null, null); @@ -663,6 +664,19 @@ void getRemoteHost_albHostHeader_returnsHostHeader() { assertEquals("testapi.us-east-1.elb.amazonaws.com", host); } + @Test + void getRemoteHost_albHostHeader_multiValue_returnsHostHeader() { + initAwsProxyHttpServletRequestTest("ALB"); + AwsProxyRequest proxyReq = new AwsProxyRequestBuilder("/test", "GET") + .header(HttpHeaders.HOST, "testapi.us-east-1.elb.amazonaws.com") + .alb().build(); + proxyReq.setHeaders(null); + HttpServletRequest servletRequest = new AwsProxyHttpServletRequest(proxyReq, null, null); + + String host = servletRequest.getRemoteHost(); + assertEquals("testapi.us-east-1.elb.amazonaws.com", host); + } + private AwsProxyRequestBuilder getRequestWithHeaders() { return new AwsProxyRequestBuilder("/hello", "GET") .header(CUSTOM_HEADER_KEY, CUSTOM_HEADER_VALUE) From f98ac96e4da221d2a5d6468b8f26feb0760623c3 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Thu, 20 Jun 2024 13:47:54 +0200 Subject: [PATCH 660/888] chore(deps): Update Spring dependencies (framework to 6.1.10, security to 6.3.1, boot to 3.3.1) --- .github/workflows/continuous-integration-workflow.yml | 7 +++++-- aws-serverless-java-container-core/pom.xml | 2 +- aws-serverless-java-container-spring/pom.xml | 4 ++-- aws-serverless-java-container-springboot3/pom.xml | 6 +++--- .../src/main/resources/archetype-resources/build.gradle | 4 ++-- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/spring/pet-store/build.gradle | 4 ++-- samples/spring/pet-store/pom.xml | 2 +- samples/springboot3/alt-pet-store/build.gradle | 2 +- samples/springboot3/alt-pet-store/pom.xml | 2 +- samples/springboot3/graphql-pet-store/pom.xml | 2 +- samples/springboot3/pet-store-native/pom.xml | 2 +- samples/springboot3/pet-store/build.gradle | 2 +- samples/springboot3/pet-store/pom.xml | 2 +- 16 files changed, 25 insertions(+), 22 deletions(-) diff --git a/.github/workflows/continuous-integration-workflow.yml b/.github/workflows/continuous-integration-workflow.yml index dbe5f05f4..25228263a 100644 --- a/.github/workflows/continuous-integration-workflow.yml +++ b/.github/workflows/continuous-integration-workflow.yml @@ -4,6 +4,7 @@ on: pull_request: branches: - main + - 2.0.x - 1.x workflow_dispatch: @@ -59,7 +60,7 @@ jobs: - name: Build latest run: ./gha_build.sh spring true true # - name: Build with Spring 6.0.x -# run: ./gha_build.sh spring false false -Dspring.version=6.0.16 -Dspring-security.version=6.1.8 -Ddependency-check.skip=true +# run: ./gha_build.sh spring false false -Dspring.version=6.0.16 -Dspring-security.version=6.1.10 -Ddependency-check.skip=true build_springboot3: name: Build and test SpringBoot 3 @@ -75,7 +76,9 @@ jobs: run: ./gha_build.sh springboot3 true true # Build with additional supported versions https://spring.io/projects/spring-boot#support - name: Build with Spring Boot 3.1.x - run: ./gha_build.sh springboot3 false false -Dspringboot.version=3.1.8 -Dspring.version=6.0.16 -Dspringsecurity.version=6.1.8 -Ddependency-check.skip=true + run: ./gha_build.sh springboot3 false false -Dspringboot.version=3.1.12 -Dspring.version=6.0.21 -Dspringsecurity.version=6.1.9 -Ddependency-check.skip=true + - name: Build with Spring Boot 3.2.x + run: ./gha_build.sh springboot3 false false -Dspringboot.version=3.2.7 -Dspring.version=6.1.10 -Dspringsecurity.version=6.2.5 -Ddependency-check.skip=true # temporarily disabled as Struts is not released at the moment # build_struts2: diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 6f2e18f45..c412ea545 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -60,7 +60,7 @@ org.springframework.security spring-security-web - 6.3.0 + 6.3.1 test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 9fa13e6ce..d82547e64 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -16,8 +16,8 @@ - 6.1.8 - 6.3.0 + 6.1.10 + 6.3.1 diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index 4ecc79d68..b64ebd6fe 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -15,9 +15,9 @@ 2.1.0-SNAPSHOT - 6.1.8 - 3.3.0 - 6.3.0 + 6.1.10 + 3.3.1 + 6.3.1 diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index 12d909c92..e444282e7 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -7,8 +7,8 @@ repositories { dependencies { implementation ( - 'org.springframework:spring-webmvc:6.1.8', - 'org.springframework:spring-context:6.1.8', + 'org.springframework:spring-webmvc:6.1.10', + 'org.springframework:spring-context:6.1.10', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[2.0-SNAPSHOT,)', 'org.apache.logging.log4j:log4j-core:2.23.1', 'org.apache.logging.log4j:log4j-api:2.23.1', diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index d88b57972..e8d39e982 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 1.8 - 6.1.8 + 6.1.10 5.10.2 2.23.1 diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle index c71d8e6ea..07387e7f8 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle @@ -9,7 +9,7 @@ repositories { dependencies { implementation ( - 'org.springframework.boot:spring-boot-starter-web:3.3.0', + 'org.springframework.boot:spring-boot-starter-web:3.3.1', 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:[2.0-SNAPSHOT,)', ) diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml index f1a0d5013..263f4ef57 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ org.springframework.boot spring-boot-starter-parent - 3.3.0 + 3.3.1 diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index 394581eab..9ef83f2d7 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -7,8 +7,8 @@ repositories { dependencies { implementation ( - 'org.springframework:spring-webmvc:6.1.8', - 'org.springframework:spring-context:6.1.8', + 'org.springframework:spring-webmvc:6.1.10', + 'org.springframework:spring-context:6.1.10', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[2.0-SNAPSHOT,)', 'org.apache.logging.log4j:log4j-core:2.23.1', 'org.apache.logging.log4j:log4j-api:2.23.1', diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index fbd76b978..e8a76ac65 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -24,7 +24,7 @@ - 6.1.8 + 6.1.10 2.23.1 17 17 diff --git a/samples/springboot3/alt-pet-store/build.gradle b/samples/springboot3/alt-pet-store/build.gradle index b4d110a08..0982e1302 100644 --- a/samples/springboot3/alt-pet-store/build.gradle +++ b/samples/springboot3/alt-pet-store/build.gradle @@ -9,7 +9,7 @@ repositories { dependencies { implementation ( - implementation('org.springframework.boot:spring-boot-starter-web:3.3.0') { + implementation('org.springframework.boot:spring-boot-starter-web:3.3.1') { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat' }, 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:[2.0-SNAPSHOT,)', diff --git a/samples/springboot3/alt-pet-store/pom.xml b/samples/springboot3/alt-pet-store/pom.xml index 7d39cd9a9..c4ce5ff57 100644 --- a/samples/springboot3/alt-pet-store/pom.xml +++ b/samples/springboot3/alt-pet-store/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 3.3.0 + 3.3.1 diff --git a/samples/springboot3/graphql-pet-store/pom.xml b/samples/springboot3/graphql-pet-store/pom.xml index 6e6db6ca8..7f3c30ba7 100644 --- a/samples/springboot3/graphql-pet-store/pom.xml +++ b/samples/springboot3/graphql-pet-store/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 3.3.0 + 3.3.1 diff --git a/samples/springboot3/pet-store-native/pom.xml b/samples/springboot3/pet-store-native/pom.xml index 826c647e4..5345e7f86 100644 --- a/samples/springboot3/pet-store-native/pom.xml +++ b/samples/springboot3/pet-store-native/pom.xml @@ -6,7 +6,7 @@ org.springframework.boot spring-boot-starter-parent - 3.3.0 + 3.3.1 com.amazonaws.serverless.sample diff --git a/samples/springboot3/pet-store/build.gradle b/samples/springboot3/pet-store/build.gradle index b4d110a08..0982e1302 100644 --- a/samples/springboot3/pet-store/build.gradle +++ b/samples/springboot3/pet-store/build.gradle @@ -9,7 +9,7 @@ repositories { dependencies { implementation ( - implementation('org.springframework.boot:spring-boot-starter-web:3.3.0') { + implementation('org.springframework.boot:spring-boot-starter-web:3.3.1') { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat' }, 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:[2.0-SNAPSHOT,)', diff --git a/samples/springboot3/pet-store/pom.xml b/samples/springboot3/pet-store/pom.xml index 3c6c3a927..b582abb02 100644 --- a/samples/springboot3/pet-store/pom.xml +++ b/samples/springboot3/pet-store/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 3.3.0 + 3.3.1 From 8ec710296dec04781ed44d864ea3826c100caf0e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 Jun 2024 04:51:31 +0000 Subject: [PATCH 661/888] chore(deps): bump com.github.spotbugs:spotbugs-annotations Bumps [com.github.spotbugs:spotbugs-annotations](https://github.com/spotbugs/spotbugs) from 4.8.5 to 4.8.6. - [Release notes](https://github.com/spotbugs/spotbugs/releases) - [Changelog](https://github.com/spotbugs/spotbugs/blob/master/CHANGELOG.md) - [Commits](https://github.com/spotbugs/spotbugs/compare/4.8.5...4.8.6) --- updated-dependencies: - dependency-name: com.github.spotbugs:spotbugs-annotations dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 999f74797..cdd3fca1d 100644 --- a/pom.xml +++ b/pom.xml @@ -140,7 +140,7 @@ com.github.spotbugs spotbugs-annotations - 4.8.5 + 4.8.6 provided From 9e4190b35d13c8452f062679e863d0be9578c943 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 Jun 2024 04:51:39 +0000 Subject: [PATCH 662/888] chore(deps): bump org.apache.maven.plugins:maven-clean-plugin Bumps [org.apache.maven.plugins:maven-clean-plugin](https://github.com/apache/maven-clean-plugin) from 3.3.2 to 3.4.0. - [Release notes](https://github.com/apache/maven-clean-plugin/releases) - [Commits](https://github.com/apache/maven-clean-plugin/compare/maven-clean-plugin-3.3.2...maven-clean-plugin-3.4.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-clean-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 999f74797..203ca2be1 100644 --- a/pom.xml +++ b/pom.xml @@ -211,7 +211,7 @@ org.apache.maven.plugins maven-clean-plugin - 3.3.2 + 3.4.0 org.apache.maven.plugins From b62d9860e8843a9eff8fbdbe0c420ab72166098a Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 24 Jun 2024 15:19:50 +0200 Subject: [PATCH 663/888] chore(deps): Update maven-jar-plugin to 3.4.2 --- aws-serverless-java-container-core/pom.xml | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- pom.xml | 2 +- samples/jersey/pet-store/pom.xml | 2 +- samples/spring/pet-store/pom.xml | 2 +- samples/springboot3/alt-pet-store/pom.xml | 2 +- samples/springboot3/graphql-pet-store/pom.xml | 2 +- samples/springboot3/pet-store/pom.xml | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index c412ea545..10e06b180 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -70,7 +70,7 @@ org.apache.maven.plugins maven-jar-plugin - 3.4.1 + 3.4.2 diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml index 191ba74f5..936a72c97 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml @@ -134,7 +134,7 @@ org.apache.maven.plugins maven-jar-plugin - 3.4.1 + 3.4.2 default-jar diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index e8d39e982..af417c9a3 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -157,7 +157,7 @@ org.apache.maven.plugins maven-jar-plugin - 3.4.1 + 3.4.2 default-jar diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml index 263f4ef57..1bd162b54 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml @@ -117,7 +117,7 @@ org.apache.maven.plugins maven-jar-plugin - 3.2.0 + 3.4.2 default-jar diff --git a/pom.xml b/pom.xml index 203ca2be1..e2ea58f78 100644 --- a/pom.xml +++ b/pom.xml @@ -216,7 +216,7 @@ org.apache.maven.plugins maven-jar-plugin - 3.4.1 + 3.4.2 org.apache.maven.plugins diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index 549e8b8b7..80ae54fb0 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -112,7 +112,7 @@ org.apache.maven.plugins maven-jar-plugin - 3.4.1 + 3.4.2 default-jar diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index e8a76ac65..dcaf874b2 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -133,7 +133,7 @@ org.apache.maven.plugins maven-jar-plugin - 3.4.1 + 3.4.2 default-jar diff --git a/samples/springboot3/alt-pet-store/pom.xml b/samples/springboot3/alt-pet-store/pom.xml index c4ce5ff57..91704d7fe 100644 --- a/samples/springboot3/alt-pet-store/pom.xml +++ b/samples/springboot3/alt-pet-store/pom.xml @@ -83,7 +83,7 @@ org.apache.maven.plugins maven-jar-plugin - 3.4.1 + 3.4.2 default-jar diff --git a/samples/springboot3/graphql-pet-store/pom.xml b/samples/springboot3/graphql-pet-store/pom.xml index 7f3c30ba7..1a9c13976 100644 --- a/samples/springboot3/graphql-pet-store/pom.xml +++ b/samples/springboot3/graphql-pet-store/pom.xml @@ -97,7 +97,7 @@ org.apache.maven.plugins maven-jar-plugin - 3.4.1 + 3.4.2 default-jar diff --git a/samples/springboot3/pet-store/pom.xml b/samples/springboot3/pet-store/pom.xml index b582abb02..22caaa309 100644 --- a/samples/springboot3/pet-store/pom.xml +++ b/samples/springboot3/pet-store/pom.xml @@ -89,7 +89,7 @@ org.apache.maven.plugins maven-jar-plugin - 3.4.1 + 3.4.2 default-jar From eb921c1b97999171b96685e9bd06634110eb609d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 26 Jun 2024 14:43:16 +0000 Subject: [PATCH 664/888] chore(deps): bump com.amazonaws:aws-lambda-java-events Bumps [com.amazonaws:aws-lambda-java-events](https://github.com/aws/aws-lambda-java-libs) from 3.11.5 to 3.11.6. - [Commits](https://github.com/aws/aws-lambda-java-libs/commits) --- updated-dependencies: - dependency-name: com.amazonaws:aws-lambda-java-events dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- samples/springboot3/pet-store-native/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/springboot3/pet-store-native/pom.xml b/samples/springboot3/pet-store-native/pom.xml index 5345e7f86..1e10f9c35 100644 --- a/samples/springboot3/pet-store-native/pom.xml +++ b/samples/springboot3/pet-store-native/pom.xml @@ -31,7 +31,7 @@ com.amazonaws aws-lambda-java-events - 3.11.5 + 3.11.6 com.amazonaws From a8e4801d9a6fae29f72735f69482a09f4a4714ad Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Jul 2024 05:06:38 +0000 Subject: [PATCH 665/888] chore(deps): bump com.github.spotbugs:spotbugs-maven-plugin Bumps [com.github.spotbugs:spotbugs-maven-plugin](https://github.com/spotbugs/spotbugs-maven-plugin) from 4.8.5.0 to 4.8.6.1. - [Release notes](https://github.com/spotbugs/spotbugs-maven-plugin/releases) - [Commits](https://github.com/spotbugs/spotbugs-maven-plugin/compare/spotbugs-maven-plugin-4.8.5.0...spotbugs-maven-plugin-4.8.6.1) --- updated-dependencies: - dependency-name: com.github.spotbugs:spotbugs-maven-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 7fddf84d0..3a20f6864 100644 --- a/pom.xml +++ b/pom.xml @@ -249,7 +249,7 @@ com.github.spotbugs spotbugs-maven-plugin - 4.8.5.0 + 4.8.6.1 diff --git a/samples/struts/pet-store/build.gradle b/samples/struts/pet-store/build.gradle index 3240cc4cd..5fdd43e54 100644 --- a/samples/struts/pet-store/build.gradle +++ b/samples/struts/pet-store/build.gradle @@ -14,11 +14,11 @@ configurations { dependencies { implementation ( 'com.amazonaws.serverless:aws-serverless-java-container-struts:[2.0-SNAPSHOT,)', - 'org.apache.struts:struts2-convention-plugin:7.0.0-M3', - 'org.apache.struts:struts2-rest-plugin:7.0.0-M3', - 'org.apache.struts:struts2-bean-validation-plugin:7.0.0-M3', - 'org.apache.struts:struts2-junit-plugin:7.0.0-M3', - 'com.jgeppert.struts2:struts2-aws-lambda-support-plugin:1.4.2', + 'org.apache.struts:struts2-convention-plugin:7.0.0-M8', + 'org.apache.struts:struts2-rest-plugin:7.0.0-M8', + 'org.apache.struts:struts2-bean-validation-plugin:7.0.0-M8', + 'org.apache.struts:struts2-junit-plugin:7.0.0-M8', + 'com.jgeppert.struts2:struts2-aws-lambda-support-plugin:1.4.3', 'org.hibernate.validator:hibernate-validator:6.1.7.Final', 'org.glassfish:jakarta.el:5.0.0-M1', 'jakarta.el:jakarta.el-api:5.0.1', diff --git a/samples/struts/pet-store/pom.xml b/samples/struts/pet-store/pom.xml index 995f71e88..9c466a3a5 100644 --- a/samples/struts/pet-store/pom.xml +++ b/samples/struts/pet-store/pom.xml @@ -26,7 +26,7 @@ 1.8 1.8 - 7.0.0-M3 + 7.0.0-M8 2.17.2 4.13.2 2.23.1 @@ -68,7 +68,7 @@ com.jgeppert.struts2 struts2-aws-lambda-support-plugin - 1.4.2 + 1.4.3 From 78b940281dc87ae83451860609b8aa5a03587b25 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 15 Jul 2024 07:31:16 +0200 Subject: [PATCH 680/888] chore(deps-dev): Bumps org.apache.httpcomponents.client5:httpclient5 from 5.2.1 to 5.3.1. --- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle index 0c8a117c2..9a10c3e99 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle @@ -22,7 +22,7 @@ dependencies { } testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") - testImplementation("org.apache.httpcomponents.client5:httpclient5:5.2.1") + testImplementation("org.apache.httpcomponents.client5:httpclient5:5.3.1") testImplementation(platform("org.junit:junit-bom:5.10.3")) testImplementation("org.junit.jupiter:junit-jupiter") } diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml index 1389f62f1..12bbde8f2 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml @@ -37,7 +37,7 @@ org.apache.httpcomponents.client5 httpclient5 - 5.2.1 + 5.3.1 test diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index 7599cad7a..df2dda90b 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -18,7 +18,7 @@ dependencies { ) testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") - testImplementation("org.apache.httpcomponents.client5:httpclient5:5.2.1") + testImplementation("org.apache.httpcomponents.client5:httpclient5:5.3.1") testImplementation(platform("org.junit:junit-bom:5.10.3")) testImplementation("org.junit.jupiter:junit-jupiter") } diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index 88e424424..2837d9c84 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -38,7 +38,7 @@ org.apache.httpcomponents.client5 httpclient5 - 5.2.1 + 5.3.1 test diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle index 2e6da08d2..aac160ec3 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle @@ -14,7 +14,7 @@ dependencies { ) testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") - testImplementation("org.apache.httpcomponents.client5:httpclient5:5.2.1") + testImplementation("org.apache.httpcomponents.client5:httpclient5:5.3.1") testImplementation(platform("org.junit:junit-bom:5.10.3")) testImplementation("org.junit.jupiter:junit-jupiter") } diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml index affb9e192..48ec5772f 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml @@ -41,7 +41,7 @@ org.apache.httpcomponents.client5 httpclient5 - 5.2.1 + 5.3.1 test diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle index 26a1dd231..28a42f182 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle @@ -42,7 +42,7 @@ dependencies { implementation ('com.amazonaws:aws-lambda-java-log4j2:1.6.0') testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") - testImplementation("org.apache.httpcomponents.client5:httpclient5:5.2.1") + testImplementation("org.apache.httpcomponents.client5:httpclient5:5.3.1") testImplementation(platform("org.junit:junit-bom:5.10.3")) testImplementation("org.junit.jupiter:junit-jupiter") testImplementation('org.apache.struts:struts2-junit-plugin:7.0.0-M8') { diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml index 25b256eb9..1f8e981ff 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml @@ -38,7 +38,7 @@ org.apache.httpcomponents.client5 httpclient5 - 5.2.1 + 5.3.1 test From 85e93476ba515491e8d979b731d0888013212ab1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Jul 2024 05:07:38 +0000 Subject: [PATCH 681/888] chore(deps): bump org.owasp:dependency-check-maven from 10.0.2 to 10.0.3 Bumps [org.owasp:dependency-check-maven](https://github.com/jeremylong/DependencyCheck) from 10.0.2 to 10.0.3. - [Release notes](https://github.com/jeremylong/DependencyCheck/releases) - [Changelog](https://github.com/jeremylong/DependencyCheck/blob/main/CHANGELOG.md) - [Commits](https://github.com/jeremylong/DependencyCheck/compare/v10.0.2...v10.0.3) --- updated-dependencies: - dependency-name: org.owasp:dependency-check-maven dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 794e1680a..ec5efeeb6 100644 --- a/pom.xml +++ b/pom.xml @@ -77,7 +77,7 @@ 0.7 - 10.0.2 + 10.0.3 2.17.2 2.0.13 5.10.3 From 60d84ac7b51584e50ebc1584ff93f34d813649d8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Jul 2024 05:07:42 +0000 Subject: [PATCH 682/888] chore(deps-dev): bump com.h2database:h2 from 2.2.224 to 2.3.230 Bumps [com.h2database:h2](https://github.com/h2database/h2database) from 2.2.224 to 2.3.230. - [Release notes](https://github.com/h2database/h2database/releases) - [Commits](https://github.com/h2database/h2database/compare/version-2.2.224...version-2.3.230) --- updated-dependencies: - dependency-name: com.h2database:h2 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- aws-serverless-java-container-springboot3/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index b64ebd6fe..ad3ac15a2 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -226,7 +226,7 @@ com.h2database h2 - 2.2.224 + 2.3.230 test From 76d5b655c1056966e57b85d5e7a40573bae104c3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Jul 2024 05:07:44 +0000 Subject: [PATCH 683/888] chore(deps): bump commons-codec:commons-codec from 1.17.0 to 1.17.1 Bumps [commons-codec:commons-codec](https://github.com/apache/commons-codec) from 1.17.0 to 1.17.1. - [Changelog](https://github.com/apache/commons-codec/blob/master/RELEASE-NOTES.txt) - [Commits](https://github.com/apache/commons-codec/compare/rel/commons-codec-1.17.0...rel/commons-codec-1.17.1) --- updated-dependencies: - dependency-name: commons-codec:commons-codec dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- aws-serverless-java-container-jersey/pom.xml | 2 +- aws-serverless-java-container-spring/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index 757a84e7a..ea428d88e 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -64,7 +64,7 @@ commons-codec commons-codec - 1.17.0 + 1.17.1 test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index d82547e64..e94a90816 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -53,7 +53,7 @@ commons-codec commons-codec - 1.17.0 + 1.17.1 test From 11fbe3afa98453570a6cf43849a3dc8a0c876380 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Jul 2024 05:07:46 +0000 Subject: [PATCH 684/888] chore(deps): bump org.apache.maven.plugins:maven-javadoc-plugin Bumps [org.apache.maven.plugins:maven-javadoc-plugin](https://github.com/apache/maven-javadoc-plugin) from 3.7.0 to 3.8.0. - [Release notes](https://github.com/apache/maven-javadoc-plugin/releases) - [Commits](https://github.com/apache/maven-javadoc-plugin/compare/maven-javadoc-plugin-3.7.0...maven-javadoc-plugin-3.8.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-javadoc-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 794e1680a..fe6148677 100644 --- a/pom.xml +++ b/pom.xml @@ -201,7 +201,7 @@ org.apache.maven.plugins maven-javadoc-plugin - 3.7.0 + 3.8.0 org.apache.maven.plugins From 2bddeae3501d9c11fa337cef2e178031699af978 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 29 Jul 2024 12:25:33 +0200 Subject: [PATCH 685/888] chore(deps): Update Spring dependencies (framework to 6.1.11, boot to 3.3.2) --- aws-serverless-java-container-spring/pom.xml | 2 +- aws-serverless-java-container-springboot3/pom.xml | 4 ++-- .../src/main/resources/archetype-resources/build.gradle | 4 ++-- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/spring/pet-store/build.gradle | 4 ++-- samples/spring/pet-store/pom.xml | 2 +- samples/springboot3/alt-pet-store/build.gradle | 2 +- samples/springboot3/alt-pet-store/pom.xml | 2 +- samples/springboot3/graphql-pet-store/pom.xml | 2 +- samples/springboot3/pet-store-native/pom.xml | 2 +- samples/springboot3/pet-store/build.gradle | 2 +- samples/springboot3/pet-store/pom.xml | 2 +- 14 files changed, 17 insertions(+), 17 deletions(-) diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index d82547e64..10e68ab88 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -16,7 +16,7 @@ - 6.1.10 + 6.1.11 6.3.1 diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index b64ebd6fe..19e96815a 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -15,8 +15,8 @@ 2.1.0-SNAPSHOT - 6.1.10 - 3.3.1 + 6.1.11 + 3.3.2 6.3.1 diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index df2dda90b..627258e76 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -7,8 +7,8 @@ repositories { dependencies { implementation ( - 'org.springframework:spring-webmvc:6.1.10', - 'org.springframework:spring-context:6.1.10', + 'org.springframework:spring-webmvc:6.1.11', + 'org.springframework:spring-context:6.1.11', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[2.0-SNAPSHOT,)', 'org.apache.logging.log4j:log4j-core:2.23.1', 'org.apache.logging.log4j:log4j-api:2.23.1', diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index 2837d9c84..fb7ea1d6a 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 1.8 - 6.1.10 + 6.1.11 5.10.3 2.23.1 diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle index aac160ec3..b472edd18 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle @@ -9,7 +9,7 @@ repositories { dependencies { implementation ( - 'org.springframework.boot:spring-boot-starter-web:3.3.1', + 'org.springframework.boot:spring-boot-starter-web:3.3.2', 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:[2.0-SNAPSHOT,)', ) diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml index 48ec5772f..dbf6328bc 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ org.springframework.boot spring-boot-starter-parent - 3.3.1 + 3.3.2 diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index 931e516ed..7c61f9aee 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -7,8 +7,8 @@ repositories { dependencies { implementation ( - 'org.springframework:spring-webmvc:6.1.10', - 'org.springframework:spring-context:6.1.10', + 'org.springframework:spring-webmvc:6.1.11', + 'org.springframework:spring-context:6.1.11', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[2.0-SNAPSHOT,)', 'org.apache.logging.log4j:log4j-core:2.23.1', 'org.apache.logging.log4j:log4j-api:2.23.1', diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index fcc610a6e..5521b4c07 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -24,7 +24,7 @@ - 6.1.10 + 6.1.11 2.23.1 17 17 diff --git a/samples/springboot3/alt-pet-store/build.gradle b/samples/springboot3/alt-pet-store/build.gradle index 0982e1302..60efe6a78 100644 --- a/samples/springboot3/alt-pet-store/build.gradle +++ b/samples/springboot3/alt-pet-store/build.gradle @@ -9,7 +9,7 @@ repositories { dependencies { implementation ( - implementation('org.springframework.boot:spring-boot-starter-web:3.3.1') { + implementation('org.springframework.boot:spring-boot-starter-web:3.3.2') { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat' }, 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:[2.0-SNAPSHOT,)', diff --git a/samples/springboot3/alt-pet-store/pom.xml b/samples/springboot3/alt-pet-store/pom.xml index 944aac50d..f4313cf72 100644 --- a/samples/springboot3/alt-pet-store/pom.xml +++ b/samples/springboot3/alt-pet-store/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 3.3.1 + 3.3.2 diff --git a/samples/springboot3/graphql-pet-store/pom.xml b/samples/springboot3/graphql-pet-store/pom.xml index 45f235878..57868b535 100644 --- a/samples/springboot3/graphql-pet-store/pom.xml +++ b/samples/springboot3/graphql-pet-store/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 3.3.1 + 3.3.2 diff --git a/samples/springboot3/pet-store-native/pom.xml b/samples/springboot3/pet-store-native/pom.xml index 2b26aa576..b939c1b94 100644 --- a/samples/springboot3/pet-store-native/pom.xml +++ b/samples/springboot3/pet-store-native/pom.xml @@ -6,7 +6,7 @@ org.springframework.boot spring-boot-starter-parent - 3.3.1 + 3.3.2 com.amazonaws.serverless.sample diff --git a/samples/springboot3/pet-store/build.gradle b/samples/springboot3/pet-store/build.gradle index 0982e1302..60efe6a78 100644 --- a/samples/springboot3/pet-store/build.gradle +++ b/samples/springboot3/pet-store/build.gradle @@ -9,7 +9,7 @@ repositories { dependencies { implementation ( - implementation('org.springframework.boot:spring-boot-starter-web:3.3.1') { + implementation('org.springframework.boot:spring-boot-starter-web:3.3.2') { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat' }, 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:[2.0-SNAPSHOT,)', diff --git a/samples/springboot3/pet-store/pom.xml b/samples/springboot3/pet-store/pom.xml index 22a974479..10546c8ec 100644 --- a/samples/springboot3/pet-store/pom.xml +++ b/samples/springboot3/pet-store/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 3.3.1 + 3.3.2 From 3800547e9d34a8b4e88cd46358c3bdef981aba1b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 Aug 2024 10:37:50 +0000 Subject: [PATCH 686/888] chore(deps): bump com.amazonaws:aws-lambda-java-events Bumps [com.amazonaws:aws-lambda-java-events](https://github.com/aws/aws-lambda-java-libs) from 3.12.0 to 3.13.0. - [Commits](https://github.com/aws/aws-lambda-java-libs/commits) --- updated-dependencies: - dependency-name: com.amazonaws:aws-lambda-java-events dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- samples/springboot3/pet-store-native/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/springboot3/pet-store-native/pom.xml b/samples/springboot3/pet-store-native/pom.xml index b939c1b94..223755107 100644 --- a/samples/springboot3/pet-store-native/pom.xml +++ b/samples/springboot3/pet-store-native/pom.xml @@ -31,7 +31,7 @@ com.amazonaws aws-lambda-java-events - 3.12.0 + 3.13.0 com.amazonaws From db0f4bc4cb3ea6f9b42ae76682f440cdeff0c9fd Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 5 Aug 2024 07:27:55 +0200 Subject: [PATCH 687/888] chore: add groups to dependabot configuration --- .github/dependabot.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 6dfe9ec49..0c40bd978 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -8,11 +8,25 @@ updates: - package-ecosystem: maven directories: - "**/*" + groups: + jersey: + patterns: + - "org.glassfish.jersey:*" + spring: + patterns: + - "org.springframework:*" schedule: interval: "weekly" open-pull-requests-limit: 20 - package-ecosystem: gradle directories: - "**/*" + groups: + jersey: + patterns: + - "org.glassfish.jersey:*" + spring: + patterns: + - "org.springframework:*" schedule: interval: "weekly" \ No newline at end of file From 42d998b39297f45b9af4af9c15c90956e5ee2cc4 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 5 Aug 2024 08:59:43 +0200 Subject: [PATCH 688/888] chore(deps): Update Jersey dependency to 3.1.8 --- aws-serverless-java-container-jersey/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 4 ++-- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/jersey/pet-store/build.gradle | 4 ++-- samples/jersey/pet-store/pom.xml | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index ea428d88e..bf3958182 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -16,7 +16,7 @@ - 3.1.7 + 3.1.8 diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle index 9a10c3e99..8df319599 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle @@ -11,13 +11,13 @@ dependencies { 'com.fasterxml.jackson.core:jackson-databind:2.17.2', ) - implementation("org.glassfish.jersey.media:jersey-media-json-jackson:3.1.7") { + implementation("org.glassfish.jersey.media:jersey-media-json-jackson:3.1.8") { exclude group: 'com.fasterxml.jackson.core', module: "jackson-annotations" exclude group: 'com.fasterxml.jackson.core', module: "jackson-databind" exclude group: 'com.fasterxml.jackson.core', module: "jackson-core" } - implementation("org.glassfish.jersey.inject:jersey-hk2:3.1.7") { + implementation("org.glassfish.jersey.inject:jersey-hk2:3.1.8") { exclude group: 'javax.inject', module: "javax.inject" } diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml index 12bbde8f2..947b827d2 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml @@ -15,7 +15,7 @@ 1.8 1.8 - 3.1.7 + 3.1.8 2.17.2 5.10.3 diff --git a/samples/jersey/pet-store/build.gradle b/samples/jersey/pet-store/build.gradle index 21734669c..db641d14b 100644 --- a/samples/jersey/pet-store/build.gradle +++ b/samples/jersey/pet-store/build.gradle @@ -11,13 +11,13 @@ dependencies { 'com.fasterxml.jackson.core:jackson-databind:2.17.2', ) - implementation("org.glassfish.jersey.media:jersey-media-json-jackson:3.1.7") { + implementation("org.glassfish.jersey.media:jersey-media-json-jackson:3.1.8") { exclude group: 'com.fasterxml.jackson.core', module: "jackson-annotations" exclude group: 'com.fasterxml.jackson.core', module: "jackson-databind" exclude group: 'com.fasterxml.jackson.core', module: "jackson-core" } - implementation("org.glassfish.jersey.inject:jersey-hk2:3.1.7") { + implementation("org.glassfish.jersey.inject:jersey-hk2:3.1.8") { exclude group: 'javax.inject', module: "javax.inject" } } diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index 34b953aa0..5736c49d7 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -26,7 +26,7 @@ 1.8 1.8 - 3.1.7 + 3.1.8 2.17.2 From 72bd0d2c7d0b663783a826ee27035195953fe930 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 19 Aug 2024 07:33:47 +0200 Subject: [PATCH 689/888] chore(deps): add more groups to dependabot.yml --- .github/dependabot.yml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 0c40bd978..0cbe65d79 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -11,10 +11,16 @@ updates: groups: jersey: patterns: - - "org.glassfish.jersey:*" + - "org.glassfish.jersey.*:*" spring: patterns: - "org.springframework:*" + slf4j: + patterns: + - "org.slf4j:*" + junit: + patterns: + - "org.junit:*" schedule: interval: "weekly" open-pull-requests-limit: 20 @@ -28,5 +34,8 @@ updates: spring: patterns: - "org.springframework:*" + slf4j: + patterns: + - "org.slf4j:*" schedule: interval: "weekly" \ No newline at end of file From 8d6a29d19f7d479b1c92ab37fa67765a4510950e Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 19 Aug 2024 09:22:21 +0200 Subject: [PATCH 690/888] chore(deps): update SLF4J version --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 417da6926..c810299f0 100644 --- a/pom.xml +++ b/pom.xml @@ -79,7 +79,7 @@ 0.7 10.0.3 2.17.2 - 2.0.13 + 2.0.16 5.10.3 5.12.0 1.3 From 6a9902a01b621c5a2b9e5f18c2e9a8c8a23f58b3 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 19 Aug 2024 09:26:10 +0200 Subject: [PATCH 691/888] chore(deps): update JUnit version to 5.11.0 --- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- pom.xml | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle index 8df319599..bed896193 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle @@ -23,7 +23,7 @@ dependencies { testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") testImplementation("org.apache.httpcomponents.client5:httpclient5:5.3.1") - testImplementation(platform("org.junit:junit-bom:5.10.3")) + testImplementation(platform("org.junit:junit-bom:5.11.0")) testImplementation("org.junit.jupiter:junit-jupiter") } diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml index 947b827d2..f2367ba21 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml @@ -17,7 +17,7 @@ 3.1.8 2.17.2 - 5.10.3 + 5.11.0 diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index 627258e76..0d5483919 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -19,7 +19,7 @@ dependencies { testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") testImplementation("org.apache.httpcomponents.client5:httpclient5:5.3.1") - testImplementation(platform("org.junit:junit-bom:5.10.3")) + testImplementation(platform("org.junit:junit-bom:5.11.0")) testImplementation("org.junit.jupiter:junit-jupiter") } diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index fb7ea1d6a..3422f4f24 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -17,7 +17,7 @@ 1.8 1.8 6.1.11 - 5.10.3 + 5.11.0 2.23.1 diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle index b472edd18..a22582d1e 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle @@ -15,7 +15,7 @@ dependencies { testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") testImplementation("org.apache.httpcomponents.client5:httpclient5:5.3.1") - testImplementation(platform("org.junit:junit-bom:5.10.3")) + testImplementation(platform("org.junit:junit-bom:5.11.0")) testImplementation("org.junit.jupiter:junit-jupiter") } diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml index dbf6328bc..c13ba13d7 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml @@ -21,7 +21,7 @@ 17 - 5.10.3 + 5.11.0 diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle index 28a42f182..8d96159a7 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle @@ -43,7 +43,7 @@ dependencies { testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") testImplementation("org.apache.httpcomponents.client5:httpclient5:5.3.1") - testImplementation(platform("org.junit:junit-bom:5.10.3")) + testImplementation(platform("org.junit:junit-bom:5.11.0")) testImplementation("org.junit.jupiter:junit-jupiter") testImplementation('org.apache.struts:struts2-junit-plugin:7.0.0-M8') { exclude group: 'org.apache.struts', module: 'struts2-core' diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml index 1f8e981ff..5803bd2e6 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml @@ -17,7 +17,7 @@ 1.8 7.0.0-M8 2.17.2 - 5.10.3 + 5.11.0 2.23.1 diff --git a/pom.xml b/pom.xml index c810299f0..a6ce83e94 100644 --- a/pom.xml +++ b/pom.xml @@ -80,7 +80,7 @@ 10.0.3 2.17.2 2.0.16 - 5.10.3 + 5.11.0 5.12.0 1.3 UTF-8 From 67b85433f57d7f3b048436ffea8b0ccf1c3e4b76 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Tue, 20 Aug 2024 09:24:48 +0200 Subject: [PATCH 692/888] chore(deps): Update spring-cloud-function-serverless-web to 4.1.3 --- aws-serverless-java-container-springboot3/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index 7c7972c77..295dd4afd 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -25,7 +25,7 @@ org.springframework.cloud spring-cloud-function-serverless-web - 4.1.2 + 4.1.3 com.amazonaws.serverless From 5b29e9621f712fdcafe9e462862f6882e7d67f38 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 23 Aug 2024 07:21:37 +0000 Subject: [PATCH 693/888] chore(deps): bump org.apache.maven.plugins:maven-deploy-plugin Bumps [org.apache.maven.plugins:maven-deploy-plugin](https://github.com/apache/maven-deploy-plugin) from 3.1.2 to 3.1.3. - [Release notes](https://github.com/apache/maven-deploy-plugin/releases) - [Commits](https://github.com/apache/maven-deploy-plugin/compare/maven-deploy-plugin-3.1.2...maven-deploy-plugin-3.1.3) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-deploy-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index a6ce83e94..9aac9de65 100644 --- a/pom.xml +++ b/pom.xml @@ -226,7 +226,7 @@ org.apache.maven.plugins maven-deploy-plugin - 3.1.2 + 3.1.3 org.apache.maven.plugins From cfc5f93ece4163f6e95fc8530274fcf5728b636d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 23 Aug 2024 07:21:53 +0000 Subject: [PATCH 694/888] chore(deps-dev): bump com.h2database:h2 from 2.3.230 to 2.3.232 Bumps [com.h2database:h2](https://github.com/h2database/h2database) from 2.3.230 to 2.3.232. - [Release notes](https://github.com/h2database/h2database/releases) - [Commits](https://github.com/h2database/h2database/compare/version-2.3.230...version-2.3.232) --- updated-dependencies: - dependency-name: com.h2database:h2 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- aws-serverless-java-container-springboot3/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index 295dd4afd..23d590d19 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -226,7 +226,7 @@ com.h2database h2 - 2.3.230 + 2.3.232 test From 035e7ccaadbc7c9f727885d76335539496fd80af Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 23 Aug 2024 07:21:57 +0000 Subject: [PATCH 695/888] chore(deps): bump org.apache.maven.plugins:maven-surefire-plugin Bumps [org.apache.maven.plugins:maven-surefire-plugin](https://github.com/apache/maven-surefire) from 3.3.1 to 3.4.0. - [Release notes](https://github.com/apache/maven-surefire/releases) - [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.3.1...surefire-3.4.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-surefire-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index a6ce83e94..3d65a98fe 100644 --- a/pom.xml +++ b/pom.xml @@ -206,7 +206,7 @@ org.apache.maven.plugins maven-surefire-plugin - 3.3.1 + 3.4.0 org.apache.maven.plugins From 1ef0ec2b266bf60d7e06dc26f6f46be1d8e90066 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 23 Aug 2024 07:22:50 +0000 Subject: [PATCH 696/888] chore(deps-dev): bump com.h2database:h2 Bumps [com.h2database:h2](https://github.com/h2database/h2database) from 2.3.230 to 2.3.232. - [Release notes](https://github.com/h2database/h2database/releases) - [Commits](https://github.com/h2database/h2database/compare/version-2.3.230...version-2.3.232) --- updated-dependencies: - dependency-name: com.h2database:h2 dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- aws-serverless-java-container-springboot3/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index 295dd4afd..23d590d19 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -226,7 +226,7 @@ com.h2database h2 - 2.3.230 + 2.3.232 test From 0fc74307e15464afd42c6e3af8dddb600ac9bdf0 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 23 Aug 2024 09:35:44 +0200 Subject: [PATCH 697/888] chore(deps): Update Spring dependencies (framework to 6.1.12, security to 6.3.3, boot to 3.3.3) --- aws-serverless-java-container-core/pom.xml | 2 +- aws-serverless-java-container-spring/pom.xml | 4 ++-- aws-serverless-java-container-springboot3/pom.xml | 6 +++--- .../src/main/resources/archetype-resources/build.gradle | 4 ++-- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/spring/pet-store/build.gradle | 4 ++-- samples/spring/pet-store/pom.xml | 2 +- samples/springboot3/alt-pet-store/build.gradle | 2 +- samples/springboot3/alt-pet-store/pom.xml | 2 +- samples/springboot3/graphql-pet-store/pom.xml | 2 +- samples/springboot3/pet-store-native/pom.xml | 2 +- samples/springboot3/pet-store/build.gradle | 2 +- samples/springboot3/pet-store/pom.xml | 2 +- 15 files changed, 20 insertions(+), 20 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 10e06b180..f3b93880a 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -60,7 +60,7 @@ org.springframework.security spring-security-web - 6.3.1 + 6.3.3 test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index adf8d0f2b..0130a93cd 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -16,8 +16,8 @@ - 6.1.11 - 6.3.1 + 6.1.12 + 6.3.3 diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index 295dd4afd..b4dbf1cd9 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -15,9 +15,9 @@ 2.1.0-SNAPSHOT - 6.1.11 - 3.3.2 - 6.3.1 + 6.1.12 + 3.3.3 + 6.3.3 diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index 0d5483919..daaf61428 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -7,8 +7,8 @@ repositories { dependencies { implementation ( - 'org.springframework:spring-webmvc:6.1.11', - 'org.springframework:spring-context:6.1.11', + 'org.springframework:spring-webmvc:6.1.12', + 'org.springframework:spring-context:6.1.12', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[2.0-SNAPSHOT,)', 'org.apache.logging.log4j:log4j-core:2.23.1', 'org.apache.logging.log4j:log4j-api:2.23.1', diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index 3422f4f24..759b3ad27 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 1.8 - 6.1.11 + 6.1.12 5.11.0 2.23.1 diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle index a22582d1e..c14e9e847 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle @@ -9,7 +9,7 @@ repositories { dependencies { implementation ( - 'org.springframework.boot:spring-boot-starter-web:3.3.2', + 'org.springframework.boot:spring-boot-starter-web:3.3.3', 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:[2.0-SNAPSHOT,)', ) diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml index c13ba13d7..5a869829f 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ org.springframework.boot spring-boot-starter-parent - 3.3.2 + 3.3.3 diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index 7c61f9aee..796b98c29 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -7,8 +7,8 @@ repositories { dependencies { implementation ( - 'org.springframework:spring-webmvc:6.1.11', - 'org.springframework:spring-context:6.1.11', + 'org.springframework:spring-webmvc:6.1.12', + 'org.springframework:spring-context:6.1.12', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[2.0-SNAPSHOT,)', 'org.apache.logging.log4j:log4j-core:2.23.1', 'org.apache.logging.log4j:log4j-api:2.23.1', diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index 5521b4c07..44e9aaf73 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -24,7 +24,7 @@ - 6.1.11 + 6.1.12 2.23.1 17 17 diff --git a/samples/springboot3/alt-pet-store/build.gradle b/samples/springboot3/alt-pet-store/build.gradle index 60efe6a78..444656eda 100644 --- a/samples/springboot3/alt-pet-store/build.gradle +++ b/samples/springboot3/alt-pet-store/build.gradle @@ -9,7 +9,7 @@ repositories { dependencies { implementation ( - implementation('org.springframework.boot:spring-boot-starter-web:3.3.2') { + implementation('org.springframework.boot:spring-boot-starter-web:3.3.3') { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat' }, 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:[2.0-SNAPSHOT,)', diff --git a/samples/springboot3/alt-pet-store/pom.xml b/samples/springboot3/alt-pet-store/pom.xml index f4313cf72..6c27f7c3d 100644 --- a/samples/springboot3/alt-pet-store/pom.xml +++ b/samples/springboot3/alt-pet-store/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 3.3.2 + 3.3.3 diff --git a/samples/springboot3/graphql-pet-store/pom.xml b/samples/springboot3/graphql-pet-store/pom.xml index 57868b535..be77bc8d7 100644 --- a/samples/springboot3/graphql-pet-store/pom.xml +++ b/samples/springboot3/graphql-pet-store/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 3.3.2 + 3.3.3 diff --git a/samples/springboot3/pet-store-native/pom.xml b/samples/springboot3/pet-store-native/pom.xml index 223755107..d97fe615e 100644 --- a/samples/springboot3/pet-store-native/pom.xml +++ b/samples/springboot3/pet-store-native/pom.xml @@ -6,7 +6,7 @@ org.springframework.boot spring-boot-starter-parent - 3.3.2 + 3.3.3 com.amazonaws.serverless.sample diff --git a/samples/springboot3/pet-store/build.gradle b/samples/springboot3/pet-store/build.gradle index 60efe6a78..444656eda 100644 --- a/samples/springboot3/pet-store/build.gradle +++ b/samples/springboot3/pet-store/build.gradle @@ -9,7 +9,7 @@ repositories { dependencies { implementation ( - implementation('org.springframework.boot:spring-boot-starter-web:3.3.2') { + implementation('org.springframework.boot:spring-boot-starter-web:3.3.3') { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat' }, 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:[2.0-SNAPSHOT,)', diff --git a/samples/springboot3/pet-store/pom.xml b/samples/springboot3/pet-store/pom.xml index 10546c8ec..e2832acfa 100644 --- a/samples/springboot3/pet-store/pom.xml +++ b/samples/springboot3/pet-store/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 3.3.2 + 3.3.3 From 1faca719891f083170109875ef6f0a630a817e60 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 23 Aug 2024 09:47:39 +0200 Subject: [PATCH 698/888] chore: add groups to dependabot configuration --- .github/dependabot.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 0cbe65d79..cc36223dc 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -21,6 +21,9 @@ updates: junit: patterns: - "org.junit:*" + maven-install-plugin: + patterns: + - "org.apache.maven.plugins:maven-install-plugin" schedule: interval: "weekly" open-pull-requests-limit: 20 From 69818ed0707454400cb71c0b7e8cb46b67b1dd4a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 23 Aug 2024 07:48:59 +0000 Subject: [PATCH 699/888] chore(deps): bump the maven-install-plugin group across 15 directories with 1 update Bumps the maven-install-plugin group with 1 update in the / directory: [org.apache.maven.plugins:maven-install-plugin](https://github.com/apache/maven-install-plugin). Bumps the maven-install-plugin group with 1 update in the /aws-serverless-java-container-core directory: [org.apache.maven.plugins:maven-install-plugin](https://github.com/apache/maven-install-plugin). Bumps the maven-install-plugin group with 1 update in the /aws-serverless-java-container-jersey directory: [org.apache.maven.plugins:maven-install-plugin](https://github.com/apache/maven-install-plugin). Bumps the maven-install-plugin group with 1 update in the /aws-serverless-java-container-spring directory: [org.apache.maven.plugins:maven-install-plugin](https://github.com/apache/maven-install-plugin). Bumps the maven-install-plugin group with 1 update in the /aws-serverless-java-container-springboot3 directory: [org.apache.maven.plugins:maven-install-plugin](https://github.com/apache/maven-install-plugin). Bumps the maven-install-plugin group with 1 update in the /aws-serverless-java-container-struts directory: [org.apache.maven.plugins:maven-install-plugin](https://github.com/apache/maven-install-plugin). Bumps the maven-install-plugin group with 1 update in the /aws-serverless-jersey-archetype directory: [org.apache.maven.plugins:maven-install-plugin](https://github.com/apache/maven-install-plugin). Bumps the maven-install-plugin group with 1 update in the /aws-serverless-spring-archetype directory: [org.apache.maven.plugins:maven-install-plugin](https://github.com/apache/maven-install-plugin). Bumps the maven-install-plugin group with 1 update in the /aws-serverless-springboot3-archetype directory: [org.apache.maven.plugins:maven-install-plugin](https://github.com/apache/maven-install-plugin). Bumps the maven-install-plugin group with 1 update in the /aws-serverless-struts-archetype directory: [org.apache.maven.plugins:maven-install-plugin](https://github.com/apache/maven-install-plugin). Bumps the maven-install-plugin group with 1 update in the /samples/jersey/pet-store directory: [org.apache.maven.plugins:maven-install-plugin](https://github.com/apache/maven-install-plugin). Bumps the maven-install-plugin group with 1 update in the /samples/spring/pet-store directory: [org.apache.maven.plugins:maven-install-plugin](https://github.com/apache/maven-install-plugin). Bumps the maven-install-plugin group with 1 update in the /samples/springboot3/alt-pet-store directory: [org.apache.maven.plugins:maven-install-plugin](https://github.com/apache/maven-install-plugin). Bumps the maven-install-plugin group with 1 update in the /samples/springboot3/graphql-pet-store directory: [org.apache.maven.plugins:maven-install-plugin](https://github.com/apache/maven-install-plugin). Bumps the maven-install-plugin group with 1 update in the /samples/springboot3/pet-store directory: [org.apache.maven.plugins:maven-install-plugin](https://github.com/apache/maven-install-plugin). Updates `org.apache.maven.plugins:maven-install-plugin` from 3.1.2 to 3.1.3 - [Release notes](https://github.com/apache/maven-install-plugin/releases) - [Commits](https://github.com/apache/maven-install-plugin/compare/maven-install-plugin-3.1.2...maven-install-plugin-3.1.3) Updates `org.apache.maven.plugins:maven-install-plugin` from 3.1.2 to 3.1.3 - [Release notes](https://github.com/apache/maven-install-plugin/releases) - [Commits](https://github.com/apache/maven-install-plugin/compare/maven-install-plugin-3.1.2...maven-install-plugin-3.1.3) Updates `org.apache.maven.plugins:maven-install-plugin` from 3.1.2 to 3.1.3 - [Release notes](https://github.com/apache/maven-install-plugin/releases) - [Commits](https://github.com/apache/maven-install-plugin/compare/maven-install-plugin-3.1.2...maven-install-plugin-3.1.3) Updates `org.apache.maven.plugins:maven-install-plugin` from 3.1.2 to 3.1.3 - [Release notes](https://github.com/apache/maven-install-plugin/releases) - [Commits](https://github.com/apache/maven-install-plugin/compare/maven-install-plugin-3.1.2...maven-install-plugin-3.1.3) Updates `org.apache.maven.plugins:maven-install-plugin` from 3.1.2 to 3.1.3 - [Release notes](https://github.com/apache/maven-install-plugin/releases) - [Commits](https://github.com/apache/maven-install-plugin/compare/maven-install-plugin-3.1.2...maven-install-plugin-3.1.3) Updates `org.apache.maven.plugins:maven-install-plugin` from 3.1.2 to 3.1.3 - [Release notes](https://github.com/apache/maven-install-plugin/releases) - [Commits](https://github.com/apache/maven-install-plugin/compare/maven-install-plugin-3.1.2...maven-install-plugin-3.1.3) Updates `org.apache.maven.plugins:maven-install-plugin` from 3.1.2 to 3.1.3 - [Release notes](https://github.com/apache/maven-install-plugin/releases) - [Commits](https://github.com/apache/maven-install-plugin/compare/maven-install-plugin-3.1.2...maven-install-plugin-3.1.3) Updates `org.apache.maven.plugins:maven-install-plugin` from 3.1.2 to 3.1.3 - [Release notes](https://github.com/apache/maven-install-plugin/releases) - [Commits](https://github.com/apache/maven-install-plugin/compare/maven-install-plugin-3.1.2...maven-install-plugin-3.1.3) Updates `org.apache.maven.plugins:maven-install-plugin` from 3.1.2 to 3.1.3 - [Release notes](https://github.com/apache/maven-install-plugin/releases) - [Commits](https://github.com/apache/maven-install-plugin/compare/maven-install-plugin-3.1.2...maven-install-plugin-3.1.3) Updates `org.apache.maven.plugins:maven-install-plugin` from 3.1.2 to 3.1.3 - [Release notes](https://github.com/apache/maven-install-plugin/releases) - [Commits](https://github.com/apache/maven-install-plugin/compare/maven-install-plugin-3.1.2...maven-install-plugin-3.1.3) Updates `org.apache.maven.plugins:maven-install-plugin` from 3.1.2 to 3.1.3 - [Release notes](https://github.com/apache/maven-install-plugin/releases) - [Commits](https://github.com/apache/maven-install-plugin/compare/maven-install-plugin-3.1.2...maven-install-plugin-3.1.3) Updates `org.apache.maven.plugins:maven-install-plugin` from 3.1.2 to 3.1.3 - [Release notes](https://github.com/apache/maven-install-plugin/releases) - [Commits](https://github.com/apache/maven-install-plugin/compare/maven-install-plugin-3.1.2...maven-install-plugin-3.1.3) Updates `org.apache.maven.plugins:maven-install-plugin` from 3.1.2 to 3.1.3 - [Release notes](https://github.com/apache/maven-install-plugin/releases) - [Commits](https://github.com/apache/maven-install-plugin/compare/maven-install-plugin-3.1.2...maven-install-plugin-3.1.3) Updates `org.apache.maven.plugins:maven-install-plugin` from 3.1.2 to 3.1.3 - [Release notes](https://github.com/apache/maven-install-plugin/releases) - [Commits](https://github.com/apache/maven-install-plugin/compare/maven-install-plugin-3.1.2...maven-install-plugin-3.1.3) Updates `org.apache.maven.plugins:maven-install-plugin` from 3.1.2 to 3.1.3 - [Release notes](https://github.com/apache/maven-install-plugin/releases) - [Commits](https://github.com/apache/maven-install-plugin/compare/maven-install-plugin-3.1.2...maven-install-plugin-3.1.3) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-install-plugin dependency-type: direct:production update-type: version-update:semver-patch dependency-group: maven-install-plugin - dependency-name: org.apache.maven.plugins:maven-install-plugin dependency-type: direct:production update-type: version-update:semver-patch dependency-group: maven-install-plugin - dependency-name: org.apache.maven.plugins:maven-install-plugin dependency-type: direct:production update-type: version-update:semver-patch dependency-group: maven-install-plugin - dependency-name: org.apache.maven.plugins:maven-install-plugin dependency-type: direct:production update-type: version-update:semver-patch dependency-group: maven-install-plugin - dependency-name: org.apache.maven.plugins:maven-install-plugin dependency-type: direct:production update-type: version-update:semver-patch dependency-group: maven-install-plugin - dependency-name: org.apache.maven.plugins:maven-install-plugin dependency-type: direct:production update-type: version-update:semver-patch dependency-group: maven-install-plugin - dependency-name: org.apache.maven.plugins:maven-install-plugin dependency-type: direct:production update-type: version-update:semver-patch dependency-group: maven-install-plugin - dependency-name: org.apache.maven.plugins:maven-install-plugin dependency-type: direct:production update-type: version-update:semver-patch dependency-group: maven-install-plugin - dependency-name: org.apache.maven.plugins:maven-install-plugin dependency-type: direct:production update-type: version-update:semver-patch dependency-group: maven-install-plugin - dependency-name: org.apache.maven.plugins:maven-install-plugin dependency-type: direct:production update-type: version-update:semver-patch dependency-group: maven-install-plugin - dependency-name: org.apache.maven.plugins:maven-install-plugin dependency-type: direct:production update-type: version-update:semver-patch dependency-group: maven-install-plugin - dependency-name: org.apache.maven.plugins:maven-install-plugin dependency-type: direct:production update-type: version-update:semver-patch dependency-group: maven-install-plugin - dependency-name: org.apache.maven.plugins:maven-install-plugin dependency-type: direct:production update-type: version-update:semver-patch dependency-group: maven-install-plugin - dependency-name: org.apache.maven.plugins:maven-install-plugin dependency-type: direct:production update-type: version-update:semver-patch dependency-group: maven-install-plugin - dependency-name: org.apache.maven.plugins:maven-install-plugin dependency-type: direct:production update-type: version-update:semver-patch dependency-group: maven-install-plugin ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- samples/jersey/pet-store/pom.xml | 2 +- samples/spring/pet-store/pom.xml | 2 +- samples/springboot3/alt-pet-store/pom.xml | 2 +- samples/springboot3/graphql-pet-store/pom.xml | 2 +- samples/springboot3/pet-store/pom.xml | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pom.xml b/pom.xml index a6ce83e94..7e0034f72 100644 --- a/pom.xml +++ b/pom.xml @@ -231,7 +231,7 @@ org.apache.maven.plugins maven-install-plugin - 3.1.2 + 3.1.3 org.apache.maven.plugins diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index 5736c49d7..7bdc7ce40 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -123,7 +123,7 @@ org.apache.maven.plugins maven-install-plugin - 3.1.2 + 3.1.3 true diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index 44e9aaf73..6cc5a2c4b 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -144,7 +144,7 @@ org.apache.maven.plugins maven-install-plugin - 3.1.2 + 3.1.3 true diff --git a/samples/springboot3/alt-pet-store/pom.xml b/samples/springboot3/alt-pet-store/pom.xml index 6c27f7c3d..647c09d37 100644 --- a/samples/springboot3/alt-pet-store/pom.xml +++ b/samples/springboot3/alt-pet-store/pom.xml @@ -94,7 +94,7 @@ org.apache.maven.plugins maven-install-plugin - 3.1.2 + 3.1.3 true diff --git a/samples/springboot3/graphql-pet-store/pom.xml b/samples/springboot3/graphql-pet-store/pom.xml index be77bc8d7..2650b0f19 100644 --- a/samples/springboot3/graphql-pet-store/pom.xml +++ b/samples/springboot3/graphql-pet-store/pom.xml @@ -108,7 +108,7 @@ org.apache.maven.plugins maven-install-plugin - 3.1.2 + 3.1.3 true diff --git a/samples/springboot3/pet-store/pom.xml b/samples/springboot3/pet-store/pom.xml index e2832acfa..502620b92 100644 --- a/samples/springboot3/pet-store/pom.xml +++ b/samples/springboot3/pet-store/pom.xml @@ -100,7 +100,7 @@ org.apache.maven.plugins maven-install-plugin - 3.1.2 + 3.1.3 true From 72af4526d495d7da71f4837193f5e051afb48872 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 9 Sep 2024 10:17:10 +0200 Subject: [PATCH 700/888] chore(deps): Update Log4J dependencies to 2.24.0 --- .github/dependabot.yml | 6 ++++++ .../src/main/resources/archetype-resources/build.gradle | 6 +++--- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 6 +++--- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/spring/pet-store/build.gradle | 6 +++--- samples/spring/pet-store/pom.xml | 2 +- samples/struts/pet-store/build.gradle | 4 ++-- samples/struts/pet-store/pom.xml | 2 +- 9 files changed, 21 insertions(+), 15 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index cc36223dc..96dd4d8b3 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -18,6 +18,9 @@ updates: slf4j: patterns: - "org.slf4j:*" + log4j: + patterns: + - "org.apache.logging.log4j:*" junit: patterns: - "org.junit:*" @@ -40,5 +43,8 @@ updates: slf4j: patterns: - "org.slf4j:*" + log4j: + patterns: + - "org.apache.logging.log4j:*" schedule: interval: "weekly" \ No newline at end of file diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index daaf61428..bc675d8f1 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -10,9 +10,9 @@ dependencies { 'org.springframework:spring-webmvc:6.1.12', 'org.springframework:spring-context:6.1.12', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[2.0-SNAPSHOT,)', - 'org.apache.logging.log4j:log4j-core:2.23.1', - 'org.apache.logging.log4j:log4j-api:2.23.1', - 'org.apache.logging.log4j:log4j-slf4j-impl:2.23.1', + 'org.apache.logging.log4j:log4j-core:2.24.0', + 'org.apache.logging.log4j:log4j-api:2.24.0', + 'org.apache.logging.log4j:log4j-slf4j-impl:2.24.0', 'com.fasterxml.jackson.core:jackson-databind:2.17.2', 'com.amazonaws:aws-lambda-java-log4j2:1.6.0', ) diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index 759b3ad27..4860c66e8 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -18,7 +18,7 @@ 1.8 6.1.12 5.11.0 - 2.23.1 + 2.24.0 diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle index 8d96159a7..64b609527 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle @@ -36,9 +36,9 @@ dependencies { implementation ('org.hibernate.validator:hibernate-validator:6.1.7.Final') implementation ('com.fasterxml.jackson.core:jackson-databind:2.17.2') implementation ('com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.17.2') - implementation ('org.apache.logging.log4j:log4j-core:2.23.1') - implementation ('org.apache.logging.log4j:log4j-api:2.23.1') - implementation ('org.apache.logging.log4j:log4j-slf4j-impl:2.23.1') + implementation ('org.apache.logging.log4j:log4j-core:2.24.0') + implementation ('org.apache.logging.log4j:log4j-api:2.24.0') + implementation ('org.apache.logging.log4j:log4j-slf4j-impl:2.24.0') implementation ('com.amazonaws:aws-lambda-java-log4j2:1.6.0') testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml index 5803bd2e6..5c1c2987d 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml @@ -18,7 +18,7 @@ 7.0.0-M8 2.17.2 5.11.0 - 2.23.1 + 2.24.0 diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index 796b98c29..2b3e01a95 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -10,9 +10,9 @@ dependencies { 'org.springframework:spring-webmvc:6.1.12', 'org.springframework:spring-context:6.1.12', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[2.0-SNAPSHOT,)', - 'org.apache.logging.log4j:log4j-core:2.23.1', - 'org.apache.logging.log4j:log4j-api:2.23.1', - 'org.apache.logging.log4j:log4j-slf4j-impl:2.23.1', + 'org.apache.logging.log4j:log4j-core:2.24.0', + 'org.apache.logging.log4j:log4j-api:2.24.0', + 'org.apache.logging.log4j:log4j-slf4j-impl:2.24.0', 'com.fasterxml.jackson.core:jackson-databind:2.17.2', 'com.amazonaws:aws-lambda-java-log4j2:1.6.0', ) diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index 6cc5a2c4b..2949da8d9 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -25,7 +25,7 @@ 6.1.12 - 2.23.1 + 2.24.0 17 17 diff --git a/samples/struts/pet-store/build.gradle b/samples/struts/pet-store/build.gradle index 5fdd43e54..56deb9a5d 100644 --- a/samples/struts/pet-store/build.gradle +++ b/samples/struts/pet-store/build.gradle @@ -24,8 +24,8 @@ dependencies { 'jakarta.el:jakarta.el-api:5.0.1', 'com.fasterxml.jackson.core:jackson-databind:2.17.2', 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.17.2', - 'org.apache.logging.log4j:log4j-core:2.23.1', - 'org.apache.logging.log4j:log4j-api:2.23.1', + 'org.apache.logging.log4j:log4j-core:2.24.0', + 'org.apache.logging.log4j:log4j-api:2.24.0', 'com.amazonaws:aws-lambda-java-log4j2:1.6.0', ) } diff --git a/samples/struts/pet-store/pom.xml b/samples/struts/pet-store/pom.xml index 9c466a3a5..8e3f7f13f 100644 --- a/samples/struts/pet-store/pom.xml +++ b/samples/struts/pet-store/pom.xml @@ -29,7 +29,7 @@ 7.0.0-M8 2.17.2 4.13.2 - 2.23.1 + 2.24.0 From 71eac1f27ddda37038c0973de0d9fe052b06b329 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 20 Sep 2024 15:52:09 +0200 Subject: [PATCH 701/888] chore(deps): Update Spring dependencies (framework to 6.1.13, boot to 3.3.4) --- aws-serverless-java-container-springboot3/pom.xml | 4 ++-- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/springboot3/alt-pet-store/build.gradle | 2 +- samples/springboot3/alt-pet-store/pom.xml | 2 +- samples/springboot3/graphql-pet-store/pom.xml | 2 +- samples/springboot3/pet-store-native/pom.xml | 2 +- samples/springboot3/pet-store/build.gradle | 2 +- samples/springboot3/pet-store/pom.xml | 2 +- 9 files changed, 10 insertions(+), 10 deletions(-) diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index f152c419e..953e8bdb0 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -15,8 +15,8 @@ 2.1.0-SNAPSHOT - 6.1.12 - 3.3.3 + 6.1.13 + 3.3.4 6.3.3 diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle index c14e9e847..47925cfc3 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle @@ -9,7 +9,7 @@ repositories { dependencies { implementation ( - 'org.springframework.boot:spring-boot-starter-web:3.3.3', + 'org.springframework.boot:spring-boot-starter-web:3.3.4', 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:[2.0-SNAPSHOT,)', ) diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml index 5a869829f..042d5a503 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ org.springframework.boot spring-boot-starter-parent - 3.3.3 + 3.3.4 diff --git a/samples/springboot3/alt-pet-store/build.gradle b/samples/springboot3/alt-pet-store/build.gradle index 444656eda..4e5bf5139 100644 --- a/samples/springboot3/alt-pet-store/build.gradle +++ b/samples/springboot3/alt-pet-store/build.gradle @@ -9,7 +9,7 @@ repositories { dependencies { implementation ( - implementation('org.springframework.boot:spring-boot-starter-web:3.3.3') { + implementation('org.springframework.boot:spring-boot-starter-web:3.3.4') { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat' }, 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:[2.0-SNAPSHOT,)', diff --git a/samples/springboot3/alt-pet-store/pom.xml b/samples/springboot3/alt-pet-store/pom.xml index 647c09d37..28ab529c4 100644 --- a/samples/springboot3/alt-pet-store/pom.xml +++ b/samples/springboot3/alt-pet-store/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 3.3.3 + 3.3.4 diff --git a/samples/springboot3/graphql-pet-store/pom.xml b/samples/springboot3/graphql-pet-store/pom.xml index 2650b0f19..38440b377 100644 --- a/samples/springboot3/graphql-pet-store/pom.xml +++ b/samples/springboot3/graphql-pet-store/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 3.3.3 + 3.3.4 diff --git a/samples/springboot3/pet-store-native/pom.xml b/samples/springboot3/pet-store-native/pom.xml index d97fe615e..e8c1fbc3f 100644 --- a/samples/springboot3/pet-store-native/pom.xml +++ b/samples/springboot3/pet-store-native/pom.xml @@ -6,7 +6,7 @@ org.springframework.boot spring-boot-starter-parent - 3.3.3 + 3.3.4 com.amazonaws.serverless.sample diff --git a/samples/springboot3/pet-store/build.gradle b/samples/springboot3/pet-store/build.gradle index 444656eda..4e5bf5139 100644 --- a/samples/springboot3/pet-store/build.gradle +++ b/samples/springboot3/pet-store/build.gradle @@ -9,7 +9,7 @@ repositories { dependencies { implementation ( - implementation('org.springframework.boot:spring-boot-starter-web:3.3.3') { + implementation('org.springframework.boot:spring-boot-starter-web:3.3.4') { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat' }, 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:[2.0-SNAPSHOT,)', diff --git a/samples/springboot3/pet-store/pom.xml b/samples/springboot3/pet-store/pom.xml index 502620b92..56b0ab8a6 100644 --- a/samples/springboot3/pet-store/pom.xml +++ b/samples/springboot3/pet-store/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 3.3.3 + 3.3.4 From ed8d0b579520e59b48000970ed06e8be1b7e09ce Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 20 Sep 2024 16:04:05 +0200 Subject: [PATCH 702/888] chore(deps): Update Spring dependencies (framework to 6.1.13, boot to 3.3.4) --- aws-serverless-java-container-spring/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 4 ++-- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/spring/pet-store/build.gradle | 4 ++-- samples/spring/pet-store/pom.xml | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 0130a93cd..d160a911a 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -16,7 +16,7 @@ - 6.1.12 + 6.1.13 6.3.3 diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index bc675d8f1..145531587 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -7,8 +7,8 @@ repositories { dependencies { implementation ( - 'org.springframework:spring-webmvc:6.1.12', - 'org.springframework:spring-context:6.1.12', + 'org.springframework:spring-webmvc:6.1.13', + 'org.springframework:spring-context:6.1.13', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[2.0-SNAPSHOT,)', 'org.apache.logging.log4j:log4j-core:2.24.0', 'org.apache.logging.log4j:log4j-api:2.24.0', diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index 4860c66e8..0e007227c 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 1.8 - 6.1.12 + 6.1.13 5.11.0 2.24.0 diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index 2b3e01a95..ba627f2e8 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -7,8 +7,8 @@ repositories { dependencies { implementation ( - 'org.springframework:spring-webmvc:6.1.12', - 'org.springframework:spring-context:6.1.12', + 'org.springframework:spring-webmvc:6.1.13', + 'org.springframework:spring-context:6.1.13', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[2.0-SNAPSHOT,)', 'org.apache.logging.log4j:log4j-core:2.24.0', 'org.apache.logging.log4j:log4j-api:2.24.0', diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index 2949da8d9..9f2d29bba 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -24,7 +24,7 @@ - 6.1.12 + 6.1.13 2.24.0 17 17 From 6184609ac2b5ec788295ba05ea67634cc39a6bb8 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 20 Sep 2024 16:08:33 +0200 Subject: [PATCH 703/888] chore(deps): updated some struts dependencies (although currently not released) --- aws-serverless-java-container-struts/pom.xml | 2 +- .../main/resources/archetype-resources/build.gradle | 10 +++++----- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/struts/pet-store/build.gradle | 8 ++++---- samples/struts/pet-store/pom.xml | 2 +- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/aws-serverless-java-container-struts/pom.xml b/aws-serverless-java-container-struts/pom.xml index e06abbf04..4546f4723 100644 --- a/aws-serverless-java-container-struts/pom.xml +++ b/aws-serverless-java-container-struts/pom.xml @@ -15,7 +15,7 @@ - 7.0.0-M8 + 7.0.0-M9 diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle index 64b609527..892b44d38 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle @@ -18,19 +18,19 @@ dependencies { exclude group: 'org.apache.logging.log4j', module: 'log4j-api' exclude group: 'org.apache.logging.log4j', module: 'log4j-to-slf4j' } - implementation ('org.apache.struts:struts2-convention-plugin:7.0.0-M8') { + implementation ('org.apache.struts:struts2-convention-plugin:7.0.0-M9') { exclude group: 'org.apache.struts', module: 'struts2-core' } - implementation ('org.apache.struts:struts2-rest-plugin:7.0.0-M8') { + implementation ('org.apache.struts:struts2-rest-plugin:7.0.0-M9') { exclude group: 'org.apache.struts', module: 'struts2-core' } - implementation ('org.apache.struts:struts2-bean-validation-plugin:7.0.0-M8') { + implementation ('org.apache.struts:struts2-bean-validation-plugin:7.0.0-M9') { exclude group: 'org.apache.struts', module: 'struts2-core' } implementation ('com.jgeppert.struts2:struts2-aws-lambda-support-plugin:1.4.3') { exclude group: 'org.apache.struts', module: 'struts2-core' } - implementation ('org.apache.struts:struts2-core:7.0.0-M8') { + implementation ('org.apache.struts:struts2-core:7.0.0-M9') { exclude group: 'org.apache.logging.log4j', module: 'log4j-api' } implementation ('org.hibernate.validator:hibernate-validator:6.1.7.Final') @@ -45,7 +45,7 @@ dependencies { testImplementation("org.apache.httpcomponents.client5:httpclient5:5.3.1") testImplementation(platform("org.junit:junit-bom:5.11.0")) testImplementation("org.junit.jupiter:junit-jupiter") - testImplementation('org.apache.struts:struts2-junit-plugin:7.0.0-M8') { + testImplementation('org.apache.struts:struts2-junit-plugin:7.0.0-M9') { exclude group: 'org.apache.struts', module: 'struts2-core' } } diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml index 5c1c2987d..9b7fb33a7 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml @@ -15,7 +15,7 @@ 1.8 1.8 - 7.0.0-M8 + 7.0.0-M9 2.17.2 5.11.0 2.24.0 diff --git a/samples/struts/pet-store/build.gradle b/samples/struts/pet-store/build.gradle index 56deb9a5d..85eb0492c 100644 --- a/samples/struts/pet-store/build.gradle +++ b/samples/struts/pet-store/build.gradle @@ -14,10 +14,10 @@ configurations { dependencies { implementation ( 'com.amazonaws.serverless:aws-serverless-java-container-struts:[2.0-SNAPSHOT,)', - 'org.apache.struts:struts2-convention-plugin:7.0.0-M8', - 'org.apache.struts:struts2-rest-plugin:7.0.0-M8', - 'org.apache.struts:struts2-bean-validation-plugin:7.0.0-M8', - 'org.apache.struts:struts2-junit-plugin:7.0.0-M8', + 'org.apache.struts:struts2-convention-plugin:7.0.0-M9', + 'org.apache.struts:struts2-rest-plugin:7.0.0-M9', + 'org.apache.struts:struts2-bean-validation-plugin:7.0.0-M9', + 'org.apache.struts:struts2-junit-plugin:7.0.0-M9', 'com.jgeppert.struts2:struts2-aws-lambda-support-plugin:1.4.3', 'org.hibernate.validator:hibernate-validator:6.1.7.Final', 'org.glassfish:jakarta.el:5.0.0-M1', diff --git a/samples/struts/pet-store/pom.xml b/samples/struts/pet-store/pom.xml index 8e3f7f13f..09a6e411e 100644 --- a/samples/struts/pet-store/pom.xml +++ b/samples/struts/pet-store/pom.xml @@ -26,7 +26,7 @@ 1.8 1.8 - 7.0.0-M8 + 7.0.0-M9 2.17.2 4.13.2 2.24.0 From eb25f48581b12a3f4cb06b14d6d04cb3862d389b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 20 Sep 2024 14:12:28 +0000 Subject: [PATCH 704/888] chore(deps): bump org.apache.maven.plugins:maven-surefire-plugin Bumps [org.apache.maven.plugins:maven-surefire-plugin](https://github.com/apache/maven-surefire) from 3.4.0 to 3.5.0. - [Release notes](https://github.com/apache/maven-surefire/releases) - [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.4.0...surefire-3.5.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-surefire-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index b282f140f..25c610ae8 100644 --- a/pom.xml +++ b/pom.xml @@ -206,7 +206,7 @@ org.apache.maven.plugins maven-surefire-plugin - 3.4.0 + 3.5.0 org.apache.maven.plugins From 9f61d504466c8f2796c580b25c2b8f2b62953a17 Mon Sep 17 00:00:00 2001 From: kibeom lee <70303094+2012160085@users.noreply.github.com> Date: Sun, 22 Sep 2024 15:10:34 +0900 Subject: [PATCH 705/888] Add unit test to verify cookie behavior with Max-Age=0 --- .../servlet/AwsHttpServletResponseTest.java | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponseTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponseTest.java index 6c951a4f1..88d2a5e74 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponseTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponseTest.java @@ -17,6 +17,7 @@ import java.text.SimpleDateFormat; import java.time.Instant; import java.util.Calendar; +import java.util.Locale; import java.util.TimeZone; import java.util.concurrent.CountDownLatch; import java.util.regex.Matcher; @@ -36,7 +37,7 @@ public class AwsHttpServletResponseTest { private static final int MAX_AGE_VALUE = 300; private static final Pattern MAX_AGE_PATTERN = Pattern.compile("Max-Age=(-?[0-9]+)"); - private static final Pattern EXPIRES_PATTERN = Pattern.compile("Expires=(.*)$"); + private static final Pattern EXPIRES_PATTERN = Pattern.compile("Expires=([^;]+)"); private static final String CONTENT_TYPE_WITH_CHARSET = "application/json; charset=UTF-8"; private static final String JAVASCRIPT_CONTENT_TYPE_WITH_CHARSET = "application/javascript; charset=UTF-8"; @@ -144,6 +145,23 @@ void cookie_addCookieWithoutMaxAge_expectNoExpires() { assertFalse(cookieHeader.contains("Expires")); } + @Test + void cookie_addCookieWithMaxAgeZero_expectExpiresInThePast() { + AwsHttpServletResponse resp = new AwsHttpServletResponse(null, null); + Cookie zeroMaxAgeCookie = new Cookie(COOKIE_NAME, COOKIE_VALUE); + zeroMaxAgeCookie.setMaxAge(0); + + resp.addCookie(zeroMaxAgeCookie); + String cookieHeader = resp.getHeader(HttpHeaders.SET_COOKIE); + + Calendar cal = getExpires(cookieHeader); + long currentTimeMillis = System.currentTimeMillis(); + + assertNotNull(cookieHeader); + assertTrue(cal.getTimeInMillis() < currentTimeMillis); + assertTrue(cookieHeader.contains(COOKIE_NAME + "=" + COOKIE_VALUE)); + } + @Test void responseHeaders_getAwsResponseHeaders_expectLatestHeader() { AwsHttpServletResponse resp = new AwsHttpServletResponse(null, null); @@ -352,7 +370,7 @@ private Calendar getExpires(String header) { assertTrue(ageMatcher.find()); assertTrue(ageMatcher.groupCount() >= 1); String expiresString = ageMatcher.group(1); - SimpleDateFormat sdf = new SimpleDateFormat(AwsHttpServletResponse.HEADER_DATE_PATTERN); + SimpleDateFormat sdf = new SimpleDateFormat(AwsHttpServletResponse.HEADER_DATE_PATTERN, Locale.US); Calendar cal = Calendar.getInstance(); try { cal.setTime(sdf.parse(expiresString)); From 3a720953f276b76207f099e665386c146683ec71 Mon Sep 17 00:00:00 2001 From: kibeom lee <70303094+2012160085@users.noreply.github.com> Date: Sun, 22 Sep 2024 17:15:35 +0900 Subject: [PATCH 706/888] Add Servlet request tests to validate RFC 6265 cookie compliance --- .../servlet/AwsHttpServletRequestTest.java | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestTest.java index 2bc433041..358d673a1 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestTest.java @@ -26,6 +26,12 @@ public class AwsHttpServletRequestTest { .header(HttpHeaders.CONTENT_TYPE, "application/xml; charset=utf-8").build(); private static final AwsProxyRequest validCookieRequest = new AwsProxyRequestBuilder("/cookie", "GET") .header(HttpHeaders.COOKIE, "yummy_cookie=choco; tasty_cookie=strawberry").build(); + private static final AwsProxyRequest controlCharCookieRequest = new AwsProxyRequestBuilder("/cookie", "GET") + .header(HttpHeaders.COOKIE, "name=\u0007\u0009; tasty_cookie=strawberry").build(); + private static final AwsProxyRequest unicodeCookieRequest = new AwsProxyRequestBuilder("/cookie", "GET") + .header(HttpHeaders.COOKIE, "yummy_cookie=chøcø; tasty_cookie=strawberry").build(); + private static final AwsProxyRequest invalidNameCookieRequest = new AwsProxyRequestBuilder("/cookie", "GET") + .header(HttpHeaders.COOKIE, "yummy@cookie=choco; tasty_cookie=strawberry").build(); private static final AwsProxyRequest complexAcceptHeader = new AwsProxyRequestBuilder("/accept", "GET") .header(HttpHeaders.ACCEPT, "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8").build(); private static final AwsProxyRequest queryString = new AwsProxyRequestBuilder("/test", "GET") @@ -75,6 +81,39 @@ void headers_parseHeaderValue_validMultipleCookie() { assertEquals("strawberry", values.get(1).getValue()); } + @Test + void headers_parseHeaderValue_controlCharCookie() { + AwsProxyHttpServletRequest request = new AwsProxyHttpServletRequest(controlCharCookieRequest, mockContext, null, config); + Cookie[] cookies = request.getCookies(); + + // parse only valid cookies + assertEquals(1, cookies.length); + assertEquals("tasty_cookie", cookies[0].getName()); + assertEquals("strawberry", cookies[0].getValue()); + } + + @Test + void headers_parseHeaderValue_unicodeCookie() { + AwsProxyHttpServletRequest request = new AwsProxyHttpServletRequest(unicodeCookieRequest, mockContext, null, config); + Cookie[] cookies = request.getCookies(); + + // parse only valid cookies + assertEquals(1, cookies.length); + assertEquals("tasty_cookie", cookies[0].getName()); + assertEquals("strawberry", cookies[0].getValue()); + } + + @Test + void headers_parseHeaderValue_invalidNameCookie() { + AwsProxyHttpServletRequest request = new AwsProxyHttpServletRequest(invalidNameCookieRequest, mockContext, null, config); + Cookie[] cookies = request.getCookies(); + + // parse only valid cookies + assertEquals(1, cookies.length); + assertEquals("tasty_cookie", cookies[0].getName()); + assertEquals("strawberry", cookies[0].getValue()); + } + @Test void headers_parseHeaderValue_complexAccept() { AwsProxyHttpServletRequest request = new AwsProxyHttpServletRequest(complexAcceptHeader, mockContext, null, config); From c04fd1387cf4b20207abd43225ea06ffc8973277 Mon Sep 17 00:00:00 2001 From: kibeom lee <70303094+2012160085@users.noreply.github.com> Date: Sun, 22 Sep 2024 19:57:39 +0900 Subject: [PATCH 707/888] feat: Introduce CookieProcessor interface and refactor cookie handling - Created a `CookieProcessor` interface along with its implementation `AwsCookieProcessor` to encapsulate cookie parsing and formatting logic. - Modified `AwsHttpServletResponse` and `AwsHttpServletRequest` to use the `CookieProcessor` for all cookie-related operations. --- .../internal/servlet/AwsCookieProcessor.java | 275 ++++++++++++++++++ .../AwsHttpApiV2ProxyHttpServletRequest.java | 17 +- .../servlet/AwsHttpServletRequest.java | 15 +- .../servlet/AwsHttpServletResponse.java | 35 +-- .../internal/servlet/CookieProcessor.java | 23 ++ 5 files changed, 317 insertions(+), 48 deletions(-) create mode 100644 aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsCookieProcessor.java create mode 100644 aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/CookieProcessor.java diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsCookieProcessor.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsCookieProcessor.java new file mode 100644 index 000000000..2a8496082 --- /dev/null +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsCookieProcessor.java @@ -0,0 +1,275 @@ +package com.amazonaws.serverless.proxy.internal.servlet; + +import com.amazonaws.serverless.proxy.internal.SecurityUtils; +import jakarta.servlet.http.Cookie; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.text.DateFormat; +import java.text.FieldPosition; +import java.text.SimpleDateFormat; +import java.util.*; + +/** + * Implementation of the CookieProcessor interface that provides cookie parsing and generation functionality. + */ +public class AwsCookieProcessor implements CookieProcessor { + + // Cookie attribute constants + static final String COOKIE_COMMENT_ATTR = "Comment"; + static final String COOKIE_DOMAIN_ATTR = "Domain"; + static final String COOKIE_MAX_AGE_ATTR = "Max-Age"; + static final String COOKIE_PATH_ATTR = "Path"; + static final String COOKIE_SECURE_ATTR = "Secure"; + static final String COOKIE_HTTP_ONLY_ATTR = "HttpOnly"; + static final String COOKIE_SAME_SITE_ATTR = "SameSite"; + static final String COOKIE_PARTITIONED_ATTR = "Partitioned"; + static final String EMPTY_STRING = ""; + + // BitSet to store valid token characters as defined in RFC 2616 + static final BitSet tokenValid = createTokenValidSet(); + + // BitSet to validate domain characters + static final BitSet domainValid = createDomainValidSet(); + + static final String COOKIE_DATE_PATTERN = "EEE, dd MMM yyyy HH:mm:ss z"; + + // ThreadLocal to ensure thread-safe creation of DateFormat instances for each thread + static final ThreadLocal COOKIE_DATE_FORMAT = ThreadLocal.withInitial(() -> { + DateFormat df = new SimpleDateFormat(COOKIE_DATE_PATTERN, Locale.US); + df.setTimeZone(TimeZone.getTimeZone("GMT")); + return df; + }); + + static final String ANCIENT_DATE = COOKIE_DATE_FORMAT.get().format(new Date(10000)); + + static BitSet createTokenValidSet() { + BitSet tokenSet = new BitSet(128); + for (char c = '0'; c <= '9'; c++) tokenSet.set(c); + for (char c = 'a'; c <= 'z'; c++) tokenSet.set(c); + for (char c = 'A'; c <= 'Z'; c++) tokenSet.set(c); + for (char c : "!#$%&'*+-.^_`|~".toCharArray()) tokenSet.set(c); + return tokenSet; + } + + static BitSet createDomainValidSet() { + BitSet domainValid = new BitSet(128); + for (char c = '0'; c <= '9'; c++) domainValid.set(c); + for (char c = 'a'; c <= 'z'; c++) domainValid.set(c); + for (char c = 'A'; c <= 'Z'; c++) domainValid.set(c); + domainValid.set('.'); + domainValid.set('-'); + return domainValid; + } + + private final Logger log = LoggerFactory.getLogger(AwsCookieProcessor.class); + + @Override + public Cookie[] parseCookieHeader(String cookieHeader) { + // Return an empty array if the input is null or empty after trimming + if (cookieHeader == null || cookieHeader.trim().isEmpty()) { + return new Cookie[0]; + } + + // Parse cookie header and convert to Cookie array + return Arrays.stream(cookieHeader.split("\\s*;\\s*")) + .map(this::parseCookiePair) + .filter(Objects::nonNull) // Filter out invalid pairs + .toArray(Cookie[]::new); + } + + /** + * Parse a single cookie pair (name=value). + * + * @param cookiePair The cookie pair string. + * @return A valid Cookie object or null if the pair is invalid. + */ + private Cookie parseCookiePair(String cookiePair) { + String[] kv = cookiePair.split("=", 2); + + if (kv.length != 2) { + log.warn("Ignoring invalid cookie: {}", cookiePair); + return null; // Skip malformed cookie pairs + } + + String cookieName = kv[0]; + String cookieValue = kv[1]; + + // Validate name and value + if (!isToken(cookieName)){ + log.warn("Ignoring cookie with invalid name: {}={}", cookieName, cookieValue); + return null; // Skip invalid cookie names + } + + if (!isValidCookieValue(cookieValue)) { + log.warn("Ignoring cookie with invalid value: {}={}", cookieName, cookieValue); + return null; // Skip invalid cookie values + } + + // Return a new Cookie object after security processing + return new Cookie(SecurityUtils.crlf(cookieName), SecurityUtils.crlf(cookieValue)); + } + + @Override + public String generateHeader(Cookie cookie) { + StringBuffer header = new StringBuffer(); + header.append(cookie.getName()).append('='); + + String value = cookie.getValue(); + if (value != null && value.length() > 0) { + validateCookieValue(value); + header.append(value); + } + + int maxAge = cookie.getMaxAge(); + if (maxAge > -1) { + header.append("; Expires="); + if (maxAge == 0) { + header.append(ANCIENT_DATE); + } else { + COOKIE_DATE_FORMAT.get().format( + new Date(System.currentTimeMillis() + maxAge * 1000L), header, new FieldPosition(0)); + header.append("; Max-Age=").append(maxAge); + } + } + + String domain = cookie.getDomain(); + if (domain != null && !domain.isEmpty()) { + validateDomain(domain); + header.append("; Domain=").append(domain); + } + + String path = cookie.getPath(); + if (path != null && !path.isEmpty()) { + validatePath(path); + header.append("; Path=").append(path); + } + + if (cookie.getSecure()) { + header.append("; Secure"); + } + + if (cookie.isHttpOnly()) { + header.append("; HttpOnly"); + } + + String sameSite = cookie.getAttribute(COOKIE_SAME_SITE_ATTR); + if (sameSite != null) { + header.append("; SameSite=").append(sameSite); + } + + String partitioned = cookie.getAttribute(COOKIE_PARTITIONED_ATTR); + if (EMPTY_STRING.equals(partitioned)) { + header.append("; Partitioned"); + } + + addAdditionalAttributes(cookie, header); + + return header.toString(); + } + + private void addAdditionalAttributes(Cookie cookie, StringBuffer header) { + for (Map.Entry entry : cookie.getAttributes().entrySet()) { + switch (entry.getKey()) { + case COOKIE_COMMENT_ATTR: + case COOKIE_DOMAIN_ATTR: + case COOKIE_MAX_AGE_ATTR: + case COOKIE_PATH_ATTR: + case COOKIE_SECURE_ATTR: + case COOKIE_HTTP_ONLY_ATTR: + case COOKIE_SAME_SITE_ATTR: + case COOKIE_PARTITIONED_ATTR: + // Already handled attributes are ignored + break; + default: + validateAttribute(entry.getKey(), entry.getValue()); + header.append("; ").append(entry.getKey()); + if (!EMPTY_STRING.equals(entry.getValue())) { + header.append('=').append(entry.getValue()); + } + break; + } + } + } + + private void validateCookieValue(String value) { + if (!isValidCookieValue(value)) { + throw new IllegalArgumentException("Invalid cookie value: " + value); + } + } + + private void validateDomain(String domain) { + if (!isValidDomain(domain)) { + throw new IllegalArgumentException("Invalid cookie domain: " + domain); + } + } + + private void validatePath(String path) { + for (char ch : path.toCharArray()) { + if (ch < 0x20 || ch > 0x7E || ch == ';') { + throw new IllegalArgumentException("Invalid cookie path: " + path); + } + } + } + + private void validateAttribute(String name, String value) { + if (!isToken(name)) { + throw new IllegalArgumentException("Invalid cookie attribute name: " + name); + } + + for (char ch : value.toCharArray()) { + if (ch < 0x20 || ch > 0x7E || ch == ';') { + throw new IllegalArgumentException("Invalid cookie attribute value: " + ch); + } + } + } + + private boolean isValidCookieValue(String value) { + int start = 0; + int end = value.length(); + boolean quoted = end > 1 && value.charAt(0) == '"' && value.charAt(end - 1) == '"'; + + char[] chars = value.toCharArray(); + for (int i = start; i < end; i++) { + if (quoted && (i == start || i == end - 1)) { + continue; + } + char c = chars[i]; + if (!isValidCookieChar(c)) return false; + } + return true; + } + + private boolean isValidDomain(String domain) { + if (domain.isEmpty()) { + return false; + } + int prev = -1; + for (char c : domain.toCharArray()) { + if (!domainValid.get(c) || isInvalidLabelStartOrEnd(prev, c)) { + return false; + } + prev = c; + } + return prev != '.' && prev != '-'; + } + + private boolean isInvalidLabelStartOrEnd(int prev, char current) { + return (prev == '.' || prev == -1) && (current == '.' || current == '-') || + (prev == '-' && current == '.'); + } + + private boolean isToken(String s) { + if (s.isEmpty()) return false; + for (char c : s.toCharArray()) { + if (!tokenValid.get(c)) { + return false; + } + } + return true; + } + + private boolean isValidCookieChar(char c) { + return !(c < 0x21 || c > 0x7E || c == 0x22 || c == 0x2c || c == 0x3b || c == 0x5c || c == 0x7f); + } +} diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2ProxyHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2ProxyHttpServletRequest.java index 6fdb31f08..537e10759 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2ProxyHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2ProxyHttpServletRequest.java @@ -37,7 +37,6 @@ import java.time.ZonedDateTime; import java.time.format.DateTimeParseException; import java.util.*; -import java.util.stream.Collectors; import java.util.stream.Stream; public class AwsHttpApiV2ProxyHttpServletRequest extends AwsHttpServletRequest { @@ -81,26 +80,14 @@ public Cookie[] getCookies() { if (headers == null || !headers.containsKey(HttpHeaders.COOKIE)) { rhc = new Cookie[0]; } else { - rhc = parseCookieHeaderValue(headers.getFirst(HttpHeaders.COOKIE)); + rhc = getCookieProcessor().parseCookieHeader(headers.getFirst(HttpHeaders.COOKIE)); } Cookie[] rc; if (request.getCookies() == null) { rc = new Cookie[0]; } else { - rc = request.getCookies().stream() - .map(c -> { - int i = c.indexOf('='); - if (i == -1) { - return null; - } else { - String k = SecurityUtils.crlf(c.substring(0, i)).trim(); - String v = SecurityUtils.crlf(c.substring(i+1)); - return new Cookie(k, v); - } - }) - .filter(c -> c != null) - .toArray(Cookie[]::new); + rc = getCookieProcessor().parseCookieHeader(String.join("; ", request.getCookies())); } return Stream.concat(Arrays.stream(rhc), Arrays.stream(rc)).toArray(Cookie[]::new); diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java index b76fd216e..ea8ef4a1a 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java @@ -90,6 +90,7 @@ public abstract class AwsHttpServletRequest implements HttpServletRequest { private String queryString; private Map> multipartFormParameters; private Map> urlEncodedFormParameters; + private CookieProcessor cookieProcessor; protected AwsHttpServletResponse response; protected AwsLambdaServletContainerHandler containerHandler; @@ -295,12 +296,7 @@ public void setServletContext(ServletContext context) { * @return An array of Cookie objects from the header */ protected Cookie[] parseCookieHeaderValue(String headerValue) { - List parsedHeaders = this.parseHeaderValue(headerValue, ";", ","); - - return parsedHeaders.stream() - .filter(e -> e.getKey() != null) - .map(e -> new Cookie(SecurityUtils.crlf(e.getKey()), SecurityUtils.crlf(e.getValue()))) - .toArray(Cookie[]::new); + return getCookieProcessor().parseCookieHeader(headerValue); } @@ -512,6 +508,13 @@ protected Map> getFormUrlEncodedParametersMap() { return urlEncodedFormParameters; } + protected CookieProcessor getCookieProcessor(){ + if (cookieProcessor == null) { + cookieProcessor = new AwsCookieProcessor(); + } + return cookieProcessor; + } + @Override public Collection getParts() throws IOException, ServletException { diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponse.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponse.java index f82d062a7..86a72ead6 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponse.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponse.java @@ -70,6 +70,7 @@ public class AwsHttpServletResponse private CountDownLatch writersCountDownLatch; private HttpServletRequest request; private boolean isCommitted = false; + private CookieProcessor cookieProcessor; private Logger log = LoggerFactory.getLogger(AwsHttpServletResponse.class); @@ -102,33 +103,7 @@ public void addCookie(Cookie cookie) { if (request != null && request.getDispatcherType() == DispatcherType.INCLUDE && isCommitted()) { throw new IllegalStateException("Cannot add Cookies for include request when response is committed"); } - String cookieData = cookie.getName() + "=" + cookie.getValue(); - if (cookie.getPath() != null) { - cookieData += "; Path=" + cookie.getPath(); - } - if (cookie.getSecure()) { - cookieData += "; Secure"; - } - if (cookie.isHttpOnly()) { - cookieData += "; HttpOnly"; - } - if (cookie.getDomain() != null && !"".equals(cookie.getDomain().trim())) { - cookieData += "; Domain=" + cookie.getDomain(); - } - - if (cookie.getMaxAge() > 0) { - cookieData += "; Max-Age=" + cookie.getMaxAge(); - - // we always set the timezone to GMT - TimeZone gmtTimeZone = TimeZone.getTimeZone(COOKIE_DEFAULT_TIME_ZONE); - Calendar currentTimestamp = Calendar.getInstance(gmtTimeZone); - currentTimestamp.add(Calendar.SECOND, cookie.getMaxAge()); - SimpleDateFormat cookieDateFormatter = new SimpleDateFormat(HEADER_DATE_PATTERN); - cookieDateFormatter.setTimeZone(gmtTimeZone); - cookieData += "; Expires=" + cookieDateFormatter.format(currentTimestamp.getTime()); - } - - setHeader(HttpHeaders.SET_COOKIE, cookieData, false); + setHeader(HttpHeaders.SET_COOKIE, getCookieProcessor().generateHeader(cookie), false); } @@ -500,6 +475,12 @@ AwsProxyRequest getAwsProxyRequest() { return (AwsProxyRequest)request.getAttribute(API_GATEWAY_EVENT_PROPERTY); } + CookieProcessor getCookieProcessor(){ + if (cookieProcessor == null) { + cookieProcessor = new AwsCookieProcessor(); + } + return cookieProcessor; + } //------------------------------------------------------------- // Methods - Private diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/CookieProcessor.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/CookieProcessor.java new file mode 100644 index 000000000..c59dc806a --- /dev/null +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/CookieProcessor.java @@ -0,0 +1,23 @@ +package com.amazonaws.serverless.proxy.internal.servlet; + +import jakarta.servlet.http.Cookie; + +public interface CookieProcessor { + /** + * Parse the provided cookie header value into an array of Cookie objects. + * + * @param cookieHeader The cookie header value string to parse, e.g., "SID=31d4d96e407aad42; lang=en-US" + * @return An array of Cookie objects parsed from the cookie header value + */ + Cookie[] parseCookieHeader(String cookieHeader); + + /** + * Generate the Set-Cookie HTTP header value for the given Cookie. + * + * @param cookie The cookie for which the header will be generated + * @return The header value in a form that can be added directly to the response + */ + String generateHeader(Cookie cookie); + + +} From 22bf190bf7172adc362b9f99280f17f1df2f6fbb Mon Sep 17 00:00:00 2001 From: kibeom lee <70303094+2012160085@users.noreply.github.com> Date: Mon, 23 Sep 2024 09:29:06 +0900 Subject: [PATCH 708/888] refactor: Use `java.time` API for thread-safe cookie expiration handling - Replaced the usage of `SimpleDateFormat` with `DateTimeFormatter` to ensure thread-safe date formatting. --- .../internal/servlet/AwsCookieProcessor.java | 22 ++++++------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsCookieProcessor.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsCookieProcessor.java index 2a8496082..0293a3c61 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsCookieProcessor.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsCookieProcessor.java @@ -4,10 +4,9 @@ import jakarta.servlet.http.Cookie; import org.slf4j.Logger; import org.slf4j.LoggerFactory; - -import java.text.DateFormat; -import java.text.FieldPosition; -import java.text.SimpleDateFormat; +import java.time.Instant; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; import java.util.*; /** @@ -32,16 +31,9 @@ public class AwsCookieProcessor implements CookieProcessor { // BitSet to validate domain characters static final BitSet domainValid = createDomainValidSet(); - static final String COOKIE_DATE_PATTERN = "EEE, dd MMM yyyy HH:mm:ss z"; - - // ThreadLocal to ensure thread-safe creation of DateFormat instances for each thread - static final ThreadLocal COOKIE_DATE_FORMAT = ThreadLocal.withInitial(() -> { - DateFormat df = new SimpleDateFormat(COOKIE_DATE_PATTERN, Locale.US); - df.setTimeZone(TimeZone.getTimeZone("GMT")); - return df; - }); + static final DateTimeFormatter COOKIE_DATE_FORMATTER = DateTimeFormatter.RFC_1123_DATE_TIME.withZone(ZoneId.of("GMT")); - static final String ANCIENT_DATE = COOKIE_DATE_FORMAT.get().format(new Date(10000)); + static final String ANCIENT_DATE = COOKIE_DATE_FORMATTER.format(Instant.ofEpochMilli(10000)); static BitSet createTokenValidSet() { BitSet tokenSet = new BitSet(128); @@ -127,8 +119,8 @@ public String generateHeader(Cookie cookie) { if (maxAge == 0) { header.append(ANCIENT_DATE); } else { - COOKIE_DATE_FORMAT.get().format( - new Date(System.currentTimeMillis() + maxAge * 1000L), header, new FieldPosition(0)); + Instant expiresAt = Instant.now().plusSeconds(maxAge); + header.append(COOKIE_DATE_FORMATTER.format(expiresAt)); header.append("; Max-Age=").append(maxAge); } } From 4ab26c702f33528acd89957ade751524b396b88c Mon Sep 17 00:00:00 2001 From: kibeom lee <70303094+2012160085@users.noreply.github.com> Date: Mon, 23 Sep 2024 09:31:34 +0900 Subject: [PATCH 709/888] refactor: Remove redundant check in cookie character validation --- .../serverless/proxy/internal/servlet/AwsCookieProcessor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsCookieProcessor.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsCookieProcessor.java index 0293a3c61..7be78b03e 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsCookieProcessor.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsCookieProcessor.java @@ -262,6 +262,6 @@ private boolean isToken(String s) { } private boolean isValidCookieChar(char c) { - return !(c < 0x21 || c > 0x7E || c == 0x22 || c == 0x2c || c == 0x3b || c == 0x5c || c == 0x7f); + return !(c < 0x21 || c > 0x7E || c == 0x22 || c == 0x2c || c == 0x3b || c == 0x5c); } } From 5d4a2316a631df4e77899a7dcf3b75651f33eecb Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 27 Sep 2024 12:22:45 +0200 Subject: [PATCH 710/888] chore: remove --enable-preview (fixes #1061) --- samples/springboot3/pet-store-native/Dockerfile | 2 +- samples/springboot3/pet-store-native/pom.xml | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/samples/springboot3/pet-store-native/Dockerfile b/samples/springboot3/pet-store-native/Dockerfile index 8c3955861..30b77503b 100644 --- a/samples/springboot3/pet-store-native/Dockerfile +++ b/samples/springboot3/pet-store-native/Dockerfile @@ -14,7 +14,7 @@ RUN mv graalvm-community-openjdk-${GRAAL_VERSION}* /usr/lib/graalvm ENV JAVA_HOME /usr/lib/graalvm # Maven -ENV MVN_VERSION 3.9.6 +ENV MVN_VERSION 3.9.9 ENV MVN_FOLDERNAME apache-maven-${MVN_VERSION} ENV MVN_FILENAME apache-maven-${MVN_VERSION}-bin.tar.gz RUN curl -4 -L https://archive.apache.org/dist/maven/maven-3/${MVN_VERSION}/binaries/${MVN_FILENAME} | tar -xvz diff --git a/samples/springboot3/pet-store-native/pom.xml b/samples/springboot3/pet-store-native/pom.xml index e8c1fbc3f..fec299574 100644 --- a/samples/springboot3/pet-store-native/pom.xml +++ b/samples/springboot3/pet-store-native/pom.xml @@ -76,7 +76,8 @@ native-maven-plugin - --enable-url-protocols=http --enable-preview -march=compatibility + --enable-url-protocols=http + -march=compatibility From 1770ccac825810476865ae4445cdb808fe667b9c Mon Sep 17 00:00:00 2001 From: kibeom lee <70303094+2012160085@users.noreply.github.com> Date: Sat, 28 Sep 2024 03:33:17 +0900 Subject: [PATCH 711/888] refactor: added helper methods to simplify cookie attribute appending. --- .../internal/servlet/AwsCookieProcessor.java | 46 +++++++++++-------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsCookieProcessor.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsCookieProcessor.java index 7be78b03e..133d07edb 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsCookieProcessor.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsCookieProcessor.java @@ -17,6 +17,7 @@ public class AwsCookieProcessor implements CookieProcessor { // Cookie attribute constants static final String COOKIE_COMMENT_ATTR = "Comment"; static final String COOKIE_DOMAIN_ATTR = "Domain"; + static final String COOKIE_EXPIRES_ATTR = "Expires"; static final String COOKIE_MAX_AGE_ATTR = "Max-Age"; static final String COOKIE_PATH_ATTR = "Path"; static final String COOKIE_SECURE_ATTR = "Secure"; @@ -114,45 +115,42 @@ public String generateHeader(Cookie cookie) { } int maxAge = cookie.getMaxAge(); - if (maxAge > -1) { - header.append("; Expires="); - if (maxAge == 0) { - header.append(ANCIENT_DATE); - } else { - Instant expiresAt = Instant.now().plusSeconds(maxAge); - header.append(COOKIE_DATE_FORMATTER.format(expiresAt)); - header.append("; Max-Age=").append(maxAge); - } + if (maxAge == 0) { + appendAttribute(header, COOKIE_EXPIRES_ATTR, ANCIENT_DATE); + } else if (maxAge > 0){ + Instant expiresAt = Instant.now().plusSeconds(maxAge); + appendAttribute(header, COOKIE_EXPIRES_ATTR, COOKIE_DATE_FORMATTER.format(expiresAt)); + appendAttribute(header, COOKIE_MAX_AGE_ATTR, String.valueOf(maxAge)); } String domain = cookie.getDomain(); if (domain != null && !domain.isEmpty()) { validateDomain(domain); - header.append("; Domain=").append(domain); + appendAttribute(header, COOKIE_DOMAIN_ATTR, domain); } String path = cookie.getPath(); if (path != null && !path.isEmpty()) { validatePath(path); - header.append("; Path=").append(path); + appendAttribute(header, COOKIE_PATH_ATTR, path); } if (cookie.getSecure()) { - header.append("; Secure"); + appendAttributeWithoutValue(header, COOKIE_SECURE_ATTR); } if (cookie.isHttpOnly()) { - header.append("; HttpOnly"); + appendAttributeWithoutValue(header, COOKIE_HTTP_ONLY_ATTR); } String sameSite = cookie.getAttribute(COOKIE_SAME_SITE_ATTR); if (sameSite != null) { - header.append("; SameSite=").append(sameSite); + appendAttribute(header, COOKIE_SAME_SITE_ATTR, sameSite); } String partitioned = cookie.getAttribute(COOKIE_PARTITIONED_ATTR); if (EMPTY_STRING.equals(partitioned)) { - header.append("; Partitioned"); + appendAttributeWithoutValue(header, COOKIE_PARTITIONED_ATTR); } addAdditionalAttributes(cookie, header); @@ -160,7 +158,18 @@ public String generateHeader(Cookie cookie) { return header.toString(); } - private void addAdditionalAttributes(Cookie cookie, StringBuffer header) { + private void appendAttribute(StringBuilder header, String name, String value) { + header.append("; ").append(name); + if (!EMPTY_STRING.equals(value)) { + header.append('=').append(value); + } + } + + private void appendAttributeWithoutValue(StringBuilder header, String name) { + header.append("; ").append(name); + } + + private void addAdditionalAttributes(Cookie cookie, StringBuilder header) { for (Map.Entry entry : cookie.getAttributes().entrySet()) { switch (entry.getKey()) { case COOKIE_COMMENT_ATTR: @@ -175,10 +184,7 @@ private void addAdditionalAttributes(Cookie cookie, StringBuffer header) { break; default: validateAttribute(entry.getKey(), entry.getValue()); - header.append("; ").append(entry.getKey()); - if (!EMPTY_STRING.equals(entry.getValue())) { - header.append('=').append(entry.getValue()); - } + appendAttribute(header, entry.getKey(), entry.getValue()); break; } } From dfcc006fe63cb7ff231625c359d02e628ac5d0f9 Mon Sep 17 00:00:00 2001 From: kibeom lee <70303094+2012160085@users.noreply.github.com> Date: Sat, 28 Sep 2024 03:33:33 +0900 Subject: [PATCH 712/888] refactor: replaced StringBuffer with StringBuilder. --- .../serverless/proxy/internal/servlet/AwsCookieProcessor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsCookieProcessor.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsCookieProcessor.java index 133d07edb..36ade344c 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsCookieProcessor.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsCookieProcessor.java @@ -105,7 +105,7 @@ private Cookie parseCookiePair(String cookiePair) { @Override public String generateHeader(Cookie cookie) { - StringBuffer header = new StringBuffer(); + StringBuilder header = new StringBuilder(); header.append(cookie.getName()).append('='); String value = cookie.getValue(); From d65d772e48e9112846b38bd1f8decca8de52762a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 30 Sep 2024 04:22:26 +0000 Subject: [PATCH 713/888] chore(deps): bump org.apache.maven.plugins:maven-gpg-plugin Bumps [org.apache.maven.plugins:maven-gpg-plugin](https://github.com/apache/maven-gpg-plugin) from 3.2.4 to 3.2.7. - [Release notes](https://github.com/apache/maven-gpg-plugin/releases) - [Commits](https://github.com/apache/maven-gpg-plugin/compare/maven-gpg-plugin-3.2.4...maven-gpg-plugin-3.2.7) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-gpg-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 25c610ae8..de22a5a74 100644 --- a/pom.xml +++ b/pom.xml @@ -292,7 +292,7 @@ org.apache.maven.plugins maven-gpg-plugin - 3.2.4 + 3.2.7 sign-artifacts From 8fef6b5d19ef0d6e36c1fd7a81a50a9ef3b707bc Mon Sep 17 00:00:00 2001 From: Nicolas PETERS Date: Sun, 20 Oct 2024 01:43:37 +0200 Subject: [PATCH 714/888] #1084: decode body if base64 is enable --- .../spring/AwsSpringHttpProcessingUtils.java | 66 +++++++++++++++---- ...DelegatingLambdaContainerHandlerTests.java | 51 +++++++++----- 2 files changed, 89 insertions(+), 28 deletions(-) diff --git a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringHttpProcessingUtils.java b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringHttpProcessingUtils.java index c7e507f39..a0b59d010 100644 --- a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringHttpProcessingUtils.java +++ b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringHttpProcessingUtils.java @@ -1,24 +1,26 @@ package com.amazonaws.serverless.proxy.spring; import java.io.InputStream; +import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; -import java.util.Iterator; +import java.nio.charset.UnsupportedCharsetException; +import java.util.Base64; import java.util.Map; import java.util.Map.Entry; -import java.util.Set; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; +import org.apache.commons.io.Charsets; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.cloud.function.serverless.web.ServerlessHttpServletRequest; import org.springframework.cloud.function.serverless.web.ServerlessMVC; +import org.springframework.http.HttpHeaders; import org.springframework.util.CollectionUtils; import org.springframework.util.FileCopyUtils; import org.springframework.util.MultiValueMapAdapter; import org.springframework.util.StringUtils; -import com.amazonaws.serverless.proxy.AsyncInitializationWrapper; import com.amazonaws.serverless.proxy.AwsHttpApiV2SecurityContextWriter; import com.amazonaws.serverless.proxy.AwsProxySecurityContextWriter; import com.amazonaws.serverless.proxy.RequestReader; @@ -120,10 +122,14 @@ private static HttpServletRequest generateRequest1(String request, Context lambd MultiValueMapAdapter headers = new MultiValueMapAdapter(v1Request.getMultiValueHeaders()); httpRequest.setHeaders(headers); } - if (StringUtils.hasText(v1Request.getBody())) { - httpRequest.setContentType("application/json"); - httpRequest.setContent(v1Request.getBody().getBytes(StandardCharsets.UTF_8)); - } + if (StringUtils.hasText(v1Request.getBody())) { + if (v1Request.isBase64Encoded()) { + httpRequest.setContent(Base64.getMimeDecoder().decode(v1Request.getBody())); + } else { + Charset charseEncoding = parseCharacterEncoding(v1Request.getHeaders().get(HttpHeaders.CONTENT_TYPE)); + httpRequest.setContent(v1Request.getBody().getBytes(charseEncoding)); + } + } if (v1Request.getRequestContext() != null) { httpRequest.setAttribute(RequestReader.API_GATEWAY_CONTEXT_PROPERTY, v1Request.getRequestContext()); httpRequest.setAttribute(RequestReader.ALB_CONTEXT_PROPERTY, v1Request.getRequestContext().getElb()); @@ -149,11 +155,15 @@ private static HttpServletRequest generateRequest2(String request, Context lambd populateQueryStringparameters(v2Request.getQueryStringParameters(), httpRequest); v2Request.getHeaders().forEach(httpRequest::setHeader); - - if (StringUtils.hasText(v2Request.getBody())) { - httpRequest.setContentType("application/json"); - httpRequest.setContent(v2Request.getBody().getBytes(StandardCharsets.UTF_8)); - } + + if (StringUtils.hasText(v2Request.getBody())) { + if (v2Request.isBase64Encoded()) { + httpRequest.setContent(Base64.getMimeDecoder().decode(v2Request.getBody())); + } else { + Charset charseEncoding = parseCharacterEncoding(v2Request.getHeaders().get(HttpHeaders.CONTENT_TYPE)); + httpRequest.setContent(v2Request.getBody().getBytes(charseEncoding)); + } + } httpRequest.setAttribute(RequestReader.HTTP_API_CONTEXT_PROPERTY, v2Request.getRequestContext()); httpRequest.setAttribute(RequestReader.HTTP_API_STAGE_VARS_PROPERTY, v2Request.getStageVariables()); httpRequest.setAttribute(RequestReader.HTTP_API_EVENT_PROPERTY, v2Request); @@ -180,4 +190,36 @@ private static T readValue(String json, Class clazz, ObjectMapper mapper) } } + static final String HEADER_KEY_VALUE_SEPARATOR = "="; + static final String HEADER_VALUE_SEPARATOR = ";"; + static final String ENCODING_VALUE_KEY = "charset"; + static protected Charset parseCharacterEncoding(String contentTypeHeader) { + // we only look at content-type because content-encoding should only be used for + // "binary" requests such as gzip/deflate. + Charset defaultCharset = StandardCharsets.UTF_8; + if (contentTypeHeader == null) { + return defaultCharset; + } + + String[] contentTypeValues = contentTypeHeader.split(HEADER_VALUE_SEPARATOR); + if (contentTypeValues.length <= 1) { + return defaultCharset; + } + + for (String contentTypeValue : contentTypeValues) { + if (contentTypeValue.trim().startsWith(ENCODING_VALUE_KEY)) { + String[] encodingValues = contentTypeValue.split(HEADER_KEY_VALUE_SEPARATOR); + if (encodingValues.length <= 1) { + return defaultCharset; + } + try { + return Charsets.toCharset(encodingValues[1]); + } catch (UnsupportedCharsetException ex) { + return defaultCharset; + } + } + } + return defaultCharset; + } + } diff --git a/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/SpringDelegatingLambdaContainerHandlerTests.java b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/SpringDelegatingLambdaContainerHandlerTests.java index 2fb85e7e7..61957fe24 100644 --- a/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/SpringDelegatingLambdaContainerHandlerTests.java +++ b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/SpringDelegatingLambdaContainerHandlerTests.java @@ -6,15 +6,11 @@ import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.nio.charset.StandardCharsets; -import java.util.Arrays; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; +import java.util.*; import com.amazonaws.serverless.exceptions.ContainerInitializationException; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; -import org.springframework.cloud.function.serverless.web.ServerlessServletContext; import org.springframework.util.CollectionUtils; import com.amazonaws.serverless.proxy.spring.servletapp.MessageData; @@ -214,7 +210,7 @@ public static Collection data() { public void validateComplesrequest(String jsonEvent) throws Exception { initServletAppTest(); InputStream targetStream = new ByteArrayInputStream(this.generateHttpRequest(jsonEvent, "POST", - "/foo/male/list/24", "{\"name\":\"bob\"}", null)); + "/foo/male/list/24", "{\"name\":\"bob\"}", false,null)); ByteArrayOutputStream output = new ByteArrayOutputStream(); handler.handleRequest(targetStream, output, null); Map result = mapper.readValue(output.toString(StandardCharsets.UTF_8), Map.class); @@ -229,7 +225,7 @@ public void validateComplesrequest(String jsonEvent) throws Exception { @ParameterizedTest public void testAsyncPost(String jsonEvent) throws Exception { initServletAppTest(); - InputStream targetStream = new ByteArrayInputStream(this.generateHttpRequest(jsonEvent, "POST", "/async", "{\"name\":\"bob\"}", null)); + InputStream targetStream = new ByteArrayInputStream(this.generateHttpRequest(jsonEvent, "POST", "/async", "{\"name\":\"bob\"}",false, null)); ByteArrayOutputStream output = new ByteArrayOutputStream(); handler.handleRequest(targetStream, output, null); Map result = mapper.readValue(output.toString(StandardCharsets.UTF_8), Map.class); @@ -242,7 +238,7 @@ public void testAsyncPost(String jsonEvent) throws Exception { public void testValidate400(String jsonEvent) throws Exception { initServletAppTest(); UserData ud = new UserData(); - InputStream targetStream = new ByteArrayInputStream(this.generateHttpRequest(jsonEvent, "POST", "/validate", mapper.writeValueAsString(ud), null)); + InputStream targetStream = new ByteArrayInputStream(this.generateHttpRequest(jsonEvent, "POST", "/validate", mapper.writeValueAsString(ud),false, null)); ByteArrayOutputStream output = new ByteArrayOutputStream(); handler.handleRequest(targetStream, output, null); Map result = mapper.readValue(output.toString(StandardCharsets.UTF_8), Map.class); @@ -258,7 +254,7 @@ public void testValidate200(String jsonEvent) throws Exception { ud.setFirstName("bob"); ud.setLastName("smith"); ud.setEmail("foo@bar.com"); - InputStream targetStream = new ByteArrayInputStream(this.generateHttpRequest(jsonEvent, "POST", "/validate", mapper.writeValueAsString(ud), null)); + InputStream targetStream = new ByteArrayInputStream(this.generateHttpRequest(jsonEvent, "POST", "/validate", mapper.writeValueAsString(ud),false, null)); ByteArrayOutputStream output = new ByteArrayOutputStream(); handler.handleRequest(targetStream, output, null); Map result = mapper.readValue(output.toString(StandardCharsets.UTF_8), Map.class); @@ -266,12 +262,31 @@ public void testValidate200(String jsonEvent) throws Exception { assertEquals("VALID", result.get("body")); } + @MethodSource("data") + @ParameterizedTest + public void testValidate200Base64(String jsonEvent) throws Exception { + initServletAppTest(); + UserData ud = new UserData(); + ud.setFirstName("bob"); + ud.setLastName("smith"); + ud.setEmail("foo@bar.com"); + InputStream targetStream = new ByteArrayInputStream(this.generateHttpRequest(jsonEvent, "POST", "/validate", + Base64.getMimeEncoder().encodeToString(mapper.writeValueAsString(ud).getBytes()),true, null)); + + ByteArrayOutputStream output = new ByteArrayOutputStream(); + handler.handleRequest(targetStream, output, null); + Map result = mapper.readValue(output.toString(StandardCharsets.UTF_8), Map.class); + assertEquals(200, result.get("statusCode")); + assertEquals("VALID", result.get("body")); + } + + @MethodSource("data") @ParameterizedTest public void messageObject_parsesObject_returnsCorrectMessage(String jsonEvent) throws Exception { initServletAppTest(); InputStream targetStream = new ByteArrayInputStream(this.generateHttpRequest(jsonEvent, "POST", "/message", - mapper.writeValueAsString(new MessageData("test message")), null)); + mapper.writeValueAsString(new MessageData("test message")),false, null)); ByteArrayOutputStream output = new ByteArrayOutputStream(); handler.handleRequest(targetStream, output, null); Map result = mapper.readValue(output.toString(StandardCharsets.UTF_8), Map.class); @@ -279,6 +294,8 @@ public void messageObject_parsesObject_returnsCorrectMessage(String jsonEvent) t assertEquals("test message", result.get("body")); } + + @SuppressWarnings({"unchecked" }) @MethodSource("data") @ParameterizedTest @@ -289,7 +306,7 @@ void messageObject_propertiesInContentType_returnsCorrectMessage(String jsonEven headers.put(HttpHeaders.CONTENT_TYPE, "application/json;v=1"); headers.put(HttpHeaders.ACCEPT, "application/json;v=1"); InputStream targetStream = new ByteArrayInputStream(this.generateHttpRequest(jsonEvent, "POST", "/message", - mapper.writeValueAsString(new MessageData("test message")), headers)); + mapper.writeValueAsString(new MessageData("test message")),false, headers)); ByteArrayOutputStream output = new ByteArrayOutputStream(); handler.handleRequest(targetStream, output, null); @@ -297,19 +314,20 @@ void messageObject_propertiesInContentType_returnsCorrectMessage(String jsonEven assertEquals("test message", result.get("body")); } - private byte[] generateHttpRequest(String jsonEvent, String method, String path, String body, Map headers) throws Exception { + private byte[] generateHttpRequest(String jsonEvent, String method, String path, String body,boolean isBase64Encoded, Map headers) throws Exception { Map requestMap = mapper.readValue(jsonEvent, Map.class); if (requestMap.get("version").equals("2.0")) { - return generateHttpRequest2(requestMap, method, path, body, headers); + return generateHttpRequest2(requestMap, method, path, body, isBase64Encoded,headers); } - return generateHttpRequest(requestMap, method, path, body, headers); + return generateHttpRequest(requestMap, method, path, body,isBase64Encoded, headers); } @SuppressWarnings({ "unchecked"}) - private byte[] generateHttpRequest(Map requestMap, String method, String path, String body, Map headers) throws Exception { + private byte[] generateHttpRequest(Map requestMap, String method, String path, String body,boolean isBase64Encoded, Map headers) throws Exception { requestMap.put("path", path); requestMap.put("httpMethod", method); requestMap.put("body", body); + requestMap.put("isBase64Encoded", isBase64Encoded); if (!CollectionUtils.isEmpty(headers)) { requestMap.put("headers", headers); } @@ -317,12 +335,13 @@ private byte[] generateHttpRequest(Map requestMap, String method, String path, S } @SuppressWarnings({ "unchecked"}) - private byte[] generateHttpRequest2(Map requestMap, String method, String path, String body, Map headers) throws Exception { + private byte[] generateHttpRequest2(Map requestMap, String method, String path, String body,boolean isBase64Encoded, Map headers) throws Exception { Map map = mapper.readValue(API_GATEWAY_EVENT_V2, Map.class); Map http = (Map) ((Map) map.get("requestContext")).get("http"); http.put("path", path); http.put("method", method); map.put("body", body); + map.put("isBase64Encoded", isBase64Encoded); if (!CollectionUtils.isEmpty(headers)) { map.put("headers", headers); } From 56edec9b9501b4ab0c8a97956f43d9ef8253c9a3 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 21 Oct 2024 08:56:55 +0200 Subject: [PATCH 715/888] chore(deps): Upgrade to Apache HttpClient 5.4 --- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- pom.xml | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle index bed896193..a00fa1958 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle @@ -22,7 +22,7 @@ dependencies { } testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") - testImplementation("org.apache.httpcomponents.client5:httpclient5:5.3.1") + testImplementation("org.apache.httpcomponents.client5:httpclient5:5.4") testImplementation(platform("org.junit:junit-bom:5.11.0")) testImplementation("org.junit.jupiter:junit-jupiter") } diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml index f2367ba21..6e7e0a807 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml @@ -37,7 +37,7 @@ org.apache.httpcomponents.client5 httpclient5 - 5.3.1 + 5.4 test diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index 145531587..d7a2b2279 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -18,7 +18,7 @@ dependencies { ) testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") - testImplementation("org.apache.httpcomponents.client5:httpclient5:5.3.1") + testImplementation("org.apache.httpcomponents.client5:httpclient5:5.4") testImplementation(platform("org.junit:junit-bom:5.11.0")) testImplementation("org.junit.jupiter:junit-jupiter") } diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index 0e007227c..ba7626bd1 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -38,7 +38,7 @@ org.apache.httpcomponents.client5 httpclient5 - 5.3.1 + 5.4 test diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle index 47925cfc3..8226c2861 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle @@ -14,7 +14,7 @@ dependencies { ) testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") - testImplementation("org.apache.httpcomponents.client5:httpclient5:5.3.1") + testImplementation("org.apache.httpcomponents.client5:httpclient5:5.4") testImplementation(platform("org.junit:junit-bom:5.11.0")) testImplementation("org.junit.jupiter:junit-jupiter") } diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml index 042d5a503..78ebeb23c 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml @@ -41,7 +41,7 @@ org.apache.httpcomponents.client5 httpclient5 - 5.3.1 + 5.4 test diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle index 892b44d38..c31358b60 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle @@ -42,7 +42,7 @@ dependencies { implementation ('com.amazonaws:aws-lambda-java-log4j2:1.6.0') testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") - testImplementation("org.apache.httpcomponents.client5:httpclient5:5.3.1") + testImplementation("org.apache.httpcomponents.client5:httpclient5:5.4") testImplementation(platform("org.junit:junit-bom:5.11.0")) testImplementation("org.junit.jupiter:junit-jupiter") testImplementation('org.apache.struts:struts2-junit-plugin:7.0.0-M9') { diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml index 9b7fb33a7..1c4be66ea 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml @@ -38,7 +38,7 @@ org.apache.httpcomponents.client5 httpclient5 - 5.3.1 + 5.4 test diff --git a/pom.xml b/pom.xml index c00e4c5df..f2e5579e4 100644 --- a/pom.xml +++ b/pom.xml @@ -119,7 +119,7 @@ org.apache.httpcomponents.client5 httpclient5 - 5.3.1 + 5.4 test From 3a59eff9adaf87b47ec98d33537f30a38fa27a63 Mon Sep 17 00:00:00 2001 From: Nicolas PETERS Date: Tue, 22 Oct 2024 00:45:51 +0200 Subject: [PATCH 716/888] #1084: default content-type: application/json --- .../proxy/spring/AwsSpringHttpProcessingUtils.java | 9 ++++++++- .../SpringDelegatingLambdaContainerHandlerTests.java | 1 + 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringHttpProcessingUtils.java b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringHttpProcessingUtils.java index a0b59d010..9ce8f1dcd 100644 --- a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringHttpProcessingUtils.java +++ b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringHttpProcessingUtils.java @@ -123,6 +123,9 @@ private static HttpServletRequest generateRequest1(String request, Context lambd httpRequest.setHeaders(headers); } if (StringUtils.hasText(v1Request.getBody())) { + if (v1Request.getHeaders().get(HttpHeaders.CONTENT_TYPE)==null) { + httpRequest.setContentType("application/json"); + } if (v1Request.isBase64Encoded()) { httpRequest.setContent(Base64.getMimeDecoder().decode(v1Request.getBody())); } else { @@ -156,8 +159,12 @@ private static HttpServletRequest generateRequest2(String request, Context lambd v2Request.getHeaders().forEach(httpRequest::setHeader); + if (StringUtils.hasText(v2Request.getBody())) { - if (v2Request.isBase64Encoded()) { + if (v2Request.getHeaders().get(HttpHeaders.CONTENT_TYPE)==null) { + httpRequest.setContentType("application/json"); + } + if (v2Request.isBase64Encoded()) { httpRequest.setContent(Base64.getMimeDecoder().decode(v2Request.getBody())); } else { Charset charseEncoding = parseCharacterEncoding(v2Request.getHeaders().get(HttpHeaders.CONTENT_TYPE)); diff --git a/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/SpringDelegatingLambdaContainerHandlerTests.java b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/SpringDelegatingLambdaContainerHandlerTests.java index 61957fe24..f9f60e841 100644 --- a/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/SpringDelegatingLambdaContainerHandlerTests.java +++ b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/SpringDelegatingLambdaContainerHandlerTests.java @@ -345,6 +345,7 @@ private byte[] generateHttpRequest2(Map requestMap, String method, String path, if (!CollectionUtils.isEmpty(headers)) { map.put("headers", headers); } + System.out.println(map); return mapper.writeValueAsBytes(map); } } From 712b8d8b327c3750f3a87ea7f8b1821343dcf68e Mon Sep 17 00:00:00 2001 From: mbfreder Date: Tue, 22 Oct 2024 10:49:47 -0700 Subject: [PATCH 717/888] remove logging of aws credentials --- .../proxy/spring/AwsSpringWebCustomRuntimeEventLoop.java | 3 --- .../proxy/spring/AwsSpringWebRuntimeInitializer.java | 4 ---- 2 files changed, 7 deletions(-) diff --git a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringWebCustomRuntimeEventLoop.java b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringWebCustomRuntimeEventLoop.java index db71d56c0..c015a8024 100644 --- a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringWebCustomRuntimeEventLoop.java +++ b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringWebCustomRuntimeEventLoop.java @@ -97,9 +97,6 @@ private void eventLoop(ServletWebServerApplicationContext context) { Environment environment = context.getEnvironment(); logger.info("Starting AWSWebRuntimeEventLoop"); - if (logger.isDebugEnabled()) { - logger.debug("AWS LAMBDA ENVIRONMENT: " + System.getenv()); - } String runtimeApi = environment.getProperty("AWS_LAMBDA_RUNTIME_API"); String eventUri = MessageFormat.format(LAMBDA_RUNTIME_URL_TEMPLATE, runtimeApi, LAMBDA_VERSION_DATE); diff --git a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringWebRuntimeInitializer.java b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringWebRuntimeInitializer.java index 4f47121df..992bc635e 100644 --- a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringWebRuntimeInitializer.java +++ b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringWebRuntimeInitializer.java @@ -38,11 +38,7 @@ public class AwsSpringWebRuntimeInitializer implements ApplicationContextInitial @Override public void initialize(GenericApplicationContext context) { - logger.info("AWS Environment: " + System.getenv()); Environment environment = context.getEnvironment(); - if (logger.isDebugEnabled()) { - logger.debug("AWS Environment: " + System.getenv()); - } if (context instanceof ServletWebServerApplicationContext && isCustomRuntime(environment)) { if (context.getBeanFactory().getBeanNamesForType(AwsSpringWebCustomRuntimeEventLoop.class, false, false).length == 0) { From b0754f3e9d0984ff59f7734f9000e54d4f265575 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Thu, 24 Oct 2024 16:56:04 +0200 Subject: [PATCH 718/888] chore(deps): Update Spring dependencies (framework to 6.1.14, security to 6.3.4, boot to 3.3.5) --- aws-serverless-java-container-core/pom.xml | 2 +- aws-serverless-java-container-spring/pom.xml | 4 ++-- aws-serverless-java-container-springboot3/pom.xml | 6 +++--- .../src/main/resources/archetype-resources/build.gradle | 4 ++-- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/spring/pet-store/build.gradle | 4 ++-- samples/spring/pet-store/pom.xml | 2 +- samples/springboot3/alt-pet-store/build.gradle | 2 +- samples/springboot3/alt-pet-store/pom.xml | 2 +- samples/springboot3/graphql-pet-store/pom.xml | 2 +- samples/springboot3/pet-store-native/pom.xml | 2 +- samples/springboot3/pet-store/build.gradle | 2 +- samples/springboot3/pet-store/pom.xml | 2 +- 15 files changed, 20 insertions(+), 20 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index f3b93880a..6657df96f 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -60,7 +60,7 @@ org.springframework.security spring-security-web - 6.3.3 + 6.3.4 test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index d160a911a..d133bb983 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -16,8 +16,8 @@ - 6.1.13 - 6.3.3 + 6.1.14 + 6.3.4 diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index 953e8bdb0..b06a34996 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -15,9 +15,9 @@ 2.1.0-SNAPSHOT - 6.1.13 - 3.3.4 - 6.3.3 + 6.1.14 + 3.3.5 + 6.3.4 diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index d7a2b2279..7ea0c5790 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -7,8 +7,8 @@ repositories { dependencies { implementation ( - 'org.springframework:spring-webmvc:6.1.13', - 'org.springframework:spring-context:6.1.13', + 'org.springframework:spring-webmvc:6.1.14', + 'org.springframework:spring-context:6.1.14', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[2.0-SNAPSHOT,)', 'org.apache.logging.log4j:log4j-core:2.24.0', 'org.apache.logging.log4j:log4j-api:2.24.0', diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index ba7626bd1..d59721621 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 1.8 - 6.1.13 + 6.1.14 5.11.0 2.24.0 diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle index 8226c2861..9877ece33 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle @@ -9,7 +9,7 @@ repositories { dependencies { implementation ( - 'org.springframework.boot:spring-boot-starter-web:3.3.4', + 'org.springframework.boot:spring-boot-starter-web:3.3.5', 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:[2.0-SNAPSHOT,)', ) diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml index 78ebeb23c..1d8b963d6 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ org.springframework.boot spring-boot-starter-parent - 3.3.4 + 3.3.5 diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index ba627f2e8..eedeaafbd 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -7,8 +7,8 @@ repositories { dependencies { implementation ( - 'org.springframework:spring-webmvc:6.1.13', - 'org.springframework:spring-context:6.1.13', + 'org.springframework:spring-webmvc:6.1.14', + 'org.springframework:spring-context:6.1.14', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[2.0-SNAPSHOT,)', 'org.apache.logging.log4j:log4j-core:2.24.0', 'org.apache.logging.log4j:log4j-api:2.24.0', diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index 9f2d29bba..9634fe9f7 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -24,7 +24,7 @@ - 6.1.13 + 6.1.14 2.24.0 17 17 diff --git a/samples/springboot3/alt-pet-store/build.gradle b/samples/springboot3/alt-pet-store/build.gradle index 4e5bf5139..390ada6d4 100644 --- a/samples/springboot3/alt-pet-store/build.gradle +++ b/samples/springboot3/alt-pet-store/build.gradle @@ -9,7 +9,7 @@ repositories { dependencies { implementation ( - implementation('org.springframework.boot:spring-boot-starter-web:3.3.4') { + implementation('org.springframework.boot:spring-boot-starter-web:3.3.5') { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat' }, 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:[2.0-SNAPSHOT,)', diff --git a/samples/springboot3/alt-pet-store/pom.xml b/samples/springboot3/alt-pet-store/pom.xml index 28ab529c4..1bafb4797 100644 --- a/samples/springboot3/alt-pet-store/pom.xml +++ b/samples/springboot3/alt-pet-store/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 3.3.4 + 3.3.5 diff --git a/samples/springboot3/graphql-pet-store/pom.xml b/samples/springboot3/graphql-pet-store/pom.xml index 38440b377..dbb984dab 100644 --- a/samples/springboot3/graphql-pet-store/pom.xml +++ b/samples/springboot3/graphql-pet-store/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 3.3.4 + 3.3.5 diff --git a/samples/springboot3/pet-store-native/pom.xml b/samples/springboot3/pet-store-native/pom.xml index fec299574..42886dc30 100644 --- a/samples/springboot3/pet-store-native/pom.xml +++ b/samples/springboot3/pet-store-native/pom.xml @@ -6,7 +6,7 @@ org.springframework.boot spring-boot-starter-parent - 3.3.4 + 3.3.5 com.amazonaws.serverless.sample diff --git a/samples/springboot3/pet-store/build.gradle b/samples/springboot3/pet-store/build.gradle index 4e5bf5139..390ada6d4 100644 --- a/samples/springboot3/pet-store/build.gradle +++ b/samples/springboot3/pet-store/build.gradle @@ -9,7 +9,7 @@ repositories { dependencies { implementation ( - implementation('org.springframework.boot:spring-boot-starter-web:3.3.4') { + implementation('org.springframework.boot:spring-boot-starter-web:3.3.5') { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat' }, 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:[2.0-SNAPSHOT,)', diff --git a/samples/springboot3/pet-store/pom.xml b/samples/springboot3/pet-store/pom.xml index 56b0ab8a6..b259bcd2a 100644 --- a/samples/springboot3/pet-store/pom.xml +++ b/samples/springboot3/pet-store/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 3.3.4 + 3.3.5 From 45df2b0aec44c44f96ccfa5649e59ea4e0c01f90 Mon Sep 17 00:00:00 2001 From: Jay Fennelly Date: Sun, 27 Oct 2024 19:11:20 -0700 Subject: [PATCH 719/888] Fix AwsProxyRequestBuilder to be immutable when calling the alb() method --- .../testutils/AwsProxyRequestBuilder.java | 76 +++++---- .../testutils/AwsProxyRequestBuilderTest.java | 157 ++++++++++++++++++ 2 files changed, 199 insertions(+), 34 deletions(-) create mode 100644 aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/testutils/AwsProxyRequestBuilderTest.java diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/testutils/AwsProxyRequestBuilder.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/testutils/AwsProxyRequestBuilder.java index 40f0ae7ad..4d1bea427 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/testutils/AwsProxyRequestBuilder.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/testutils/AwsProxyRequestBuilder.java @@ -16,6 +16,7 @@ import com.amazonaws.serverless.proxy.model.*; import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import org.apache.commons.io.IOUtils; import org.apache.hc.core5.http.ContentType; @@ -49,7 +50,7 @@ public class AwsProxyRequestBuilder { private AwsProxyRequest request; private MultipartEntityBuilder multipartBuilder; - + //------------------------------------------------------------- // Constructors //------------------------------------------------------------- @@ -86,22 +87,41 @@ public AwsProxyRequestBuilder(String path, String httpMethod) { this.request.getRequestContext().setIdentity(identity); } - - //------------------------------------------------------------- + //------------------------------------------------------------- // Methods - Public //------------------------------------------------------------- public AwsProxyRequestBuilder alb() { - this.request.setRequestContext(new AwsProxyRequestContext()); - this.request.getRequestContext().setElb(new AlbContext()); - this.request.getRequestContext().getElb().setTargetGroupArn( + /* + * This method sets up the requestContext to look like an ALB request and also + * re-encodes URL query params, since ALBs do not decode them. This now returns + * a new AwsProxyRequestBuilder with the new query param state, so the original + * builder maintains the original configured state and can be then be reused in + * further unit tests. For now the simplest way to accomplish a deep copy is by + * serializing to JSON then deserializing. + */ + + ObjectMapper objectMapper = new ObjectMapper(); + AwsProxyRequest albRequest = null; + try { + String json = objectMapper.writeValueAsString(this.request); + albRequest = objectMapper.readValue(json, AwsProxyRequest.class); + } catch (JsonProcessingException jpe) { + throw new RuntimeException(jpe); + } + + if (albRequest.getRequestContext() == null) { + albRequest.setRequestContext(new AwsProxyRequestContext()); + } + albRequest.getRequestContext().setElb(new AlbContext()); + albRequest.getRequestContext().getElb().setTargetGroupArn( "arn:aws:elasticloadbalancing:us-east-1:123456789012:targetgroup/lambda-target/d6190d154bc908a5" ); // ALB does not decode query string parameters so we re-encode them all - if (request.getMultiValueQueryStringParameters() != null) { + if (albRequest.getMultiValueQueryStringParameters() != null) { MultiValuedTreeMap newQs = new MultiValuedTreeMap<>(); - for (Map.Entry> e : request.getMultiValueQueryStringParameters().entrySet()) { + for (Map.Entry> e : albRequest.getMultiValueQueryStringParameters().entrySet()) { for (String v : e.getValue()) { try { // this is a terrible hack. In our Spring tests we use the comma as a control character for lists @@ -114,9 +134,9 @@ public AwsProxyRequestBuilder alb() { } } } - request.setMultiValueQueryStringParameters(newQs); + albRequest.setMultiValueQueryStringParameters(newQs); } - return this; + return new AwsProxyRequestBuilder(albRequest); } public AwsProxyRequestBuilder stage(String stageName) { @@ -142,6 +162,9 @@ public AwsProxyRequestBuilder json() { public AwsProxyRequestBuilder form(String key, String value) { + if (key == null || value == null) { + throw new IllegalArgumentException("form() does not support null key or value"); + } if (request.getMultiValueHeaders() == null) { request.setMultiValueHeaders(new Headers()); } @@ -150,7 +173,12 @@ public AwsProxyRequestBuilder form(String key, String value) { if (body == null) { body = ""; } - body += (body.equals("")?"":"&") + key + "=" + value; + // URL-encode key and value to form expected body of a form post + try { + body += (body.equals("") ? "" : "&") + URLEncoder.encode(key, "UTF-8") + "=" + URLEncoder.encode(value, "UTF-8"); + } catch (UnsupportedEncodingException ex) { + throw new RuntimeException("Could not encode form parameter: " + key + "=" + value, ex); + } request.setBody(body); return this; } @@ -214,35 +242,15 @@ public AwsProxyRequestBuilder multiValueQueryString(MultiValuedTreeMap()); } - if (request.getRequestSource() == RequestSource.API_GATEWAY) { - this.request.getMultiValueQueryStringParameters().add(key, value); - } - // ALB does not decode parameters automatically like API Gateway. - if (request.getRequestSource() == RequestSource.ALB) { - try { - //if (URLDecoder.decode(value, ContainerConfig.DEFAULT_CONTENT_CHARSET).equals(value)) { - // TODO: Assume we are always given an unencoded value, smarter check here to encode - // only if necessary - this.request.getMultiValueQueryStringParameters().add( - key, - URLEncoder.encode(value, ContainerConfig.DEFAULT_CONTENT_CHARSET) - ); - //} - } catch (UnsupportedEncodingException e) { - throw new RuntimeException(e); - } - - } + this.request.getMultiValueQueryStringParameters().add(key, value); return this; } - public AwsProxyRequestBuilder body(String body) { this.request.setBody(body); return this; @@ -475,11 +483,11 @@ public HttpApiV2ProxyRequest toHttpApiV2Request() { request.getMultiValueQueryStringParameters().forEach((k, v) -> { for (String s : v) { rawQueryString.append("&"); - rawQueryString.append(k); - rawQueryString.append("="); try { // same terrible hack as the alb() method. Because our spring tests use commas as control characters // we do not encode it + rawQueryString.append(URLEncoder.encode(k, "UTF-8").replaceAll("%2C", ",")); + rawQueryString.append("="); rawQueryString.append(URLEncoder.encode(s, "UTF-8").replaceAll("%2C", ",")); } catch (UnsupportedEncodingException e) { throw new RuntimeException(e); diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/testutils/AwsProxyRequestBuilderTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/testutils/AwsProxyRequestBuilderTest.java new file mode 100644 index 000000000..6263eeaf9 --- /dev/null +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/testutils/AwsProxyRequestBuilderTest.java @@ -0,0 +1,157 @@ +package com.amazonaws.serverless.proxy.internal.testutils; + +import java.io.IOException; +import java.net.URLEncoder; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.MediaType; + +import com.amazonaws.serverless.proxy.model.*; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +public class AwsProxyRequestBuilderTest { + + private static final String TEST_KEY = "testkey"; + private static final String TEST_VALUE = "testvalue"; + private static final String TEST_KEY_FOR_ENCODING = "test@key 1"; + private static final String TEST_VALUE_FOR_ENCODING = "test value!!"; + + + void baseConstructorAsserts(AwsProxyRequest request) { + assertEquals(0, request.getMultiValueHeaders().size()); + assertEquals(0, request.getHeaders().size()); + assertEquals(0, request.getMultiValueQueryStringParameters().size()); + assertNotNull(request.getRequestContext()); + assertNotNull(request.getRequestContext().getRequestId()); + assertNotNull(request.getRequestContext().getExtendedRequestId()); + assertEquals("test", request.getRequestContext().getStage()); + assertEquals("HTTP/1.1", request.getRequestContext().getProtocol()); + assertNotNull(request.getRequestContext().getRequestTimeEpoch()); + assertNotNull(request.getRequestContext().getIdentity()); + assertEquals("127.0.0.1", request.getRequestContext().getIdentity().getSourceIp()); + } + + @Test + void constructor_path_httpMethod() { + + AwsProxyRequestBuilder builder = new AwsProxyRequestBuilder("/path", "GET"); + AwsProxyRequest request = builder.build(); + assertEquals("/path", request.getPath()); + assertEquals("GET", request.getHttpMethod()); + baseConstructorAsserts(request); + } + + @Test + void constructor_path_nullHttpMethod() { + AwsProxyRequestBuilder builder = new AwsProxyRequestBuilder("/path"); + AwsProxyRequest request = builder.build(); + assertNull(request.getHttpMethod()); + assertEquals("/path", request.getPath()); + baseConstructorAsserts(request); + } + + @Test + void constructor_nullPath_nullHttpMethod() { + AwsProxyRequestBuilder builder = new AwsProxyRequestBuilder(); + AwsProxyRequest request = builder.build(); + assertNull(request.getHttpMethod()); + assertNull(request.getPath()); + baseConstructorAsserts(request); + } + + @Test + void form_key_value() { + AwsProxyRequestBuilder builder = new AwsProxyRequestBuilder("/path", "POST"); + builder.form(TEST_KEY, TEST_VALUE); + AwsProxyRequest request = builder.build(); + assertEquals(1, request.getMultiValueHeaders().get(HttpHeaders.CONTENT_TYPE).size()); + assertEquals(MediaType.APPLICATION_FORM_URLENCODED, request.getMultiValueHeaders().getFirst(HttpHeaders.CONTENT_TYPE)); + assertNull(request.getHeaders().get(HttpHeaders.CONTENT_TYPE)); + assertNotNull(request.getBody()); + assertEquals(TEST_KEY + "=" + TEST_VALUE, request.getBody()); + } + + @Test + void form_key_nullKey_nullValue() { + AwsProxyRequestBuilder builder = new AwsProxyRequestBuilder("/path", "POST"); + assertThrows(IllegalArgumentException.class, () -> builder.form(null, TEST_VALUE)); + assertThrows(IllegalArgumentException.class, () -> builder.form(TEST_KEY, null)); + assertThrows(IllegalArgumentException.class, () -> builder.form(null, null)); + } + + @Test + void form_keyEncoded_valueEncoded() throws IOException { + AwsProxyRequestBuilder builder = new AwsProxyRequestBuilder("/path", "POST"); + builder.form(TEST_KEY_FOR_ENCODING, TEST_VALUE_FOR_ENCODING); + AwsProxyRequest request = builder.build(); + + assertEquals(1, request.getMultiValueHeaders().get(HttpHeaders.CONTENT_TYPE).size()); + assertEquals(MediaType.APPLICATION_FORM_URLENCODED, request.getMultiValueHeaders().getFirst(HttpHeaders.CONTENT_TYPE)); + assertNull(request.getHeaders().get(HttpHeaders.CONTENT_TYPE)); + assertNotNull(request.getBody()); + String expected = URLEncoder.encode(TEST_KEY_FOR_ENCODING, "UTF-8") + "=" + URLEncoder.encode(TEST_VALUE_FOR_ENCODING, "UTF-8"); + assertEquals(expected, request.getBody()); + } + + @Test + void queryString_key_value() { + AwsProxyRequestBuilder builder = new AwsProxyRequestBuilder("/path", "POST"); + builder.queryString(TEST_KEY, TEST_VALUE); + AwsProxyRequest request = builder.build(); + + assertNull(request.getQueryStringParameters()); + assertEquals(1, request.getMultiValueQueryStringParameters().size()); + assertEquals(TEST_KEY, request.getMultiValueQueryStringParameters().keySet().iterator().next()); + assertEquals(TEST_VALUE, request.getMultiValueQueryStringParameters().get(TEST_KEY).get(0)); + assertEquals(TEST_VALUE, request.getMultiValueQueryStringParameters().getFirst(TEST_KEY)); + } + + @Test + void queryString_keyNotEncoded_valueNotEncoded() { + // builder should not URL encode key or value for query string + // in the case of an ALB where values should be encoded, the builder alb() method will handle it + AwsProxyRequestBuilder builder = new AwsProxyRequestBuilder("/path", "POST"); + builder.queryString(TEST_KEY_FOR_ENCODING, TEST_VALUE_FOR_ENCODING); + AwsProxyRequest request = builder.build(); + + assertNull(request.getQueryStringParameters()); + assertEquals(1, request.getMultiValueQueryStringParameters().size()); + assertEquals(TEST_KEY_FOR_ENCODING, request.getMultiValueQueryStringParameters().keySet().iterator().next()); + assertEquals(TEST_VALUE_FOR_ENCODING, request.getMultiValueQueryStringParameters().get(TEST_KEY_FOR_ENCODING).get(0)); + assertEquals(TEST_VALUE_FOR_ENCODING, request.getMultiValueQueryStringParameters().getFirst(TEST_KEY_FOR_ENCODING)); + } + + @Test + void queryString_alb_key_value() { + AwsProxyRequestBuilder builder = new AwsProxyRequestBuilder("/path", "POST"); + builder.queryString(TEST_KEY, TEST_VALUE); + AwsProxyRequest request = builder.alb().build(); + + assertNull(request.getQueryStringParameters()); + assertEquals(1, request.getMultiValueQueryStringParameters().size()); + assertEquals(TEST_KEY, request.getMultiValueQueryStringParameters().keySet().iterator().next()); + assertEquals(TEST_VALUE, request.getMultiValueQueryStringParameters().get(TEST_KEY).get(0)); + assertEquals(TEST_VALUE, request.getMultiValueQueryStringParameters().getFirst(TEST_KEY)); + } + + @Test + void alb_keyEncoded_valueEncoded() throws IOException { + AwsProxyRequestBuilder builder = new AwsProxyRequestBuilder("/path", "POST"); + MultiValuedTreeMap map = new MultiValuedTreeMap<>(); + map.add(TEST_KEY_FOR_ENCODING, TEST_VALUE_FOR_ENCODING); + builder.multiValueQueryString(map); + AwsProxyRequest request = builder.alb().build(); + + String expectedKey = URLEncoder.encode(TEST_KEY_FOR_ENCODING, "UTF-8"); + String expectedValue = URLEncoder.encode(TEST_VALUE_FOR_ENCODING, "UTF-8"); + assertEquals(1, request.getMultiValueQueryStringParameters().size()); + assertEquals(expectedKey, request.getMultiValueQueryStringParameters().keySet().iterator().next()); + assertEquals(expectedValue, request.getMultiValueQueryStringParameters().get(expectedKey).get(0)); + assertEquals(expectedValue, request.getMultiValueQueryStringParameters().getFirst(expectedKey)); + assertEquals(expectedKey, request.getMultiValueQueryStringParameters().keySet().iterator().next()); + assertEquals(expectedValue, request.getMultiValueQueryStringParameters().get(expectedKey).get(0)); + assertEquals(expectedValue, request.getMultiValueQueryStringParameters().getFirst(expectedKey)); + } + +} From 3ad77463f5f0504812fe061e7fd40b62051ea694 Mon Sep 17 00:00:00 2001 From: Jay Fennelly Date: Sun, 27 Oct 2024 19:27:14 -0700 Subject: [PATCH 720/888] Clean up and add additional tests --- .../servlet/AwsHttpServletRequestTest.java | 101 +++++++++++++++++- .../AwsProxyHttpServletRequestTest.java | 15 ++- 2 files changed, 104 insertions(+), 12 deletions(-) diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestTest.java index 358d673a1..44d767440 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestTest.java @@ -17,7 +17,6 @@ import java.util.Base64; import java.util.List; import java.util.Map; -import java.util.Arrays; public class AwsHttpServletRequestTest { @@ -38,8 +37,12 @@ public class AwsHttpServletRequestTest { .queryString("one", "two").queryString("three", "four").build(); private static final AwsProxyRequest queryStringNullValue = new AwsProxyRequestBuilder("/test", "GET") .queryString("one", "two").queryString("three", null).build(); + private static final AwsProxyRequest queryStringEmptyValue = new AwsProxyRequestBuilder("/test", "GET") + .queryString("one", "two").queryString("three", "").build(); private static final AwsProxyRequest encodedQueryString = new AwsProxyRequestBuilder("/test", "GET") .queryString("one", "two").queryString("json", "{\"name\":\"faisal\"}").build(); + private static final AwsProxyRequest encodedQueryStringAlb = new AwsProxyRequestBuilder("/test", "GET") + .queryString("one", "two").queryString("json", "{\"name\":\"faisal\"}").alb().build(); private static final AwsProxyRequest multipleParams = new AwsProxyRequestBuilder("/test", "GET") .queryString("one", "two").queryString("one", "three").queryString("json", "{\"name\":\"faisal\"}").build(); private static final AwsProxyRequest formEncodedAndQueryString = new AwsProxyRequestBuilder("/test", "POST") @@ -200,6 +203,20 @@ void queryString_generateQueryString_nullParameterIsEmpty() { assertTrue(parsedString.endsWith("three=")); } + @Test + void queryString_generateQueryString_emptyParameterIsEmpty() { + AwsProxyHttpServletRequest request = new AwsProxyHttpServletRequest(queryStringEmptyValue, mockContext, null, config); + String parsedString = null; + try { + parsedString = request.generateQueryString(request.getAwsProxyRequest().getMultiValueQueryStringParameters(), true, config.getUriEncoding()); + } catch (ServletException e) { + e.printStackTrace(); + fail("Could not generate query string"); + } + + assertTrue(parsedString.endsWith("three=")); + } + @Test void queryStringWithEncodedParams_generateQueryString_validQuery() { AwsProxyHttpServletRequest request = new AwsProxyHttpServletRequest(encodedQueryString, mockContext, null, config); @@ -216,6 +233,22 @@ void queryStringWithEncodedParams_generateQueryString_validQuery() { assertTrue(parsedString.contains("&") && parsedString.indexOf("&") > 0 && parsedString.indexOf("&") < parsedString.length()); } + @Test + void queryStringWithEncodedParams_alb_generateQueryString_validQuery() { + AwsProxyHttpServletRequest request = new AwsProxyHttpServletRequest(encodedQueryStringAlb, mockContext, null, config); + + String parsedString = null; + try { + parsedString = request.generateQueryString(request.getAwsProxyRequest().getMultiValueQueryStringParameters(), false, config.getUriEncoding()); + } catch (ServletException e) { + e.printStackTrace(); + fail("Could not generate query string"); + } + assertTrue(parsedString.contains("one=two")); + assertTrue(parsedString.contains("json=%7B%22name%22%3A%22faisal%22%7D")); + assertTrue(parsedString.contains("&") && parsedString.indexOf("&") > 0 && parsedString.indexOf("&") < parsedString.length()); + } + @Test void queryStringWithMultipleValues_generateQueryString_validQuery() { AwsProxyHttpServletRequest request = new AwsProxyHttpServletRequest(multipleParams, mockContext, null, config); @@ -265,6 +298,22 @@ void parameterMap_generateParameterMap_nullParameter() { assertTrue(paramMap.size() == 2); } + @Test + void parameterMap_generateParameterMap_emptyParameter() { + AwsProxyHttpServletRequest request = new AwsProxyHttpServletRequest(queryStringEmptyValue, mockContext, null, config); + Map paramMap = null; + try { + paramMap = request.generateParameterMap(request.getAwsProxyRequest().getMultiValueQueryStringParameters(), config); + } catch (Exception e) { + e.printStackTrace(); + fail("Could not generate parameter map"); + } + + assertArrayEquals(new String[]{"two"}, paramMap.get("one")); + assertArrayEquals(new String[]{""}, paramMap.get("three")); + assertTrue(paramMap.size() == 2); + } + @Test void parameterMapWithEncodedParams_generateParameterMap_validQuery() { AwsProxyHttpServletRequest request = new AwsProxyHttpServletRequest(encodedQueryString, mockContext, null, config); @@ -319,12 +368,32 @@ void parameterMap_generateParameterMap_formEncodedAndQueryString() { } @Test - void parameterMap_generateParameterMap_differentCasing() { - AwsProxyHttpServletRequest request = new AwsProxyHttpServletRequest(differentCasing, mockContext, null, config); + void parameterMap_generateParameterMap_differentCasing_caseSensitive() { + ContainerConfig caseSensitiveConfig = ContainerConfig.defaultConfig(); + caseSensitiveConfig.setQueryStringCaseSensitive(true); + AwsProxyHttpServletRequest request = new AwsProxyHttpServletRequest(differentCasing, mockContext, null, caseSensitiveConfig); + Map paramMap = null; + try { + paramMap = request.generateParameterMap(request.getAwsProxyRequest().getMultiValueQueryStringParameters(), caseSensitiveConfig); + } catch (Exception e) { + e.printStackTrace(); + fail("Could not generate parameter map"); + } + assertArrayEquals(new String[] {"two", "three"}, paramMap.get("one")); + assertArrayEquals(new String[] {"four"}, paramMap.get("ONE")); + assertTrue(paramMap.size() == 2); + } + + @Test + void parameterMap_generateParameterMap_differentCasing_caseInsensitive() { + ContainerConfig caseInsensitiveConfig = ContainerConfig.defaultConfig(); + caseInsensitiveConfig.setQueryStringCaseSensitive(false); + + AwsProxyHttpServletRequest request = new AwsProxyHttpServletRequest(differentCasing, mockContext, null, caseInsensitiveConfig); Map paramMap = null; try { - paramMap = request.generateParameterMap(request.getAwsProxyRequest().getMultiValueQueryStringParameters(), config); + paramMap = request.generateParameterMap(request.getAwsProxyRequest().getMultiValueQueryStringParameters(), caseInsensitiveConfig); } catch (Exception e) { e.printStackTrace(); fail("Could not generate parameter map"); @@ -346,6 +415,17 @@ void queryParamValues_getQueryParamValues() { assertNull(result2); } + @Test + void queryParamValues_getQueryParamValues_nullValue() { + AwsProxyHttpServletRequest request = new AwsProxyHttpServletRequest(new AwsProxyRequest(), mockContext, null); + MultiValuedTreeMap map = new MultiValuedTreeMap<>(); + map.add("test", null); + String[] result1 = request.getQueryParamValues(map, "test", true); + assertArrayEquals(new String[] {null}, result1); + String[] result2 = request.getQueryParamValues(map, "TEST", true); + assertNull(result2); + } + @Test void queryParamValues_getQueryParamValues_caseInsensitive() { AwsProxyHttpServletRequest request = new AwsProxyHttpServletRequest(new AwsProxyRequest(), mockContext, null); @@ -358,4 +438,17 @@ void queryParamValues_getQueryParamValues_caseInsensitive() { assertArrayEquals(new String[]{"test", "test2"}, result2); } + @Test + void queryParamValues_getQueryParamValues_multipleCaseInsensitive() { + AwsProxyHttpServletRequest request = new AwsProxyHttpServletRequest(new AwsProxyRequest(), mockContext, null); + + MultiValuedTreeMap map = new MultiValuedTreeMap<>(); + map.add("test", "test"); + map.add("TEST", "test2"); + String[] result1 = request.getQueryParamValues(map, "test", false); + assertArrayEquals(new String[]{"test2"}, result1); + String[] result2 = request.getQueryParamValues(map, "TEST", false); + assertArrayEquals(new String[]{"test2"}, result2); + } + } diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestTest.java index 4edcf5241..a06066490 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestTest.java @@ -34,6 +34,7 @@ public class AwsProxyHttpServletRequestTest { private static final String FORM_PARAM_NAME_VALUE = "Stef"; private static final String FORM_PARAM_TEST = "test_cookie_param"; private static final String QUERY_STRING_NAME_VALUE = "Bob"; + private static final String QUERY_STRING_NAME = "name"; private static final String REQUEST_SCHEME_HTTP = "http"; private static final String USER_AGENT = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.61 Safari/537.36"; private static final String REFERER = "https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent/Firefox"; @@ -73,10 +74,9 @@ public class AwsProxyHttpServletRequestTest { } private static final AwsProxyRequestBuilder REQUEST_QUERY = new AwsProxyRequestBuilder("/hello", "POST") - .queryString(FORM_PARAM_NAME, QUERY_STRING_NAME_VALUE); + .queryString(QUERY_STRING_NAME, QUERY_STRING_NAME_VALUE); private static final AwsProxyRequestBuilder REQUEST_QUERY_EMPTY_VALUE = new AwsProxyRequestBuilder("/hello", "POST") - .queryString(FORM_PARAM_NAME, ""); - + .queryString(QUERY_STRING_NAME, ""); public void initAwsProxyHttpServletRequestTest(String type) { requestType = type; @@ -102,7 +102,7 @@ private HttpServletRequest getRequest(AwsProxyRequestBuilder req, Context lambda } } - + @MethodSource("data") @ParameterizedTest void headers_getHeader_validRequest(String type) { @@ -269,7 +269,7 @@ void queryParameters_getParameterMap_nonNull(String type) { HttpServletRequest request = getRequest(REQUEST_QUERY, null, null); assertNotNull(request); assertEquals(1, request.getParameterMap().size()); - assertEquals(QUERY_STRING_NAME_VALUE, request.getParameterMap().get(FORM_PARAM_NAME)[0]); + assertEquals(QUERY_STRING_NAME_VALUE, request.getParameterMap().get(QUERY_STRING_NAME)[0]); } @MethodSource("data") @@ -279,7 +279,7 @@ void queryParameters_getParameterMap_nonNull_EmptyParamValue(String type) { HttpServletRequest request = getRequest(REQUEST_QUERY_EMPTY_VALUE, null, null); assertNotNull(request); assertEquals(1, request.getParameterMap().size()); - assertEquals("", request.getParameterMap().get(FORM_PARAM_NAME)[0]); + assertEquals("", request.getParameterMap().get(QUERY_STRING_NAME)[0]); } @MethodSource("data") @@ -300,7 +300,7 @@ void queryParameters_getParameterNames_notNull(String type) { List parameterNames = Collections.list(request.getParameterNames()); assertNotNull(request); assertEquals(1, parameterNames.size()); - assertTrue(parameterNames.contains(FORM_PARAM_NAME)); + assertTrue(parameterNames.contains(QUERY_STRING_NAME)); } @MethodSource("data") @@ -470,7 +470,6 @@ void requestURL_getUrlWithContextPath_expectStageAsContextPath(String type) { LambdaContainerHandler.getContainerConfig().setUseStageAsServletContext(true); HttpServletRequest servletRequest = getRequest(req, null, null); String requestUrl = servletRequest.getRequestURL().toString(); - System.out.println(requestUrl); assertTrue(requestUrl.contains("/test-stage/")); LambdaContainerHandler.getContainerConfig().setUseStageAsServletContext(false); } From 7c05a6f6e63e43578b968294adda576c40329ccd Mon Sep 17 00:00:00 2001 From: Jay Fennelly Date: Sun, 27 Oct 2024 19:37:15 -0700 Subject: [PATCH 721/888] Allow generateParameterMap to optionally decode query params (for ALB requests) --- .../servlet/AwsHttpServletRequest.java | 68 ++++++++++++------- .../servlet/AwsHttpServletRequestTest.java | 17 +++++ 2 files changed, 60 insertions(+), 25 deletions(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java index ea8ef4a1a..84e4f96c5 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java @@ -584,7 +584,7 @@ private void addPart(Map> params, String fieldName, Part newP protected String[] getQueryParamValues(MultiValuedTreeMap qs, String key, boolean isCaseSensitive) { List value = getQueryParamValuesAsList(qs, key, isCaseSensitive); - if (value == null){ + if (value == null) { return null; } return value.toArray(new String[0]); @@ -607,39 +607,57 @@ protected List getQueryParamValuesAsList(MultiValuedTreeMap generateParameterMap(MultiValuedTreeMap qs, ContainerConfig config) { + return generateParameterMap(qs, config, false); + } + + protected Map generateParameterMap(MultiValuedTreeMap qs, ContainerConfig config, boolean decodeQueryParams) { Map output; Map> formEncodedParams = getFormUrlEncodedParametersMap(); if (qs == null) { // Just transform the List values to String[] - output = formEncodedParams.entrySet().stream() + return formEncodedParams.entrySet().stream() .collect(Collectors.toMap(Map.Entry::getKey, (e) -> e.getValue().toArray(new String[0]))); - } else { - Map> queryStringParams; - if (config.isQueryStringCaseSensitive()) { - queryStringParams = qs; - } else { - // If it's case insensitive, we check the entire map on every parameter - queryStringParams = qs.entrySet().stream().parallel().collect( - Collectors.toMap( - Map.Entry::getKey, - e -> getQueryParamValuesAsList(qs, e.getKey(), false) - )); - } - - // Merge formEncodedParams and queryStringParams Maps - output = Stream.of(formEncodedParams, queryStringParams).flatMap(m -> m.entrySet().stream()) - .collect( - Collectors.toMap( - Map.Entry::getKey, - e -> e.getValue().toArray(new String[0]), - // If a parameter is in both Maps, we merge the list of values (and ultimately transform to String[]) - (formParam, queryParam) -> Stream.of(formParam, queryParam).flatMap(Stream::of).toArray(String[]::new) - )); - } + // decode all keys and values in map + final MultiValuedTreeMap decodedQs = new MultiValuedTreeMap(); + if (decodeQueryParams) { + for (Map.Entry> entry : qs.entrySet()) { + String k = decodeValueIfEncoded(entry.getKey()); + List v = getQueryParamValuesAsList(qs, entry.getKey(), false).stream() + .map(AwsHttpServletRequest::decodeValueIfEncoded) + .collect(Collectors.toList()); + // addAll in case map has 2 keys that are identical once decoded + decodedQs.addAll(k, v); + } + } else { + decodedQs.putAll(qs); + } + + Map> queryStringParams; + if (config.isQueryStringCaseSensitive()) { + queryStringParams = decodedQs; + } else { + // If it's case insensitive, we check the entire map on every parameter + queryStringParams = decodedQs.entrySet().stream().collect( + Collectors.toMap( + Map.Entry::getKey, + e -> getQueryParamValuesAsList(decodedQs, e.getKey(), false) + )); + } + + // Merge formEncodedParams and queryStringParams Maps + output = Stream.of(formEncodedParams, queryStringParams).flatMap(m -> m.entrySet().stream()) + .collect( + Collectors.toMap( + Map.Entry::getKey, + e -> e.getValue().toArray(new String[0]), + // If a parameter is in both Maps, we merge the list of values (and ultimately transform to String[]) + (formParam, queryParam) -> Stream.of(formParam, queryParam).flatMap(Stream::of).toArray(String[]::new) + )); + return output; } diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestTest.java index 44d767440..179b58a1e 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestTest.java @@ -331,6 +331,23 @@ void parameterMapWithEncodedParams_generateParameterMap_validQuery() { assertTrue(paramMap.size() == 2); } + @Test + void parameterMapWithEncodedParams_alb_generateParameterMap_validQuery() { + AwsProxyHttpServletRequest request = new AwsProxyHttpServletRequest(encodedQueryStringAlb, mockContext, null, config); + + Map paramMap = null; + try { + paramMap = request.generateParameterMap(request.getAwsProxyRequest().getMultiValueQueryStringParameters(), config, true); + } catch (Exception e) { + e.printStackTrace(); + fail("Could not generate parameter map"); + } + + assertArrayEquals(new String[]{"two"}, paramMap.get("one")); + assertArrayEquals(new String[]{"{\"name\":\"faisal\"}"}, paramMap.get("json")); + assertTrue(paramMap.size() == 2); + } + @Test void parameterMapWithMultipleValues_generateParameterMap_validQuery() { AwsProxyHttpServletRequest request = new AwsProxyHttpServletRequest(multipleParams, mockContext, null, config); From 916f2a25e6c0380a0bfbe7f3a027b4e4c9a49b21 Mon Sep 17 00:00:00 2001 From: Jay Fennelly Date: Sun, 27 Oct 2024 19:39:39 -0700 Subject: [PATCH 722/888] Update unit tests to test decoding of query param names --- .../servlet/AwsHttpServletRequestTest.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestTest.java index 179b58a1e..904a35508 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequestTest.java @@ -40,11 +40,11 @@ public class AwsHttpServletRequestTest { private static final AwsProxyRequest queryStringEmptyValue = new AwsProxyRequestBuilder("/test", "GET") .queryString("one", "two").queryString("three", "").build(); private static final AwsProxyRequest encodedQueryString = new AwsProxyRequestBuilder("/test", "GET") - .queryString("one", "two").queryString("json", "{\"name\":\"faisal\"}").build(); + .queryString("one", "two").queryString("json value@1", "{\"name\":\"faisal\"}").build(); private static final AwsProxyRequest encodedQueryStringAlb = new AwsProxyRequestBuilder("/test", "GET") - .queryString("one", "two").queryString("json", "{\"name\":\"faisal\"}").alb().build(); + .queryString("one", "two").queryString("json value@1", "{\"name\":\"faisal\"}").alb().build(); private static final AwsProxyRequest multipleParams = new AwsProxyRequestBuilder("/test", "GET") - .queryString("one", "two").queryString("one", "three").queryString("json", "{\"name\":\"faisal\"}").build(); + .queryString("one", "two").queryString("one", "three").queryString("json value@1", "{\"name\":\"faisal\"}").build(); private static final AwsProxyRequest formEncodedAndQueryString = new AwsProxyRequestBuilder("/test", "POST") .queryString("one", "two").queryString("one", "three") .queryString("five", "six") @@ -229,7 +229,7 @@ void queryStringWithEncodedParams_generateQueryString_validQuery() { fail("Could not generate query string"); } assertTrue(parsedString.contains("one=two")); - assertTrue(parsedString.contains("json=%7B%22name%22%3A%22faisal%22%7D")); + assertTrue(parsedString.contains("json+value%401=%7B%22name%22%3A%22faisal%22%7D")); assertTrue(parsedString.contains("&") && parsedString.indexOf("&") > 0 && parsedString.indexOf("&") < parsedString.length()); } @@ -245,7 +245,7 @@ void queryStringWithEncodedParams_alb_generateQueryString_validQuery() { fail("Could not generate query string"); } assertTrue(parsedString.contains("one=two")); - assertTrue(parsedString.contains("json=%7B%22name%22%3A%22faisal%22%7D")); + assertTrue(parsedString.contains("json+value%401=%7B%22name%22%3A%22faisal%22%7D")); assertTrue(parsedString.contains("&") && parsedString.indexOf("&") > 0 && parsedString.indexOf("&") < parsedString.length()); } @@ -262,7 +262,7 @@ void queryStringWithMultipleValues_generateQueryString_validQuery() { } assertTrue(parsedString.contains("one=two")); assertTrue(parsedString.contains("one=three")); - assertTrue(parsedString.contains("json=%7B%22name%22%3A%22faisal%22%7D")); + assertTrue(parsedString.contains("json+value%401=%7B%22name%22%3A%22faisal%22%7D")); assertTrue(parsedString.contains("&") && parsedString.indexOf("&") > 0 && parsedString.indexOf("&") < parsedString.length()); } @@ -327,7 +327,7 @@ void parameterMapWithEncodedParams_generateParameterMap_validQuery() { } assertArrayEquals(new String[]{"two"}, paramMap.get("one")); - assertArrayEquals(new String[]{"{\"name\":\"faisal\"}"}, paramMap.get("json")); + assertArrayEquals(new String[]{"{\"name\":\"faisal\"}"}, paramMap.get("json value@1")); assertTrue(paramMap.size() == 2); } @@ -344,7 +344,7 @@ void parameterMapWithEncodedParams_alb_generateParameterMap_validQuery() { } assertArrayEquals(new String[]{"two"}, paramMap.get("one")); - assertArrayEquals(new String[]{"{\"name\":\"faisal\"}"}, paramMap.get("json")); + assertArrayEquals(new String[]{"{\"name\":\"faisal\"}"}, paramMap.get("json value@1")); assertTrue(paramMap.size() == 2); } @@ -360,7 +360,7 @@ void parameterMapWithMultipleValues_generateParameterMap_validQuery() { fail("Could not generate parameter map"); } assertArrayEquals(new String[]{"two", "three"}, paramMap.get("one")); - assertArrayEquals(new String[]{"{\"name\":\"faisal\"}"}, paramMap.get("json")); + assertArrayEquals(new String[]{"{\"name\":\"faisal\"}"}, paramMap.get("json value@1")); assertTrue(paramMap.size() == 2); } From f68e7552398816faa6b7a3e80a9373c27882387a Mon Sep 17 00:00:00 2001 From: Jay Fennelly Date: Sun, 27 Oct 2024 19:43:13 -0700 Subject: [PATCH 723/888] Add handling decoding of parameters for ALB requests and decode paramter names in HTTP API requests --- .../AwsHttpApiV2ProxyHttpServletRequest.java | 4 +-- .../servlet/AwsProxyHttpServletRequest.java | 35 +++++++++++++++++-- .../AwsProxyHttpServletRequestTest.java | 4 +-- 3 files changed, 36 insertions(+), 7 deletions(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2ProxyHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2ProxyHttpServletRequest.java index 537e10759..1caf6dace 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2ProxyHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpApiV2ProxyHttpServletRequest.java @@ -483,10 +483,10 @@ private MultiValuedTreeMap parseRawQueryString(String qs) { String[] kv = value.split(QUERY_STRING_KEY_VALUE_SEPARATOR); String key = URLDecoder.decode(kv[0], LambdaContainerHandler.getContainerConfig().getUriEncoding()); - String val = kv.length == 2 ? kv[1] : ""; + String val = kv.length == 2 ? AwsHttpServletRequest.decodeValueIfEncoded(kv[1]) : ""; qsMap.add(key, val); } catch (UnsupportedEncodingException e) { - log.error("Unsupported encoding in query string key: " + SecurityUtils.crlf(value), e); + log.error("Unsupported encoding in query string key-value pair: " + SecurityUtils.crlf(value), e); } } return qsMap; diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java index fe514e65d..c10b1ef5e 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequest.java @@ -325,8 +325,17 @@ public String getContentType() { @Override public String getParameter(String s) { + + // decode key if ALB + if (request.getRequestSource() == RequestSource.ALB) { + s = decodeValueIfEncoded(s); + } + String queryStringParameter = getFirstQueryParamValue(request.getMultiValueQueryStringParameters(), s, config.isQueryStringCaseSensitive()); if (queryStringParameter != null) { + if (request.getRequestSource() == RequestSource.ALB) { + queryStringParameter = decodeValueIfEncoded(queryStringParameter); + } return queryStringParameter; } @@ -345,15 +354,35 @@ public Enumeration getParameterNames() { if (request.getMultiValueQueryStringParameters() == null) { return Collections.enumeration(formParameterNames); } - return Collections.enumeration(Stream.concat(formParameterNames.stream(), - request.getMultiValueQueryStringParameters().keySet().stream()).collect(Collectors.toSet())); + + Set paramNames = request.getMultiValueQueryStringParameters().keySet(); + if (request.getRequestSource() == RequestSource.ALB) { + paramNames = paramNames.stream().map(AwsProxyHttpServletRequest::decodeValueIfEncoded).collect(Collectors.toSet()); + } + + return Collections.enumeration( + Stream.concat(formParameterNames.stream(), paramNames.stream()) + .collect(Collectors.toSet())); } @Override @SuppressFBWarnings("PZLA_PREFER_ZERO_LENGTH_ARRAYS") // suppressing this as according to the specs we should be returning null here if we can't find params public String[] getParameterValues(String s) { + + // decode key if ALB + if (request.getRequestSource() == RequestSource.ALB) { + s = decodeValueIfEncoded(s); + } + + // TODO lots of back and forth arrays and lists here, sort it out! List values = new ArrayList<>(Arrays.asList(getQueryParamValues(request.getMultiValueQueryStringParameters(), s, config.isQueryStringCaseSensitive()))); + // List values = getQueryParamValuesAsList(request.getMultiValueQueryStringParameters(), s, config.isQueryStringCaseSensitive()); + + // decode values if ALB + if (request.getRequestSource() == RequestSource.ALB) { + values = values.stream().map(AwsHttpServletRequest::decodeValueIfEncoded).collect(Collectors.toList()); + } values.addAll(Arrays.asList(getFormBodyParameterCaseInsensitive(s))); @@ -367,7 +396,7 @@ public String[] getParameterValues(String s) { @Override public Map getParameterMap() { - return generateParameterMap(request.getMultiValueQueryStringParameters(), config); + return generateParameterMap(request.getMultiValueQueryStringParameters(), config, request.getRequestSource() == RequestSource.ALB); } diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestTest.java index a06066490..736da27b4 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsProxyHttpServletRequestTest.java @@ -33,8 +33,8 @@ public class AwsProxyHttpServletRequestTest { private static final String FORM_PARAM_NAME = "name"; private static final String FORM_PARAM_NAME_VALUE = "Stef"; private static final String FORM_PARAM_TEST = "test_cookie_param"; - private static final String QUERY_STRING_NAME_VALUE = "Bob"; - private static final String QUERY_STRING_NAME = "name"; + private static final String QUERY_STRING_NAME_VALUE = "Bob B!"; + private static final String QUERY_STRING_NAME = "name$"; private static final String REQUEST_SCHEME_HTTP = "http"; private static final String USER_AGENT = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.61 Safari/537.36"; private static final String REFERER = "https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent/Firefox"; From 0f33cd72492a28659af1a2e904e80487250e78c0 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 28 Oct 2024 11:48:17 +0100 Subject: [PATCH 724/888] chore(deps): Update Jersey dependency to 3.1.9 --- .github/dependabot.yml | 2 +- aws-serverless-java-container-jersey/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 4 ++-- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/jersey/pet-store/build.gradle | 4 ++-- samples/jersey/pet-store/pom.xml | 2 +- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 96dd4d8b3..a82724c43 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -36,7 +36,7 @@ updates: groups: jersey: patterns: - - "org.glassfish.jersey:*" + - "org.glassfish.jersey.*:*" spring: patterns: - "org.springframework:*" diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index bf3958182..2b7ef7f17 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -16,7 +16,7 @@ - 3.1.8 + 3.1.9 diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle index a00fa1958..60a6ab3af 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle @@ -11,13 +11,13 @@ dependencies { 'com.fasterxml.jackson.core:jackson-databind:2.17.2', ) - implementation("org.glassfish.jersey.media:jersey-media-json-jackson:3.1.8") { + implementation("org.glassfish.jersey.media:jersey-media-json-jackson:3.1.9") { exclude group: 'com.fasterxml.jackson.core', module: "jackson-annotations" exclude group: 'com.fasterxml.jackson.core', module: "jackson-databind" exclude group: 'com.fasterxml.jackson.core', module: "jackson-core" } - implementation("org.glassfish.jersey.inject:jersey-hk2:3.1.8") { + implementation("org.glassfish.jersey.inject:jersey-hk2:3.1.9") { exclude group: 'javax.inject', module: "javax.inject" } diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml index 6e7e0a807..92a954e47 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml @@ -15,7 +15,7 @@ 1.8 1.8 - 3.1.8 + 3.1.9 2.17.2 5.11.0 diff --git a/samples/jersey/pet-store/build.gradle b/samples/jersey/pet-store/build.gradle index db641d14b..9afa24c7e 100644 --- a/samples/jersey/pet-store/build.gradle +++ b/samples/jersey/pet-store/build.gradle @@ -11,13 +11,13 @@ dependencies { 'com.fasterxml.jackson.core:jackson-databind:2.17.2', ) - implementation("org.glassfish.jersey.media:jersey-media-json-jackson:3.1.8") { + implementation("org.glassfish.jersey.media:jersey-media-json-jackson:3.1.9") { exclude group: 'com.fasterxml.jackson.core', module: "jackson-annotations" exclude group: 'com.fasterxml.jackson.core', module: "jackson-databind" exclude group: 'com.fasterxml.jackson.core', module: "jackson-core" } - implementation("org.glassfish.jersey.inject:jersey-hk2:3.1.8") { + implementation("org.glassfish.jersey.inject:jersey-hk2:3.1.9") { exclude group: 'javax.inject', module: "javax.inject" } } diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index 7bdc7ce40..8d9f5029f 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -26,7 +26,7 @@ 1.8 1.8 - 3.1.8 + 3.1.9 2.17.2 From 716267fc23ffaa5ebe1b41d29a37a53932c26e2b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 28 Oct 2024 10:49:36 +0000 Subject: [PATCH 725/888] chore(deps-dev): bump org.mockito:mockito-core from 5.12.0 to 5.14.2 Bumps [org.mockito:mockito-core](https://github.com/mockito/mockito) from 5.12.0 to 5.14.2. - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](https://github.com/mockito/mockito/compare/v5.12.0...v5.14.2) --- updated-dependencies: - dependency-name: org.mockito:mockito-core dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index f2e5579e4..52fa7e583 100644 --- a/pom.xml +++ b/pom.xml @@ -81,7 +81,7 @@ 2.17.2 2.0.16 5.11.0 - 5.12.0 + 5.14.2 1.3 UTF-8 From d396be6090a2fd96c3b0230dafe908f296986cf2 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 28 Oct 2024 11:52:18 +0100 Subject: [PATCH 726/888] chore(deps): Update Jackson version to 2.18.0 --- .github/dependabot.yml | 6 ++++++ .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/build.gradle | 4 ++-- .../src/main/resources/archetype-resources/pom.xml | 2 +- pom.xml | 2 +- samples/jersey/pet-store/build.gradle | 2 +- samples/jersey/pet-store/pom.xml | 2 +- samples/spring/pet-store/build.gradle | 2 +- samples/struts/pet-store/build.gradle | 4 ++-- samples/struts/pet-store/pom.xml | 2 +- 12 files changed, 19 insertions(+), 13 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index a82724c43..d82be62de 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -18,6 +18,9 @@ updates: slf4j: patterns: - "org.slf4j:*" + jackson: + patterns: + - "com.fasterxml.jackson.*:*" log4j: patterns: - "org.apache.logging.log4j:*" @@ -46,5 +49,8 @@ updates: log4j: patterns: - "org.apache.logging.log4j:*" + jackson: + patterns: + - "com.fasterxml.jackson.*:*" schedule: interval: "weekly" \ No newline at end of file diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle index 60a6ab3af..e8a58a7ac 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle @@ -8,7 +8,7 @@ repositories { dependencies { implementation ( 'com.amazonaws.serverless:aws-serverless-java-container-jersey:[2.0-SNAPSHOT,)', - 'com.fasterxml.jackson.core:jackson-databind:2.17.2', + 'com.fasterxml.jackson.core:jackson-databind:2.18.0', ) implementation("org.glassfish.jersey.media:jersey-media-json-jackson:3.1.9") { diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml index 92a954e47..0c34139c0 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 3.1.9 - 2.17.2 + 2.18.0 5.11.0 diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index 7ea0c5790..8ba66cc0b 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -13,7 +13,7 @@ dependencies { 'org.apache.logging.log4j:log4j-core:2.24.0', 'org.apache.logging.log4j:log4j-api:2.24.0', 'org.apache.logging.log4j:log4j-slf4j-impl:2.24.0', - 'com.fasterxml.jackson.core:jackson-databind:2.17.2', + 'com.fasterxml.jackson.core:jackson-databind:2.18.0', 'com.amazonaws:aws-lambda-java-log4j2:1.6.0', ) diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle index c31358b60..1f67ba445 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle @@ -34,8 +34,8 @@ dependencies { exclude group: 'org.apache.logging.log4j', module: 'log4j-api' } implementation ('org.hibernate.validator:hibernate-validator:6.1.7.Final') - implementation ('com.fasterxml.jackson.core:jackson-databind:2.17.2') - implementation ('com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.17.2') + implementation ('com.fasterxml.jackson.core:jackson-databind:2.18.0') + implementation ('com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.18.0') implementation ('org.apache.logging.log4j:log4j-core:2.24.0') implementation ('org.apache.logging.log4j:log4j-api:2.24.0') implementation ('org.apache.logging.log4j:log4j-slf4j-impl:2.24.0') diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml index 1c4be66ea..1ba9bef62 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 1.8 7.0.0-M9 - 2.17.2 + 2.18.0 5.11.0 2.24.0 diff --git a/pom.xml b/pom.xml index f2e5579e4..825097508 100644 --- a/pom.xml +++ b/pom.xml @@ -78,7 +78,7 @@ 0.7 10.0.3 - 2.17.2 + 2.18.0 2.0.16 5.11.0 5.12.0 diff --git a/samples/jersey/pet-store/build.gradle b/samples/jersey/pet-store/build.gradle index 9afa24c7e..8be9f574e 100644 --- a/samples/jersey/pet-store/build.gradle +++ b/samples/jersey/pet-store/build.gradle @@ -8,7 +8,7 @@ repositories { dependencies { implementation ( 'com.amazonaws.serverless:aws-serverless-java-container-jersey:[2.0-SNAPSHOT,)', - 'com.fasterxml.jackson.core:jackson-databind:2.17.2', + 'com.fasterxml.jackson.core:jackson-databind:2.18.0', ) implementation("org.glassfish.jersey.media:jersey-media-json-jackson:3.1.9") { diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index 8d9f5029f..575a2afdd 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -27,7 +27,7 @@ 1.8 1.8 3.1.9 - 2.17.2 + 2.18.0 diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index eedeaafbd..cf412a198 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -13,7 +13,7 @@ dependencies { 'org.apache.logging.log4j:log4j-core:2.24.0', 'org.apache.logging.log4j:log4j-api:2.24.0', 'org.apache.logging.log4j:log4j-slf4j-impl:2.24.0', - 'com.fasterxml.jackson.core:jackson-databind:2.17.2', + 'com.fasterxml.jackson.core:jackson-databind:2.18.0', 'com.amazonaws:aws-lambda-java-log4j2:1.6.0', ) } diff --git a/samples/struts/pet-store/build.gradle b/samples/struts/pet-store/build.gradle index 85eb0492c..4a760c638 100644 --- a/samples/struts/pet-store/build.gradle +++ b/samples/struts/pet-store/build.gradle @@ -22,8 +22,8 @@ dependencies { 'org.hibernate.validator:hibernate-validator:6.1.7.Final', 'org.glassfish:jakarta.el:5.0.0-M1', 'jakarta.el:jakarta.el-api:5.0.1', - 'com.fasterxml.jackson.core:jackson-databind:2.17.2', - 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.17.2', + 'com.fasterxml.jackson.core:jackson-databind:2.18.0', + 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.18.0', 'org.apache.logging.log4j:log4j-core:2.24.0', 'org.apache.logging.log4j:log4j-api:2.24.0', 'com.amazonaws:aws-lambda-java-log4j2:1.6.0', diff --git a/samples/struts/pet-store/pom.xml b/samples/struts/pet-store/pom.xml index 09a6e411e..4de37279c 100644 --- a/samples/struts/pet-store/pom.xml +++ b/samples/struts/pet-store/pom.xml @@ -27,7 +27,7 @@ 1.8 1.8 7.0.0-M9 - 2.17.2 + 2.18.0 4.13.2 2.24.0 From 45e77e9d033d8db63e696f68ace154b4531f5d69 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 28 Oct 2024 11:53:29 +0100 Subject: [PATCH 727/888] chore(deps): update JUnit version to 5.11.3 --- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- pom.xml | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle index e8a58a7ac..e62c96012 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle @@ -23,7 +23,7 @@ dependencies { testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") testImplementation("org.apache.httpcomponents.client5:httpclient5:5.4") - testImplementation(platform("org.junit:junit-bom:5.11.0")) + testImplementation(platform("org.junit:junit-bom:5.11.3")) testImplementation("org.junit.jupiter:junit-jupiter") } diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml index 0c34139c0..6c855ad9c 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml @@ -17,7 +17,7 @@ 3.1.9 2.18.0 - 5.11.0 + 5.11.3 diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index 8ba66cc0b..a476155a3 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -19,7 +19,7 @@ dependencies { testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") testImplementation("org.apache.httpcomponents.client5:httpclient5:5.4") - testImplementation(platform("org.junit:junit-bom:5.11.0")) + testImplementation(platform("org.junit:junit-bom:5.11.3")) testImplementation("org.junit.jupiter:junit-jupiter") } diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index d59721621..bed207b34 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -17,7 +17,7 @@ 1.8 1.8 6.1.14 - 5.11.0 + 5.11.3 2.24.0 diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle index 9877ece33..b29bdefd1 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle @@ -15,7 +15,7 @@ dependencies { testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") testImplementation("org.apache.httpcomponents.client5:httpclient5:5.4") - testImplementation(platform("org.junit:junit-bom:5.11.0")) + testImplementation(platform("org.junit:junit-bom:5.11.3")) testImplementation("org.junit.jupiter:junit-jupiter") } diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml index 1d8b963d6..ef9a61702 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml @@ -21,7 +21,7 @@ 17 - 5.11.0 + 5.11.3 diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle index 1f67ba445..499f170a4 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle @@ -43,7 +43,7 @@ dependencies { testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") testImplementation("org.apache.httpcomponents.client5:httpclient5:5.4") - testImplementation(platform("org.junit:junit-bom:5.11.0")) + testImplementation(platform("org.junit:junit-bom:5.11.3")) testImplementation("org.junit.jupiter:junit-jupiter") testImplementation('org.apache.struts:struts2-junit-plugin:7.0.0-M9') { exclude group: 'org.apache.struts', module: 'struts2-core' diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml index 1ba9bef62..b9d990c68 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml @@ -17,7 +17,7 @@ 1.8 7.0.0-M9 2.18.0 - 5.11.0 + 5.11.3 2.24.0 diff --git a/pom.xml b/pom.xml index cc82de4d9..7c55c34aa 100644 --- a/pom.xml +++ b/pom.xml @@ -80,7 +80,7 @@ 10.0.3 2.18.0 2.0.16 - 5.11.0 + 5.11.3 5.14.2 1.3 UTF-8 From 36a6c8da22cb2c724996926621e837d16e40bd48 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 28 Oct 2024 11:55:24 +0100 Subject: [PATCH 728/888] chore(deps): Update Log4J dependencies to 2.24.1 --- .../src/main/resources/archetype-resources/build.gradle | 6 +++--- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 6 +++--- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/spring/pet-store/build.gradle | 6 +++--- samples/spring/pet-store/pom.xml | 2 +- samples/struts/pet-store/build.gradle | 4 ++-- samples/struts/pet-store/pom.xml | 2 +- 8 files changed, 15 insertions(+), 15 deletions(-) diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index a476155a3..6e57dbce5 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -10,9 +10,9 @@ dependencies { 'org.springframework:spring-webmvc:6.1.14', 'org.springframework:spring-context:6.1.14', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[2.0-SNAPSHOT,)', - 'org.apache.logging.log4j:log4j-core:2.24.0', - 'org.apache.logging.log4j:log4j-api:2.24.0', - 'org.apache.logging.log4j:log4j-slf4j-impl:2.24.0', + 'org.apache.logging.log4j:log4j-core:2.24.1', + 'org.apache.logging.log4j:log4j-api:2.24.1', + 'org.apache.logging.log4j:log4j-slf4j-impl:2.24.1', 'com.fasterxml.jackson.core:jackson-databind:2.18.0', 'com.amazonaws:aws-lambda-java-log4j2:1.6.0', ) diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index bed207b34..bc88be912 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -18,7 +18,7 @@ 1.8 6.1.14 5.11.3 - 2.24.0 + 2.24.1 diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle index 499f170a4..7960abe9c 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle @@ -36,9 +36,9 @@ dependencies { implementation ('org.hibernate.validator:hibernate-validator:6.1.7.Final') implementation ('com.fasterxml.jackson.core:jackson-databind:2.18.0') implementation ('com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.18.0') - implementation ('org.apache.logging.log4j:log4j-core:2.24.0') - implementation ('org.apache.logging.log4j:log4j-api:2.24.0') - implementation ('org.apache.logging.log4j:log4j-slf4j-impl:2.24.0') + implementation ('org.apache.logging.log4j:log4j-core:2.24.1') + implementation ('org.apache.logging.log4j:log4j-api:2.24.1') + implementation ('org.apache.logging.log4j:log4j-slf4j-impl:2.24.1') implementation ('com.amazonaws:aws-lambda-java-log4j2:1.6.0') testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml index b9d990c68..a193394cc 100644 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml @@ -18,7 +18,7 @@ 7.0.0-M9 2.18.0 5.11.3 - 2.24.0 + 2.24.1 diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index cf412a198..6f1503b0f 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -10,9 +10,9 @@ dependencies { 'org.springframework:spring-webmvc:6.1.14', 'org.springframework:spring-context:6.1.14', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[2.0-SNAPSHOT,)', - 'org.apache.logging.log4j:log4j-core:2.24.0', - 'org.apache.logging.log4j:log4j-api:2.24.0', - 'org.apache.logging.log4j:log4j-slf4j-impl:2.24.0', + 'org.apache.logging.log4j:log4j-core:2.24.1', + 'org.apache.logging.log4j:log4j-api:2.24.1', + 'org.apache.logging.log4j:log4j-slf4j-impl:2.24.1', 'com.fasterxml.jackson.core:jackson-databind:2.18.0', 'com.amazonaws:aws-lambda-java-log4j2:1.6.0', ) diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index 9634fe9f7..9e5560e73 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -25,7 +25,7 @@ 6.1.14 - 2.24.0 + 2.24.1 17 17 diff --git a/samples/struts/pet-store/build.gradle b/samples/struts/pet-store/build.gradle index 4a760c638..fdc9601c1 100644 --- a/samples/struts/pet-store/build.gradle +++ b/samples/struts/pet-store/build.gradle @@ -24,8 +24,8 @@ dependencies { 'jakarta.el:jakarta.el-api:5.0.1', 'com.fasterxml.jackson.core:jackson-databind:2.18.0', 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.18.0', - 'org.apache.logging.log4j:log4j-core:2.24.0', - 'org.apache.logging.log4j:log4j-api:2.24.0', + 'org.apache.logging.log4j:log4j-core:2.24.1', + 'org.apache.logging.log4j:log4j-api:2.24.1', 'com.amazonaws:aws-lambda-java-log4j2:1.6.0', ) } diff --git a/samples/struts/pet-store/pom.xml b/samples/struts/pet-store/pom.xml index 4de37279c..9042ea76f 100644 --- a/samples/struts/pet-store/pom.xml +++ b/samples/struts/pet-store/pom.xml @@ -29,7 +29,7 @@ 7.0.0-M9 2.18.0 4.13.2 - 2.24.0 + 2.24.1 From 64b9b04eacd6686a6aaddbc3bc6b5bbc0590ab6e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 28 Oct 2024 10:55:57 +0000 Subject: [PATCH 729/888] chore(deps): bump com.github.spotbugs:spotbugs-maven-plugin Bumps [com.github.spotbugs:spotbugs-maven-plugin](https://github.com/spotbugs/spotbugs-maven-plugin) from 4.8.6.2 to 4.8.6.5. - [Release notes](https://github.com/spotbugs/spotbugs-maven-plugin/releases) - [Commits](https://github.com/spotbugs/spotbugs-maven-plugin/compare/spotbugs-maven-plugin-4.8.6.2...spotbugs-maven-plugin-4.8.6.5) --- updated-dependencies: - dependency-name: com.github.spotbugs:spotbugs-maven-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index cc82de4d9..159ab086d 100644 --- a/pom.xml +++ b/pom.xml @@ -249,7 +249,7 @@ com.github.spotbugs spotbugs-maven-plugin - 4.8.6.2 + 4.8.6.5 - - com.amazonaws.serverless - aws-serverless-java-container-core - 2.1.0-SNAPSHOT - - - com.amazonaws.serverless - aws-serverless-java-container-core - 2.1.0-SNAPSHOT - tests - test-jar - test - - - - org.apache.struts - struts2-core - ${struts.version} - - - commons-io - commons-io - - - - - org.apache.struts - struts2-json-plugin - ${struts.version} - test - - - - org.apache.struts - struts2-junit-plugin - ${struts.version} - test - - - junit - junit - - - - - - commons-codec - commons-codec - 1.17.1 - test - - - - com.fasterxml.jackson.core - jackson-databind - ${jackson.version} - - - - jakarta.el - jakarta.el-api - 5.0.1 - test - - - - jakarta.servlet.jsp - jakarta.servlet.jsp-api - 3.1.0 - test - - - - org.glassfish - jakarta.el - 5.0.0-M1 - test - - - - - - - org.jacoco - jacoco-maven-plugin - - ${basedir}/target/coverage-reports/jacoco-unit.exec - ${basedir}/target/coverage-reports/jacoco-unit.exec - - - - default-prepare-agent - - prepare-agent - - - - jacoco-site - package - - report - - - - jacoco-check - test - - check - - - true - - BUNDLE - - - INSTRUCTION - COVEREDRATIO - ${jacoco.minCoverage} - - - - - - - - - - org.apache.maven.plugins - maven-surefire-plugin - - false - - - - com.github.spotbugs - spotbugs-maven-plugin - - - - analyze-compile - compile - - check - - - - - - org.owasp - dependency-check-maven - ${dependencyCheck.version} - - true - - ${project.basedir}/../owasp-suppression.xml - - 7 - false - - - - - - - - apache-pre-release - https://repository.apache.org/content/repositories/staging/ - default - - - diff --git a/aws-serverless-java-container-struts/src/main/java/com/amazonaws/serverless/proxy/struts/StrutsLambdaContainerHandler.java b/aws-serverless-java-container-struts/src/main/java/com/amazonaws/serverless/proxy/struts/StrutsLambdaContainerHandler.java deleted file mode 100644 index 257de488c..000000000 --- a/aws-serverless-java-container-struts/src/main/java/com/amazonaws/serverless/proxy/struts/StrutsLambdaContainerHandler.java +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance - * with the License. A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.proxy.struts; - -import com.amazonaws.serverless.exceptions.ContainerInitializationException; -import com.amazonaws.serverless.proxy.AwsHttpApiV2SecurityContextWriter; -import com.amazonaws.serverless.proxy.AwsProxyExceptionHandler; -import com.amazonaws.serverless.proxy.AwsProxySecurityContextWriter; -import com.amazonaws.serverless.proxy.ExceptionHandler; -import com.amazonaws.serverless.proxy.RequestReader; -import com.amazonaws.serverless.proxy.ResponseWriter; -import com.amazonaws.serverless.proxy.SecurityContextWriter; -import com.amazonaws.serverless.proxy.internal.servlet.AwsHttpApiV2HttpServletRequestReader; -import com.amazonaws.serverless.proxy.internal.servlet.AwsHttpServletRequest; -import com.amazonaws.serverless.proxy.internal.servlet.AwsHttpServletResponse; -import com.amazonaws.serverless.proxy.internal.servlet.AwsLambdaServletContainerHandler; -import com.amazonaws.serverless.proxy.internal.servlet.AwsProxyHttpServletRequestReader; -import com.amazonaws.serverless.proxy.internal.servlet.AwsProxyHttpServletResponseWriter; -import com.amazonaws.serverless.proxy.internal.testutils.Timer; -import com.amazonaws.serverless.proxy.model.AwsProxyRequest; -import com.amazonaws.serverless.proxy.model.AwsProxyResponse; -import com.amazonaws.serverless.proxy.model.HttpApiV2ProxyRequest; -import com.amazonaws.services.lambda.runtime.Context; -import org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import jakarta.servlet.DispatcherType; -import jakarta.servlet.FilterRegistration; -import jakarta.servlet.Servlet; -import jakarta.servlet.http.HttpServletRequest; -import java.util.EnumSet; -import java.util.concurrent.CountDownLatch; - -/** - * A Lambda handler to initialize the Struts filter and proxy the requests. - * - * @param request type - * @param response type - */ -public class StrutsLambdaContainerHandler extends AwsLambdaServletContainerHandler { - - private static final Logger log = LoggerFactory.getLogger(StrutsLambdaContainerHandler.class); - - public static final String HEADER_STRUTS_STATUS_CODE = "X-Struts-StatusCode"; - - private static final String TIMER_STRUTS_CONTAINER_CONSTRUCTOR = "STRUTS_CONTAINER_CONSTRUCTOR"; - private static final String TIMER_STRUTS_HANDLE_REQUEST = "STRUTS_HANDLE_REQUEST"; - private static final String TIMER_STRUTS_COLD_START_INIT = "STRUTS_COLD_START_INIT"; - private static final String STRUTS_FILTER_NAME = "StrutsFilter"; - - private boolean initialized; - - public static StrutsLambdaContainerHandler getAwsProxyHandler() { - return new StrutsLambdaContainerHandler( - AwsProxyRequest.class, - AwsProxyResponse.class, - new AwsProxyHttpServletRequestReader(), - new AwsProxyHttpServletResponseWriter(), - new AwsProxySecurityContextWriter(), - new AwsProxyExceptionHandler()); - } - - public static StrutsLambdaContainerHandler getHttpApiV2ProxyHandler() { - return new StrutsLambdaContainerHandler( - HttpApiV2ProxyRequest.class, - AwsProxyResponse.class, - new AwsHttpApiV2HttpServletRequestReader(), - new AwsProxyHttpServletResponseWriter(true), - new AwsHttpApiV2SecurityContextWriter(), - new AwsProxyExceptionHandler()); - } - - public StrutsLambdaContainerHandler(Class requestTypeClass, - Class responseTypeClass, - RequestReader requestReader, - ResponseWriter responseWriter, - SecurityContextWriter securityContextWriter, - ExceptionHandler exceptionHandler) { - - super(requestTypeClass, responseTypeClass, requestReader, responseWriter, securityContextWriter, exceptionHandler); - Timer.start(TIMER_STRUTS_CONTAINER_CONSTRUCTOR); - this.initialized = false; - Timer.stop(TIMER_STRUTS_CONTAINER_CONSTRUCTOR); - } - - @Override - protected AwsHttpServletResponse getContainerResponse(HttpServletRequest request, CountDownLatch latch) { - return new AwsHttpServletResponse(request, latch); - } - - @Override - protected void handleRequest(HttpServletRequest httpServletRequest, - AwsHttpServletResponse httpServletResponse, - Context lambdaContext) throws Exception { - Timer.start(TIMER_STRUTS_HANDLE_REQUEST); - if (!this.initialized) { - initialize(); - } - - if (AwsHttpServletRequest.class.isAssignableFrom(httpServletRequest.getClass())) { - ((AwsHttpServletRequest)httpServletRequest).setServletContext(this.getServletContext()); - } - this.doFilter(httpServletRequest, httpServletResponse, null); - String responseStatusCode = httpServletResponse.getHeader(HEADER_STRUTS_STATUS_CODE); - if (responseStatusCode != null) { - httpServletResponse.setStatus(Integer.parseInt(responseStatusCode)); - } - Timer.stop(TIMER_STRUTS_HANDLE_REQUEST); - } - - @Override - public void initialize() throws ContainerInitializationException { - log.info("Initialize Struts Lambda Application ..."); - Timer.start(TIMER_STRUTS_COLD_START_INIT); - try { - if (this.startupHandler != null) { - this.startupHandler.onStartup(this.getServletContext()); - } - StrutsPrepareAndExecuteFilter filter = new StrutsPrepareAndExecuteFilter(); - FilterRegistration.Dynamic filterRegistration = this.getServletContext() - .addFilter(STRUTS_FILTER_NAME, filter); - filterRegistration.addMappingForUrlPatterns( - EnumSet.of(DispatcherType.REQUEST, DispatcherType.ASYNC, DispatcherType.INCLUDE, DispatcherType.FORWARD), - true, "/*"); - } catch (Exception e) { - throw new ContainerInitializationException("Could not initialize Struts container", e); - } - - this.initialized = true; - Timer.stop(TIMER_STRUTS_COLD_START_INIT); - log.info("... initialize of Struts Lambda Application completed!"); - } - - public Servlet getServlet() { - return null; - } -} diff --git a/aws-serverless-java-container-struts/src/main/java/com/amazonaws/serverless/proxy/struts/StrutsLambdaHandler.java b/aws-serverless-java-container-struts/src/main/java/com/amazonaws/serverless/proxy/struts/StrutsLambdaHandler.java deleted file mode 100644 index 0e1ccfa17..000000000 --- a/aws-serverless-java-container-struts/src/main/java/com/amazonaws/serverless/proxy/struts/StrutsLambdaHandler.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance - * with the License. A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.proxy.struts; - -import com.amazonaws.serverless.proxy.model.AwsProxyRequest; -import com.amazonaws.serverless.proxy.model.AwsProxyResponse; -import com.amazonaws.services.lambda.runtime.Context; -import com.amazonaws.services.lambda.runtime.RequestStreamHandler; - -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; - -/** - * The lambda handler to handle the requests. - *

- * - * com.amazonaws.serverless.proxy.struts.StrutsLambdaHandler::handleRequest - * - */ -public class StrutsLambdaHandler implements RequestStreamHandler { - - private final StrutsLambdaContainerHandler handler = StrutsLambdaContainerHandler - .getAwsProxyHandler(); - - @Override - public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) - throws IOException { - handler.proxyStream(inputStream, outputStream, context); - } -} diff --git a/aws-serverless-java-container-struts/src/test/java/com/amazonaws/serverless/proxy/struts/StrutsAwsProxyTest.java b/aws-serverless-java-container-struts/src/test/java/com/amazonaws/serverless/proxy/struts/StrutsAwsProxyTest.java deleted file mode 100644 index 6d7e2a37f..000000000 --- a/aws-serverless-java-container-struts/src/test/java/com/amazonaws/serverless/proxy/struts/StrutsAwsProxyTest.java +++ /dev/null @@ -1,378 +0,0 @@ -/* - * Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance - * with the License. A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.proxy.struts; - - -import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; -import com.amazonaws.serverless.proxy.internal.testutils.MockLambdaContext; -import com.amazonaws.serverless.proxy.model.AwsProxyRequest; -import com.amazonaws.serverless.proxy.model.AwsProxyResponse; -import com.amazonaws.serverless.proxy.model.HttpApiV2ProxyRequest; -import com.amazonaws.serverless.proxy.struts.echoapp.EchoAction; -import com.amazonaws.services.lambda.runtime.Context; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.ObjectMapper; -import org.apache.commons.codec.binary.Base64; -import org.apache.struts2.junit.StrutsRestTestCase; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.MethodSource; - -import jakarta.ws.rs.core.Response; -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.net.URLDecoder; -import java.util.Arrays; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; -import java.util.UUID; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.junit.jupiter.api.Assertions.fail; -import static org.junit.jupiter.api.Assumptions.assumeTrue; - -/** - * Unit test class for the Struts2 AWS_PROXY default implementation - */ -public class StrutsAwsProxyTest extends StrutsRestTestCase { - private static final String CUSTOM_HEADER_KEY = "x-custom-header"; - private static final String CUSTOM_HEADER_VALUE = "my-custom-value"; - private static final String AUTHORIZER_PRINCIPAL_ID = "test-principal-" + UUID.randomUUID().toString(); - private static final String HTTP_METHOD_GET = "GET"; - private static final String QUERY_STRING_MODE = "mode"; - private static final String QUERY_STRING_KEY = "message"; - private static final String QUERY_STRING_ENCODED_VALUE = "Hello Struts2"; - private static final String USER_PRINCIPAL = "user1"; - private static final String CONTENT_TYPE_APPLICATION_JSON = "application/json; charset=UTF-8"; - - - private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); - private final StrutsLambdaContainerHandler handler = StrutsLambdaContainerHandler - .getAwsProxyHandler(); - private final StrutsLambdaContainerHandler httpApiHandler = StrutsLambdaContainerHandler - .getHttpApiV2ProxyHandler(); - private final Context lambdaContext = new MockLambdaContext(); - private String type; - - public void initStrutsAwsProxyTest(String reqType) { - type = reqType; - } - - public static Collection data() { - return Arrays.asList(new Object[]{"API_GW", "ALB", "HTTP_API"}); - } - - private AwsProxyResponse executeRequest(AwsProxyRequestBuilder requestBuilder, Context lambdaContext) { - switch (type) { - case "API_GW": - return handler.proxy(requestBuilder.build(), lambdaContext); - case "ALB": - return handler.proxy(requestBuilder.alb().build(), lambdaContext); - case "HTTP_API": - return httpApiHandler.proxy(requestBuilder.toHttpApiV2Request(), lambdaContext); - default: - throw new RuntimeException("Unknown request type: " + type); - } - } - - @MethodSource("data") - @ParameterizedTest - void headers_getHeaders_echo(String reqType) { - initStrutsAwsProxyTest(reqType); - AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo-request-info", HTTP_METHOD_GET) - .queryString(QUERY_STRING_MODE, "headers") - .header(CUSTOM_HEADER_KEY, CUSTOM_HEADER_VALUE) - .json(); - - AwsProxyResponse output = executeRequest(request, lambdaContext); - assertEquals(200, output.getStatusCode()); - assertEquals(CONTENT_TYPE_APPLICATION_JSON, output.getMultiValueHeaders().getFirst("Content-Type")); - - validateMapResponseModel(output); - } - - @MethodSource("data") - @ParameterizedTest - void context_servletResponse_setCustomHeader(String reqType) { - initStrutsAwsProxyTest(reqType); - AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo", HTTP_METHOD_GET) - .queryString("customHeader", "true") - .json(); - - AwsProxyResponse output = executeRequest(request, lambdaContext); - assertEquals(200, output.getStatusCode()); - assertTrue(output.getMultiValueHeaders().containsKey("XX")); - } - - @MethodSource("data") - @ParameterizedTest - void context_serverInfo_correctContext(String reqType) { - initStrutsAwsProxyTest(reqType); - assumeTrue("API_GW".equals(type)); - AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo", HTTP_METHOD_GET) - .queryString(QUERY_STRING_KEY, "Hello Struts2") - .header("Content-Type", "application/json") - .queryString("contentType", "true"); - AwsProxyResponse output = executeRequest(request, lambdaContext); - assertEquals(200, output.getStatusCode()); - assertEquals(CONTENT_TYPE_APPLICATION_JSON, output.getMultiValueHeaders().getFirst("Content-Type")); - - validateSingleValueModel(output, "Hello Struts2"); - } - - @MethodSource("data") - @ParameterizedTest - void queryString_uriInfo_echo(String reqType) { - initStrutsAwsProxyTest(reqType); - AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo-request-info", HTTP_METHOD_GET) - .queryString(QUERY_STRING_MODE, "query-string") - .queryString(CUSTOM_HEADER_KEY, CUSTOM_HEADER_VALUE) - .json(); - - - AwsProxyResponse output = executeRequest(request, lambdaContext); - assertEquals(200, output.getStatusCode()); - assertEquals(CONTENT_TYPE_APPLICATION_JSON, output.getMultiValueHeaders().getFirst("Content-Type")); - - validateMapResponseModel(output); - } - - @MethodSource("data") - @ParameterizedTest - void requestScheme_valid_expectHttps(String reqType) { - initStrutsAwsProxyTest(reqType); - AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo-request-info", HTTP_METHOD_GET) - .queryString(QUERY_STRING_MODE, "scheme") - .queryString(QUERY_STRING_KEY, QUERY_STRING_ENCODED_VALUE) - .json(); - - AwsProxyResponse output = executeRequest(request, lambdaContext); - assertEquals(200, output.getStatusCode()); - assertEquals(CONTENT_TYPE_APPLICATION_JSON, output.getMultiValueHeaders().getFirst("Content-Type")); - - validateSingleValueModel(output, "https"); - } - - @MethodSource("data") - @ParameterizedTest - void authorizer_securityContext_customPrincipalSuccess(String reqType) { - initStrutsAwsProxyTest(reqType); - assumeTrue("API_GW".equals(type)); - AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo-request-info", HTTP_METHOD_GET) - .queryString(QUERY_STRING_MODE, "principal") - .json() - .authorizerPrincipal(AUTHORIZER_PRINCIPAL_ID); - - AwsProxyResponse output = executeRequest(request, lambdaContext); - assertEquals(200, output.getStatusCode()); - assertEquals(CONTENT_TYPE_APPLICATION_JSON, output.getMultiValueHeaders().getFirst("Content-Type")); - - validateSingleValueModel(output, AUTHORIZER_PRINCIPAL_ID); - } - - @MethodSource("data") - @ParameterizedTest - void errors_unknownRoute_expect404(String reqType) { - initStrutsAwsProxyTest(reqType); - AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/unknown", HTTP_METHOD_GET); - - AwsProxyResponse output = executeRequest(request, lambdaContext); - assertEquals(404, output.getStatusCode()); - } - - @MethodSource("data") - @ParameterizedTest - void error_contentType_invalidContentType(String reqType) { - initStrutsAwsProxyTest(reqType); - AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo-request-info", "POST") - .queryString(QUERY_STRING_MODE, "content-type") - .header("Content-Type", "application/octet-stream") - .body("asdasdasd"); - - AwsProxyResponse output = executeRequest(request, lambdaContext); - assertEquals(415, output.getStatusCode()); - } - - @MethodSource("data") - @ParameterizedTest - void error_statusCode_methodNotAllowed(String reqType) { - initStrutsAwsProxyTest(reqType); - AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo-request-info", "POST") - .queryString(QUERY_STRING_MODE, "not-allowed") - .json(); - - AwsProxyResponse output = executeRequest(request, lambdaContext); - assertEquals(405, output.getStatusCode()); - } - - - @MethodSource("data") - @ParameterizedTest - void responseBody_responseWriter_validBody(String reqType) throws JsonProcessingException { - initStrutsAwsProxyTest(reqType); - Map value = new HashMap<>(); - value.put(QUERY_STRING_KEY, CUSTOM_HEADER_VALUE); - AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo", "POST") - .json() - .body(OBJECT_MAPPER.writeValueAsString(value)); - - AwsProxyResponse output = executeRequest(request, lambdaContext); - assertEquals(200, output.getStatusCode()); - assertNotNull(output.getBody()); - - validateSingleValueModel(output, "{\"message\":\"my-custom-value\"}"); - } - - @MethodSource("data") - @ParameterizedTest - void statusCode_responseStatusCode_customStatusCode(String reqType) { - initStrutsAwsProxyTest(reqType); - AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo-request-info", HTTP_METHOD_GET) - .queryString(QUERY_STRING_MODE, "custom-status-code") - .queryString("status", "201") - .json(); - - AwsProxyResponse output = executeRequest(request, lambdaContext); - assertEquals(201, output.getStatusCode()); - } - - @MethodSource("data") - @ParameterizedTest - void base64_binaryResponse_base64Encoding(String reqType) { - initStrutsAwsProxyTest(reqType); - AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo", HTTP_METHOD_GET); - - AwsProxyResponse response = executeRequest(request, lambdaContext); - assertNotNull(response.getBody()); - assertTrue(Base64.isBase64(response.getBody())); - } - - @MethodSource("data") - @ParameterizedTest - void exception_mapException_mapToNotImplemented(String reqType) { - initStrutsAwsProxyTest(reqType); - AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo-request-info", "POST") - .queryString(QUERY_STRING_MODE, "not-implemented"); - - AwsProxyResponse response = executeRequest(request, lambdaContext); - assertNotNull(response.getBody()); - assertEquals("null", response.getBody()); - assertEquals(Response.Status.NOT_IMPLEMENTED.getStatusCode(), response.getStatusCode()); - } - - @MethodSource("data") - @ParameterizedTest - void stripBasePath_route_shouldRouteCorrectly(String reqType) { - initStrutsAwsProxyTest(reqType); - AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/custompath/echo", HTTP_METHOD_GET) - .json() - .queryString(QUERY_STRING_KEY, "stripped"); - handler.stripBasePath("/custompath"); - AwsProxyResponse output = executeRequest(request, lambdaContext); - assertEquals(200, output.getStatusCode()); - validateSingleValueModel(output, "stripped"); - handler.stripBasePath(""); - } - - @MethodSource("data") - @ParameterizedTest - void stripBasePath_route_shouldReturn404(String reqType) { - initStrutsAwsProxyTest(reqType); - AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/custompath/echo/status-code", HTTP_METHOD_GET) - .json() - .queryString("status", "201"); - handler.stripBasePath("/custom"); - AwsProxyResponse output = executeRequest(request, lambdaContext); - assertEquals(404, output.getStatusCode()); - handler.stripBasePath(""); - } - - @MethodSource("data") - @ParameterizedTest - void securityContext_injectPrincipal_expectPrincipalName(String reqType) { - initStrutsAwsProxyTest(reqType); - assumeTrue("API_GW".equals(type)); - AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo-request-info", HTTP_METHOD_GET) - .queryString(QUERY_STRING_MODE, "principal") - .authorizerPrincipal(USER_PRINCIPAL); - - AwsProxyResponse resp = executeRequest(request, lambdaContext); - assertEquals(200, resp.getStatusCode()); - validateSingleValueModel(resp, USER_PRINCIPAL); - } - - @MethodSource("data") - @ParameterizedTest - void queryParam_encoding_expectUnencodedParam(String reqType) { - initStrutsAwsProxyTest(reqType); - assumeTrue("API_GW".equals(type)); - String paramValue = "p%2Fz%2B3"; - String decodedParam = ""; - try { - decodedParam = URLDecoder.decode(paramValue, "UTF-8"); - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - fail("Could not decode parameter"); - } - AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo", HTTP_METHOD_GET).queryString(QUERY_STRING_KEY, decodedParam); - - AwsProxyResponse resp = executeRequest(request, lambdaContext); - assertEquals(200, resp.getStatusCode()); - validateSingleValueModel(resp, decodedParam); - } - - @MethodSource("data") - @ParameterizedTest - void queryParam_encoding_expectEncodedParam(String reqType) { - initStrutsAwsProxyTest(reqType); - assumeTrue("API_GW".equals(type)); - String paramValue = "p%2Fz%2B3"; - AwsProxyRequestBuilder request = new AwsProxyRequestBuilder("/echo", HTTP_METHOD_GET).queryString(QUERY_STRING_KEY, paramValue); - - AwsProxyResponse resp = executeRequest(request, lambdaContext); - assertEquals(200, resp.getStatusCode()); - validateSingleValueModel(resp, paramValue); - } - - - private void validateMapResponseModel(AwsProxyResponse output) { - validateMapResponseModel(output, CUSTOM_HEADER_KEY, CUSTOM_HEADER_VALUE); - } - - private void validateMapResponseModel(AwsProxyResponse output, String key, String value) { - try { - TypeReference> typeRef - = new TypeReference>() { - }; - HashMap response = OBJECT_MAPPER.readValue(output.getBody(), typeRef); - assertNotNull(response.get(key)); - assertEquals(value, response.get(key)); - } catch (IOException e) { - e.printStackTrace(); - fail("Exception while parsing response body: " + e.getMessage()); - } - } - - private void validateSingleValueModel(AwsProxyResponse output, String value) { - try { - assertNotNull(output.getBody()); - assertEquals(value, OBJECT_MAPPER.readerFor(String.class).readValue(output.getBody())); - } catch (Exception e) { - e.printStackTrace(); - fail("Exception while parsing response body: " + e.getMessage()); - } - } -} diff --git a/aws-serverless-java-container-struts/src/test/java/com/amazonaws/serverless/proxy/struts/echoapp/EchoAction.java b/aws-serverless-java-container-struts/src/test/java/com/amazonaws/serverless/proxy/struts/echoapp/EchoAction.java deleted file mode 100644 index ad6c63180..000000000 --- a/aws-serverless-java-container-struts/src/test/java/com/amazonaws/serverless/proxy/struts/echoapp/EchoAction.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.amazonaws.serverless.proxy.struts.echoapp; - -import com.opensymphony.xwork2.ActionSupport; -import org.apache.commons.io.IOUtils; -import org.apache.struts2.ServletActionContext; - -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; -import java.io.IOException; - - -public class EchoAction extends ActionSupport { - - private String message; - - public String execute() throws IOException { - HttpServletRequest request = ServletActionContext.getRequest(); - - if (message == null && requestHasBody(request)) { - message = IOUtils.toString(request.getReader()); - } - - return SUCCESS; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public void setCustomHeader(boolean customHeader) { - if (customHeader) { - HttpServletResponse response = ServletActionContext.getResponse(); - response.setHeader("XX", "FOO"); - } - } - - - public void setContentType(boolean contentType) { - if (contentType) { - HttpServletResponse response = ServletActionContext.getResponse(); - response.setContentType("application/json"); - } - } - - private boolean requestHasBody(HttpServletRequest request) throws IOException { - return ("POST".equalsIgnoreCase(request.getMethod()) || "PUT".equalsIgnoreCase(request.getMethod())) && request.getReader() != null; - } - -} diff --git a/aws-serverless-java-container-struts/src/test/java/com/amazonaws/serverless/proxy/struts/echoapp/EchoRequestInfoAction.java b/aws-serverless-java-container-struts/src/test/java/com/amazonaws/serverless/proxy/struts/echoapp/EchoRequestInfoAction.java deleted file mode 100644 index e810f3197..000000000 --- a/aws-serverless-java-container-struts/src/test/java/com/amazonaws/serverless/proxy/struts/echoapp/EchoRequestInfoAction.java +++ /dev/null @@ -1,85 +0,0 @@ -package com.amazonaws.serverless.proxy.struts.echoapp; - -import com.amazonaws.serverless.proxy.RequestReader; -import com.amazonaws.serverless.proxy.model.AwsProxyRequestContext; -import com.opensymphony.xwork2.ActionSupport; -import org.apache.struts2.ServletActionContext; - -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; -import java.util.Enumeration; -import java.util.HashMap; -import java.util.Map; - - -public class EchoRequestInfoAction extends ActionSupport { - - private String mode = "principal"; - private Object result = null; - - public String execute() { - - HttpServletRequest request = ServletActionContext.getRequest(); - AwsProxyRequestContext awsProxyRequestContext = - (AwsProxyRequestContext) request - .getAttribute(RequestReader.API_GATEWAY_CONTEXT_PROPERTY); - - switch (mode) { - case "principal": - result = awsProxyRequestContext.getAuthorizer().getPrincipalId(); - break; - case "scheme": - result = request.getScheme(); - break; - case "content-type": - if (request.getContentType().contains("application/octet-stream")) { - ServletActionContext.getResponse().setStatus(HttpServletResponse.SC_UNSUPPORTED_MEDIA_TYPE); - } - result = request.getContentType(); - break; - case "not-allowed": - ServletActionContext.getResponse().setStatus(HttpServletResponse.SC_METHOD_NOT_ALLOWED); - break; - case "custom-status-code": - ServletActionContext.getResponse().setStatus(HttpServletResponse.SC_CREATED); - break; - case "not-implemented": - ServletActionContext.getResponse().setStatus(HttpServletResponse.SC_NOT_IMPLEMENTED); - break; - case "headers": - Map headers = new HashMap<>(); - - Enumeration headerNames = request.getHeaderNames(); - while (headerNames.hasMoreElements()) { - String headerName = headerNames.nextElement(); - headers.put(headerName, request.getHeader(headerName)); - } - - result = headers; - break; - case "query-string": - Map params = new HashMap<>(); - - Enumeration parameterNames = request.getParameterNames(); - while (parameterNames.hasMoreElements()) { - String parameterName = parameterNames.nextElement(); - params.put(parameterName, request.getParameter(parameterName)); - } - - result = params; - break; - default: - throw new IllegalArgumentException("Invalid mode requested: " + mode); - } - - return SUCCESS; - } - - public Object getResult() { - return result; - } - - public void setMode(String mode) { - this.mode = mode; - } -} diff --git a/aws-serverless-java-container-struts/src/test/resources/log4j2.xml b/aws-serverless-java-container-struts/src/test/resources/log4j2.xml deleted file mode 100644 index 55ed0d21c..000000000 --- a/aws-serverless-java-container-struts/src/test/resources/log4j2.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - %d{yyyy-MM-dd HH:mm:ss} %X{AWSRequestId} %-5p %c{1}:%L - %m%n - - - - - - - - - - - \ No newline at end of file diff --git a/aws-serverless-java-container-struts/src/test/resources/struts.xml b/aws-serverless-java-container-struts/src/test/resources/struts.xml deleted file mode 100644 index 92070be83..000000000 --- a/aws-serverless-java-container-struts/src/test/resources/struts.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - message - - - - - - - - result - - - - - - - \ No newline at end of file diff --git a/aws-serverless-struts-archetype/pom.xml b/aws-serverless-struts-archetype/pom.xml deleted file mode 100644 index 9d6cda35c..000000000 --- a/aws-serverless-struts-archetype/pom.xml +++ /dev/null @@ -1,80 +0,0 @@ - - 4.0.0 - - - com.amazonaws.serverless - aws-serverless-java-container - 2.1.0-SNAPSHOT - - - com.amazonaws.serverless.archetypes - aws-serverless-struts-archetype - 2.1.0-SNAPSHOT - maven-archetype - - - https://github.com/aws/serverless-java-container.git - HEAD - - - - - The Apache Software License, Version 2.0 - http://www.apache.org/licenses/LICENSE-2.0.txt - repo - - - - - - - src/main/resources - true - - archetype-resources/pom.xml - archetype-resources/README.md - - - - src/main/resources - false - - archetype-resources/pom.xml - - - - - - - org.apache.maven.archetype - archetype-packaging - 3.0.1 - - - - - - - org.apache.maven.plugins - maven-resources-plugin - 3.3.1 - - \ - - - - org.apache.maven.plugins - maven-archetype-plugin - 3.0.1 - - - - integration-test - - - - - - - - diff --git a/aws-serverless-struts-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml b/aws-serverless-struts-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml deleted file mode 100644 index ad8b86248..000000000 --- a/aws-serverless-struts-archetype/src/main/resources/META-INF/maven/archetype-metadata.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - src/main/java - - **/*.java - - - - src/test/java - - **/*.java - - - - src/main/resources - - **/*.properties - **/*.xml - - - - src/main/assembly - - **/*.xml - - - - - - template.yml - README.md - build.gradle - - - - \ No newline at end of file diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/README.md b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/README.md deleted file mode 100644 index 311c40aee..000000000 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/README.md +++ /dev/null @@ -1,99 +0,0 @@ -#set($resourceName = $artifactId) -#macro(replaceChar $originalName, $char) - #if($originalName.contains($char)) - #set($tokens = $originalName.split($char)) - #set($newResourceName = "") - #foreach($token in $tokens) - #set($newResourceName = $newResourceName + $token.substring(0,1).toUpperCase() + $token.substring(1).toLowerCase()) - #end - ${newResourceName} - #else - #set($newResourceName = $originalName.substring(0,1).toUpperCase() + $originalName.substring(1)) - ${newResourceName} - #end -#end -#set($resourceName = "#replaceChar($resourceName, '-')") -#set($resourceName = "#replaceChar($resourceName, '.')") -#set($resourceName = $resourceName.replaceAll("\n", "").trim()) -# \${artifactId} serverless API -The \${artifactId} project, created with [`aws-serverless-java-container`](https://github.com/aws/serverless-java-container). - -The starter project defines a simple `/ping` resource that can accept `GET` requests with its tests. - -The project folder also includes a `template.yml` file. You can use this [SAM](https://github.com/awslabs/serverless-application-model) file to deploy the project to AWS Lambda and Amazon API Gateway or test in local with the [SAM CLI](https://github.com/awslabs/aws-sam-cli). - -#[[##]]# 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/) - -#[[##]]# Building the project -You can use the SAM CLI to quickly build the project -```bash -$ mvn archetype:generate -DartifactId=\${artifactId} -DarchetypeGroupId=com.amazonaws.serverless.archetypes -DarchetypeArtifactId=aws-serverless-jersey-archetype -DarchetypeVersion=${project.version} -DgroupId=\${groupId} -Dversion=\${version} -Dinteractive=false -$ cd \${artifactId} -$ sam build -Building resource '\${resourceName}Function' -Running JavaGradleWorkflow:GradleBuild -Running JavaGradleWorkflow:CopyArtifacts - -Build Succeeded - -Built Artifacts : .aws-sam/build -Built Template : .aws-sam/build/template.yaml - -Commands you can use next -========================= -[*] Invoke Function: sam local invoke -[*] Deploy: sam deploy --guided -``` - -#[[##]]# Testing locally with the SAM CLI - -From the project root folder - where the `template.yml` file is located - start the API with the SAM CLI. - -```bash -$ sam local start-api - -... -Mounting ${groupId}.StreamLambdaHandler::handleRequest (java11) at http://127.0.0.1:3000/{proxy+} [OPTIONS GET HEAD POST PUT DELETE PATCH] -... -``` - -Using a new shell, you can send a test ping request to your API: - -```bash -$ curl -s http://127.0.0.1:3000/ping | python -m json.tool - -{ - "pong": "Hello, World!" -} -``` - -#[[##]]# Deploying to AWS -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 -------------------------------------------------------------------------------------------------------------- -\${resourceName}Api - URL for application https://xxxxxxxxxx.execute-api.us-west-2.amazonaws.com/Prod/pets -------------------------------------------------------------------------------------------------------------- -``` - -Copy the `OutputValue` into a browser or use curl to test your first request: - -```bash -$ curl -s https://xxxxxxx.execute-api.us-west-2.amazonaws.com/Prod/ping | python -m json.tool - -{ - "pong": "Hello, World!" -} -``` diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle deleted file mode 100644 index 4ff9dfc37..000000000 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/build.gradle +++ /dev/null @@ -1,65 +0,0 @@ -apply plugin: 'java' - -repositories { - mavenLocal() - mavenCentral() -} - -configurations { - implementation { - exclude group: 'org.apache.logging.log4j', module: 'log4j-to-slf4j' - } -} - -dependencies { - - implementation ('com.amazonaws.serverless:aws-serverless-java-container-struts:[1.0,)') { - exclude group: 'org.apache.struts', module: 'struts2-core' - exclude group: 'org.apache.logging.log4j', module: 'log4j-api' - exclude group: 'org.apache.logging.log4j', module: 'log4j-to-slf4j' - } - implementation ('org.apache.struts:struts2-convention-plugin:7.0.0-M9') { - exclude group: 'org.apache.struts', module: 'struts2-core' - } - implementation ('org.apache.struts:struts2-rest-plugin:7.0.0-M9') { - exclude group: 'org.apache.struts', module: 'struts2-core' - } - implementation ('org.apache.struts:struts2-bean-validation-plugin:7.0.0-M9') { - exclude group: 'org.apache.struts', module: 'struts2-core' - } - implementation ('com.jgeppert.struts2:struts2-aws-lambda-support-plugin:1.4.3') { - exclude group: 'org.apache.struts', module: 'struts2-core' - } - implementation ('org.apache.struts:struts2-core:7.0.0-M9') { - exclude group: 'org.apache.logging.log4j', module: 'log4j-api' - } - implementation ('org.hibernate.validator:hibernate-validator:6.1.7.Final') - implementation ('com.fasterxml.jackson.core:jackson-databind:2.18.1') - implementation ('com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.18.1') - implementation ('org.apache.logging.log4j:log4j-core:2.24.1') - implementation ('org.apache.logging.log4j:log4j-api:2.24.1') - implementation ('org.apache.logging.log4j:log4j-slf4j-impl:2.24.1') - implementation ('com.amazonaws:aws-lambda-java-log4j2:1.6.0') - - testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") - testImplementation("org.apache.httpcomponents.client5:httpclient5:5.4.1") - testImplementation(platform("org.junit:junit-bom:5.11.3")) - testImplementation("org.junit.jupiter:junit-jupiter") - testImplementation('org.apache.struts:struts2-junit-plugin:7.0.0-M9') { - exclude group: 'org.apache.struts', module: 'struts2-core' - } -} - -task buildZip(type: Zip) { - from compileJava - from processResources - into('lib') { - from(configurations.compileClasspath) - } -} - -test { - useJUnitPlatform() -} - -build.dependsOn buildZip diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml deleted file mode 100644 index f64194a56..000000000 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/pom.xml +++ /dev/null @@ -1,186 +0,0 @@ - - - 4.0.0 - - \${groupId} - \${artifactId} - \${version} - jar - - Serverless Struts API - https://github.com/aws/serverless-java-container - - - 1.8 - 1.8 - 7.0.0-M9 - 2.18.1 - 5.11.3 - 2.24.1 - - - - - com.amazonaws.serverless - aws-serverless-java-container-struts - ${project.version} - - - com.amazonaws.serverless - aws-serverless-java-container-core - ${project.version} - tests - test-jar - test - - - org.apache.httpcomponents.client5 - httpclient5 - 5.4.1 - test - - - - org.apache.struts - struts2-convention-plugin - \${struts.version} - - - - org.apache.struts - struts2-rest-plugin - \${struts.version} - - - - org.apache.struts - struts2-bean-validation-plugin - \${struts.version} - - - - org.apache.struts - struts2-junit-plugin - \${struts.version} - test - - - - - com.jgeppert.struts2 - struts2-aws-lambda-support-plugin - 1.4.3 - - - - - org.hibernate.validator - hibernate-validator - 6.1.7.Final - - - - com.fasterxml.jackson.core - jackson-core - \${jackson.version} - - - com.fasterxml.jackson.core - jackson-annotations - \${jackson.version} - - - com.fasterxml.jackson.core - jackson-databind - \${jackson.version} - - - com.fasterxml.jackson.dataformat - jackson-dataformat-xml - \${jackson.version} - - - - org.apache.logging.log4j - log4j-core - \${log4j.version} - - - - org.apache.logging.log4j - log4j-api - \${log4j.version} - - - - com.amazonaws - aws-lambda-java-log4j2 - 1.6.0 - - - - jakarta.el - jakarta.el-api - 5.0.1 - test - - - org.glassfish - jakarta.el - 5.0.0-M1 - test - - - - org.junit.jupiter - junit-jupiter - test - - - - - - - org.junit - junit-bom - ${junit.version} - import - pom - - - - - - - - org.apache.maven.plugins - maven-assembly-plugin - 3.7.1 - - - src/main/assembly/dist.xml - - - - - lambda - package - - single - - - - - - - - - - apache-pre-release - https://repository.apache.org/content/repositories/staging/ - default - - - diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/src/main/assembly/dist.xml b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/src/main/assembly/dist.xml deleted file mode 100644 index 0466b85c5..000000000 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/src/main/assembly/dist.xml +++ /dev/null @@ -1,31 +0,0 @@ - - lambda - - zip - - false - - - lib - false - - - - - ${basedir}/src/main/resources - - - * - - - - ${project.build.directory}/classes - - - **/*.class - - - - \ No newline at end of file diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/src/main/java/actions/PingController.java b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/src/main/java/actions/PingController.java deleted file mode 100644 index f3763f4de..000000000 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/src/main/java/actions/PingController.java +++ /dev/null @@ -1,70 +0,0 @@ -package ${groupId}.actions; - - -import com.opensymphony.xwork2.ModelDriven; -import org.apache.struts2.rest.DefaultHttpHeaders; -import org.apache.struts2.rest.HttpHeaders; -import org.apache.struts2.rest.RestActionSupport; - - -import java.util.Collection; -import java.util.UUID; - - -public class PingController extends RestActionSupport implements ModelDriven { - - private String model = new String(); - private String id; - private Collection list = null; - - - // GET /ping/1 - public HttpHeaders show() { - return new DefaultHttpHeaders("show"); - } - - // GET /ping - public HttpHeaders index() { - this.model = "Hello, World!"; - return new DefaultHttpHeaders("index") - .disableCaching(); - } - - // POST /ping - public HttpHeaders create() { - this.model = UUID.randomUUID().toString(); - return new DefaultHttpHeaders("success") - .setLocationId(model); - - } - - // PUT /ping/1 - public String update() { - //TODO: UPDATE LOGIC - return SUCCESS; - } - - // DELETE /ping/1 - public String destroy() { - //TODO: DELETE LOGIC - return SUCCESS; - } - - public void setId(String id) { - if (id != null) { - this.model = "New model instance"; - } - this.id = id; - } - - public Object getModel() { - if (list != null) { - return list; - } else { - if (model == null) { - model = "Pong"; - } - return model; - } - } -} diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/src/main/resources/application.properties b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/src/main/resources/application.properties deleted file mode 100644 index 070e632fe..000000000 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/src/main/resources/application.properties +++ /dev/null @@ -1,3 +0,0 @@ -# Reduce logging level to make sure the application works with SAM local -# https://github.com/aws/serverless-java-container/issues/134 -logging.level.root=WARN \ No newline at end of file diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/src/main/resources/log4j2.xml b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/src/main/resources/log4j2.xml deleted file mode 100644 index 55ed0d21c..000000000 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/src/main/resources/log4j2.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - %d{yyyy-MM-dd HH:mm:ss} %X{AWSRequestId} %-5p %c{1}:%L - %m%n - - - - - - - - - - - \ No newline at end of file diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/src/main/resources/struts.xml b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/src/main/resources/struts.xml deleted file mode 100644 index f6975ffd0..000000000 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/src/main/resources/struts.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java deleted file mode 100644 index 875867778..000000000 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/src/test/java/StreamLambdaHandlerTest.java +++ /dev/null @@ -1,90 +0,0 @@ -package ${groupId}; - - -import com.amazonaws.serverless.proxy.internal.LambdaContainerHandler; -import com.amazonaws.serverless.proxy.internal.testutils.AwsProxyRequestBuilder; -import com.amazonaws.serverless.proxy.internal.testutils.MockLambdaContext; -import com.amazonaws.serverless.proxy.model.AwsProxyResponse; -import com.amazonaws.services.lambda.runtime.Context; - -import com.amazonaws.serverless.proxy.struts.StrutsLambdaHandler; - -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; - -import jakarta.ws.rs.HttpMethod; -import jakarta.ws.rs.core.HttpHeaders; -import jakarta.ws.rs.core.MediaType; -import jakarta.ws.rs.core.Response; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; - -import static org.junit.jupiter.api.Assertions.*; - -public class StreamLambdaHandlerTest { - - private static StrutsLambdaHandler handler; - private static Context lambdaContext; - - @BeforeAll - public static void setUp() { - handler = new StrutsLambdaHandler(); - lambdaContext = new MockLambdaContext(); - } - - @Test - public void ping_streamRequest_respondsWithHello() { - InputStream requestStream = new AwsProxyRequestBuilder("/ping", HttpMethod.GET) - .header(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON) - .buildStream(); - ByteArrayOutputStream responseStream = new ByteArrayOutputStream(); - - handle(requestStream, responseStream); - - AwsProxyResponse response = readResponse(responseStream); - assertNotNull(response); - assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode()); - - assertFalse(response.isBase64Encoded()); - - assertTrue(response.getBody().contains("Hello, World!")); - - assertTrue(response.getMultiValueHeaders().containsKey(HttpHeaders.CONTENT_TYPE)); - assertTrue(response.getMultiValueHeaders().getFirst(HttpHeaders.CONTENT_TYPE).startsWith(MediaType.APPLICATION_JSON)); - } - - @Test - public void invalidResource_streamRequest_responds404() { - InputStream requestStream = new AwsProxyRequestBuilder("/pong", HttpMethod.GET) - .header(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON) - .buildStream(); - ByteArrayOutputStream responseStream = new ByteArrayOutputStream(); - - handle(requestStream, responseStream); - - AwsProxyResponse response = readResponse(responseStream); - assertNotNull(response); - assertEquals(Response.Status.NOT_FOUND.getStatusCode(), response.getStatusCode()); - } - - private void handle(InputStream is, ByteArrayOutputStream os) { - try { - handler.handleRequest(is, os, lambdaContext); - } catch (IOException e) { - e.printStackTrace(); - fail(e.getMessage()); - } - } - - private AwsProxyResponse readResponse(ByteArrayOutputStream responseStream) { - try { - return LambdaContainerHandler.getObjectMapper().readValue(responseStream.toByteArray(), AwsProxyResponse.class); - } catch (IOException e) { - e.printStackTrace(); - fail("Error while parsing response: " + e.getMessage()); - } - return null; - } -} diff --git a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/template.yml b/aws-serverless-struts-archetype/src/main/resources/archetype-resources/template.yml deleted file mode 100644 index fe446dedd..000000000 --- a/aws-serverless-struts-archetype/src/main/resources/archetype-resources/template.yml +++ /dev/null @@ -1,52 +0,0 @@ -#set($resourceName = $artifactId) -#macro(replaceChar $originalName, $char) - #if($originalName.contains($char)) - #set($tokens = $originalName.split($char)) - #set($newResourceName = "") - #foreach($token in $tokens) - #set($newResourceName = $newResourceName + $token.substring(0,1).toUpperCase() + $token.substring(1).toLowerCase()) - #end - ${newResourceName} - #else - #set($newResourceName = $originalName.substring(0,1).toUpperCase() + $originalName.substring(1)) - ${newResourceName} - #end -#end -#set($resourceName = "#replaceChar($resourceName, '-')") -#set($resourceName = "#replaceChar($resourceName, '.')") -#set($resourceName = $resourceName.replaceAll("\n", "").trim()) -#macro(regionVar) - AWS::Region -#end -#set($awsRegion = "#regionVar()") -#set($awsRegion = $awsRegion.replaceAll("\n", "").trim()) -AWSTemplateFormatVersion: '2010-09-09' -Transform: AWS::Serverless-2016-10-31 -Description: AWS Serverless Apache Struts API - ${groupId}::${artifactId} -Globals: - Api: - EndpointConfiguration: REGIONAL - -Resources: - ${resourceName}Function: - Type: AWS::Serverless::Function - Properties: - Handler: com.amazonaws.serverless.proxy.struts.StrutsLambdaHandler::handleRequest - Runtime: java11 - CodeUri: . - MemorySize: 512 - Policies: AWSLambdaBasicExecutionRole - Timeout: 30 - Events: - ProxyResource: - Type: Api - Properties: - Path: /{proxy+} - Method: any - -Outputs: - ${resourceName}Api: - Description: URL for application - Value: !Sub 'https://${ServerlessRestApi}.execute-api.${${awsRegion}}.amazonaws.com/Prod/ping' - Export: - Name: ${resourceName}Api diff --git a/aws-serverless-struts-archetype/src/test/resources/projects/base/archetype.properties b/aws-serverless-struts-archetype/src/test/resources/projects/base/archetype.properties deleted file mode 100644 index 80acd0f43..000000000 --- a/aws-serverless-struts-archetype/src/test/resources/projects/base/archetype.properties +++ /dev/null @@ -1,3 +0,0 @@ -groupId=test.service -artifactId=struts-archetype-test -version=1.0-SNAPSHOT diff --git a/aws-serverless-struts-archetype/src/test/resources/projects/base/goal.txt b/aws-serverless-struts-archetype/src/test/resources/projects/base/goal.txt deleted file mode 100644 index 597acc768..000000000 --- a/aws-serverless-struts-archetype/src/test/resources/projects/base/goal.txt +++ /dev/null @@ -1 +0,0 @@ -package \ No newline at end of file diff --git a/samples/struts/pet-store/README.md b/samples/struts/pet-store/README.md deleted file mode 100644 index bc5c047ae..000000000 --- a/samples/struts/pet-store/README.md +++ /dev/null @@ -1,56 +0,0 @@ -# Serverless Struts example -A basic pet store written with the [Apache Struts framework](https://struts.apache.org). The `StrutsLambdaHandler` object provided by the `aws-serverless-java-container-struts` 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 -``` -$ mvn package && sam build -``` - -### Test Local - -``` -$ sam local invoke -e test-event.json -``` - -### Deploy Sample Application - -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 - -``` -... ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -Outputs ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -Key StrutsPetStoreApi -Description URL for application -Value https://xxxxxxxxxx.execute-api..amazonaws.com/pets ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -``` -## Test - -### JSON Request: -``` -$ curl https://xxxxxxxxxx.execute-api..amazonaws.com/pets.json -``` - -### XML Request -``` -$ curl https://xxxxxxxxxx.execute-api..amazonaws.com/pets.xml -``` \ No newline at end of file diff --git a/samples/struts/pet-store/build.gradle b/samples/struts/pet-store/build.gradle deleted file mode 100644 index ecc765cb7..000000000 --- a/samples/struts/pet-store/build.gradle +++ /dev/null @@ -1,41 +0,0 @@ -apply plugin: 'java' - -repositories { - mavenLocal() - mavenCentral() -} - -configurations { - implementation { - exclude group: 'org.apache.logging.log4j', module: 'log4j-to-slf4j' - } -} - -dependencies { - implementation ( - 'com.amazonaws.serverless:aws-serverless-java-container-struts:[2.0-SNAPSHOT,)', - 'org.apache.struts:struts2-convention-plugin:7.0.0-M9', - 'org.apache.struts:struts2-rest-plugin:7.0.0-M9', - 'org.apache.struts:struts2-bean-validation-plugin:7.0.0-M9', - 'org.apache.struts:struts2-junit-plugin:7.0.0-M9', - 'com.jgeppert.struts2:struts2-aws-lambda-support-plugin:1.4.3', - 'org.hibernate.validator:hibernate-validator:6.1.7.Final', - 'org.glassfish:jakarta.el:5.0.0-M1', - 'jakarta.el:jakarta.el-api:5.0.1', - 'com.fasterxml.jackson.core:jackson-databind:2.18.1', - 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.18.1', - 'org.apache.logging.log4j:log4j-core:2.24.1', - 'org.apache.logging.log4j:log4j-api:2.24.1', - 'com.amazonaws:aws-lambda-java-log4j2:1.6.0', - ) -} - -task buildZip(type: Zip) { - from compileJava - from processResources - into('lib') { - from(configurations.compileClasspath) - } -} - -build.dependsOn buildZip diff --git a/samples/struts/pet-store/pom.xml b/samples/struts/pet-store/pom.xml deleted file mode 100644 index 49c035d4e..000000000 --- a/samples/struts/pet-store/pom.xml +++ /dev/null @@ -1,177 +0,0 @@ - - - 4.0.0 - - com.amazonaws.serverless.sample - serverless-struts-example - 2.0-SNAPSHOT - Struts example for the aws-serverless-java-container library - Simple pet store written with the Apache Struts framework - https://aws.amazon.com/lambda/ - - - https://github.com/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 - 7.0.0-M9 - 2.18.1 - 4.13.2 - 2.24.1 - - - - - com.amazonaws.serverless - aws-serverless-java-container-struts - [2.0.0-SNAPSHOT,) - - - - org.apache.struts - struts2-convention-plugin - ${struts.version} - - - - org.apache.struts - struts2-rest-plugin - ${struts.version} - - - - org.apache.struts - struts2-bean-validation-plugin - ${struts.version} - - - - org.apache.struts - struts2-junit-plugin - ${struts.version} - test - - - - - com.jgeppert.struts2 - struts2-aws-lambda-support-plugin - 1.4.3 - - - - - org.hibernate.validator - hibernate-validator - 6.1.7.Final - - - org.glassfish - jakarta.el - 5.0.0-M1 - - - jakarta.el - jakarta.el-api - 5.0.1 - - - - com.fasterxml.jackson.core - jackson-core - ${jackson.version} - - - com.fasterxml.jackson.core - jackson-annotations - ${jackson.version} - - - com.fasterxml.jackson.core - jackson-databind - ${jackson.version} - - - com.fasterxml.jackson.dataformat - jackson-dataformat-xml - ${jackson.version} - - - - org.apache.logging.log4j - log4j-core - ${log4j.version} - - - - org.apache.logging.log4j - log4j-api - ${log4j.version} - - - - com.amazonaws - aws-lambda-java-log4j2 - 1.6.0 - - - - junit - junit - ${junit.version} - test - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - - 1.8 - 1.8 - - - - org.apache.maven.plugins - maven-assembly-plugin - 3.7.1 - - - src/main/assembly/dist.xml - - - - - lambda - package - - single - - - - - - - - - - apache-pre-release - https://repository.apache.org/content/repositories/staging/ - default - - - diff --git a/samples/struts/pet-store/src/main/assembly/dist.xml b/samples/struts/pet-store/src/main/assembly/dist.xml deleted file mode 100644 index 029ec01c7..000000000 --- a/samples/struts/pet-store/src/main/assembly/dist.xml +++ /dev/null @@ -1,31 +0,0 @@ - - lambda - - zip - - false - - - lib - false - - - - - ${basedir}/src/main/resources - / - - * - - - - ${project.build.directory}/classes - / - - **/*.class - - - - \ No newline at end of file diff --git a/samples/struts/pet-store/src/main/java/com/amazonaws/serverless/sample/struts/actions/PetsController.java b/samples/struts/pet-store/src/main/java/com/amazonaws/serverless/sample/struts/actions/PetsController.java deleted file mode 100644 index bc2ad8bbe..000000000 --- a/samples/struts/pet-store/src/main/java/com/amazonaws/serverless/sample/struts/actions/PetsController.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance - * with the License. A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.sample.struts.actions; - -import com.amazonaws.serverless.sample.struts.model.Pet; -import com.amazonaws.serverless.sample.struts.model.PetData; -import com.opensymphony.xwork2.ModelDriven; -import org.apache.struts2.rest.DefaultHttpHeaders; -import org.apache.struts2.rest.HttpHeaders; -import org.apache.struts2.rest.RestActionSupport; - -import java.util.Collection; -import java.util.UUID; -import java.util.stream.Collectors; - - -public class PetsController extends RestActionSupport implements ModelDriven { - - private Pet model = new Pet(); - private String id; - private Collection list = null; - - // GET /pets/1 - public HttpHeaders show() { - return new DefaultHttpHeaders("show"); - } - - // GET /pets - public HttpHeaders index() { - list = PetData.getNames() - .stream() - .map(petName -> new Pet( - UUID.randomUUID() - .toString(), PetData.getRandomBreed(), petName, PetData.getRandomDoB())) - .collect(Collectors.toList()); - return new DefaultHttpHeaders("index") - .disableCaching(); - } - - // POST /pets - public HttpHeaders create() { - if (model.getName() == null || model.getBreed() == null) { - return null; - } - - Pet dbPet = model; - dbPet.setId(UUID.randomUUID().toString()); - return new DefaultHttpHeaders("success") - .setLocationId(model.getId()); - - } - - // PUT /pets/1 - public String update() { - //TODO: UPDATE LOGIC - return SUCCESS; - } - - // DELETE /petsr/1 - public String destroy() { - //TODO: DELETE LOGIC - return SUCCESS; - } - - public void setId(String id) { - if (id != null) { - this.model = new Pet(id, PetData.getRandomBreed(), PetData.getRandomName(), PetData.getRandomDoB()); - } - this.id = id; - } - - public Object getModel() { - if (list != null) { - return list; - } else { - if (model == null) { - model = new Pet(); - } - return model; - } - } -} diff --git a/samples/struts/pet-store/src/main/java/com/amazonaws/serverless/sample/struts/model/Pet.java b/samples/struts/pet-store/src/main/java/com/amazonaws/serverless/sample/struts/model/Pet.java deleted file mode 100644 index c9d420ca8..000000000 --- a/samples/struts/pet-store/src/main/java/com/amazonaws/serverless/sample/struts/model/Pet.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance - * with the License. A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.sample.struts.model; - -import org.hibernate.validator.constraints.NotBlank; - -import java.util.Date; - -public class Pet { - - private String id; - private String breed; - - @NotBlank - private String name; - private Date dateOfBirth; - - public Pet() { - } - - public Pet(String id, String breed, String name, Date dateOfBirth) { - this.id = id; - this.breed = breed; - this.name = name; - this.dateOfBirth = 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/samples/struts/pet-store/src/main/java/com/amazonaws/serverless/sample/struts/model/PetData.java b/samples/struts/pet-store/src/main/java/com/amazonaws/serverless/sample/struts/model/PetData.java deleted file mode 100644 index 84be64eab..000000000 --- a/samples/struts/pet-store/src/main/java/com/amazonaws/serverless/sample/struts/model/PetData.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance - * with the License. A copy of the License is located at - * - * http://aws.amazon.com/apache2.0/ - * - * or in the "license" file accompanying this file. This file 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 com.amazonaws.serverless.sample.struts.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/samples/struts/pet-store/src/main/resources/log4j2.xml b/samples/struts/pet-store/src/main/resources/log4j2.xml deleted file mode 100644 index 55ed0d21c..000000000 --- a/samples/struts/pet-store/src/main/resources/log4j2.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - %d{yyyy-MM-dd HH:mm:ss} %X{AWSRequestId} %-5p %c{1}:%L - %m%n - - - - - - - - - - - \ No newline at end of file diff --git a/samples/struts/pet-store/src/main/resources/struts.xml b/samples/struts/pet-store/src/main/resources/struts.xml deleted file mode 100644 index 3f6724e50..000000000 --- a/samples/struts/pet-store/src/main/resources/struts.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/samples/struts/pet-store/template.yml b/samples/struts/pet-store/template.yml deleted file mode 100644 index 85870c6bd..000000000 --- a/samples/struts/pet-store/template.yml +++ /dev/null @@ -1,32 +0,0 @@ -AWSTemplateFormatVersion: '2010-09-09' -Transform: AWS::Serverless-2016-10-31 -Description: Example Pet Store API written with Apache Struts based on the aws-serverless-java-container library - -Globals: - Api: - # API Gateway regional endpoints - EndpointConfiguration: REGIONAL - -Resources: - PetStoreFunction: - Type: AWS::Serverless::Function - Properties: - Handler: com.amazonaws.serverless.proxy.struts.StrutsLambdaHandler::handleRequest - Runtime: java11 - CodeUri: . - MemorySize: 512 - Policies: AWSLambdaBasicExecutionRole - Timeout: 30 - Events: - HttpApiEvent: - Type: HttpApi - Properties: - TimeoutInMillis: 20000 - PayloadFormatVersion: '1.0' - -Outputs: - StrutsPetStoreApi: - Description: URL for application - Value: !Sub 'https://${ServerlessHttpApi}.execute-api.${AWS::Region}.amazonaws.com/pets' - Export: - Name: StrutsPetStoreApi diff --git a/samples/struts/pet-store/test-event.json b/samples/struts/pet-store/test-event.json deleted file mode 100644 index 5860f3e86..000000000 --- a/samples/struts/pet-store/test-event.json +++ /dev/null @@ -1,123 +0,0 @@ -{ - "body": "eyJ0ZXN0IjoiYm9keSJ9", - "resource": "/{proxy+}", - "path": "/pets.json", - "httpMethod": "GET", - "isBase64Encoded": true, - "queryStringParameters": { - "foo": "bar" - }, - "multiValueQueryStringParameters": { - "foo": [ - "bar" - ] - }, - "pathParameters": { - "proxy": "/path/to/resource" - }, - "stageVariables": { - "baz": "qux" - }, - "headers": { - "Accept": "application/json", - "Accept-Encoding": "gzip, deflate, sdch", - "Accept-Language": "en-US,en;q=0.8", - "Cache-Control": "max-age=0", - "CloudFront-Forwarded-Proto": "https", - "CloudFront-Is-Desktop-Viewer": "true", - "CloudFront-Is-Mobile-Viewer": "false", - "CloudFront-Is-SmartTV-Viewer": "false", - "CloudFront-Is-Tablet-Viewer": "false", - "CloudFront-Viewer-Country": "US", - "Host": "1234567890.execute-api.us-east-1.amazonaws.com", - "Upgrade-Insecure-Requests": "1", - "User-Agent": "Custom User Agent String", - "Via": "1.1 08f323deadbeefa7af34d5feb414ce27.cloudfront.net (CloudFront)", - "X-Amz-Cf-Id": "cDehVQoZnx43VYQb9j2-nvCh-9z396Uhbp027Y2JvkCPNLmGJHqlaA==", - "X-Forwarded-For": "127.0.0.1, 127.0.0.2", - "X-Forwarded-Port": "443", - "X-Forwarded-Proto": "https" - }, - "multiValueHeaders": { - "Accept": [ - "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8" - ], - "Accept-Encoding": [ - "gzip, deflate, sdch" - ], - "Accept-Language": [ - "en-US,en;q=0.8" - ], - "Cache-Control": [ - "max-age=0" - ], - "CloudFront-Forwarded-Proto": [ - "https" - ], - "CloudFront-Is-Desktop-Viewer": [ - "true" - ], - "CloudFront-Is-Mobile-Viewer": [ - "false" - ], - "CloudFront-Is-SmartTV-Viewer": [ - "false" - ], - "CloudFront-Is-Tablet-Viewer": [ - "false" - ], - "CloudFront-Viewer-Country": [ - "US" - ], - "Host": [ - "0123456789.execute-api.us-east-1.amazonaws.com" - ], - "Upgrade-Insecure-Requests": [ - "1" - ], - "User-Agent": [ - "Custom User Agent String" - ], - "Via": [ - "1.1 08f323deadbeefa7af34d5feb414ce27.cloudfront.net (CloudFront)" - ], - "X-Amz-Cf-Id": [ - "cDehVQoZnx43VYQb9j2-nvCh-9z396Uhbp027Y2JvkCPNLmGJHqlaA==" - ], - "X-Forwarded-For": [ - "127.0.0.1, 127.0.0.2" - ], - "X-Forwarded-Port": [ - "443" - ], - "X-Forwarded-Proto": [ - "https" - ] - }, - "requestContext": { - "accountId": "123456789012", - "resourceId": "123456", - "stage": "prod", - "requestId": "c6af9ac6-7b61-11e6-9a41-93e8deadbeef", - "requestTime": "09/Apr/2015:12:34:56 +0000", - "requestTimeEpoch": 1428582896000, - "identity": { - "cognitoIdentityPoolId": null, - "accountId": null, - "cognitoIdentityId": null, - "caller": null, - "accessKey": null, - "sourceIp": "127.0.0.1", - "cognitoAuthenticationType": null, - "cognitoAuthenticationProvider": null, - "userArn": null, - "userAgent": "Custom User Agent String", - "user": null - }, - "path": "/pets.json", - "resourcePath": "/{proxy+}", - "httpMethod": "GET", - "apiId": "1234567890", - "protocol": "HTTP/1.1" - } -} \ No newline at end of file From 96cb50c6262fd9cad963f4cf149b89c7bb10199f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 15 Nov 2024 15:13:40 +0000 Subject: [PATCH 737/888] chore(deps): bump com.github.spotbugs:spotbugs-maven-plugin Bumps [com.github.spotbugs:spotbugs-maven-plugin](https://github.com/spotbugs/spotbugs-maven-plugin) from 4.8.6.5 to 4.8.6.6. - [Release notes](https://github.com/spotbugs/spotbugs-maven-plugin/releases) - [Commits](https://github.com/spotbugs/spotbugs-maven-plugin/compare/spotbugs-maven-plugin-4.8.6.5...spotbugs-maven-plugin-4.8.6.6) --- updated-dependencies: - dependency-name: com.github.spotbugs:spotbugs-maven-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 028ed2afa..eb28838b1 100644 --- a/pom.xml +++ b/pom.xml @@ -249,7 +249,7 @@ com.github.spotbugs spotbugs-maven-plugin - 4.8.6.5 + 4.8.6.6 com.amazonaws.serverless.sample diff --git a/samples/springboot3/pet-store/build.gradle b/samples/springboot3/pet-store/build.gradle index 390ada6d4..7bcd50e4e 100644 --- a/samples/springboot3/pet-store/build.gradle +++ b/samples/springboot3/pet-store/build.gradle @@ -9,7 +9,7 @@ repositories { dependencies { implementation ( - implementation('org.springframework.boot:spring-boot-starter-web:3.3.5') { + implementation('org.springframework.boot:spring-boot-starter-web:3.4.0') { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat' }, 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:[2.0-SNAPSHOT,)', diff --git a/samples/springboot3/pet-store/pom.xml b/samples/springboot3/pet-store/pom.xml index 9a70dfb4f..32b92a5f5 100644 --- a/samples/springboot3/pet-store/pom.xml +++ b/samples/springboot3/pet-store/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 3.3.5 + 3.4.0 From 1785eb57c7d72f6c1b8468f2e3ad13ddb8298589 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Wed, 27 Nov 2024 08:39:32 +0100 Subject: [PATCH 745/888] bring back parallel() processing --- .../proxy/internal/servlet/AwsHttpServletRequest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java index e7df944ff..f6a06b7cf 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java @@ -641,7 +641,7 @@ protected Map generateParameterMap(MultiValuedTreeMap getQueryParamValuesAsList(decodedQs, e.getKey(), false) From 199c7571ddb155e5352eec78e1bbb897f032cb84 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Wed, 27 Nov 2024 11:39:34 +0100 Subject: [PATCH 746/888] proper use of StringBuilder --- .../com/amazonaws/serverless/proxy/model/AwsProxyRequest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/AwsProxyRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/AwsProxyRequest.java index 53ad758f1..eeaaf4a6f 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/AwsProxyRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/model/AwsProxyRequest.java @@ -66,7 +66,7 @@ public String getQueryString() { for (String val : this.getMultiValueQueryStringParameters().get(key)) { String separator = params.length() == 0 ? "?" : "&"; - params.append(separator + key + "=" + val); + params.append(separator).append(key).append("=").append(val); } } From ff19be271435b6492a35c09a6d6251acd8759a27 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Wed, 27 Nov 2024 11:42:58 +0100 Subject: [PATCH 747/888] chore(deps): Update Log4J dependencies to 2.24.2 --- .../src/main/resources/archetype-resources/build.gradle | 6 +++--- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/spring/pet-store/build.gradle | 6 +++--- samples/spring/pet-store/pom.xml | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index 598711516..80b9addb5 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -10,9 +10,9 @@ dependencies { 'org.springframework:spring-webmvc:6.2.0', 'org.springframework:spring-context:6.2.0', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[2.0-SNAPSHOT,)', - 'org.apache.logging.log4j:log4j-core:2.24.1', - 'org.apache.logging.log4j:log4j-api:2.24.1', - 'org.apache.logging.log4j:log4j-slf4j-impl:2.24.1', + 'org.apache.logging.log4j:log4j-core:2.24.2', + 'org.apache.logging.log4j:log4j-api:2.24.2', + 'org.apache.logging.log4j:log4j-slf4j-impl:2.24.2', 'com.fasterxml.jackson.core:jackson-databind:2.18.1', 'com.amazonaws:aws-lambda-java-log4j2:1.6.0', ) diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index 6a6625c19..42ccf9d42 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -18,7 +18,7 @@ 1.8 6.2.0 5.11.3 - 2.24.1 + 2.24.2 diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index 0c7d1c3b9..6d30a38e0 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -10,9 +10,9 @@ dependencies { 'org.springframework:spring-webmvc:6.2.0', 'org.springframework:spring-context:6.2.0', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[2.0-SNAPSHOT,)', - 'org.apache.logging.log4j:log4j-core:2.24.1', - 'org.apache.logging.log4j:log4j-api:2.24.1', - 'org.apache.logging.log4j:log4j-slf4j-impl:2.24.1', + 'org.apache.logging.log4j:log4j-core:2.24.2', + 'org.apache.logging.log4j:log4j-api:2.24.2', + 'org.apache.logging.log4j:log4j-slf4j-impl:2.24.2', 'com.fasterxml.jackson.core:jackson-databind:2.18.1', 'com.amazonaws:aws-lambda-java-log4j2:1.6.0', ) diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index 5716a8be4..12a35b314 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -25,7 +25,7 @@ 6.2.0 - 2.24.1 + 2.24.2 17 17 From 25628982712725780527f4a1505f146db699d395 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Wed, 27 Nov 2024 11:59:03 +0100 Subject: [PATCH 748/888] chore(deps): Update maven-archetype-plugin and archetype-packaging to 3.3.1 (#563) --- aws-serverless-jersey-archetype/pom.xml | 4 ++-- aws-serverless-spring-archetype/pom.xml | 4 ++-- aws-serverless-springboot3-archetype/pom.xml | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index f4ae15675..70284c5f6 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -48,7 +48,7 @@ org.apache.maven.archetype archetype-packaging - 3.2.1 + 3.3.1 @@ -65,7 +65,7 @@ org.apache.maven.plugins maven-archetype-plugin - 3.0.1 + 3.3.1 diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index 07c5e4e90..952a55735 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -48,7 +48,7 @@ org.apache.maven.archetype archetype-packaging - 3.2.1 + 3.3.1 @@ -66,7 +66,7 @@ org.apache.maven.plugins maven-archetype-plugin - 3.0.1 + 3.3.1 diff --git a/aws-serverless-springboot3-archetype/pom.xml b/aws-serverless-springboot3-archetype/pom.xml index a1057f354..3a1cc15d9 100644 --- a/aws-serverless-springboot3-archetype/pom.xml +++ b/aws-serverless-springboot3-archetype/pom.xml @@ -48,7 +48,7 @@ org.apache.maven.archetype archetype-packaging - 3.2.1 + 3.3.1 @@ -65,7 +65,7 @@ org.apache.maven.plugins maven-archetype-plugin - 3.0.1 + 3.3.1 From 2146847c72a5e1ea8aafe8fb8adae6756cf7a29c Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Wed, 27 Nov 2024 12:15:49 +0100 Subject: [PATCH 749/888] chore(deps): add crac dependency to native sample --- samples/springboot3/pet-store-native/pom.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/samples/springboot3/pet-store-native/pom.xml b/samples/springboot3/pet-store-native/pom.xml index 692844bb0..4eec02b6a 100644 --- a/samples/springboot3/pet-store-native/pom.xml +++ b/samples/springboot3/pet-store-native/pom.xml @@ -28,6 +28,12 @@ aws-serverless-java-container-springboot3 [2.0.0-SNAPSHOT,),[2.0.0-M1,) + + + org.crac + crac + runtime + com.amazonaws aws-lambda-java-events From 9ad5d1d121698426c06b1da45c186d6948b470df Mon Sep 17 00:00:00 2001 From: deki Date: Wed, 27 Nov 2024 11:24:08 +0000 Subject: [PATCH 750/888] chore: release - prepare release aws-serverless-java-container-2.1.0 --- aws-serverless-java-container-core/pom.xml | 4 ++-- aws-serverless-java-container-jersey/pom.xml | 8 ++++---- aws-serverless-java-container-spring/pom.xml | 8 ++++---- aws-serverless-java-container-springboot3/pom.xml | 8 ++++---- aws-serverless-jersey-archetype/pom.xml | 6 +++--- aws-serverless-spring-archetype/pom.xml | 6 +++--- aws-serverless-springboot3-archetype/pom.xml | 6 +++--- pom.xml | 4 ++-- 8 files changed, 25 insertions(+), 25 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 5c110d937..f3a1e7093 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Core Allows Java applications written for a servlet container to run in AWS Lambda https://aws.amazon.com/lambda - 2.1.0-SNAPSHOT + 2.1.0 com.amazonaws.serverless aws-serverless-java-container - 2.1.0-SNAPSHOT + 2.1.0 .. diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index 2b7ef7f17..501229ec0 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Jersey implementation Allows Java applications written for Jersey to run in AWS Lambda https://aws.amazon.com/lambda - 2.1.0-SNAPSHOT + 2.1.0 com.amazonaws.serverless aws-serverless-java-container - 2.1.0-SNAPSHOT + 2.1.0 .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.1.0-SNAPSHOT + 2.1.0 com.fasterxml.jackson.core @@ -35,7 +35,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.1.0-SNAPSHOT + 2.1.0 tests test-jar test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index d11e479ed..b64304b59 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spring implementation Allows Java applications written for the Spring framework to run in AWS Lambda https://aws.amazon.com/lambda - 2.1.0-SNAPSHOT + 2.1.0 com.amazonaws.serverless aws-serverless-java-container - 2.1.0-SNAPSHOT + 2.1.0 .. @@ -25,12 +25,12 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.1.0-SNAPSHOT + 2.1.0 com.amazonaws.serverless aws-serverless-java-container-core - 2.1.0-SNAPSHOT + 2.1.0 tests test-jar test diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index 167ca8436..9390bd8e9 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -3,7 +3,7 @@ aws-serverless-java-container com.amazonaws.serverless - 2.1.0-SNAPSHOT + 2.1.0 4.0.0 @@ -12,7 +12,7 @@ AWS Serverless Java container support - SpringBoot 3 implementation Allows Java applications written for SpringBoot 3 to run in AWS Lambda https://aws.amazon.com/lambda - 2.1.0-SNAPSHOT + 2.1.0 6.2.0 @@ -30,12 +30,12 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.1.0-SNAPSHOT + 2.1.0 com.amazonaws.serverless aws-serverless-java-container-core - 2.1.0-SNAPSHOT + 2.1.0 tests test-jar test diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index 70284c5f6..d9ce8dbc4 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.1.0-SNAPSHOT + 2.1.0 com.amazonaws.serverless.archetypes aws-serverless-jersey-archetype - 2.1.0-SNAPSHOT + 2.1.0 maven-archetype https://github.com/aws/serverless-java-container.git - HEAD + aws-serverless-java-container-2.1.0 diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index 952a55735..6348f086a 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.1.0-SNAPSHOT + 2.1.0 com.amazonaws.serverless.archetypes aws-serverless-spring-archetype - 2.1.0-SNAPSHOT + 2.1.0 maven-archetype https://github.com/aws/serverless-java-container.git - HEAD + aws-serverless-java-container-2.1.0 diff --git a/aws-serverless-springboot3-archetype/pom.xml b/aws-serverless-springboot3-archetype/pom.xml index 3a1cc15d9..fdba7e036 100644 --- a/aws-serverless-springboot3-archetype/pom.xml +++ b/aws-serverless-springboot3-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.1.0-SNAPSHOT + 2.1.0 com.amazonaws.serverless.archetypes aws-serverless-springboot3-archetype - 2.1.0-SNAPSHOT + 2.1.0 maven-archetype https://github.com/aws/serverless-java-container.git - HEAD + aws-serverless-java-container-2.1.0 diff --git a/pom.xml b/pom.xml index eb28838b1..e9bdb687c 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazonaws.serverless aws-serverless-java-container pom - 2.1.0-SNAPSHOT + 2.1.0 AWS Serverless Java container A Java framework to run Spring, Spring Boot, Jersey, Spark, and Struts applications inside AWS Lambda https://github.com/aws/serverless-java-container @@ -37,7 +37,7 @@ https://github.com/aws/serverless-java-container scm:git:https://github.com/aws/serverless-java-container.git - HEAD + aws-serverless-java-container-2.1.0 From 9a497be7542beec2c7bccada559ecff2a12e0faa Mon Sep 17 00:00:00 2001 From: deki Date: Wed, 27 Nov 2024 11:24:09 +0000 Subject: [PATCH 751/888] chore: release - prepare for next development iteration --- aws-serverless-java-container-core/pom.xml | 4 ++-- aws-serverless-java-container-jersey/pom.xml | 8 ++++---- aws-serverless-java-container-spring/pom.xml | 8 ++++---- aws-serverless-java-container-springboot3/pom.xml | 8 ++++---- aws-serverless-jersey-archetype/pom.xml | 6 +++--- aws-serverless-spring-archetype/pom.xml | 6 +++--- aws-serverless-springboot3-archetype/pom.xml | 6 +++--- pom.xml | 4 ++-- 8 files changed, 25 insertions(+), 25 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index f3a1e7093..f119dc713 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Core Allows Java applications written for a servlet container to run in AWS Lambda https://aws.amazon.com/lambda - 2.1.0 + 2.2.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 2.1.0 + 2.2.0-SNAPSHOT .. diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index 501229ec0..fdb4cf24f 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Jersey implementation Allows Java applications written for Jersey to run in AWS Lambda https://aws.amazon.com/lambda - 2.1.0 + 2.2.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 2.1.0 + 2.2.0-SNAPSHOT .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.1.0 + 2.2.0-SNAPSHOT com.fasterxml.jackson.core @@ -35,7 +35,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.1.0 + 2.2.0-SNAPSHOT tests test-jar test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index b64304b59..ab9491d77 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spring implementation Allows Java applications written for the Spring framework to run in AWS Lambda https://aws.amazon.com/lambda - 2.1.0 + 2.2.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 2.1.0 + 2.2.0-SNAPSHOT .. @@ -25,12 +25,12 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.1.0 + 2.2.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container-core - 2.1.0 + 2.2.0-SNAPSHOT tests test-jar test diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index 9390bd8e9..49fa7c707 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -3,7 +3,7 @@ aws-serverless-java-container com.amazonaws.serverless - 2.1.0 + 2.2.0-SNAPSHOT 4.0.0 @@ -12,7 +12,7 @@ AWS Serverless Java container support - SpringBoot 3 implementation Allows Java applications written for SpringBoot 3 to run in AWS Lambda https://aws.amazon.com/lambda - 2.1.0 + 2.2.0-SNAPSHOT 6.2.0 @@ -30,12 +30,12 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.1.0 + 2.2.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container-core - 2.1.0 + 2.2.0-SNAPSHOT tests test-jar test diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index d9ce8dbc4..412459c41 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.1.0 + 2.2.0-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-jersey-archetype - 2.1.0 + 2.2.0-SNAPSHOT maven-archetype https://github.com/aws/serverless-java-container.git - aws-serverless-java-container-2.1.0 + HEAD diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index 6348f086a..8b95c5332 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.1.0 + 2.2.0-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-spring-archetype - 2.1.0 + 2.2.0-SNAPSHOT maven-archetype https://github.com/aws/serverless-java-container.git - aws-serverless-java-container-2.1.0 + HEAD diff --git a/aws-serverless-springboot3-archetype/pom.xml b/aws-serverless-springboot3-archetype/pom.xml index fdba7e036..89469c2e4 100644 --- a/aws-serverless-springboot3-archetype/pom.xml +++ b/aws-serverless-springboot3-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.1.0 + 2.2.0-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-springboot3-archetype - 2.1.0 + 2.2.0-SNAPSHOT maven-archetype https://github.com/aws/serverless-java-container.git - aws-serverless-java-container-2.1.0 + HEAD diff --git a/pom.xml b/pom.xml index e9bdb687c..35597514c 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazonaws.serverless aws-serverless-java-container pom - 2.1.0 + 2.2.0-SNAPSHOT AWS Serverless Java container A Java framework to run Spring, Spring Boot, Jersey, Spark, and Struts applications inside AWS Lambda https://github.com/aws/serverless-java-container @@ -37,7 +37,7 @@ https://github.com/aws/serverless-java-container scm:git:https://github.com/aws/serverless-java-container.git - aws-serverless-java-container-2.1.0 + HEAD From e53972bec738e346e6be1ace73c92f2e3699888f Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Thu, 28 Nov 2024 11:11:39 +0100 Subject: [PATCH 752/888] chore(deps): Update Jackson version to 2.18.2 --- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- pom.xml | 2 +- samples/jersey/pet-store/build.gradle | 2 +- samples/jersey/pet-store/pom.xml | 2 +- samples/spring/pet-store/build.gradle | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle index 77b045d57..5d2a3a409 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle @@ -8,7 +8,7 @@ repositories { dependencies { implementation ( 'com.amazonaws.serverless:aws-serverless-java-container-jersey:[2.0-SNAPSHOT,)', - 'com.fasterxml.jackson.core:jackson-databind:2.18.1', + 'com.fasterxml.jackson.core:jackson-databind:2.18.2', ) implementation("org.glassfish.jersey.media:jersey-media-json-jackson:3.1.9") { diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml index e4f6a320e..176ef8a46 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 3.1.9 - 2.18.1 + 2.18.2 5.11.3 diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index 80b9addb5..9c572b8f7 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -13,7 +13,7 @@ dependencies { 'org.apache.logging.log4j:log4j-core:2.24.2', 'org.apache.logging.log4j:log4j-api:2.24.2', 'org.apache.logging.log4j:log4j-slf4j-impl:2.24.2', - 'com.fasterxml.jackson.core:jackson-databind:2.18.1', + 'com.fasterxml.jackson.core:jackson-databind:2.18.2', 'com.amazonaws:aws-lambda-java-log4j2:1.6.0', ) diff --git a/pom.xml b/pom.xml index 35597514c..e79e0d1ee 100644 --- a/pom.xml +++ b/pom.xml @@ -78,7 +78,7 @@ 0.7 11.1.0 - 2.18.1 + 2.18.2 2.0.16 5.11.3 5.14.2 diff --git a/samples/jersey/pet-store/build.gradle b/samples/jersey/pet-store/build.gradle index a00d52d5b..4c54ac140 100644 --- a/samples/jersey/pet-store/build.gradle +++ b/samples/jersey/pet-store/build.gradle @@ -8,7 +8,7 @@ repositories { dependencies { implementation ( 'com.amazonaws.serverless:aws-serverless-java-container-jersey:[2.0-SNAPSHOT,)', - 'com.fasterxml.jackson.core:jackson-databind:2.18.1', + 'com.fasterxml.jackson.core:jackson-databind:2.18.2', ) implementation("org.glassfish.jersey.media:jersey-media-json-jackson:3.1.9") { diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index c77ff0749..c7bbe2f09 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -27,7 +27,7 @@ 1.8 1.8 3.1.9 - 2.18.1 + 2.18.2 diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index 6d30a38e0..55876e263 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -13,7 +13,7 @@ dependencies { 'org.apache.logging.log4j:log4j-core:2.24.2', 'org.apache.logging.log4j:log4j-api:2.24.2', 'org.apache.logging.log4j:log4j-slf4j-impl:2.24.2', - 'com.fasterxml.jackson.core:jackson-databind:2.18.1', + 'com.fasterxml.jackson.core:jackson-databind:2.18.2', 'com.amazonaws:aws-lambda-java-log4j2:1.6.0', ) } From ef37379e7e07d5a18c5d1358cabb689e3b82719c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 9 Dec 2024 04:23:42 +0000 Subject: [PATCH 753/888] chore(deps): bump org.owasp:dependency-check-maven from 11.1.0 to 11.1.1 Bumps [org.owasp:dependency-check-maven](https://github.com/jeremylong/DependencyCheck) from 11.1.0 to 11.1.1. - [Release notes](https://github.com/jeremylong/DependencyCheck/releases) - [Changelog](https://github.com/jeremylong/DependencyCheck/blob/main/CHANGELOG.md) - [Commits](https://github.com/jeremylong/DependencyCheck/compare/v11.1.0...v11.1.1) --- updated-dependencies: - dependency-name: org.owasp:dependency-check-maven dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index e79e0d1ee..8d65ff107 100644 --- a/pom.xml +++ b/pom.xml @@ -77,7 +77,7 @@ 0.7 - 11.1.0 + 11.1.1 2.18.2 2.0.16 5.11.3 From 3c06b49403a1cf7d242d70d28bcb9ba92ee1e965 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 9 Dec 2024 04:23:52 +0000 Subject: [PATCH 754/888] chore(deps): bump org.apache.maven.plugins:maven-javadoc-plugin Bumps [org.apache.maven.plugins:maven-javadoc-plugin](https://github.com/apache/maven-javadoc-plugin) from 3.11.1 to 3.11.2. - [Release notes](https://github.com/apache/maven-javadoc-plugin/releases) - [Commits](https://github.com/apache/maven-javadoc-plugin/compare/maven-javadoc-plugin-3.11.1...maven-javadoc-plugin-3.11.2) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-javadoc-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index e79e0d1ee..41b1a50ba 100644 --- a/pom.xml +++ b/pom.xml @@ -201,7 +201,7 @@ org.apache.maven.plugins maven-javadoc-plugin - 3.11.1 + 3.11.2 org.apache.maven.plugins From 93788406831f98ad28429c3b0b03afcfe6b30bc0 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 9 Dec 2024 17:15:09 +0100 Subject: [PATCH 755/888] remove parallel() processing as per discussion in https://github.com/aws/serverless-java-container/pull/1089#discussion_r1861054196 This reverts commit 1785eb57c7d72f6c1b8468f2e3ad13ddb8298589. --- .../proxy/internal/servlet/AwsHttpServletRequest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java index 6b5c90200..c169a1f04 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java @@ -597,7 +597,7 @@ protected Map generateParameterMap(MultiValuedTreeMap getQueryParamValuesAsList(decodedQs, e.getKey(), false) From 75c309cb788b9a2119f6300e70e4863845efe7ec Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Thu, 12 Dec 2024 08:55:23 +0100 Subject: [PATCH 756/888] docs: add note for building sample on ARM (#1209) --- samples/springboot3/pet-store-native/Dockerfile | 3 ++- samples/springboot3/pet-store-native/README.md | 4 ++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/samples/springboot3/pet-store-native/Dockerfile b/samples/springboot3/pet-store-native/Dockerfile index 30b77503b..4fb614e3f 100644 --- a/samples/springboot3/pet-store-native/Dockerfile +++ b/samples/springboot3/pet-store-native/Dockerfile @@ -8,7 +8,8 @@ RUN yum -y update \ # Graal VM ENV GRAAL_VERSION 21.0.2 -ENV GRAAL_FILENAME graalvm-community-jdk-${GRAAL_VERSION}_linux-x64_bin.tar.gz +ENV ARCHITECTURE x64 +ENV GRAAL_FILENAME graalvm-community-jdk-${GRAAL_VERSION}_linux-${ARCHITECTURE}_bin.tar.gz RUN curl -4 -L https://github.com/graalvm/graalvm-ce-builds/releases/download/jdk-${GRAAL_VERSION}/${GRAAL_FILENAME} | tar -xvz RUN mv graalvm-community-openjdk-${GRAAL_VERSION}* /usr/lib/graalvm ENV JAVA_HOME /usr/lib/graalvm diff --git a/samples/springboot3/pet-store-native/README.md b/samples/springboot3/pet-store-native/README.md index c890090f7..571d56198 100644 --- a/samples/springboot3/pet-store-native/README.md +++ b/samples/springboot3/pet-store-native/README.md @@ -5,6 +5,10 @@ In this sample, you'll build a native GraalVM image for running web workloads in You first need to build the function, then you will deploy it to AWS Lambda. +Please note that the sample is for `x86` architectures. In case you want to build and run it on ARM, e.g. Apple Mac M1, M2, ... +you must change the according line in the `Dockerfile` to `ENV ARCHITECTURE aarch64`. +In addition, uncomment the `arm64` Architectures section in `template.yml`. + ### Step 1 - Build the native image Before starting the build, you must clone or download the code in **pet-store-native**. From e16206258d8842b8f2430ac00c522b68b32e037a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Dec 2024 04:56:19 +0000 Subject: [PATCH 757/888] chore(deps): bump the log4j group across 2 directories with 3 updates Bumps the log4j group with 3 updates in the /aws-serverless-spring-archetype/src/main/resources/archetype-resources directory: org.apache.logging.log4j:log4j-core, org.apache.logging.log4j:log4j-api and org.apache.logging.log4j:log4j-slf4j-impl. Bumps the log4j group with 3 updates in the /samples/spring/pet-store directory: org.apache.logging.log4j:log4j-core, org.apache.logging.log4j:log4j-api and org.apache.logging.log4j:log4j-slf4j-impl. Updates `org.apache.logging.log4j:log4j-core` from 2.24.2 to 2.24.3 Updates `org.apache.logging.log4j:log4j-api` from 2.24.2 to 2.24.3 Updates `org.apache.logging.log4j:log4j-slf4j-impl` from 2.24.2 to 2.24.3 Updates `org.apache.logging.log4j:log4j-core` from 2.24.2 to 2.24.3 Updates `org.apache.logging.log4j:log4j-api` from 2.24.2 to 2.24.3 Updates `org.apache.logging.log4j:log4j-slf4j-impl` from 2.24.2 to 2.24.3 --- updated-dependencies: - dependency-name: org.apache.logging.log4j:log4j-core dependency-type: direct:production update-type: version-update:semver-patch dependency-group: log4j - dependency-name: org.apache.logging.log4j:log4j-api dependency-type: direct:production update-type: version-update:semver-patch dependency-group: log4j - dependency-name: org.apache.logging.log4j:log4j-slf4j-impl dependency-type: direct:production update-type: version-update:semver-patch dependency-group: log4j - dependency-name: org.apache.logging.log4j:log4j-core dependency-type: direct:production update-type: version-update:semver-patch dependency-group: log4j - dependency-name: org.apache.logging.log4j:log4j-api dependency-type: direct:production update-type: version-update:semver-patch dependency-group: log4j - dependency-name: org.apache.logging.log4j:log4j-slf4j-impl dependency-type: direct:production update-type: version-update:semver-patch dependency-group: log4j ... Signed-off-by: dependabot[bot] --- .../src/main/resources/archetype-resources/build.gradle | 6 +++--- samples/spring/pet-store/build.gradle | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index 9c572b8f7..4b4df05eb 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -10,9 +10,9 @@ dependencies { 'org.springframework:spring-webmvc:6.2.0', 'org.springframework:spring-context:6.2.0', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[2.0-SNAPSHOT,)', - 'org.apache.logging.log4j:log4j-core:2.24.2', - 'org.apache.logging.log4j:log4j-api:2.24.2', - 'org.apache.logging.log4j:log4j-slf4j-impl:2.24.2', + 'org.apache.logging.log4j:log4j-core:2.24.3', + 'org.apache.logging.log4j:log4j-api:2.24.3', + 'org.apache.logging.log4j:log4j-slf4j-impl:2.24.3', 'com.fasterxml.jackson.core:jackson-databind:2.18.2', 'com.amazonaws:aws-lambda-java-log4j2:1.6.0', ) diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index 55876e263..e983e49bc 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -10,9 +10,9 @@ dependencies { 'org.springframework:spring-webmvc:6.2.0', 'org.springframework:spring-context:6.2.0', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[2.0-SNAPSHOT,)', - 'org.apache.logging.log4j:log4j-core:2.24.2', - 'org.apache.logging.log4j:log4j-api:2.24.2', - 'org.apache.logging.log4j:log4j-slf4j-impl:2.24.2', + 'org.apache.logging.log4j:log4j-core:2.24.3', + 'org.apache.logging.log4j:log4j-api:2.24.3', + 'org.apache.logging.log4j:log4j-slf4j-impl:2.24.3', 'com.fasterxml.jackson.core:jackson-databind:2.18.2', 'com.amazonaws:aws-lambda-java-log4j2:1.6.0', ) From 9ee726ace123f063769cc881c5a084582d4ab0ef Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Dec 2024 04:57:07 +0000 Subject: [PATCH 758/888] chore(deps): bump the log4j group across 1 directory with 3 updates Bumps the log4j group with 3 updates in the /samples/spring/pet-store directory: org.apache.logging.log4j:log4j-core, org.apache.logging.log4j:log4j-api and org.apache.logging.log4j:log4j-slf4j-impl. Updates `org.apache.logging.log4j:log4j-core` from 2.24.2 to 2.24.3 Updates `org.apache.logging.log4j:log4j-api` from 2.24.2 to 2.24.3 Updates `org.apache.logging.log4j:log4j-slf4j-impl` from 2.24.2 to 2.24.3 Updates `org.apache.logging.log4j:log4j-api` from 2.24.2 to 2.24.3 Updates `org.apache.logging.log4j:log4j-slf4j-impl` from 2.24.2 to 2.24.3 --- updated-dependencies: - dependency-name: org.apache.logging.log4j:log4j-core dependency-type: direct:production update-type: version-update:semver-patch dependency-group: log4j - dependency-name: org.apache.logging.log4j:log4j-api dependency-type: direct:production update-type: version-update:semver-patch dependency-group: log4j - dependency-name: org.apache.logging.log4j:log4j-slf4j-impl dependency-type: direct:production update-type: version-update:semver-patch dependency-group: log4j - dependency-name: org.apache.logging.log4j:log4j-api dependency-type: direct:production update-type: version-update:semver-patch dependency-group: log4j - dependency-name: org.apache.logging.log4j:log4j-slf4j-impl dependency-type: direct:production update-type: version-update:semver-patch dependency-group: log4j ... Signed-off-by: dependabot[bot] --- samples/spring/pet-store/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index 12a35b314..409db0cc9 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -25,7 +25,7 @@ 6.2.0 - 2.24.2 + 2.24.3 17 17 From 74d6c5b45f0bb426afcdab21d84142025eb69182 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Dec 2024 04:57:25 +0000 Subject: [PATCH 759/888] chore(deps): bump org.hibernate.validator:hibernate-validator Bumps [org.hibernate.validator:hibernate-validator](https://github.com/hibernate/hibernate-validator) from 8.0.1.Final to 8.0.2.Final. - [Changelog](https://github.com/hibernate/hibernate-validator/blob/8.0.2.Final/changelog.txt) - [Commits](https://github.com/hibernate/hibernate-validator/compare/8.0.1.Final...8.0.2.Final) --- updated-dependencies: - dependency-name: org.hibernate.validator:hibernate-validator dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- aws-serverless-java-container-spring/pom.xml | 2 +- aws-serverless-java-container-springboot3/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index ab9491d77..26c2f3d9f 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -75,7 +75,7 @@ org.hibernate.validator hibernate-validator - 8.0.1.Final + 8.0.2.Final test diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index 49fa7c707..0b29ccd20 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -160,7 +160,7 @@ org.hibernate.validator hibernate-validator - 8.0.1.Final + 8.0.2.Final test From 75fc1853a5b71017381584681a52df468d2afb4e Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Wed, 18 Dec 2024 15:02:39 +0100 Subject: [PATCH 760/888] fix: not need to override Spring Cloud version --- samples/springboot3/pet-store-native/pom.xml | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/samples/springboot3/pet-store-native/pom.xml b/samples/springboot3/pet-store-native/pom.xml index 4eec02b6a..2a0f1af4e 100644 --- a/samples/springboot3/pet-store-native/pom.xml +++ b/samples/springboot3/pet-store-native/pom.xml @@ -16,7 +16,6 @@ Sample of AWS with Spring Native 17 - 2023.0.2 @@ -52,18 +51,7 @@ test - - - - org.springframework.cloud - spring-cloud-dependencies - ${spring-cloud.version} - pom - import - - - - + native From 53a747d9743d0f4b69f06eb32e1ad3bdcc002342 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Thu, 19 Dec 2024 15:35:55 +0100 Subject: [PATCH 761/888] chore(deps): Update Spring dependencies (framework to 6.2.1, security to 6.4.2, boot to 3.4.1) --- aws-serverless-java-container-core/pom.xml | 2 +- aws-serverless-java-container-spring/pom.xml | 4 ++-- aws-serverless-java-container-springboot3/pom.xml | 6 +++--- .../src/main/resources/archetype-resources/build.gradle | 4 ++-- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/spring/pet-store/build.gradle | 4 ++-- samples/spring/pet-store/pom.xml | 2 +- samples/springboot3/alt-pet-store/build.gradle | 2 +- samples/springboot3/alt-pet-store/pom.xml | 2 +- samples/springboot3/graphql-pet-store/pom.xml | 2 +- samples/springboot3/pet-store-native/pom.xml | 2 +- samples/springboot3/pet-store/build.gradle | 2 +- samples/springboot3/pet-store/pom.xml | 2 +- 15 files changed, 20 insertions(+), 20 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index f119dc713..07d60f848 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -60,7 +60,7 @@ org.springframework.security spring-security-web - 6.4.1 + 6.4.2 test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index ab9491d77..5211db836 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -16,8 +16,8 @@ - 6.2.0 - 6.4.1 + 6.2.1 + 6.4.2 diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index 49fa7c707..57ece9fdd 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -15,9 +15,9 @@ 2.2.0-SNAPSHOT - 6.2.0 - 3.4.0 - 6.4.1 + 6.2.1 + 3.4.1 + 6.4.2 diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index 4b4df05eb..3a931de23 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -7,8 +7,8 @@ repositories { dependencies { implementation ( - 'org.springframework:spring-webmvc:6.2.0', - 'org.springframework:spring-context:6.2.0', + 'org.springframework:spring-webmvc:6.2.1', + 'org.springframework:spring-context:6.2.1', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[2.0-SNAPSHOT,)', 'org.apache.logging.log4j:log4j-core:2.24.3', 'org.apache.logging.log4j:log4j-api:2.24.3', diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index 42ccf9d42..173971be3 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 1.8 - 6.2.0 + 6.2.1 5.11.3 2.24.2 diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle index be57490c8..0ca76c76d 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle @@ -9,7 +9,7 @@ repositories { dependencies { implementation ( - 'org.springframework.boot:spring-boot-starter-web:3.4.0', + 'org.springframework.boot:spring-boot-starter-web:3.4.1', 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:[2.0-SNAPSHOT,)', ) diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml index 3489ad86d..bdcfecb40 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ org.springframework.boot spring-boot-starter-parent - 3.4.0 + 3.4.1 diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index e983e49bc..58bb80114 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -7,8 +7,8 @@ repositories { dependencies { implementation ( - 'org.springframework:spring-webmvc:6.2.0', - 'org.springframework:spring-context:6.2.0', + 'org.springframework:spring-webmvc:6.2.1', + 'org.springframework:spring-context:6.2.1', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[2.0-SNAPSHOT,)', 'org.apache.logging.log4j:log4j-core:2.24.3', 'org.apache.logging.log4j:log4j-api:2.24.3', diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index 409db0cc9..1ded708f1 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -24,7 +24,7 @@ - 6.2.0 + 6.2.1 2.24.3 17 17 diff --git a/samples/springboot3/alt-pet-store/build.gradle b/samples/springboot3/alt-pet-store/build.gradle index 7bcd50e4e..f2d61db6b 100644 --- a/samples/springboot3/alt-pet-store/build.gradle +++ b/samples/springboot3/alt-pet-store/build.gradle @@ -9,7 +9,7 @@ repositories { dependencies { implementation ( - implementation('org.springframework.boot:spring-boot-starter-web:3.4.0') { + implementation('org.springframework.boot:spring-boot-starter-web:3.4.1') { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat' }, 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:[2.0-SNAPSHOT,)', diff --git a/samples/springboot3/alt-pet-store/pom.xml b/samples/springboot3/alt-pet-store/pom.xml index 70fb38207..1d15765fc 100644 --- a/samples/springboot3/alt-pet-store/pom.xml +++ b/samples/springboot3/alt-pet-store/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 3.4.0 + 3.4.1 diff --git a/samples/springboot3/graphql-pet-store/pom.xml b/samples/springboot3/graphql-pet-store/pom.xml index 070314fdd..c798d8fc3 100644 --- a/samples/springboot3/graphql-pet-store/pom.xml +++ b/samples/springboot3/graphql-pet-store/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 3.4.0 + 3.4.1 diff --git a/samples/springboot3/pet-store-native/pom.xml b/samples/springboot3/pet-store-native/pom.xml index 2a0f1af4e..dc3ba9d75 100644 --- a/samples/springboot3/pet-store-native/pom.xml +++ b/samples/springboot3/pet-store-native/pom.xml @@ -6,7 +6,7 @@ org.springframework.boot spring-boot-starter-parent - 3.4.0 + 3.4.1 com.amazonaws.serverless.sample diff --git a/samples/springboot3/pet-store/build.gradle b/samples/springboot3/pet-store/build.gradle index 7bcd50e4e..f2d61db6b 100644 --- a/samples/springboot3/pet-store/build.gradle +++ b/samples/springboot3/pet-store/build.gradle @@ -9,7 +9,7 @@ repositories { dependencies { implementation ( - implementation('org.springframework.boot:spring-boot-starter-web:3.4.0') { + implementation('org.springframework.boot:spring-boot-starter-web:3.4.1') { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat' }, 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:[2.0-SNAPSHOT,)', diff --git a/samples/springboot3/pet-store/pom.xml b/samples/springboot3/pet-store/pom.xml index 32b92a5f5..89f585399 100644 --- a/samples/springboot3/pet-store/pom.xml +++ b/samples/springboot3/pet-store/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 3.4.0 + 3.4.1 From bd0ae08aa7b43f67a6869d9058fa8659c9ca8db3 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 20 Dec 2024 11:22:28 +0100 Subject: [PATCH 762/888] fix: content type for v1 payload should be retrieved from multi value headers (#1193) --- .../serverless/proxy/spring/AwsSpringHttpProcessingUtils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringHttpProcessingUtils.java b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringHttpProcessingUtils.java index 01074f865..2f547a32d 100644 --- a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringHttpProcessingUtils.java +++ b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringHttpProcessingUtils.java @@ -126,7 +126,7 @@ private static HttpServletRequest generateRequest1(String request, Context lambd } populateContentAndContentType( v1Request.getBody(), - v1Request.getHeaders().get(HttpHeaders.CONTENT_TYPE), + v1Request.getMultiValueHeaders().getFirst(HttpHeaders.CONTENT_TYPE), v1Request.isBase64Encoded(), httpRequest ); From ecfd942ed57c5fdce69b4049f0ef6b8ac6493aa0 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 23 Dec 2024 09:55:05 +0100 Subject: [PATCH 763/888] chore(deps): update JUnit version to 5.11.4 --- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- pom.xml | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle index 5d2a3a409..c4f8d7e52 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle @@ -23,7 +23,7 @@ dependencies { testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") testImplementation("org.apache.httpcomponents.client5:httpclient5:5.4.1") - testImplementation(platform("org.junit:junit-bom:5.11.3")) + testImplementation(platform("org.junit:junit-bom:5.11.4")) testImplementation("org.junit.jupiter:junit-jupiter") } diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml index 176ef8a46..a0c2b0620 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml @@ -17,7 +17,7 @@ 3.1.9 2.18.2 - 5.11.3 + 5.11.4 diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index 3a931de23..0969e8c6c 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -19,7 +19,7 @@ dependencies { testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") testImplementation("org.apache.httpcomponents.client5:httpclient5:5.4.1") - testImplementation(platform("org.junit:junit-bom:5.11.3")) + testImplementation(platform("org.junit:junit-bom:5.11.4")) testImplementation("org.junit.jupiter:junit-jupiter") } diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index 173971be3..13116df09 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -17,7 +17,7 @@ 1.8 1.8 6.2.1 - 5.11.3 + 5.11.4 2.24.2 diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle index 0ca76c76d..cdca16bc3 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle @@ -15,7 +15,7 @@ dependencies { testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") testImplementation("org.apache.httpcomponents.client5:httpclient5:5.4.1") - testImplementation(platform("org.junit:junit-bom:5.11.3")) + testImplementation(platform("org.junit:junit-bom:5.11.4")) testImplementation("org.junit.jupiter:junit-jupiter") } diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml index bdcfecb40..8bea6e66a 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml @@ -21,7 +21,7 @@ 17 - 5.11.3 + 5.11.4 diff --git a/pom.xml b/pom.xml index 6d053b3d9..ecfd98147 100644 --- a/pom.xml +++ b/pom.xml @@ -80,7 +80,7 @@ 11.1.1 2.18.2 2.0.16 - 5.11.3 + 5.11.4 5.14.2 1.3 UTF-8 From 8edd50c80191655eec55cb32ee5fe837ffe05f4d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Jan 2025 05:14:56 +0000 Subject: [PATCH 764/888] chore(deps-dev): bump org.mockito:mockito-core from 5.14.2 to 5.15.2 Bumps [org.mockito:mockito-core](https://github.com/mockito/mockito) from 5.14.2 to 5.15.2. - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](https://github.com/mockito/mockito/compare/v5.14.2...v5.15.2) --- updated-dependencies: - dependency-name: org.mockito:mockito-core dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index ecfd98147..0458270d1 100644 --- a/pom.xml +++ b/pom.xml @@ -81,7 +81,7 @@ 2.18.2 2.0.16 5.11.4 - 5.14.2 + 5.15.2 1.3 UTF-8 From 7c7e81b1da25375d081f2d2d3534cd8dc1a962b5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 8 Jan 2025 07:54:39 +0000 Subject: [PATCH 765/888] chore(deps): bump commons-codec:commons-codec from 1.17.1 to 1.17.2 Bumps [commons-codec:commons-codec](https://github.com/apache/commons-codec) from 1.17.1 to 1.17.2. - [Changelog](https://github.com/apache/commons-codec/blob/master/RELEASE-NOTES.txt) - [Commits](https://github.com/apache/commons-codec/compare/rel/commons-codec-1.17.1...rel/commons-codec-1.17.2) --- updated-dependencies: - dependency-name: commons-codec:commons-codec dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- aws-serverless-java-container-jersey/pom.xml | 2 +- aws-serverless-java-container-spring/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index fdb4cf24f..16699e919 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -64,7 +64,7 @@ commons-codec commons-codec - 1.17.1 + 1.17.2 test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 5fa183237..7749e53dc 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -53,7 +53,7 @@ commons-codec commons-codec - 1.17.1 + 1.17.2 test From 159a96444666a5780c7babd2c62bcea0fa5fa050 Mon Sep 17 00:00:00 2001 From: deki Date: Wed, 8 Jan 2025 08:28:10 +0000 Subject: [PATCH 766/888] chore: release - prepare release aws-serverless-java-container-2.1.1 --- aws-serverless-java-container-core/pom.xml | 4 ++-- aws-serverless-java-container-jersey/pom.xml | 8 ++++---- aws-serverless-java-container-spring/pom.xml | 8 ++++---- aws-serverless-java-container-springboot3/pom.xml | 8 ++++---- aws-serverless-jersey-archetype/pom.xml | 6 +++--- aws-serverless-spring-archetype/pom.xml | 6 +++--- aws-serverless-springboot3-archetype/pom.xml | 6 +++--- pom.xml | 4 ++-- 8 files changed, 25 insertions(+), 25 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 07d60f848..7c604bd22 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Core Allows Java applications written for a servlet container to run in AWS Lambda https://aws.amazon.com/lambda - 2.2.0-SNAPSHOT + 2.1.1 com.amazonaws.serverless aws-serverless-java-container - 2.2.0-SNAPSHOT + 2.1.1 .. diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index 16699e919..c4ce0dc52 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Jersey implementation Allows Java applications written for Jersey to run in AWS Lambda https://aws.amazon.com/lambda - 2.2.0-SNAPSHOT + 2.1.1 com.amazonaws.serverless aws-serverless-java-container - 2.2.0-SNAPSHOT + 2.1.1 .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.2.0-SNAPSHOT + 2.1.1 com.fasterxml.jackson.core @@ -35,7 +35,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.2.0-SNAPSHOT + 2.1.1 tests test-jar test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 7749e53dc..410061c51 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spring implementation Allows Java applications written for the Spring framework to run in AWS Lambda https://aws.amazon.com/lambda - 2.2.0-SNAPSHOT + 2.1.1 com.amazonaws.serverless aws-serverless-java-container - 2.2.0-SNAPSHOT + 2.1.1 .. @@ -25,12 +25,12 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.2.0-SNAPSHOT + 2.1.1 com.amazonaws.serverless aws-serverless-java-container-core - 2.2.0-SNAPSHOT + 2.1.1 tests test-jar test diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index 61fdc8963..f86e06129 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -3,7 +3,7 @@ aws-serverless-java-container com.amazonaws.serverless - 2.2.0-SNAPSHOT + 2.1.1 4.0.0 @@ -12,7 +12,7 @@ AWS Serverless Java container support - SpringBoot 3 implementation Allows Java applications written for SpringBoot 3 to run in AWS Lambda https://aws.amazon.com/lambda - 2.2.0-SNAPSHOT + 2.1.1 6.2.1 @@ -30,12 +30,12 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.2.0-SNAPSHOT + 2.1.1 com.amazonaws.serverless aws-serverless-java-container-core - 2.2.0-SNAPSHOT + 2.1.1 tests test-jar test diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index 412459c41..c6e3ae9c8 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.2.0-SNAPSHOT + 2.1.1 com.amazonaws.serverless.archetypes aws-serverless-jersey-archetype - 2.2.0-SNAPSHOT + 2.1.1 maven-archetype https://github.com/aws/serverless-java-container.git - HEAD + aws-serverless-java-container-2.1.1 diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index 8b95c5332..e896d2263 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.2.0-SNAPSHOT + 2.1.1 com.amazonaws.serverless.archetypes aws-serverless-spring-archetype - 2.2.0-SNAPSHOT + 2.1.1 maven-archetype https://github.com/aws/serverless-java-container.git - HEAD + aws-serverless-java-container-2.1.1 diff --git a/aws-serverless-springboot3-archetype/pom.xml b/aws-serverless-springboot3-archetype/pom.xml index 89469c2e4..fa1485376 100644 --- a/aws-serverless-springboot3-archetype/pom.xml +++ b/aws-serverless-springboot3-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.2.0-SNAPSHOT + 2.1.1 com.amazonaws.serverless.archetypes aws-serverless-springboot3-archetype - 2.2.0-SNAPSHOT + 2.1.1 maven-archetype https://github.com/aws/serverless-java-container.git - HEAD + aws-serverless-java-container-2.1.1 diff --git a/pom.xml b/pom.xml index 0458270d1..4f29c41f8 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazonaws.serverless aws-serverless-java-container pom - 2.2.0-SNAPSHOT + 2.1.1 AWS Serverless Java container A Java framework to run Spring, Spring Boot, Jersey, Spark, and Struts applications inside AWS Lambda https://github.com/aws/serverless-java-container @@ -37,7 +37,7 @@ https://github.com/aws/serverless-java-container scm:git:https://github.com/aws/serverless-java-container.git - HEAD + aws-serverless-java-container-2.1.1 From 02fb39371fa02d0442c94c2627c90ef8f12cdfc2 Mon Sep 17 00:00:00 2001 From: deki Date: Wed, 8 Jan 2025 08:28:12 +0000 Subject: [PATCH 767/888] chore: release - prepare for next development iteration --- aws-serverless-java-container-core/pom.xml | 4 ++-- aws-serverless-java-container-jersey/pom.xml | 8 ++++---- aws-serverless-java-container-spring/pom.xml | 8 ++++---- aws-serverless-java-container-springboot3/pom.xml | 8 ++++---- aws-serverless-jersey-archetype/pom.xml | 6 +++--- aws-serverless-spring-archetype/pom.xml | 6 +++--- aws-serverless-springboot3-archetype/pom.xml | 6 +++--- pom.xml | 4 ++-- 8 files changed, 25 insertions(+), 25 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 7c604bd22..07d60f848 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Core Allows Java applications written for a servlet container to run in AWS Lambda https://aws.amazon.com/lambda - 2.1.1 + 2.2.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 2.1.1 + 2.2.0-SNAPSHOT .. diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index c4ce0dc52..16699e919 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Jersey implementation Allows Java applications written for Jersey to run in AWS Lambda https://aws.amazon.com/lambda - 2.1.1 + 2.2.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 2.1.1 + 2.2.0-SNAPSHOT .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.1.1 + 2.2.0-SNAPSHOT com.fasterxml.jackson.core @@ -35,7 +35,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.1.1 + 2.2.0-SNAPSHOT tests test-jar test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 410061c51..7749e53dc 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spring implementation Allows Java applications written for the Spring framework to run in AWS Lambda https://aws.amazon.com/lambda - 2.1.1 + 2.2.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 2.1.1 + 2.2.0-SNAPSHOT .. @@ -25,12 +25,12 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.1.1 + 2.2.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container-core - 2.1.1 + 2.2.0-SNAPSHOT tests test-jar test diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index f86e06129..61fdc8963 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -3,7 +3,7 @@ aws-serverless-java-container com.amazonaws.serverless - 2.1.1 + 2.2.0-SNAPSHOT 4.0.0 @@ -12,7 +12,7 @@ AWS Serverless Java container support - SpringBoot 3 implementation Allows Java applications written for SpringBoot 3 to run in AWS Lambda https://aws.amazon.com/lambda - 2.1.1 + 2.2.0-SNAPSHOT 6.2.1 @@ -30,12 +30,12 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.1.1 + 2.2.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container-core - 2.1.1 + 2.2.0-SNAPSHOT tests test-jar test diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index c6e3ae9c8..412459c41 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.1.1 + 2.2.0-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-jersey-archetype - 2.1.1 + 2.2.0-SNAPSHOT maven-archetype https://github.com/aws/serverless-java-container.git - aws-serverless-java-container-2.1.1 + HEAD diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index e896d2263..8b95c5332 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.1.1 + 2.2.0-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-spring-archetype - 2.1.1 + 2.2.0-SNAPSHOT maven-archetype https://github.com/aws/serverless-java-container.git - aws-serverless-java-container-2.1.1 + HEAD diff --git a/aws-serverless-springboot3-archetype/pom.xml b/aws-serverless-springboot3-archetype/pom.xml index fa1485376..89469c2e4 100644 --- a/aws-serverless-springboot3-archetype/pom.xml +++ b/aws-serverless-springboot3-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.1.1 + 2.2.0-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-springboot3-archetype - 2.1.1 + 2.2.0-SNAPSHOT maven-archetype https://github.com/aws/serverless-java-container.git - aws-serverless-java-container-2.1.1 + HEAD diff --git a/pom.xml b/pom.xml index 4f29c41f8..0458270d1 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazonaws.serverless aws-serverless-java-container pom - 2.1.1 + 2.2.0-SNAPSHOT AWS Serverless Java container A Java framework to run Spring, Spring Boot, Jersey, Spark, and Struts applications inside AWS Lambda https://github.com/aws/serverless-java-container @@ -37,7 +37,7 @@ https://github.com/aws/serverless-java-container scm:git:https://github.com/aws/serverless-java-container.git - aws-serverless-java-container-2.1.1 + HEAD From 7785e356b2fb69b49fcf333735c65fb2f33757a7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 Jan 2025 04:22:31 +0000 Subject: [PATCH 768/888] chore(deps): bump org.owasp:dependency-check-maven from 11.1.1 to 12.0.0 Bumps [org.owasp:dependency-check-maven](https://github.com/jeremylong/DependencyCheck) from 11.1.1 to 12.0.0. - [Release notes](https://github.com/jeremylong/DependencyCheck/releases) - [Changelog](https://github.com/jeremylong/DependencyCheck/blob/main/CHANGELOG.md) - [Commits](https://github.com/jeremylong/DependencyCheck/compare/v11.1.1...v12.0.0) --- updated-dependencies: - dependency-name: org.owasp:dependency-check-maven dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 0458270d1..d054ca5d9 100644 --- a/pom.xml +++ b/pom.xml @@ -77,7 +77,7 @@ 0.7 - 11.1.1 + 12.0.0 2.18.2 2.0.16 5.11.4 From 00de575129935ff5cb593fea83687ed213157abd Mon Sep 17 00:00:00 2001 From: Oleg Zhurakousky Date: Mon, 13 Jan 2025 19:31:53 +0100 Subject: [PATCH 769/888] Updated Spring Cloud Function version --- samples/springboot3/alt-pet-store/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/springboot3/alt-pet-store/pom.xml b/samples/springboot3/alt-pet-store/pom.xml index 1d15765fc..f2c7359cb 100644 --- a/samples/springboot3/alt-pet-store/pom.xml +++ b/samples/springboot3/alt-pet-store/pom.xml @@ -37,7 +37,7 @@ com.amazonaws.serverless aws-serverless-java-container-springboot3 - [2.0.0-SNAPSHOT,),[2.0.0-M1,) + [2.2.0-SNAPSHOT,),[2.2.0-M1,) From 9c7ef12dfe7a28430c66b2bb368ee3c782269bd6 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Tue, 14 Jan 2025 07:30:13 +0200 Subject: [PATCH 770/888] chore(deps): Update Jersey version to 3.1.10 (closes #1233, #1234) --- aws-serverless-java-container-jersey/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 4 ++-- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/jersey/pet-store/build.gradle | 4 ++-- samples/jersey/pet-store/pom.xml | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index 16699e919..c14b1e1e3 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -16,7 +16,7 @@ - 3.1.9 + 3.1.10 diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle index c4f8d7e52..29ef10b04 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle @@ -11,13 +11,13 @@ dependencies { 'com.fasterxml.jackson.core:jackson-databind:2.18.2', ) - implementation("org.glassfish.jersey.media:jersey-media-json-jackson:3.1.9") { + implementation("org.glassfish.jersey.media:jersey-media-json-jackson:3.1.10") { exclude group: 'com.fasterxml.jackson.core', module: "jackson-annotations" exclude group: 'com.fasterxml.jackson.core', module: "jackson-databind" exclude group: 'com.fasterxml.jackson.core', module: "jackson-core" } - implementation("org.glassfish.jersey.inject:jersey-hk2:3.1.9") { + implementation("org.glassfish.jersey.inject:jersey-hk2:3.1.10") { exclude group: 'javax.inject', module: "javax.inject" } diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml index a0c2b0620..2d9b45363 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml @@ -15,7 +15,7 @@ 1.8 1.8 - 3.1.9 + 3.1.10 2.18.2 5.11.4 diff --git a/samples/jersey/pet-store/build.gradle b/samples/jersey/pet-store/build.gradle index 4c54ac140..ca4af2f86 100644 --- a/samples/jersey/pet-store/build.gradle +++ b/samples/jersey/pet-store/build.gradle @@ -11,13 +11,13 @@ dependencies { 'com.fasterxml.jackson.core:jackson-databind:2.18.2', ) - implementation("org.glassfish.jersey.media:jersey-media-json-jackson:3.1.9") { + implementation("org.glassfish.jersey.media:jersey-media-json-jackson:3.1.10") { exclude group: 'com.fasterxml.jackson.core', module: "jackson-annotations" exclude group: 'com.fasterxml.jackson.core', module: "jackson-databind" exclude group: 'com.fasterxml.jackson.core', module: "jackson-core" } - implementation("org.glassfish.jersey.inject:jersey-hk2:3.1.9") { + implementation("org.glassfish.jersey.inject:jersey-hk2:3.1.10") { exclude group: 'javax.inject', module: "javax.inject" } } diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index c7bbe2f09..2482864f0 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -26,7 +26,7 @@ 1.8 1.8 - 3.1.9 + 3.1.10 2.18.2 From 6fa29cdf8b1ec9c98af3a454f0a5c388027e38f5 Mon Sep 17 00:00:00 2001 From: Oleg Zhurakousky Date: Tue, 14 Jan 2025 08:20:30 +0100 Subject: [PATCH 771/888] Updated Spring Cloud Function version --- aws-serverless-java-container-springboot3/pom.xml | 2 +- samples/springboot3/alt-pet-store/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index 61fdc8963..34a628c15 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -25,7 +25,7 @@ org.springframework.cloud spring-cloud-function-serverless-web - 4.1.4 + 4.1.5 com.amazonaws.serverless diff --git a/samples/springboot3/alt-pet-store/pom.xml b/samples/springboot3/alt-pet-store/pom.xml index f2c7359cb..cf9a16f6c 100644 --- a/samples/springboot3/alt-pet-store/pom.xml +++ b/samples/springboot3/alt-pet-store/pom.xml @@ -37,7 +37,7 @@ com.amazonaws.serverless aws-serverless-java-container-springboot3 - [2.2.0-SNAPSHOT,),[2.2.0-M1,) + [2.2.0-SNAPSHOT,),[2.1.1,) From 28232b45fb8a887e2c0ebdcc5329405f7716a705 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Jan 2025 04:38:29 +0000 Subject: [PATCH 772/888] chore(deps): bump org.owasp:dependency-check-maven from 12.0.0 to 12.0.1 Bumps [org.owasp:dependency-check-maven](https://github.com/jeremylong/DependencyCheck) from 12.0.0 to 12.0.1. - [Release notes](https://github.com/jeremylong/DependencyCheck/releases) - [Changelog](https://github.com/jeremylong/DependencyCheck/blob/main/CHANGELOG.md) - [Commits](https://github.com/jeremylong/DependencyCheck/compare/v12.0.0...v12.0.1) --- updated-dependencies: - dependency-name: org.owasp:dependency-check-maven dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index d054ca5d9..36aa0ebb0 100644 --- a/pom.xml +++ b/pom.xml @@ -77,7 +77,7 @@ 0.7 - 12.0.0 + 12.0.1 2.18.2 2.0.16 5.11.4 From 2e27797065a10ea6003d338a0d4ef644c9916a7d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Jan 2025 04:38:36 +0000 Subject: [PATCH 773/888] chore(deps): bump com.github.spotbugs:spotbugs-annotations Bumps [com.github.spotbugs:spotbugs-annotations](https://github.com/spotbugs/spotbugs) from 4.8.6 to 4.9.0. - [Release notes](https://github.com/spotbugs/spotbugs/releases) - [Changelog](https://github.com/spotbugs/spotbugs/blob/master/CHANGELOG.md) - [Commits](https://github.com/spotbugs/spotbugs/compare/4.8.6...4.9.0) --- updated-dependencies: - dependency-name: com.github.spotbugs:spotbugs-annotations dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index d054ca5d9..ea89e8947 100644 --- a/pom.xml +++ b/pom.xml @@ -140,7 +140,7 @@ com.github.spotbugs spotbugs-annotations - 4.8.6 + 4.9.0 provided From 5f02ec136b985ab44055aed9a3408b817d0537d9 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 24 Jan 2025 14:41:59 +0100 Subject: [PATCH 774/888] chore(deps): Update Spring dependencies (framework to 6.2.2, boot to 3.4.2) --- aws-serverless-java-container-spring/pom.xml | 2 +- aws-serverless-java-container-springboot3/pom.xml | 4 ++-- .../src/main/resources/archetype-resources/build.gradle | 4 ++-- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/spring/pet-store/build.gradle | 4 ++-- samples/spring/pet-store/pom.xml | 2 +- samples/springboot3/alt-pet-store/build.gradle | 2 +- samples/springboot3/alt-pet-store/pom.xml | 2 +- samples/springboot3/graphql-pet-store/pom.xml | 2 +- samples/springboot3/pet-store-native/pom.xml | 2 +- samples/springboot3/pet-store/build.gradle | 2 +- samples/springboot3/pet-store/pom.xml | 2 +- 14 files changed, 17 insertions(+), 17 deletions(-) diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 7749e53dc..c11dd3ee5 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -16,7 +16,7 @@ - 6.2.1 + 6.2.2 6.4.2 diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index 34a628c15..222126adb 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -15,8 +15,8 @@ 2.2.0-SNAPSHOT - 6.2.1 - 3.4.1 + 6.2.2 + 3.4.2 6.4.2 diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index 0969e8c6c..da8ea168f 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -7,8 +7,8 @@ repositories { dependencies { implementation ( - 'org.springframework:spring-webmvc:6.2.1', - 'org.springframework:spring-context:6.2.1', + 'org.springframework:spring-webmvc:6.2.2', + 'org.springframework:spring-context:6.2.2', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[2.0-SNAPSHOT,)', 'org.apache.logging.log4j:log4j-core:2.24.3', 'org.apache.logging.log4j:log4j-api:2.24.3', diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index 13116df09..0320ee041 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 1.8 - 6.2.1 + 6.2.2 5.11.4 2.24.2 diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle index cdca16bc3..e8e334e2e 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle @@ -9,7 +9,7 @@ repositories { dependencies { implementation ( - 'org.springframework.boot:spring-boot-starter-web:3.4.1', + 'org.springframework.boot:spring-boot-starter-web:3.4.2', 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:[2.0-SNAPSHOT,)', ) diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml index 8bea6e66a..d0a274282 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ org.springframework.boot spring-boot-starter-parent - 3.4.1 + 3.4.2 diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index 58bb80114..44f81a73a 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -7,8 +7,8 @@ repositories { dependencies { implementation ( - 'org.springframework:spring-webmvc:6.2.1', - 'org.springframework:spring-context:6.2.1', + 'org.springframework:spring-webmvc:6.2.2', + 'org.springframework:spring-context:6.2.2', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[2.0-SNAPSHOT,)', 'org.apache.logging.log4j:log4j-core:2.24.3', 'org.apache.logging.log4j:log4j-api:2.24.3', diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index 1ded708f1..85dd93d3a 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -24,7 +24,7 @@ - 6.2.1 + 6.2.2 2.24.3 17 17 diff --git a/samples/springboot3/alt-pet-store/build.gradle b/samples/springboot3/alt-pet-store/build.gradle index f2d61db6b..f8013cbc0 100644 --- a/samples/springboot3/alt-pet-store/build.gradle +++ b/samples/springboot3/alt-pet-store/build.gradle @@ -9,7 +9,7 @@ repositories { dependencies { implementation ( - implementation('org.springframework.boot:spring-boot-starter-web:3.4.1') { + implementation('org.springframework.boot:spring-boot-starter-web:3.4.2') { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat' }, 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:[2.0-SNAPSHOT,)', diff --git a/samples/springboot3/alt-pet-store/pom.xml b/samples/springboot3/alt-pet-store/pom.xml index cf9a16f6c..e11af0428 100644 --- a/samples/springboot3/alt-pet-store/pom.xml +++ b/samples/springboot3/alt-pet-store/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 3.4.1 + 3.4.2 diff --git a/samples/springboot3/graphql-pet-store/pom.xml b/samples/springboot3/graphql-pet-store/pom.xml index c798d8fc3..e4c472f00 100644 --- a/samples/springboot3/graphql-pet-store/pom.xml +++ b/samples/springboot3/graphql-pet-store/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 3.4.1 + 3.4.2 diff --git a/samples/springboot3/pet-store-native/pom.xml b/samples/springboot3/pet-store-native/pom.xml index dc3ba9d75..d8ee426a5 100644 --- a/samples/springboot3/pet-store-native/pom.xml +++ b/samples/springboot3/pet-store-native/pom.xml @@ -6,7 +6,7 @@ org.springframework.boot spring-boot-starter-parent - 3.4.1 + 3.4.2 com.amazonaws.serverless.sample diff --git a/samples/springboot3/pet-store/build.gradle b/samples/springboot3/pet-store/build.gradle index f2d61db6b..f8013cbc0 100644 --- a/samples/springboot3/pet-store/build.gradle +++ b/samples/springboot3/pet-store/build.gradle @@ -9,7 +9,7 @@ repositories { dependencies { implementation ( - implementation('org.springframework.boot:spring-boot-starter-web:3.4.1') { + implementation('org.springframework.boot:spring-boot-starter-web:3.4.2') { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat' }, 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:[2.0-SNAPSHOT,)', diff --git a/samples/springboot3/pet-store/pom.xml b/samples/springboot3/pet-store/pom.xml index 89f585399..3a1571b3a 100644 --- a/samples/springboot3/pet-store/pom.xml +++ b/samples/springboot3/pet-store/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 3.4.1 + 3.4.2 From 817664191be456f53fd92e8c0a4e4b481ecae3ac Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Wed, 29 Jan 2025 14:18:04 +0100 Subject: [PATCH 775/888] fix: Request Parameters not picked up for v1 payload format with multivalue headers enabled (#1256) --- .../spring/AwsSpringHttpProcessingUtils.java | 12 +++-- .../AwsSpringHttpProcessingUtilsTests.java | 47 +++++++++++++++---- 2 files changed, 47 insertions(+), 12 deletions(-) diff --git a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringHttpProcessingUtils.java b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringHttpProcessingUtils.java index 2f547a32d..abcc56b26 100644 --- a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringHttpProcessingUtils.java +++ b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringHttpProcessingUtils.java @@ -5,10 +5,12 @@ import java.nio.charset.StandardCharsets; import java.nio.charset.UnsupportedCharsetException; import java.util.Base64; +import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; +import java.util.function.BiConsumer; import com.amazonaws.serverless.proxy.internal.HttpUtils; import org.apache.commons.io.Charsets; @@ -118,7 +120,11 @@ private static HttpServletRequest generateRequest1(String request, Context lambd ServerlessHttpServletRequest httpRequest = new ServerlessHttpServletRequest(servletContext, v1Request.getHttpMethod(), v1Request.getPath()); - populateQueryStringparameters(v1Request.getQueryStringParameters(), httpRequest); + populateQueryStringParameters(v1Request.getQueryStringParameters(), httpRequest); + if (v1Request.getMultiValueQueryStringParameters() != null) { + MultiValueMapAdapter queryStringParameters = new MultiValueMapAdapter(v1Request.getMultiValueQueryStringParameters()); + queryStringParameters.forEach((k, v) -> httpRequest.setParameter(k, StringUtils.collectionToCommaDelimitedString(v))); + } if (v1Request.getMultiValueHeaders() != null) { MultiValueMapAdapter headers = new MultiValueMapAdapter(v1Request.getMultiValueHeaders()); @@ -152,7 +158,7 @@ private static HttpServletRequest generateRequest2(String request, Context lambd ServerlessHttpServletRequest httpRequest = new ServerlessHttpServletRequest(servletContext, v2Request.getRequestContext().getHttp().getMethod(), v2Request.getRequestContext().getHttp().getPath()); - populateQueryStringparameters(v2Request.getQueryStringParameters(), httpRequest); + populateQueryStringParameters(v2Request.getQueryStringParameters(), httpRequest); v2Request.getHeaders().forEach(httpRequest::setHeader); @@ -172,7 +178,7 @@ private static HttpServletRequest generateRequest2(String request, Context lambd return httpRequest; } - private static void populateQueryStringparameters(Map requestParameters, ServerlessHttpServletRequest httpRequest) { + private static void populateQueryStringParameters(Map requestParameters, ServerlessHttpServletRequest httpRequest) { if (!CollectionUtils.isEmpty(requestParameters)) { for (Entry entry : requestParameters.entrySet()) { httpRequest.setParameter(entry.getKey(), entry.getValue()); diff --git a/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/AwsSpringHttpProcessingUtilsTests.java b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/AwsSpringHttpProcessingUtilsTests.java index a04361e7e..e3c91acf0 100644 --- a/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/AwsSpringHttpProcessingUtilsTests.java +++ b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/AwsSpringHttpProcessingUtilsTests.java @@ -79,15 +79,15 @@ public class AwsSpringHttpProcessingUtilsTests { + " },\n" + " \"queryStringParameters\": {\n" + " \"abc\": \"xyz\",\n" - + " \"foo\": \"baz\"\n" + + " \"parameter1\": \"value2\"\n" + " },\n" + " \"multiValueQueryStringParameters\": {\n" + " \"abc\": [\n" + " \"xyz\"\n" + " ],\n" - + " \"foo\": [\n" - + " \"bar\",\n" - + " \"baz\"\n" + + " \"parameter1\": [\n" + + " \"value1\",\n" + + " \"value2\"\n" + " ]\n" + " },\n" + " \"requestContext\": {\n" @@ -184,10 +184,35 @@ public class AwsSpringHttpProcessingUtilsTests { " }\n" + "}"; + private static final String ALB_EVENT = "{\n" + + " \"requestContext\": {\n" + + " \"elb\": {\n" + + " \"targetGroupArn\": \"arn:aws:elasticloadbalancing:region:123456789012:targetgroup/my-target-group/6d0ecf831eec9f09\"\n" + + " }\n" + + " },\n" + + " \"httpMethod\": \"POST\",\n" + + " \"path\": \"/async\",\n" + + " \"multiValueQueryStringParameters\": { \"parameter1\": [\"value1\", \"value2\"]},\n" + + " \"multiValueHeaders\": {\n" + + " \"accept\": [\"text/html,application/xhtml+xml\"],\n" + + " \"accept-language\": [\"en-US,en;q=0.8\"],\n" + + " \"content-type\": [\"text/plain\"],\n" + + " \"cookie\": [\"cookies\"],\n" + + " \"host\": [\"lambda-846800462-us-east-2.elb.amazonaws.com\"],\n" + + " \"User-Agent\": [\"curl/7.79.1\"],\n" + + " \"x-amzn-trace-id\": [\"Root=1-5bdb40ca-556d8b0c50dc66f0511bf520\"],\n" + + " \"x-forwarded-for\": [\"72.21.198.66\"],\n" + + " \"x-forwarded-port\": [\"443\"],\n" + + " \"x-forwarded-proto\": [\"https\"]\n" + + " },\n" + + " \"isBase64Encoded\": false,\n" + + " \"body\": \"request_body\"\n" + + "}"; + private final ObjectMapper mapper = new ObjectMapper(); public static Collection data() { - return Arrays.asList(new String[]{API_GATEWAY_EVENT, API_GATEWAY_EVENT_V2}); + return Arrays.asList(new String[]{API_GATEWAY_EVENT, API_GATEWAY_EVENT_V2, ALB_EVENT}); } @MethodSource("data") @@ -197,10 +222,17 @@ public void validateHttpServletRequestGenerationWithInputStream(String jsonEvent ServerlessServletContext servletContext = new ServerlessServletContext(); HttpServletRequest request = AwsSpringHttpProcessingUtils.generateHttpServletRequest(inputStream, null, servletContext, mapper); // spot check some headers + assertRequest(request); + } + + private static void assertRequest(HttpServletRequest request) { assertEquals("curl/7.79.1", request.getHeader("User-Agent")); assertEquals("443", request.getHeader("X-Forwarded-Port")); assertEquals("POST", request.getMethod()); assertEquals("/async", request.getRequestURI()); + assertEquals("value1,value2", request.getParameter("parameter1")); + // to be fixed: assertArrayEquals(new String[]{"value1","value2"}, request.getParameterValues("parameter1")); + } @MethodSource("data") @@ -209,10 +241,7 @@ public void validateHttpServletRequestGenerationWithJson(String jsonEvent) { ServerlessServletContext servletContext = new ServerlessServletContext(); HttpServletRequest request = AwsSpringHttpProcessingUtils.generateHttpServletRequest(jsonEvent, null, servletContext, mapper); // spot check some headers - assertEquals("curl/7.79.1", request.getHeader("User-Agent")); - assertEquals("443", request.getHeader("X-Forwarded-Port")); - assertEquals("POST", request.getMethod()); - assertEquals("/async", request.getRequestURI()); + assertRequest(request); } @MethodSource("data") From 28fd1c17fc83a074a3a990cbd993de3abcb178ab Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Wed, 29 Jan 2025 14:19:35 +0100 Subject: [PATCH 776/888] fix: Request Parameters not picked up for v1 payload format with multivalue headers enabled - removed unused imports (#1256) --- .../serverless/proxy/spring/AwsSpringHttpProcessingUtils.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringHttpProcessingUtils.java b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringHttpProcessingUtils.java index abcc56b26..a585feb81 100644 --- a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringHttpProcessingUtils.java +++ b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringHttpProcessingUtils.java @@ -3,17 +3,13 @@ import java.io.InputStream; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; -import java.nio.charset.UnsupportedCharsetException; import java.util.Base64; -import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; -import java.util.function.BiConsumer; import com.amazonaws.serverless.proxy.internal.HttpUtils; -import org.apache.commons.io.Charsets; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.cloud.function.serverless.web.ServerlessHttpServletRequest; From e7d00bcbc2652fc897844e0402b8311932c3e02e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 29 Jan 2025 13:35:58 +0000 Subject: [PATCH 777/888] chore(deps): bump commons-codec:commons-codec from 1.17.2 to 1.18.0 Bumps [commons-codec:commons-codec](https://github.com/apache/commons-codec) from 1.17.2 to 1.18.0. - [Changelog](https://github.com/apache/commons-codec/blob/master/RELEASE-NOTES.txt) - [Commits](https://github.com/apache/commons-codec/compare/rel/commons-codec-1.17.2...rel/commons-codec-1.18.0) --- updated-dependencies: - dependency-name: commons-codec:commons-codec dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- aws-serverless-java-container-jersey/pom.xml | 2 +- aws-serverless-java-container-spring/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index c14b1e1e3..80e99330d 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -64,7 +64,7 @@ commons-codec commons-codec - 1.17.2 + 1.18.0 test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index c11dd3ee5..db20a7d4a 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -53,7 +53,7 @@ commons-codec commons-codec - 1.17.2 + 1.18.0 test From 855d31a962b57243b832447963f1aad3de9e8881 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Feb 2025 05:00:20 +0000 Subject: [PATCH 778/888] chore(deps): bump org.owasp:dependency-check-maven from 12.0.1 to 12.0.2 Bumps [org.owasp:dependency-check-maven](https://github.com/jeremylong/DependencyCheck) from 12.0.1 to 12.0.2. - [Release notes](https://github.com/jeremylong/DependencyCheck/releases) - [Changelog](https://github.com/jeremylong/DependencyCheck/blob/main/CHANGELOG.md) - [Commits](https://github.com/jeremylong/DependencyCheck/compare/v12.0.1...v12.0.2) --- updated-dependencies: - dependency-name: org.owasp:dependency-check-maven dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 04760f003..346ba57e0 100644 --- a/pom.xml +++ b/pom.xml @@ -77,7 +77,7 @@ 0.7 - 12.0.1 + 12.0.2 2.18.2 2.0.16 5.11.4 From ae43d58535e8b01bb99cc9d5eca62643a9daf5ea Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Feb 2025 05:00:30 +0000 Subject: [PATCH 779/888] chore(deps-dev): bump jakarta.validation:jakarta.validation-api Bumps [jakarta.validation:jakarta.validation-api](https://github.com/jakartaee/validation) from 3.0.2 to 3.1.1. - [Release notes](https://github.com/jakartaee/validation/releases) - [Commits](https://github.com/jakartaee/validation/compare/3.0.2...3.1.1) --- updated-dependencies: - dependency-name: jakarta.validation:jakarta.validation-api dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- aws-serverless-java-container-springboot3/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index 222126adb..00f356e42 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -173,7 +173,7 @@ jakarta.validation jakarta.validation-api - 3.0.2 + 3.1.1 test From 8e11c963627f054a895495205af8b56105ed90e0 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Mon, 3 Feb 2025 06:32:32 +0100 Subject: [PATCH 780/888] chore(deps): update Apache HttpClient to 5.4.2 --- .github/dependabot.yml | 6 ++++++ .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- pom.xml | 2 +- 8 files changed, 13 insertions(+), 7 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index d82be62de..acc835c6f 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -30,6 +30,9 @@ updates: maven-install-plugin: patterns: - "org.apache.maven.plugins:maven-install-plugin" + httpclient: + patterns: + - "org.apache.httpcomponents.client5:*" schedule: interval: "weekly" open-pull-requests-limit: 20 @@ -52,5 +55,8 @@ updates: jackson: patterns: - "com.fasterxml.jackson.*:*" + httpclient: + patterns: + - "org.apache.httpcomponents.client5:*" schedule: interval: "weekly" \ No newline at end of file diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle index 29ef10b04..7160d4a9c 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle @@ -22,7 +22,7 @@ dependencies { } testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") - testImplementation("org.apache.httpcomponents.client5:httpclient5:5.4.1") + testImplementation("org.apache.httpcomponents.client5:httpclient5:5.4.2") testImplementation(platform("org.junit:junit-bom:5.11.4")) testImplementation("org.junit.jupiter:junit-jupiter") } diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml index 2d9b45363..39db2f49e 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml @@ -37,7 +37,7 @@ org.apache.httpcomponents.client5 httpclient5 - 5.4.1 + 5.4.2 test diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index da8ea168f..028d3a03e 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -18,7 +18,7 @@ dependencies { ) testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") - testImplementation("org.apache.httpcomponents.client5:httpclient5:5.4.1") + testImplementation("org.apache.httpcomponents.client5:httpclient5:5.4.2") testImplementation(platform("org.junit:junit-bom:5.11.4")) testImplementation("org.junit.jupiter:junit-jupiter") } diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index 0320ee041..890221ffb 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -38,7 +38,7 @@ org.apache.httpcomponents.client5 httpclient5 - 5.4.1 + 5.4.2 test diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle index e8e334e2e..c6cb018eb 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle @@ -14,7 +14,7 @@ dependencies { ) testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") - testImplementation("org.apache.httpcomponents.client5:httpclient5:5.4.1") + testImplementation("org.apache.httpcomponents.client5:httpclient5:5.4.2") testImplementation(platform("org.junit:junit-bom:5.11.4")) testImplementation("org.junit.jupiter:junit-jupiter") } diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml index d0a274282..be6b7b3fb 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml @@ -41,7 +41,7 @@ org.apache.httpcomponents.client5 httpclient5 - 5.4.1 + 5.4.2 test diff --git a/pom.xml b/pom.xml index 346ba57e0..84296f74c 100644 --- a/pom.xml +++ b/pom.xml @@ -119,7 +119,7 @@ org.apache.httpcomponents.client5 httpclient5 - 5.4.1 + 5.4.2 test From 695dd06b8d0ff6d1686a2018a9c13ca524453bc8 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Tue, 4 Feb 2025 06:28:58 +0100 Subject: [PATCH 781/888] fix: Request Parameters not picked up for v1 payload format with multivalue headers enabled (#1256) --- .../spring/AwsSpringHttpProcessingUtils.java | 7 +++++-- .../AwsSpringHttpProcessingUtilsTests.java | 17 +++++++++++------ 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringHttpProcessingUtils.java b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringHttpProcessingUtils.java index a585feb81..69e603348 100644 --- a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringHttpProcessingUtils.java +++ b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringHttpProcessingUtils.java @@ -119,7 +119,9 @@ private static HttpServletRequest generateRequest1(String request, Context lambd populateQueryStringParameters(v1Request.getQueryStringParameters(), httpRequest); if (v1Request.getMultiValueQueryStringParameters() != null) { MultiValueMapAdapter queryStringParameters = new MultiValueMapAdapter(v1Request.getMultiValueQueryStringParameters()); - queryStringParameters.forEach((k, v) -> httpRequest.setParameter(k, StringUtils.collectionToCommaDelimitedString(v))); + queryStringParameters.forEach((k, v) -> { + httpRequest.setParameter(k, v.toArray(new String[2])); + }); } if (v1Request.getMultiValueHeaders() != null) { @@ -155,7 +157,7 @@ private static HttpServletRequest generateRequest2(String request, Context lambd ServerlessHttpServletRequest httpRequest = new ServerlessHttpServletRequest(servletContext, v2Request.getRequestContext().getHttp().getMethod(), v2Request.getRequestContext().getHttp().getPath()); populateQueryStringParameters(v2Request.getQueryStringParameters(), httpRequest); - + v2Request.getHeaders().forEach(httpRequest::setHeader); populateContentAndContentType( @@ -177,6 +179,7 @@ private static HttpServletRequest generateRequest2(String request, Context lambd private static void populateQueryStringParameters(Map requestParameters, ServerlessHttpServletRequest httpRequest) { if (!CollectionUtils.isEmpty(requestParameters)) { for (Entry entry : requestParameters.entrySet()) { + // fix according to parseRawQueryString httpRequest.setParameter(entry.getKey(), entry.getValue()); } } diff --git a/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/AwsSpringHttpProcessingUtilsTests.java b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/AwsSpringHttpProcessingUtilsTests.java index e3c91acf0..241e86805 100644 --- a/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/AwsSpringHttpProcessingUtilsTests.java +++ b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/AwsSpringHttpProcessingUtilsTests.java @@ -1,12 +1,12 @@ package com.amazonaws.serverless.proxy.spring; -import static org.junit.jupiter.api.Assertions.assertEquals; - import java.io.ByteArrayInputStream; import java.nio.charset.StandardCharsets; import java.util.Arrays; import java.util.Collection; +import com.amazonaws.serverless.proxy.RequestReader; +import com.amazonaws.serverless.proxy.model.HttpApiV2ProxyRequest; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; import org.springframework.boot.SpringApplication; @@ -30,6 +30,8 @@ import jakarta.servlet.http.HttpServletRequest; +import static org.junit.jupiter.api.Assertions.*; + public class AwsSpringHttpProcessingUtilsTests { private static String API_GATEWAY_EVENT = "{\n" @@ -221,7 +223,6 @@ public void validateHttpServletRequestGenerationWithInputStream(String jsonEvent ByteArrayInputStream inputStream = new ByteArrayInputStream(jsonEvent.getBytes(StandardCharsets.UTF_8)); ServerlessServletContext servletContext = new ServerlessServletContext(); HttpServletRequest request = AwsSpringHttpProcessingUtils.generateHttpServletRequest(inputStream, null, servletContext, mapper); - // spot check some headers assertRequest(request); } @@ -230,9 +231,13 @@ private static void assertRequest(HttpServletRequest request) { assertEquals("443", request.getHeader("X-Forwarded-Port")); assertEquals("POST", request.getMethod()); assertEquals("/async", request.getRequestURI()); - assertEquals("value1,value2", request.getParameter("parameter1")); - // to be fixed: assertArrayEquals(new String[]{"value1","value2"}, request.getParameterValues("parameter1")); - + assertNotNull(request.getServletContext()); + // parameter handling for 2.0 requests is currently not spec compliant and to be fixed in future version + // see also GitHub issue + if (!(request.getAttribute(RequestReader.HTTP_API_EVENT_PROPERTY) instanceof HttpApiV2ProxyRequest)) { + assertEquals("value1", request.getParameter("parameter1")); + assertArrayEquals(new String[]{"value1", "value2"}, request.getParameterValues("parameter1")); + } } @MethodSource("data") From f37fa4e84044f787957546e2d028e941c33fd7fa Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Tue, 4 Feb 2025 06:52:14 +0100 Subject: [PATCH 782/888] fix: Request Parameters not picked up for v1 payload format with multivalue headers enabled (#1256) --- .../proxy/spring/AwsSpringHttpProcessingUtils.java | 2 +- .../proxy/spring/AwsSpringHttpProcessingUtilsTests.java | 2 +- .../SpringDelegatingLambdaContainerHandlerTests.java | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringHttpProcessingUtils.java b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringHttpProcessingUtils.java index 69e603348..09649b31a 100644 --- a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringHttpProcessingUtils.java +++ b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/AwsSpringHttpProcessingUtils.java @@ -120,7 +120,7 @@ private static HttpServletRequest generateRequest1(String request, Context lambd if (v1Request.getMultiValueQueryStringParameters() != null) { MultiValueMapAdapter queryStringParameters = new MultiValueMapAdapter(v1Request.getMultiValueQueryStringParameters()); queryStringParameters.forEach((k, v) -> { - httpRequest.setParameter(k, v.toArray(new String[2])); + httpRequest.setParameter(k, v.toArray(new String[0])); }); } diff --git a/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/AwsSpringHttpProcessingUtilsTests.java b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/AwsSpringHttpProcessingUtilsTests.java index 241e86805..fa0e92e98 100644 --- a/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/AwsSpringHttpProcessingUtilsTests.java +++ b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/AwsSpringHttpProcessingUtilsTests.java @@ -233,7 +233,7 @@ private static void assertRequest(HttpServletRequest request) { assertEquals("/async", request.getRequestURI()); assertNotNull(request.getServletContext()); // parameter handling for 2.0 requests is currently not spec compliant and to be fixed in future version - // see also GitHub issue + // see also GitHub issue https://github.com/aws/serverless-java-container/issues/1278 if (!(request.getAttribute(RequestReader.HTTP_API_EVENT_PROPERTY) instanceof HttpApiV2ProxyRequest)) { assertEquals("value1", request.getParameter("parameter1")); assertArrayEquals(new String[]{"value1", "value2"}, request.getParameterValues("parameter1")); diff --git a/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/SpringDelegatingLambdaContainerHandlerTests.java b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/SpringDelegatingLambdaContainerHandlerTests.java index 61957fe24..02ef21d9e 100644 --- a/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/SpringDelegatingLambdaContainerHandlerTests.java +++ b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/SpringDelegatingLambdaContainerHandlerTests.java @@ -215,10 +215,10 @@ public void validateComplesrequest(String jsonEvent) throws Exception { handler.handleRequest(targetStream, output, null); Map result = mapper.readValue(output.toString(StandardCharsets.UTF_8), Map.class); assertEquals(200, result.get("statusCode")); - String[] respponseBody = ((String) result.get("body")).split("/"); - assertEquals("male", respponseBody[0]); - assertEquals("24", respponseBody[1]); - assertEquals("Ricky", respponseBody[2]); + String[] responseBody = ((String) result.get("body")).split("/"); + assertEquals("male", responseBody[0]); + assertEquals("24", responseBody[1]); + assertEquals("Ricky", responseBody[2]); } @MethodSource("data") From aa4b9725e0c45084e4f3338c00d57e1621efcdef Mon Sep 17 00:00:00 2001 From: deki Date: Tue, 4 Feb 2025 06:20:15 +0000 Subject: [PATCH 783/888] chore: release - prepare release aws-serverless-java-container-2.1.2 --- aws-serverless-java-container-core/pom.xml | 4 ++-- aws-serverless-java-container-jersey/pom.xml | 8 ++++---- aws-serverless-java-container-spring/pom.xml | 8 ++++---- aws-serverless-java-container-springboot3/pom.xml | 8 ++++---- aws-serverless-jersey-archetype/pom.xml | 6 +++--- aws-serverless-spring-archetype/pom.xml | 6 +++--- aws-serverless-springboot3-archetype/pom.xml | 6 +++--- pom.xml | 4 ++-- 8 files changed, 25 insertions(+), 25 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 07d60f848..082b097d2 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Core Allows Java applications written for a servlet container to run in AWS Lambda https://aws.amazon.com/lambda - 2.2.0-SNAPSHOT + 2.1.2 com.amazonaws.serverless aws-serverless-java-container - 2.2.0-SNAPSHOT + 2.1.2 .. diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index 80e99330d..622dd9b5c 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Jersey implementation Allows Java applications written for Jersey to run in AWS Lambda https://aws.amazon.com/lambda - 2.2.0-SNAPSHOT + 2.1.2 com.amazonaws.serverless aws-serverless-java-container - 2.2.0-SNAPSHOT + 2.1.2 .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.2.0-SNAPSHOT + 2.1.2 com.fasterxml.jackson.core @@ -35,7 +35,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.2.0-SNAPSHOT + 2.1.2 tests test-jar test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index db20a7d4a..eb235e8db 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spring implementation Allows Java applications written for the Spring framework to run in AWS Lambda https://aws.amazon.com/lambda - 2.2.0-SNAPSHOT + 2.1.2 com.amazonaws.serverless aws-serverless-java-container - 2.2.0-SNAPSHOT + 2.1.2 .. @@ -25,12 +25,12 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.2.0-SNAPSHOT + 2.1.2 com.amazonaws.serverless aws-serverless-java-container-core - 2.2.0-SNAPSHOT + 2.1.2 tests test-jar test diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index 222126adb..1b89f5f60 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -3,7 +3,7 @@ aws-serverless-java-container com.amazonaws.serverless - 2.2.0-SNAPSHOT + 2.1.2 4.0.0 @@ -12,7 +12,7 @@ AWS Serverless Java container support - SpringBoot 3 implementation Allows Java applications written for SpringBoot 3 to run in AWS Lambda https://aws.amazon.com/lambda - 2.2.0-SNAPSHOT + 2.1.2 6.2.2 @@ -30,12 +30,12 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.2.0-SNAPSHOT + 2.1.2 com.amazonaws.serverless aws-serverless-java-container-core - 2.2.0-SNAPSHOT + 2.1.2 tests test-jar test diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index 412459c41..35ad5657a 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.2.0-SNAPSHOT + 2.1.2 com.amazonaws.serverless.archetypes aws-serverless-jersey-archetype - 2.2.0-SNAPSHOT + 2.1.2 maven-archetype https://github.com/aws/serverless-java-container.git - HEAD + aws-serverless-java-container-2.1.2 diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index 8b95c5332..06cd2e68f 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.2.0-SNAPSHOT + 2.1.2 com.amazonaws.serverless.archetypes aws-serverless-spring-archetype - 2.2.0-SNAPSHOT + 2.1.2 maven-archetype https://github.com/aws/serverless-java-container.git - HEAD + aws-serverless-java-container-2.1.2 diff --git a/aws-serverless-springboot3-archetype/pom.xml b/aws-serverless-springboot3-archetype/pom.xml index 89469c2e4..9b52b1961 100644 --- a/aws-serverless-springboot3-archetype/pom.xml +++ b/aws-serverless-springboot3-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.2.0-SNAPSHOT + 2.1.2 com.amazonaws.serverless.archetypes aws-serverless-springboot3-archetype - 2.2.0-SNAPSHOT + 2.1.2 maven-archetype https://github.com/aws/serverless-java-container.git - HEAD + aws-serverless-java-container-2.1.2 diff --git a/pom.xml b/pom.xml index 84296f74c..167e2419b 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazonaws.serverless aws-serverless-java-container pom - 2.2.0-SNAPSHOT + 2.1.2 AWS Serverless Java container A Java framework to run Spring, Spring Boot, Jersey, Spark, and Struts applications inside AWS Lambda https://github.com/aws/serverless-java-container @@ -37,7 +37,7 @@ https://github.com/aws/serverless-java-container scm:git:https://github.com/aws/serverless-java-container.git - HEAD + aws-serverless-java-container-2.1.2 From c1e60ebe87f9fa057416e874c9d7aa286109864a Mon Sep 17 00:00:00 2001 From: deki Date: Tue, 4 Feb 2025 06:20:17 +0000 Subject: [PATCH 784/888] chore: release - prepare for next development iteration --- aws-serverless-java-container-core/pom.xml | 4 ++-- aws-serverless-java-container-jersey/pom.xml | 8 ++++---- aws-serverless-java-container-spring/pom.xml | 8 ++++---- aws-serverless-java-container-springboot3/pom.xml | 8 ++++---- aws-serverless-jersey-archetype/pom.xml | 6 +++--- aws-serverless-spring-archetype/pom.xml | 6 +++--- aws-serverless-springboot3-archetype/pom.xml | 6 +++--- pom.xml | 4 ++-- 8 files changed, 25 insertions(+), 25 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 082b097d2..07d60f848 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Core Allows Java applications written for a servlet container to run in AWS Lambda https://aws.amazon.com/lambda - 2.1.2 + 2.2.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 2.1.2 + 2.2.0-SNAPSHOT .. diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index 622dd9b5c..80e99330d 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Jersey implementation Allows Java applications written for Jersey to run in AWS Lambda https://aws.amazon.com/lambda - 2.1.2 + 2.2.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 2.1.2 + 2.2.0-SNAPSHOT .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.1.2 + 2.2.0-SNAPSHOT com.fasterxml.jackson.core @@ -35,7 +35,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.1.2 + 2.2.0-SNAPSHOT tests test-jar test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index eb235e8db..db20a7d4a 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spring implementation Allows Java applications written for the Spring framework to run in AWS Lambda https://aws.amazon.com/lambda - 2.1.2 + 2.2.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 2.1.2 + 2.2.0-SNAPSHOT .. @@ -25,12 +25,12 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.1.2 + 2.2.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container-core - 2.1.2 + 2.2.0-SNAPSHOT tests test-jar test diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index 1b89f5f60..222126adb 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -3,7 +3,7 @@ aws-serverless-java-container com.amazonaws.serverless - 2.1.2 + 2.2.0-SNAPSHOT 4.0.0 @@ -12,7 +12,7 @@ AWS Serverless Java container support - SpringBoot 3 implementation Allows Java applications written for SpringBoot 3 to run in AWS Lambda https://aws.amazon.com/lambda - 2.1.2 + 2.2.0-SNAPSHOT 6.2.2 @@ -30,12 +30,12 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.1.2 + 2.2.0-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container-core - 2.1.2 + 2.2.0-SNAPSHOT tests test-jar test diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index 35ad5657a..412459c41 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.1.2 + 2.2.0-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-jersey-archetype - 2.1.2 + 2.2.0-SNAPSHOT maven-archetype https://github.com/aws/serverless-java-container.git - aws-serverless-java-container-2.1.2 + HEAD diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index 06cd2e68f..8b95c5332 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.1.2 + 2.2.0-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-spring-archetype - 2.1.2 + 2.2.0-SNAPSHOT maven-archetype https://github.com/aws/serverless-java-container.git - aws-serverless-java-container-2.1.2 + HEAD diff --git a/aws-serverless-springboot3-archetype/pom.xml b/aws-serverless-springboot3-archetype/pom.xml index 9b52b1961..89469c2e4 100644 --- a/aws-serverless-springboot3-archetype/pom.xml +++ b/aws-serverless-springboot3-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.1.2 + 2.2.0-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-springboot3-archetype - 2.1.2 + 2.2.0-SNAPSHOT maven-archetype https://github.com/aws/serverless-java-container.git - aws-serverless-java-container-2.1.2 + HEAD diff --git a/pom.xml b/pom.xml index 167e2419b..84296f74c 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazonaws.serverless aws-serverless-java-container pom - 2.1.2 + 2.2.0-SNAPSHOT AWS Serverless Java container A Java framework to run Spring, Spring Boot, Jersey, Spark, and Struts applications inside AWS Lambda https://github.com/aws/serverless-java-container @@ -37,7 +37,7 @@ https://github.com/aws/serverless-java-container scm:git:https://github.com/aws/serverless-java-container.git - aws-serverless-java-container-2.1.2 + HEAD From 0a53702d7f2424af902d31ff2cca615661e6139c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 Feb 2025 04:53:19 +0000 Subject: [PATCH 785/888] chore(deps): bump com.github.spotbugs:spotbugs-annotations Bumps [com.github.spotbugs:spotbugs-annotations](https://github.com/spotbugs/spotbugs) from 4.9.0 to 4.9.1. - [Release notes](https://github.com/spotbugs/spotbugs/releases) - [Changelog](https://github.com/spotbugs/spotbugs/blob/master/CHANGELOG.md) - [Commits](https://github.com/spotbugs/spotbugs/compare/4.9.0...4.9.1) --- updated-dependencies: - dependency-name: com.github.spotbugs:spotbugs-annotations dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 84296f74c..f1a94ebd7 100644 --- a/pom.xml +++ b/pom.xml @@ -140,7 +140,7 @@ com.github.spotbugs spotbugs-annotations - 4.9.0 + 4.9.1 provided From 469f174ec61dd6ca30c9f4fda0a98ff75eeaf9b3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 Feb 2025 04:53:34 +0000 Subject: [PATCH 786/888] chore(deps): bump com.github.spotbugs:spotbugs-annotations Bumps [com.github.spotbugs:spotbugs-annotations](https://github.com/spotbugs/spotbugs) from 4.9.0 to 4.9.1. - [Release notes](https://github.com/spotbugs/spotbugs/releases) - [Changelog](https://github.com/spotbugs/spotbugs/blob/master/CHANGELOG.md) - [Commits](https://github.com/spotbugs/spotbugs/compare/4.9.0...4.9.1) --- updated-dependencies: - dependency-name: com.github.spotbugs:spotbugs-annotations dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 84296f74c..f1a94ebd7 100644 --- a/pom.xml +++ b/pom.xml @@ -140,7 +140,7 @@ com.github.spotbugs spotbugs-annotations - 4.9.0 + 4.9.1 provided From 69ebbcfe99c587978b5841c831799ea010416e87 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 Feb 2025 04:53:44 +0000 Subject: [PATCH 787/888] chore(deps): bump com.github.spotbugs:spotbugs-annotations Bumps [com.github.spotbugs:spotbugs-annotations](https://github.com/spotbugs/spotbugs) from 4.9.0 to 4.9.1. - [Release notes](https://github.com/spotbugs/spotbugs/releases) - [Changelog](https://github.com/spotbugs/spotbugs/blob/master/CHANGELOG.md) - [Commits](https://github.com/spotbugs/spotbugs/compare/4.9.0...4.9.1) --- updated-dependencies: - dependency-name: com.github.spotbugs:spotbugs-annotations dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 84296f74c..f1a94ebd7 100644 --- a/pom.xml +++ b/pom.xml @@ -140,7 +140,7 @@ com.github.spotbugs spotbugs-annotations - 4.9.0 + 4.9.1 provided From 37f196f45116edd115160f69bb39378a56f1f546 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 Feb 2025 04:53:50 +0000 Subject: [PATCH 788/888] chore(deps): bump com.github.spotbugs:spotbugs-annotations Bumps [com.github.spotbugs:spotbugs-annotations](https://github.com/spotbugs/spotbugs) from 4.9.0 to 4.9.1. - [Release notes](https://github.com/spotbugs/spotbugs/releases) - [Changelog](https://github.com/spotbugs/spotbugs/blob/master/CHANGELOG.md) - [Commits](https://github.com/spotbugs/spotbugs/compare/4.9.0...4.9.1) --- updated-dependencies: - dependency-name: com.github.spotbugs:spotbugs-annotations dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 84296f74c..f1a94ebd7 100644 --- a/pom.xml +++ b/pom.xml @@ -140,7 +140,7 @@ com.github.spotbugs spotbugs-annotations - 4.9.0 + 4.9.1 provided From ca4c143fe2092fb73695d13596e2add70040ca32 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 Feb 2025 04:53:56 +0000 Subject: [PATCH 789/888] chore(deps): bump com.github.spotbugs:spotbugs-annotations Bumps [com.github.spotbugs:spotbugs-annotations](https://github.com/spotbugs/spotbugs) from 4.9.0 to 4.9.1. - [Release notes](https://github.com/spotbugs/spotbugs/releases) - [Changelog](https://github.com/spotbugs/spotbugs/blob/master/CHANGELOG.md) - [Commits](https://github.com/spotbugs/spotbugs/compare/4.9.0...4.9.1) --- updated-dependencies: - dependency-name: com.github.spotbugs:spotbugs-annotations dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 84296f74c..f1a94ebd7 100644 --- a/pom.xml +++ b/pom.xml @@ -140,7 +140,7 @@ com.github.spotbugs spotbugs-annotations - 4.9.0 + 4.9.1 provided From 8591e21c20ca55f341b3af902eb995690f3c1d95 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 Feb 2025 04:54:16 +0000 Subject: [PATCH 790/888] chore(deps): bump com.github.spotbugs:spotbugs-annotations Bumps [com.github.spotbugs:spotbugs-annotations](https://github.com/spotbugs/spotbugs) from 4.9.0 to 4.9.1. - [Release notes](https://github.com/spotbugs/spotbugs/releases) - [Changelog](https://github.com/spotbugs/spotbugs/blob/master/CHANGELOG.md) - [Commits](https://github.com/spotbugs/spotbugs/compare/4.9.0...4.9.1) --- updated-dependencies: - dependency-name: com.github.spotbugs:spotbugs-annotations dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 84296f74c..f1a94ebd7 100644 --- a/pom.xml +++ b/pom.xml @@ -140,7 +140,7 @@ com.github.spotbugs spotbugs-annotations - 4.9.0 + 4.9.1 provided From 7ecbd74add0dde816b84e754862142dcc5e59c0c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 Feb 2025 04:54:21 +0000 Subject: [PATCH 791/888] chore(deps): bump com.github.spotbugs:spotbugs-annotations Bumps [com.github.spotbugs:spotbugs-annotations](https://github.com/spotbugs/spotbugs) from 4.9.0 to 4.9.1. - [Release notes](https://github.com/spotbugs/spotbugs/releases) - [Changelog](https://github.com/spotbugs/spotbugs/blob/master/CHANGELOG.md) - [Commits](https://github.com/spotbugs/spotbugs/compare/4.9.0...4.9.1) --- updated-dependencies: - dependency-name: com.github.spotbugs:spotbugs-annotations dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 84296f74c..f1a94ebd7 100644 --- a/pom.xml +++ b/pom.xml @@ -140,7 +140,7 @@ com.github.spotbugs spotbugs-annotations - 4.9.0 + 4.9.1 provided From eb73394e79e51bdbb0bfc2ffca176a02e362f369 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 Feb 2025 04:54:34 +0000 Subject: [PATCH 792/888] chore(deps): bump com.github.spotbugs:spotbugs-annotations Bumps [com.github.spotbugs:spotbugs-annotations](https://github.com/spotbugs/spotbugs) from 4.9.0 to 4.9.1. - [Release notes](https://github.com/spotbugs/spotbugs/releases) - [Changelog](https://github.com/spotbugs/spotbugs/blob/master/CHANGELOG.md) - [Commits](https://github.com/spotbugs/spotbugs/compare/4.9.0...4.9.1) --- updated-dependencies: - dependency-name: com.github.spotbugs:spotbugs-annotations dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 84296f74c..f1a94ebd7 100644 --- a/pom.xml +++ b/pom.xml @@ -140,7 +140,7 @@ com.github.spotbugs spotbugs-annotations - 4.9.0 + 4.9.1 provided From 4b5a6b43845429b391d2cb3fcb43c3802943c717 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 16 Feb 2025 08:33:25 +0000 Subject: [PATCH 793/888] chore(deps): bump com.github.spotbugs:spotbugs-maven-plugin Bumps [com.github.spotbugs:spotbugs-maven-plugin](https://github.com/spotbugs/spotbugs-maven-plugin) from 4.8.6.6 to 4.9.1.0. - [Release notes](https://github.com/spotbugs/spotbugs-maven-plugin/releases) - [Commits](https://github.com/spotbugs/spotbugs-maven-plugin/compare/spotbugs-maven-plugin-4.8.6.6...spotbugs-maven-plugin-4.9.1.0) --- updated-dependencies: - dependency-name: com.github.spotbugs:spotbugs-maven-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index f1a94ebd7..f9e17538e 100644 --- a/pom.xml +++ b/pom.xml @@ -249,7 +249,7 @@ com.github.spotbugs spotbugs-maven-plugin - 4.8.6.6 + 4.9.1.0 com.amazonaws.serverless.sample diff --git a/samples/springboot3/pet-store/build.gradle b/samples/springboot3/pet-store/build.gradle index f8013cbc0..c5a667267 100644 --- a/samples/springboot3/pet-store/build.gradle +++ b/samples/springboot3/pet-store/build.gradle @@ -9,7 +9,7 @@ repositories { dependencies { implementation ( - implementation('org.springframework.boot:spring-boot-starter-web:3.4.2') { + implementation('org.springframework.boot:spring-boot-starter-web:3.4.3') { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat' }, 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:[2.0-SNAPSHOT,)', diff --git a/samples/springboot3/pet-store/pom.xml b/samples/springboot3/pet-store/pom.xml index 3a1571b3a..05351f0a4 100644 --- a/samples/springboot3/pet-store/pom.xml +++ b/samples/springboot3/pet-store/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 3.4.2 + 3.4.3 From f4e54098b11402b8dde384873a6b5a237e93320e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 Feb 2025 04:53:50 +0000 Subject: [PATCH 798/888] chore(deps): bump org.apache.maven.plugins:maven-compiler-plugin Bumps [org.apache.maven.plugins:maven-compiler-plugin](https://github.com/apache/maven-compiler-plugin) from 3.13.0 to 3.14.0. - [Release notes](https://github.com/apache/maven-compiler-plugin/releases) - [Commits](https://github.com/apache/maven-compiler-plugin/compare/maven-compiler-plugin-3.13.0...maven-compiler-plugin-3.14.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-compiler-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 1ccf270ea..8f07c4f6c 100644 --- a/pom.xml +++ b/pom.xml @@ -190,7 +190,7 @@ org.apache.maven.plugins maven-compiler-plugin - 3.13.0 + 3.14.0 1.8 1.8 From 725e470e9ce72d7276cc7aee17780c91405775bd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 Feb 2025 04:54:34 +0000 Subject: [PATCH 799/888] chore(deps): bump org.apache.maven.plugins:maven-compiler-plugin Bumps [org.apache.maven.plugins:maven-compiler-plugin](https://github.com/apache/maven-compiler-plugin) from 3.13.0 to 3.14.0. - [Release notes](https://github.com/apache/maven-compiler-plugin/releases) - [Commits](https://github.com/apache/maven-compiler-plugin/compare/maven-compiler-plugin-3.13.0...maven-compiler-plugin-3.14.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-compiler-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 1ccf270ea..8f07c4f6c 100644 --- a/pom.xml +++ b/pom.xml @@ -190,7 +190,7 @@ org.apache.maven.plugins maven-compiler-plugin - 3.13.0 + 3.14.0 1.8 1.8 From d07d1ac5bf645c8503893bbcaed3830bd4630cf5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 Feb 2025 04:54:52 +0000 Subject: [PATCH 800/888] chore(deps): bump org.apache.maven.plugins:maven-compiler-plugin Bumps [org.apache.maven.plugins:maven-compiler-plugin](https://github.com/apache/maven-compiler-plugin) from 3.13.0 to 3.14.0. - [Release notes](https://github.com/apache/maven-compiler-plugin/releases) - [Commits](https://github.com/apache/maven-compiler-plugin/compare/maven-compiler-plugin-3.13.0...maven-compiler-plugin-3.14.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-compiler-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 1ccf270ea..8f07c4f6c 100644 --- a/pom.xml +++ b/pom.xml @@ -190,7 +190,7 @@ org.apache.maven.plugins maven-compiler-plugin - 3.13.0 + 3.14.0 1.8 1.8 From 04b536ae6a0d59dc1ff44ad138e6576935f0fdbf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 Feb 2025 04:54:59 +0000 Subject: [PATCH 801/888] chore(deps): bump org.apache.maven.plugins:maven-compiler-plugin Bumps [org.apache.maven.plugins:maven-compiler-plugin](https://github.com/apache/maven-compiler-plugin) from 3.13.0 to 3.14.0. - [Release notes](https://github.com/apache/maven-compiler-plugin/releases) - [Commits](https://github.com/apache/maven-compiler-plugin/compare/maven-compiler-plugin-3.13.0...maven-compiler-plugin-3.14.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-compiler-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 1ccf270ea..8f07c4f6c 100644 --- a/pom.xml +++ b/pom.xml @@ -190,7 +190,7 @@ org.apache.maven.plugins maven-compiler-plugin - 3.13.0 + 3.14.0 1.8 1.8 From 09d80072f3ba2f2636e344b57646ef4bdaa9bc66 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Mar 2025 04:35:55 +0000 Subject: [PATCH 802/888] chore(deps): bump the maven-install-plugin group across 13 directories with 1 update Bumps the maven-install-plugin group with 1 update in the / directory: [org.apache.maven.plugins:maven-install-plugin](https://github.com/apache/maven-install-plugin). Bumps the maven-install-plugin group with 1 update in the /aws-serverless-java-container-core directory: [org.apache.maven.plugins:maven-install-plugin](https://github.com/apache/maven-install-plugin). Bumps the maven-install-plugin group with 1 update in the /aws-serverless-java-container-jersey directory: [org.apache.maven.plugins:maven-install-plugin](https://github.com/apache/maven-install-plugin). Bumps the maven-install-plugin group with 1 update in the /aws-serverless-java-container-spring directory: [org.apache.maven.plugins:maven-install-plugin](https://github.com/apache/maven-install-plugin). Bumps the maven-install-plugin group with 1 update in the /aws-serverless-java-container-springboot3 directory: [org.apache.maven.plugins:maven-install-plugin](https://github.com/apache/maven-install-plugin). Bumps the maven-install-plugin group with 1 update in the /aws-serverless-jersey-archetype directory: [org.apache.maven.plugins:maven-install-plugin](https://github.com/apache/maven-install-plugin). Bumps the maven-install-plugin group with 1 update in the /aws-serverless-spring-archetype directory: [org.apache.maven.plugins:maven-install-plugin](https://github.com/apache/maven-install-plugin). Bumps the maven-install-plugin group with 1 update in the /aws-serverless-springboot3-archetype directory: [org.apache.maven.plugins:maven-install-plugin](https://github.com/apache/maven-install-plugin). Bumps the maven-install-plugin group with 1 update in the /samples/jersey/pet-store directory: [org.apache.maven.plugins:maven-install-plugin](https://github.com/apache/maven-install-plugin). Bumps the maven-install-plugin group with 1 update in the /samples/spring/pet-store directory: [org.apache.maven.plugins:maven-install-plugin](https://github.com/apache/maven-install-plugin). Bumps the maven-install-plugin group with 1 update in the /samples/springboot3/alt-pet-store directory: [org.apache.maven.plugins:maven-install-plugin](https://github.com/apache/maven-install-plugin). Bumps the maven-install-plugin group with 1 update in the /samples/springboot3/graphql-pet-store directory: [org.apache.maven.plugins:maven-install-plugin](https://github.com/apache/maven-install-plugin). Bumps the maven-install-plugin group with 1 update in the /samples/springboot3/pet-store directory: [org.apache.maven.plugins:maven-install-plugin](https://github.com/apache/maven-install-plugin). Updates `org.apache.maven.plugins:maven-install-plugin` from 3.1.3 to 3.1.4 - [Release notes](https://github.com/apache/maven-install-plugin/releases) - [Commits](https://github.com/apache/maven-install-plugin/compare/maven-install-plugin-3.1.3...maven-install-plugin-3.1.4) Updates `org.apache.maven.plugins:maven-install-plugin` from 3.1.3 to 3.1.4 - [Release notes](https://github.com/apache/maven-install-plugin/releases) - [Commits](https://github.com/apache/maven-install-plugin/compare/maven-install-plugin-3.1.3...maven-install-plugin-3.1.4) Updates `org.apache.maven.plugins:maven-install-plugin` from 3.1.3 to 3.1.4 - [Release notes](https://github.com/apache/maven-install-plugin/releases) - [Commits](https://github.com/apache/maven-install-plugin/compare/maven-install-plugin-3.1.3...maven-install-plugin-3.1.4) Updates `org.apache.maven.plugins:maven-install-plugin` from 3.1.3 to 3.1.4 - [Release notes](https://github.com/apache/maven-install-plugin/releases) - [Commits](https://github.com/apache/maven-install-plugin/compare/maven-install-plugin-3.1.3...maven-install-plugin-3.1.4) Updates `org.apache.maven.plugins:maven-install-plugin` from 3.1.3 to 3.1.4 - [Release notes](https://github.com/apache/maven-install-plugin/releases) - [Commits](https://github.com/apache/maven-install-plugin/compare/maven-install-plugin-3.1.3...maven-install-plugin-3.1.4) Updates `org.apache.maven.plugins:maven-install-plugin` from 3.1.3 to 3.1.4 - [Release notes](https://github.com/apache/maven-install-plugin/releases) - [Commits](https://github.com/apache/maven-install-plugin/compare/maven-install-plugin-3.1.3...maven-install-plugin-3.1.4) Updates `org.apache.maven.plugins:maven-install-plugin` from 3.1.3 to 3.1.4 - [Release notes](https://github.com/apache/maven-install-plugin/releases) - [Commits](https://github.com/apache/maven-install-plugin/compare/maven-install-plugin-3.1.3...maven-install-plugin-3.1.4) Updates `org.apache.maven.plugins:maven-install-plugin` from 3.1.3 to 3.1.4 - [Release notes](https://github.com/apache/maven-install-plugin/releases) - [Commits](https://github.com/apache/maven-install-plugin/compare/maven-install-plugin-3.1.3...maven-install-plugin-3.1.4) Updates `org.apache.maven.plugins:maven-install-plugin` from 3.1.3 to 3.1.4 - [Release notes](https://github.com/apache/maven-install-plugin/releases) - [Commits](https://github.com/apache/maven-install-plugin/compare/maven-install-plugin-3.1.3...maven-install-plugin-3.1.4) Updates `org.apache.maven.plugins:maven-install-plugin` from 3.1.3 to 3.1.4 - [Release notes](https://github.com/apache/maven-install-plugin/releases) - [Commits](https://github.com/apache/maven-install-plugin/compare/maven-install-plugin-3.1.3...maven-install-plugin-3.1.4) Updates `org.apache.maven.plugins:maven-install-plugin` from 3.1.3 to 3.1.4 - [Release notes](https://github.com/apache/maven-install-plugin/releases) - [Commits](https://github.com/apache/maven-install-plugin/compare/maven-install-plugin-3.1.3...maven-install-plugin-3.1.4) Updates `org.apache.maven.plugins:maven-install-plugin` from 3.1.3 to 3.1.4 - [Release notes](https://github.com/apache/maven-install-plugin/releases) - [Commits](https://github.com/apache/maven-install-plugin/compare/maven-install-plugin-3.1.3...maven-install-plugin-3.1.4) Updates `org.apache.maven.plugins:maven-install-plugin` from 3.1.3 to 3.1.4 - [Release notes](https://github.com/apache/maven-install-plugin/releases) - [Commits](https://github.com/apache/maven-install-plugin/compare/maven-install-plugin-3.1.3...maven-install-plugin-3.1.4) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-install-plugin dependency-type: direct:production update-type: version-update:semver-patch dependency-group: maven-install-plugin - dependency-name: org.apache.maven.plugins:maven-install-plugin dependency-type: direct:production update-type: version-update:semver-patch dependency-group: maven-install-plugin - dependency-name: org.apache.maven.plugins:maven-install-plugin dependency-type: direct:production update-type: version-update:semver-patch dependency-group: maven-install-plugin - dependency-name: org.apache.maven.plugins:maven-install-plugin dependency-type: direct:production update-type: version-update:semver-patch dependency-group: maven-install-plugin - dependency-name: org.apache.maven.plugins:maven-install-plugin dependency-type: direct:production update-type: version-update:semver-patch dependency-group: maven-install-plugin - dependency-name: org.apache.maven.plugins:maven-install-plugin dependency-type: direct:production update-type: version-update:semver-patch dependency-group: maven-install-plugin - dependency-name: org.apache.maven.plugins:maven-install-plugin dependency-type: direct:production update-type: version-update:semver-patch dependency-group: maven-install-plugin - dependency-name: org.apache.maven.plugins:maven-install-plugin dependency-type: direct:production update-type: version-update:semver-patch dependency-group: maven-install-plugin - dependency-name: org.apache.maven.plugins:maven-install-plugin dependency-type: direct:production update-type: version-update:semver-patch dependency-group: maven-install-plugin - dependency-name: org.apache.maven.plugins:maven-install-plugin dependency-type: direct:production update-type: version-update:semver-patch dependency-group: maven-install-plugin - dependency-name: org.apache.maven.plugins:maven-install-plugin dependency-type: direct:production update-type: version-update:semver-patch dependency-group: maven-install-plugin - dependency-name: org.apache.maven.plugins:maven-install-plugin dependency-type: direct:production update-type: version-update:semver-patch dependency-group: maven-install-plugin - dependency-name: org.apache.maven.plugins:maven-install-plugin dependency-type: direct:production update-type: version-update:semver-patch dependency-group: maven-install-plugin ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- samples/jersey/pet-store/pom.xml | 2 +- samples/spring/pet-store/pom.xml | 2 +- samples/springboot3/alt-pet-store/pom.xml | 2 +- samples/springboot3/graphql-pet-store/pom.xml | 2 +- samples/springboot3/pet-store/pom.xml | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pom.xml b/pom.xml index 1ccf270ea..164f63152 100644 --- a/pom.xml +++ b/pom.xml @@ -231,7 +231,7 @@ org.apache.maven.plugins maven-install-plugin - 3.1.3 + 3.1.4 org.apache.maven.plugins diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index 2482864f0..6a66d80a3 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -123,7 +123,7 @@ org.apache.maven.plugins maven-install-plugin - 3.1.3 + 3.1.4 true diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index 29a00117b..68c577bc8 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -144,7 +144,7 @@ org.apache.maven.plugins maven-install-plugin - 3.1.3 + 3.1.4 true diff --git a/samples/springboot3/alt-pet-store/pom.xml b/samples/springboot3/alt-pet-store/pom.xml index 12b7c0daa..0885925cf 100644 --- a/samples/springboot3/alt-pet-store/pom.xml +++ b/samples/springboot3/alt-pet-store/pom.xml @@ -94,7 +94,7 @@ org.apache.maven.plugins maven-install-plugin - 3.1.3 + 3.1.4 true diff --git a/samples/springboot3/graphql-pet-store/pom.xml b/samples/springboot3/graphql-pet-store/pom.xml index c3076388a..ff0c5c0dc 100644 --- a/samples/springboot3/graphql-pet-store/pom.xml +++ b/samples/springboot3/graphql-pet-store/pom.xml @@ -108,7 +108,7 @@ org.apache.maven.plugins maven-install-plugin - 3.1.3 + 3.1.4 true diff --git a/samples/springboot3/pet-store/pom.xml b/samples/springboot3/pet-store/pom.xml index 05351f0a4..4bc2a498d 100644 --- a/samples/springboot3/pet-store/pom.xml +++ b/samples/springboot3/pet-store/pom.xml @@ -100,7 +100,7 @@ org.apache.maven.plugins maven-install-plugin - 3.1.3 + 3.1.4 true From 6b1ff33c396cec82c86cde35a8d65e2e6a685bf3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Mar 2025 04:36:15 +0000 Subject: [PATCH 803/888] chore(deps): bump org.apache.maven.plugins:maven-deploy-plugin Bumps [org.apache.maven.plugins:maven-deploy-plugin](https://github.com/apache/maven-deploy-plugin) from 3.1.3 to 3.1.4. - [Release notes](https://github.com/apache/maven-deploy-plugin/releases) - [Commits](https://github.com/apache/maven-deploy-plugin/compare/maven-deploy-plugin-3.1.3...maven-deploy-plugin-3.1.4) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-deploy-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 1ccf270ea..69ddcb9a0 100644 --- a/pom.xml +++ b/pom.xml @@ -226,7 +226,7 @@ org.apache.maven.plugins maven-deploy-plugin - 3.1.3 + 3.1.4 org.apache.maven.plugins From 1c64bb190696017a2262c554df7397fef8ffab4f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Mar 2025 04:36:25 +0000 Subject: [PATCH 804/888] chore(deps): bump org.apache.maven.plugins:maven-deploy-plugin Bumps [org.apache.maven.plugins:maven-deploy-plugin](https://github.com/apache/maven-deploy-plugin) from 3.1.3 to 3.1.4. - [Release notes](https://github.com/apache/maven-deploy-plugin/releases) - [Commits](https://github.com/apache/maven-deploy-plugin/compare/maven-deploy-plugin-3.1.3...maven-deploy-plugin-3.1.4) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-deploy-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 1ccf270ea..69ddcb9a0 100644 --- a/pom.xml +++ b/pom.xml @@ -226,7 +226,7 @@ org.apache.maven.plugins maven-deploy-plugin - 3.1.3 + 3.1.4 org.apache.maven.plugins From 31751541c1857cc3e80a94c5232cdbc7f57e4af3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Mar 2025 04:36:29 +0000 Subject: [PATCH 805/888] chore(deps): bump org.apache.maven.plugins:maven-deploy-plugin Bumps [org.apache.maven.plugins:maven-deploy-plugin](https://github.com/apache/maven-deploy-plugin) from 3.1.3 to 3.1.4. - [Release notes](https://github.com/apache/maven-deploy-plugin/releases) - [Commits](https://github.com/apache/maven-deploy-plugin/compare/maven-deploy-plugin-3.1.3...maven-deploy-plugin-3.1.4) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-deploy-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 1ccf270ea..69ddcb9a0 100644 --- a/pom.xml +++ b/pom.xml @@ -226,7 +226,7 @@ org.apache.maven.plugins maven-deploy-plugin - 3.1.3 + 3.1.4 org.apache.maven.plugins From 9c88ffd6726e925316dbbb430d9e1fea201526c6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Mar 2025 04:36:42 +0000 Subject: [PATCH 806/888] chore(deps): bump org.apache.maven.plugins:maven-deploy-plugin Bumps [org.apache.maven.plugins:maven-deploy-plugin](https://github.com/apache/maven-deploy-plugin) from 3.1.3 to 3.1.4. - [Release notes](https://github.com/apache/maven-deploy-plugin/releases) - [Commits](https://github.com/apache/maven-deploy-plugin/compare/maven-deploy-plugin-3.1.3...maven-deploy-plugin-3.1.4) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-deploy-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 1ccf270ea..69ddcb9a0 100644 --- a/pom.xml +++ b/pom.xml @@ -226,7 +226,7 @@ org.apache.maven.plugins maven-deploy-plugin - 3.1.3 + 3.1.4 org.apache.maven.plugins From a07936e9e22f6e9b4e03efa79c4d96a7a4d25df2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Mar 2025 04:36:58 +0000 Subject: [PATCH 807/888] chore(deps): bump org.apache.maven.plugins:maven-deploy-plugin Bumps [org.apache.maven.plugins:maven-deploy-plugin](https://github.com/apache/maven-deploy-plugin) from 3.1.3 to 3.1.4. - [Release notes](https://github.com/apache/maven-deploy-plugin/releases) - [Commits](https://github.com/apache/maven-deploy-plugin/compare/maven-deploy-plugin-3.1.3...maven-deploy-plugin-3.1.4) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-deploy-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 1ccf270ea..69ddcb9a0 100644 --- a/pom.xml +++ b/pom.xml @@ -226,7 +226,7 @@ org.apache.maven.plugins maven-deploy-plugin - 3.1.3 + 3.1.4 org.apache.maven.plugins From 5ee6e08ec18cb4ef12be09f20bd46fb8604abd39 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Mar 2025 04:37:12 +0000 Subject: [PATCH 808/888] chore(deps): bump org.apache.maven.plugins:maven-deploy-plugin Bumps [org.apache.maven.plugins:maven-deploy-plugin](https://github.com/apache/maven-deploy-plugin) from 3.1.3 to 3.1.4. - [Release notes](https://github.com/apache/maven-deploy-plugin/releases) - [Commits](https://github.com/apache/maven-deploy-plugin/compare/maven-deploy-plugin-3.1.3...maven-deploy-plugin-3.1.4) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-deploy-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 1ccf270ea..69ddcb9a0 100644 --- a/pom.xml +++ b/pom.xml @@ -226,7 +226,7 @@ org.apache.maven.plugins maven-deploy-plugin - 3.1.3 + 3.1.4 org.apache.maven.plugins From 2e4fd5d01c1aa6d20dabec66740da83fb1412d14 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Mar 2025 04:37:20 +0000 Subject: [PATCH 809/888] chore(deps): bump org.apache.maven.plugins:maven-deploy-plugin Bumps [org.apache.maven.plugins:maven-deploy-plugin](https://github.com/apache/maven-deploy-plugin) from 3.1.3 to 3.1.4. - [Release notes](https://github.com/apache/maven-deploy-plugin/releases) - [Commits](https://github.com/apache/maven-deploy-plugin/compare/maven-deploy-plugin-3.1.3...maven-deploy-plugin-3.1.4) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-deploy-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 1ccf270ea..69ddcb9a0 100644 --- a/pom.xml +++ b/pom.xml @@ -226,7 +226,7 @@ org.apache.maven.plugins maven-deploy-plugin - 3.1.3 + 3.1.4 org.apache.maven.plugins From 3ff85c8c964b5483c51a2c51cf11f0fef1cee1c3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Mar 2025 04:37:27 +0000 Subject: [PATCH 810/888] chore(deps): bump org.apache.maven.plugins:maven-deploy-plugin Bumps [org.apache.maven.plugins:maven-deploy-plugin](https://github.com/apache/maven-deploy-plugin) from 3.1.3 to 3.1.4. - [Release notes](https://github.com/apache/maven-deploy-plugin/releases) - [Commits](https://github.com/apache/maven-deploy-plugin/compare/maven-deploy-plugin-3.1.3...maven-deploy-plugin-3.1.4) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-deploy-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 1ccf270ea..69ddcb9a0 100644 --- a/pom.xml +++ b/pom.xml @@ -226,7 +226,7 @@ org.apache.maven.plugins maven-deploy-plugin - 3.1.3 + 3.1.4 org.apache.maven.plugins From 512be81b8708b7a2cfa977c98ad0f57477d2b0a6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 Mar 2025 04:33:30 +0000 Subject: [PATCH 811/888] chore(deps): bump the jackson group across 5 directories with 2 updates Bumps the jackson group with 2 updates in the / directory: [com.fasterxml.jackson.core:jackson-databind](https://github.com/FasterXML/jackson) and [com.fasterxml.jackson.module:jackson-module-afterburner](https://github.com/FasterXML/jackson-modules-base). Bumps the jackson group with 2 updates in the /aws-serverless-java-container-core directory: [com.fasterxml.jackson.core:jackson-databind](https://github.com/FasterXML/jackson) and [com.fasterxml.jackson.module:jackson-module-afterburner](https://github.com/FasterXML/jackson-modules-base). Bumps the jackson group with 1 update in the /aws-serverless-java-container-jersey directory: [com.fasterxml.jackson.core:jackson-databind](https://github.com/FasterXML/jackson). Bumps the jackson group with 1 update in the /aws-serverless-java-container-spring directory: [com.fasterxml.jackson.core:jackson-databind](https://github.com/FasterXML/jackson). Bumps the jackson group with 1 update in the /samples/jersey/pet-store directory: [com.fasterxml.jackson.core:jackson-databind](https://github.com/FasterXML/jackson). Updates `com.fasterxml.jackson.core:jackson-databind` from 2.18.2 to 2.18.3 - [Commits](https://github.com/FasterXML/jackson/commits) Updates `com.fasterxml.jackson.module:jackson-module-afterburner` from 2.18.2 to 2.18.3 - [Commits](https://github.com/FasterXML/jackson-modules-base/commits/jackson-modules-base-2.18.3) Updates `com.fasterxml.jackson.module:jackson-module-afterburner` from 2.18.2 to 2.18.3 - [Commits](https://github.com/FasterXML/jackson-modules-base/commits/jackson-modules-base-2.18.3) Updates `com.fasterxml.jackson.core:jackson-databind` from 2.18.2 to 2.18.3 - [Commits](https://github.com/FasterXML/jackson/commits) Updates `com.fasterxml.jackson.module:jackson-module-afterburner` from 2.18.2 to 2.18.3 - [Commits](https://github.com/FasterXML/jackson-modules-base/commits/jackson-modules-base-2.18.3) Updates `com.fasterxml.jackson.module:jackson-module-afterburner` from 2.18.2 to 2.18.3 - [Commits](https://github.com/FasterXML/jackson-modules-base/commits/jackson-modules-base-2.18.3) Updates `com.fasterxml.jackson.core:jackson-databind` from 2.18.2 to 2.18.3 - [Commits](https://github.com/FasterXML/jackson/commits) Updates `com.fasterxml.jackson.core:jackson-databind` from 2.18.2 to 2.18.3 - [Commits](https://github.com/FasterXML/jackson/commits) Updates `com.fasterxml.jackson.core:jackson-databind` from 2.18.2 to 2.18.3 - [Commits](https://github.com/FasterXML/jackson/commits) --- updated-dependencies: - dependency-name: com.fasterxml.jackson.core:jackson-databind dependency-type: direct:production update-type: version-update:semver-patch dependency-group: jackson - dependency-name: com.fasterxml.jackson.module:jackson-module-afterburner dependency-type: direct:production update-type: version-update:semver-patch dependency-group: jackson - dependency-name: com.fasterxml.jackson.module:jackson-module-afterburner dependency-type: direct:production update-type: version-update:semver-patch dependency-group: jackson - dependency-name: com.fasterxml.jackson.core:jackson-databind dependency-type: direct:production update-type: version-update:semver-patch dependency-group: jackson - dependency-name: com.fasterxml.jackson.module:jackson-module-afterburner dependency-type: direct:production update-type: version-update:semver-patch dependency-group: jackson - dependency-name: com.fasterxml.jackson.module:jackson-module-afterburner dependency-type: direct:production update-type: version-update:semver-patch dependency-group: jackson - dependency-name: com.fasterxml.jackson.core:jackson-databind dependency-type: direct:development update-type: version-update:semver-patch dependency-group: jackson - dependency-name: com.fasterxml.jackson.core:jackson-databind dependency-type: direct:development update-type: version-update:semver-patch dependency-group: jackson - dependency-name: com.fasterxml.jackson.core:jackson-databind dependency-type: direct:production update-type: version-update:semver-patch dependency-group: jackson ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- samples/jersey/pet-store/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 164f63152..60596f900 100644 --- a/pom.xml +++ b/pom.xml @@ -78,7 +78,7 @@ 0.7 12.1.0 - 2.18.2 + 2.18.3 2.0.16 5.11.4 5.15.2 diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index 6a66d80a3..dc29c9f6f 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -27,7 +27,7 @@ 1.8 1.8 3.1.10 - 2.18.2 + 2.18.3 From 7dbf260c5ea0dcade9f5f7d20bc2bc22b3466fb6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 Mar 2025 04:38:46 +0000 Subject: [PATCH 812/888] chore(deps): bump the jackson group across 4 directories with 1 update Bumps the jackson group with 1 update in the /aws-serverless-jersey-archetype/src/main/resources/archetype-resources directory: [com.fasterxml.jackson.core:jackson-databind](https://github.com/FasterXML/jackson). Bumps the jackson group with 1 update in the /aws-serverless-spring-archetype/src/main/resources/archetype-resources directory: [com.fasterxml.jackson.core:jackson-databind](https://github.com/FasterXML/jackson). Bumps the jackson group with 1 update in the /samples/jersey/pet-store directory: [com.fasterxml.jackson.core:jackson-databind](https://github.com/FasterXML/jackson). Bumps the jackson group with 1 update in the /samples/spring/pet-store directory: [com.fasterxml.jackson.core:jackson-databind](https://github.com/FasterXML/jackson). Updates `com.fasterxml.jackson.core:jackson-databind` from 2.18.2 to 2.18.3 - [Commits](https://github.com/FasterXML/jackson/commits) Updates `com.fasterxml.jackson.core:jackson-databind` from 2.18.2 to 2.18.3 - [Commits](https://github.com/FasterXML/jackson/commits) Updates `com.fasterxml.jackson.core:jackson-databind` from 2.18.2 to 2.18.3 - [Commits](https://github.com/FasterXML/jackson/commits) Updates `com.fasterxml.jackson.core:jackson-databind` from 2.18.2 to 2.18.3 - [Commits](https://github.com/FasterXML/jackson/commits) --- updated-dependencies: - dependency-name: com.fasterxml.jackson.core:jackson-databind dependency-type: direct:production update-type: version-update:semver-patch dependency-group: jackson - dependency-name: com.fasterxml.jackson.core:jackson-databind dependency-type: direct:production update-type: version-update:semver-patch dependency-group: jackson - dependency-name: com.fasterxml.jackson.core:jackson-databind dependency-type: direct:production update-type: version-update:semver-patch dependency-group: jackson - dependency-name: com.fasterxml.jackson.core:jackson-databind dependency-type: direct:production update-type: version-update:semver-patch dependency-group: jackson ... Signed-off-by: dependabot[bot] --- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- samples/jersey/pet-store/build.gradle | 2 +- samples/spring/pet-store/build.gradle | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle index 7160d4a9c..06aad3155 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle @@ -8,7 +8,7 @@ repositories { dependencies { implementation ( 'com.amazonaws.serverless:aws-serverless-java-container-jersey:[2.0-SNAPSHOT,)', - 'com.fasterxml.jackson.core:jackson-databind:2.18.2', + 'com.fasterxml.jackson.core:jackson-databind:2.18.3', ) implementation("org.glassfish.jersey.media:jersey-media-json-jackson:3.1.10") { diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index 3cbd0d915..51d119eda 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -13,7 +13,7 @@ dependencies { 'org.apache.logging.log4j:log4j-core:2.24.3', 'org.apache.logging.log4j:log4j-api:2.24.3', 'org.apache.logging.log4j:log4j-slf4j-impl:2.24.3', - 'com.fasterxml.jackson.core:jackson-databind:2.18.2', + 'com.fasterxml.jackson.core:jackson-databind:2.18.3', 'com.amazonaws:aws-lambda-java-log4j2:1.6.0', ) diff --git a/samples/jersey/pet-store/build.gradle b/samples/jersey/pet-store/build.gradle index ca4af2f86..0829175e8 100644 --- a/samples/jersey/pet-store/build.gradle +++ b/samples/jersey/pet-store/build.gradle @@ -8,7 +8,7 @@ repositories { dependencies { implementation ( 'com.amazonaws.serverless:aws-serverless-java-container-jersey:[2.0-SNAPSHOT,)', - 'com.fasterxml.jackson.core:jackson-databind:2.18.2', + 'com.fasterxml.jackson.core:jackson-databind:2.18.3', ) implementation("org.glassfish.jersey.media:jersey-media-json-jackson:3.1.10") { diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index 00ff6ceb7..9d46494fa 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -13,7 +13,7 @@ dependencies { 'org.apache.logging.log4j:log4j-core:2.24.3', 'org.apache.logging.log4j:log4j-api:2.24.3', 'org.apache.logging.log4j:log4j-slf4j-impl:2.24.3', - 'com.fasterxml.jackson.core:jackson-databind:2.18.2', + 'com.fasterxml.jackson.core:jackson-databind:2.18.3', 'com.amazonaws:aws-lambda-java-log4j2:1.6.0', ) } From 21c6eda9105e30759cc2da3f485d7ce55bc1450b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Mar 2025 04:42:29 +0000 Subject: [PATCH 813/888] chore(deps): bump com.github.spotbugs:spotbugs-annotations Bumps [com.github.spotbugs:spotbugs-annotations](https://github.com/spotbugs/spotbugs) from 4.9.1 to 4.9.3. - [Release notes](https://github.com/spotbugs/spotbugs/releases) - [Changelog](https://github.com/spotbugs/spotbugs/blob/master/CHANGELOG.md) - [Commits](https://github.com/spotbugs/spotbugs/compare/4.9.1...4.9.3) --- updated-dependencies: - dependency-name: com.github.spotbugs:spotbugs-annotations dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 164f63152..c555a4b47 100644 --- a/pom.xml +++ b/pom.xml @@ -140,7 +140,7 @@ com.github.spotbugs spotbugs-annotations - 4.9.1 + 4.9.3 provided From 3cf3ab22df103037678193ad2387b5234c16f900 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Mar 2025 04:42:44 +0000 Subject: [PATCH 814/888] chore(deps): bump com.github.spotbugs:spotbugs-annotations Bumps [com.github.spotbugs:spotbugs-annotations](https://github.com/spotbugs/spotbugs) from 4.9.1 to 4.9.3. - [Release notes](https://github.com/spotbugs/spotbugs/releases) - [Changelog](https://github.com/spotbugs/spotbugs/blob/master/CHANGELOG.md) - [Commits](https://github.com/spotbugs/spotbugs/compare/4.9.1...4.9.3) --- updated-dependencies: - dependency-name: com.github.spotbugs:spotbugs-annotations dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 164f63152..c555a4b47 100644 --- a/pom.xml +++ b/pom.xml @@ -140,7 +140,7 @@ com.github.spotbugs spotbugs-annotations - 4.9.1 + 4.9.3 provided From f1003335eeedec78e1dc782e7e05ea8aeb2adf9e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Mar 2025 04:42:54 +0000 Subject: [PATCH 815/888] chore(deps): bump com.github.spotbugs:spotbugs-annotations Bumps [com.github.spotbugs:spotbugs-annotations](https://github.com/spotbugs/spotbugs) from 4.9.1 to 4.9.3. - [Release notes](https://github.com/spotbugs/spotbugs/releases) - [Changelog](https://github.com/spotbugs/spotbugs/blob/master/CHANGELOG.md) - [Commits](https://github.com/spotbugs/spotbugs/compare/4.9.1...4.9.3) --- updated-dependencies: - dependency-name: com.github.spotbugs:spotbugs-annotations dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 164f63152..c555a4b47 100644 --- a/pom.xml +++ b/pom.xml @@ -140,7 +140,7 @@ com.github.spotbugs spotbugs-annotations - 4.9.1 + 4.9.3 provided From 81e08e6fa2038db92397eff86371c727091b9a3e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Mar 2025 04:43:10 +0000 Subject: [PATCH 816/888] chore(deps): bump com.github.spotbugs:spotbugs-annotations Bumps [com.github.spotbugs:spotbugs-annotations](https://github.com/spotbugs/spotbugs) from 4.9.1 to 4.9.3. - [Release notes](https://github.com/spotbugs/spotbugs/releases) - [Changelog](https://github.com/spotbugs/spotbugs/blob/master/CHANGELOG.md) - [Commits](https://github.com/spotbugs/spotbugs/compare/4.9.1...4.9.3) --- updated-dependencies: - dependency-name: com.github.spotbugs:spotbugs-annotations dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 164f63152..c555a4b47 100644 --- a/pom.xml +++ b/pom.xml @@ -140,7 +140,7 @@ com.github.spotbugs spotbugs-annotations - 4.9.1 + 4.9.3 provided From 1d33b696ef8c636b2b8d50beef15898780ff36f0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Mar 2025 04:43:25 +0000 Subject: [PATCH 817/888] chore(deps): bump com.github.spotbugs:spotbugs-annotations Bumps [com.github.spotbugs:spotbugs-annotations](https://github.com/spotbugs/spotbugs) from 4.9.1 to 4.9.3. - [Release notes](https://github.com/spotbugs/spotbugs/releases) - [Changelog](https://github.com/spotbugs/spotbugs/blob/master/CHANGELOG.md) - [Commits](https://github.com/spotbugs/spotbugs/compare/4.9.1...4.9.3) --- updated-dependencies: - dependency-name: com.github.spotbugs:spotbugs-annotations dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 164f63152..c555a4b47 100644 --- a/pom.xml +++ b/pom.xml @@ -140,7 +140,7 @@ com.github.spotbugs spotbugs-annotations - 4.9.1 + 4.9.3 provided From e1a36ad41ed9776ef7780b40e686189c1902741a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Mar 2025 04:43:45 +0000 Subject: [PATCH 818/888] chore(deps): bump com.github.spotbugs:spotbugs-annotations Bumps [com.github.spotbugs:spotbugs-annotations](https://github.com/spotbugs/spotbugs) from 4.9.1 to 4.9.3. - [Release notes](https://github.com/spotbugs/spotbugs/releases) - [Changelog](https://github.com/spotbugs/spotbugs/blob/master/CHANGELOG.md) - [Commits](https://github.com/spotbugs/spotbugs/compare/4.9.1...4.9.3) --- updated-dependencies: - dependency-name: com.github.spotbugs:spotbugs-annotations dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 164f63152..c555a4b47 100644 --- a/pom.xml +++ b/pom.xml @@ -140,7 +140,7 @@ com.github.spotbugs spotbugs-annotations - 4.9.1 + 4.9.3 provided From aba53c715df2ce67bda320563121e51b39bea033 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Mar 2025 04:43:56 +0000 Subject: [PATCH 819/888] chore(deps): bump com.github.spotbugs:spotbugs-annotations Bumps [com.github.spotbugs:spotbugs-annotations](https://github.com/spotbugs/spotbugs) from 4.9.1 to 4.9.3. - [Release notes](https://github.com/spotbugs/spotbugs/releases) - [Changelog](https://github.com/spotbugs/spotbugs/blob/master/CHANGELOG.md) - [Commits](https://github.com/spotbugs/spotbugs/compare/4.9.1...4.9.3) --- updated-dependencies: - dependency-name: com.github.spotbugs:spotbugs-annotations dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 164f63152..c555a4b47 100644 --- a/pom.xml +++ b/pom.xml @@ -140,7 +140,7 @@ com.github.spotbugs spotbugs-annotations - 4.9.1 + 4.9.3 provided From a5df3646c2dcf06280599c4b8daadc89c3606774 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Mar 2025 04:44:06 +0000 Subject: [PATCH 820/888] chore(deps): bump com.github.spotbugs:spotbugs-annotations Bumps [com.github.spotbugs:spotbugs-annotations](https://github.com/spotbugs/spotbugs) from 4.9.1 to 4.9.3. - [Release notes](https://github.com/spotbugs/spotbugs/releases) - [Changelog](https://github.com/spotbugs/spotbugs/blob/master/CHANGELOG.md) - [Commits](https://github.com/spotbugs/spotbugs/compare/4.9.1...4.9.3) --- updated-dependencies: - dependency-name: com.github.spotbugs:spotbugs-annotations dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 164f63152..c555a4b47 100644 --- a/pom.xml +++ b/pom.xml @@ -140,7 +140,7 @@ com.github.spotbugs spotbugs-annotations - 4.9.1 + 4.9.3 provided From adc07e7b9e0bfa9d02fb6e474a08454f91306e8a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Mar 2025 04:45:20 +0000 Subject: [PATCH 821/888] chore(deps): bump the spring group across 2 directories with 2 updates Bumps the spring group with 2 updates in the /aws-serverless-spring-archetype/src/main/resources/archetype-resources directory: [org.springframework:spring-webmvc](https://github.com/spring-projects/spring-framework) and [org.springframework:spring-context](https://github.com/spring-projects/spring-framework). Bumps the spring group with 2 updates in the /samples/spring/pet-store directory: [org.springframework:spring-webmvc](https://github.com/spring-projects/spring-framework) and [org.springframework:spring-context](https://github.com/spring-projects/spring-framework). Updates `org.springframework:spring-webmvc` from 6.2.3 to 6.2.4 - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.3...v6.2.4) Updates `org.springframework:spring-context` from 6.2.3 to 6.2.4 - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.3...v6.2.4) Updates `org.springframework:spring-webmvc` from 6.2.3 to 6.2.4 - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.3...v6.2.4) Updates `org.springframework:spring-context` from 6.2.3 to 6.2.4 - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.3...v6.2.4) --- updated-dependencies: - dependency-name: org.springframework:spring-webmvc dependency-type: direct:production update-type: version-update:semver-patch dependency-group: spring - dependency-name: org.springframework:spring-context dependency-type: direct:production update-type: version-update:semver-patch dependency-group: spring - dependency-name: org.springframework:spring-webmvc dependency-type: direct:production update-type: version-update:semver-patch dependency-group: spring - dependency-name: org.springframework:spring-context dependency-type: direct:production update-type: version-update:semver-patch dependency-group: spring ... Signed-off-by: dependabot[bot] --- .../src/main/resources/archetype-resources/build.gradle | 4 ++-- samples/spring/pet-store/build.gradle | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index 3cbd0d915..81ce9186b 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -7,8 +7,8 @@ repositories { dependencies { implementation ( - 'org.springframework:spring-webmvc:6.2.3', - 'org.springframework:spring-context:6.2.3', + 'org.springframework:spring-webmvc:6.2.4', + 'org.springframework:spring-context:6.2.4', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[2.0-SNAPSHOT,)', 'org.apache.logging.log4j:log4j-core:2.24.3', 'org.apache.logging.log4j:log4j-api:2.24.3', diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index 00ff6ceb7..85e3b4817 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -7,8 +7,8 @@ repositories { dependencies { implementation ( - 'org.springframework:spring-webmvc:6.2.3', - 'org.springframework:spring-context:6.2.3', + 'org.springframework:spring-webmvc:6.2.4', + 'org.springframework:spring-context:6.2.4', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[2.0-SNAPSHOT,)', 'org.apache.logging.log4j:log4j-core:2.24.3', 'org.apache.logging.log4j:log4j-api:2.24.3', From 41042e6d3cbf418bde2e1d29ebced43abe0d7155 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 21 Mar 2025 05:09:06 +0000 Subject: [PATCH 822/888] chore(deps): bump com.github.spotbugs:spotbugs-maven-plugin Bumps [com.github.spotbugs:spotbugs-maven-plugin](https://github.com/spotbugs/spotbugs-maven-plugin) from 4.9.1.0 to 4.9.3.0. - [Release notes](https://github.com/spotbugs/spotbugs-maven-plugin/releases) - [Commits](https://github.com/spotbugs/spotbugs-maven-plugin/compare/spotbugs-maven-plugin-4.9.1.0...spotbugs-maven-plugin-4.9.3.0) --- updated-dependencies: - dependency-name: com.github.spotbugs:spotbugs-maven-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index a07027339..1162f312b 100644 --- a/pom.xml +++ b/pom.xml @@ -249,7 +249,7 @@ com.github.spotbugs spotbugs-maven-plugin - 4.9.1.0 + 4.9.3.0 com.amazonaws.serverless.sample diff --git a/samples/springboot3/pet-store/build.gradle b/samples/springboot3/pet-store/build.gradle index c5a667267..59352a117 100644 --- a/samples/springboot3/pet-store/build.gradle +++ b/samples/springboot3/pet-store/build.gradle @@ -9,7 +9,7 @@ repositories { dependencies { implementation ( - implementation('org.springframework.boot:spring-boot-starter-web:3.4.3') { + implementation('org.springframework.boot:spring-boot-starter-web:3.4.4') { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat' }, 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:[2.0-SNAPSHOT,)', diff --git a/samples/springboot3/pet-store/pom.xml b/samples/springboot3/pet-store/pom.xml index 4bc2a498d..af519947e 100644 --- a/samples/springboot3/pet-store/pom.xml +++ b/samples/springboot3/pet-store/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 3.4.3 + 3.4.4 From 6db27586020f6172849bdfc4e709888fb4267241 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 4 Apr 2025 22:02:22 +0200 Subject: [PATCH 825/888] chore(deps): update JUnit version to 5.12.1 --- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- pom.xml | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle index 06aad3155..fa79713d0 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle @@ -23,7 +23,7 @@ dependencies { testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") testImplementation("org.apache.httpcomponents.client5:httpclient5:5.4.2") - testImplementation(platform("org.junit:junit-bom:5.11.4")) + testImplementation(platform("org.junit:junit-bom:5.12.1")) testImplementation("org.junit.jupiter:junit-jupiter") } diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml index 39db2f49e..83734ac9d 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml @@ -17,7 +17,7 @@ 3.1.10 2.18.2 - 5.11.4 + 5.12.1 diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index c7538b7c4..1ca8ce47f 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -19,7 +19,7 @@ dependencies { testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") testImplementation("org.apache.httpcomponents.client5:httpclient5:5.4.2") - testImplementation(platform("org.junit:junit-bom:5.11.4")) + testImplementation(platform("org.junit:junit-bom:5.12.1")) testImplementation("org.junit.jupiter:junit-jupiter") } diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index 7f437e7ec..f8edf92ec 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -17,7 +17,7 @@ 1.8 1.8 6.2.5 - 5.11.4 + 5.12.1 2.24.2 diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle index 59422bdff..b176e97fd 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle @@ -15,7 +15,7 @@ dependencies { testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") testImplementation("org.apache.httpcomponents.client5:httpclient5:5.4.2") - testImplementation(platform("org.junit:junit-bom:5.11.4")) + testImplementation(platform("org.junit:junit-bom:5.12.1")) testImplementation("org.junit.jupiter:junit-jupiter") } diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml index 6f6cb0875..8e2648a9e 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml @@ -21,7 +21,7 @@ 17 - 5.11.4 + 5.12.1 diff --git a/pom.xml b/pom.xml index a07027339..1a886a4d0 100644 --- a/pom.xml +++ b/pom.xml @@ -80,7 +80,7 @@ 12.1.0 2.18.3 2.0.16 - 5.11.4 + 5.12.1 5.15.2 1.3 UTF-8 From 0bf339d451a7c98c1ada5dcb62681af95fa63731 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 4 Apr 2025 22:03:15 +0200 Subject: [PATCH 826/888] chore(deps): Update Jackson version to 2.18.3 --- .../src/main/resources/archetype-resources/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml index 83734ac9d..dfa813181 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 3.1.10 - 2.18.2 + 2.18.3 5.12.1 From dded06df64490c465897eaec3ed8c5c5c3ca8517 Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Fri, 4 Apr 2025 22:03:35 +0200 Subject: [PATCH 827/888] chore(deps): Update Spring dependencies (framework to 6.2.5, security to 6.4.4, boot to 3.4.4) --- .../src/main/resources/archetype-resources/build.gradle | 4 ++-- samples/spring/pet-store/build.gradle | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index 1ca8ce47f..e708c058f 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -7,8 +7,8 @@ repositories { dependencies { implementation ( - 'org.springframework:spring-webmvc:6.2.4', - 'org.springframework:spring-context:6.2.4', + 'org.springframework:spring-webmvc:6.2.5', + 'org.springframework:spring-context:6.2.5', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[2.0-SNAPSHOT,)', 'org.apache.logging.log4j:log4j-core:2.24.3', 'org.apache.logging.log4j:log4j-api:2.24.3', diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index 992bf0339..0c28ff2b2 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -7,8 +7,8 @@ repositories { dependencies { implementation ( - 'org.springframework:spring-webmvc:6.2.4', - 'org.springframework:spring-context:6.2.4', + 'org.springframework:spring-webmvc:6.2.5', + 'org.springframework:spring-context:6.2.5', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[2.0-SNAPSHOT,)', 'org.apache.logging.log4j:log4j-core:2.24.3', 'org.apache.logging.log4j:log4j-api:2.24.3', From 39425e0e1e428d28fe0bfd3a7b7a63e874130fac Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Sat, 5 Apr 2025 08:32:10 +0200 Subject: [PATCH 828/888] chore(deps): update JUnit version to 5.12.1 (fix Gradle build) --- .../src/main/resources/archetype-resources/build.gradle | 1 + .../src/main/resources/archetype-resources/build.gradle | 1 + .../src/main/resources/archetype-resources/build.gradle | 1 + 3 files changed, 3 insertions(+) diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle index fa79713d0..56ccdbe30 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle @@ -25,6 +25,7 @@ dependencies { testImplementation("org.apache.httpcomponents.client5:httpclient5:5.4.2") testImplementation(platform("org.junit:junit-bom:5.12.1")) testImplementation("org.junit.jupiter:junit-jupiter") + testRuntimeOnly("org.junit.platform:junit-platform-launcher") } task buildZip(type: Zip) { diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index e708c058f..3115e5a63 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -21,6 +21,7 @@ dependencies { testImplementation("org.apache.httpcomponents.client5:httpclient5:5.4.2") testImplementation(platform("org.junit:junit-bom:5.12.1")) testImplementation("org.junit.jupiter:junit-jupiter") + testRuntimeOnly("org.junit.platform:junit-platform-launcher") } task buildZip(type: Zip) { diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle index b176e97fd..c90674fdc 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle @@ -17,6 +17,7 @@ dependencies { testImplementation("org.apache.httpcomponents.client5:httpclient5:5.4.2") testImplementation(platform("org.junit:junit-bom:5.12.1")) testImplementation("org.junit.jupiter:junit-jupiter") + testRuntimeOnly("org.junit.platform:junit-platform-launcher") } task buildZip(type: Zip) { From 785384f008a03892545d37bc4b40f395a410a58e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 5 Apr 2025 06:33:42 +0000 Subject: [PATCH 829/888] chore(deps): bump the slf4j group across 8 directories with 2 updates Bumps the slf4j group with 2 updates in the / directory: org.slf4j:slf4j-api and org.slf4j:slf4j-simple. Bumps the slf4j group with 2 updates in the /aws-serverless-java-container-core directory: org.slf4j:slf4j-api and org.slf4j:slf4j-simple. Bumps the slf4j group with 2 updates in the /aws-serverless-java-container-jersey directory: org.slf4j:slf4j-api and org.slf4j:slf4j-simple. Bumps the slf4j group with 2 updates in the /aws-serverless-java-container-spring directory: org.slf4j:slf4j-api and org.slf4j:slf4j-simple. Bumps the slf4j group with 2 updates in the /aws-serverless-java-container-springboot3 directory: org.slf4j:slf4j-api and org.slf4j:slf4j-simple. Bumps the slf4j group with 2 updates in the /aws-serverless-jersey-archetype directory: org.slf4j:slf4j-api and org.slf4j:slf4j-simple. Bumps the slf4j group with 2 updates in the /aws-serverless-spring-archetype directory: org.slf4j:slf4j-api and org.slf4j:slf4j-simple. Bumps the slf4j group with 2 updates in the /aws-serverless-springboot3-archetype directory: org.slf4j:slf4j-api and org.slf4j:slf4j-simple. Updates `org.slf4j:slf4j-api` from 2.0.16 to 2.0.17 Updates `org.slf4j:slf4j-simple` from 2.0.16 to 2.0.17 Updates `org.slf4j:slf4j-simple` from 2.0.16 to 2.0.17 Updates `org.slf4j:slf4j-api` from 2.0.16 to 2.0.17 Updates `org.slf4j:slf4j-simple` from 2.0.16 to 2.0.17 Updates `org.slf4j:slf4j-simple` from 2.0.16 to 2.0.17 Updates `org.slf4j:slf4j-api` from 2.0.16 to 2.0.17 Updates `org.slf4j:slf4j-simple` from 2.0.16 to 2.0.17 Updates `org.slf4j:slf4j-simple` from 2.0.16 to 2.0.17 Updates `org.slf4j:slf4j-api` from 2.0.16 to 2.0.17 Updates `org.slf4j:slf4j-simple` from 2.0.16 to 2.0.17 Updates `org.slf4j:slf4j-simple` from 2.0.16 to 2.0.17 Updates `org.slf4j:slf4j-api` from 2.0.16 to 2.0.17 Updates `org.slf4j:slf4j-simple` from 2.0.16 to 2.0.17 Updates `org.slf4j:slf4j-simple` from 2.0.16 to 2.0.17 Updates `org.slf4j:slf4j-api` from 2.0.16 to 2.0.17 Updates `org.slf4j:slf4j-simple` from 2.0.16 to 2.0.17 Updates `org.slf4j:slf4j-simple` from 2.0.16 to 2.0.17 Updates `org.slf4j:slf4j-api` from 2.0.16 to 2.0.17 Updates `org.slf4j:slf4j-simple` from 2.0.16 to 2.0.17 Updates `org.slf4j:slf4j-simple` from 2.0.16 to 2.0.17 Updates `org.slf4j:slf4j-api` from 2.0.16 to 2.0.17 Updates `org.slf4j:slf4j-simple` from 2.0.16 to 2.0.17 Updates `org.slf4j:slf4j-simple` from 2.0.16 to 2.0.17 --- updated-dependencies: - dependency-name: org.slf4j:slf4j-api dependency-type: direct:production update-type: version-update:semver-patch dependency-group: slf4j - dependency-name: org.slf4j:slf4j-simple dependency-type: direct:development update-type: version-update:semver-patch dependency-group: slf4j - dependency-name: org.slf4j:slf4j-simple dependency-type: direct:development update-type: version-update:semver-patch dependency-group: slf4j - dependency-name: org.slf4j:slf4j-api dependency-type: direct:production update-type: version-update:semver-patch dependency-group: slf4j - dependency-name: org.slf4j:slf4j-simple dependency-type: direct:development update-type: version-update:semver-patch dependency-group: slf4j - dependency-name: org.slf4j:slf4j-simple dependency-type: direct:development update-type: version-update:semver-patch dependency-group: slf4j - dependency-name: org.slf4j:slf4j-api dependency-type: direct:production update-type: version-update:semver-patch dependency-group: slf4j - dependency-name: org.slf4j:slf4j-simple dependency-type: direct:development update-type: version-update:semver-patch dependency-group: slf4j - dependency-name: org.slf4j:slf4j-simple dependency-type: direct:development update-type: version-update:semver-patch dependency-group: slf4j - dependency-name: org.slf4j:slf4j-api dependency-type: direct:production update-type: version-update:semver-patch dependency-group: slf4j - dependency-name: org.slf4j:slf4j-simple dependency-type: direct:development update-type: version-update:semver-patch dependency-group: slf4j - dependency-name: org.slf4j:slf4j-simple dependency-type: direct:development update-type: version-update:semver-patch dependency-group: slf4j - dependency-name: org.slf4j:slf4j-api dependency-type: direct:production update-type: version-update:semver-patch dependency-group: slf4j - dependency-name: org.slf4j:slf4j-simple dependency-type: direct:development update-type: version-update:semver-patch dependency-group: slf4j - dependency-name: org.slf4j:slf4j-simple dependency-type: direct:development update-type: version-update:semver-patch dependency-group: slf4j - dependency-name: org.slf4j:slf4j-api dependency-type: direct:production update-type: version-update:semver-patch dependency-group: slf4j - dependency-name: org.slf4j:slf4j-simple dependency-type: direct:development update-type: version-update:semver-patch dependency-group: slf4j - dependency-name: org.slf4j:slf4j-simple dependency-type: direct:development update-type: version-update:semver-patch dependency-group: slf4j - dependency-name: org.slf4j:slf4j-api dependency-type: direct:production update-type: version-update:semver-patch dependency-group: slf4j - dependency-name: org.slf4j:slf4j-simple dependency-type: direct:development update-type: version-update:semver-patch dependency-group: slf4j - dependency-name: org.slf4j:slf4j-simple dependency-type: direct:development update-type: version-update:semver-patch dependency-group: slf4j - dependency-name: org.slf4j:slf4j-api dependency-type: direct:production update-type: version-update:semver-patch dependency-group: slf4j - dependency-name: org.slf4j:slf4j-simple dependency-type: direct:development update-type: version-update:semver-patch dependency-group: slf4j - dependency-name: org.slf4j:slf4j-simple dependency-type: direct:development update-type: version-update:semver-patch dependency-group: slf4j ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index e3a8ff152..ea67e10f6 100644 --- a/pom.xml +++ b/pom.xml @@ -79,7 +79,7 @@ 0.7 12.1.0 2.18.3 - 2.0.16 + 2.0.17 5.12.1 5.15.2 1.3 From fb4de59de910ddc72de73bafba79571580a2a0d7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 5 Apr 2025 06:34:06 +0000 Subject: [PATCH 830/888] chore(deps-dev): bump org.mockito:mockito-core from 5.15.2 to 5.16.1 Bumps [org.mockito:mockito-core](https://github.com/mockito/mockito) from 5.15.2 to 5.16.1. - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](https://github.com/mockito/mockito/compare/v5.15.2...v5.16.1) --- updated-dependencies: - dependency-name: org.mockito:mockito-core dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index e3a8ff152..15be9c45e 100644 --- a/pom.xml +++ b/pom.xml @@ -81,7 +81,7 @@ 2.18.3 2.0.16 5.12.1 - 5.15.2 + 5.17.0 1.3 UTF-8 From 518aeea9d053f4d926397e270cd7cbc39b763fa4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 5 Apr 2025 07:15:15 +0000 Subject: [PATCH 831/888] chore(deps): bump org.apache.maven.plugins:maven-surefire-plugin Bumps [org.apache.maven.plugins:maven-surefire-plugin](https://github.com/apache/maven-surefire) from 3.5.2 to 3.5.3. - [Release notes](https://github.com/apache/maven-surefire/releases) - [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.5.2...surefire-3.5.3) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-surefire-plugin dependency-version: 3.5.3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 7693ddf9d..90fd95e06 100644 --- a/pom.xml +++ b/pom.xml @@ -206,7 +206,7 @@ org.apache.maven.plugins maven-surefire-plugin - 3.5.2 + 3.5.3 org.apache.maven.plugins From 257c4bb23c4df1fd0b9c2a97719e6feca5b24165 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 5 Apr 2025 07:15:22 +0000 Subject: [PATCH 832/888] chore(deps): bump org.jacoco:jacoco-maven-plugin from 0.8.12 to 0.8.13 Bumps [org.jacoco:jacoco-maven-plugin](https://github.com/jacoco/jacoco) from 0.8.12 to 0.8.13. - [Release notes](https://github.com/jacoco/jacoco/releases) - [Commits](https://github.com/jacoco/jacoco/compare/v0.8.12...v0.8.13) --- updated-dependencies: - dependency-name: org.jacoco:jacoco-maven-plugin dependency-version: 0.8.13 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 7693ddf9d..a5b5d4539 100644 --- a/pom.xml +++ b/pom.xml @@ -278,7 +278,7 @@ org.jacoco jacoco-maven-plugin - 0.8.12 + 0.8.13 From 1ddb08842eb4a5941caa85e17cb85f8ee78eca9e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 5 Apr 2025 07:15:38 +0000 Subject: [PATCH 833/888] chore(deps): bump org.apache.maven.plugins:maven-surefire-plugin Bumps [org.apache.maven.plugins:maven-surefire-plugin](https://github.com/apache/maven-surefire) from 3.5.2 to 3.5.3. - [Release notes](https://github.com/apache/maven-surefire/releases) - [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.5.2...surefire-3.5.3) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-surefire-plugin dependency-version: 3.5.3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 7693ddf9d..90fd95e06 100644 --- a/pom.xml +++ b/pom.xml @@ -206,7 +206,7 @@ org.apache.maven.plugins maven-surefire-plugin - 3.5.2 + 3.5.3 org.apache.maven.plugins From a161e20f1da2dfe60fec9b97fa668b6e36ca6b5c Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Sat, 5 Apr 2025 09:18:43 +0200 Subject: [PATCH 834/888] chore(deps): update httpclient to 5.4.3 --- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- pom.xml | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle index 56ccdbe30..aec63fe5e 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle @@ -22,7 +22,7 @@ dependencies { } testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") - testImplementation("org.apache.httpcomponents.client5:httpclient5:5.4.2") + testImplementation("org.apache.httpcomponents.client5:httpclient5:5.4.3") testImplementation(platform("org.junit:junit-bom:5.12.1")) testImplementation("org.junit.jupiter:junit-jupiter") testRuntimeOnly("org.junit.platform:junit-platform-launcher") diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml index dfa813181..1f05e9018 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/pom.xml @@ -37,7 +37,7 @@ org.apache.httpcomponents.client5 httpclient5 - 5.4.2 + 5.4.3 test diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index 3115e5a63..1897c2d05 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -18,7 +18,7 @@ dependencies { ) testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") - testImplementation("org.apache.httpcomponents.client5:httpclient5:5.4.2") + testImplementation("org.apache.httpcomponents.client5:httpclient5:5.4.3") testImplementation(platform("org.junit:junit-bom:5.12.1")) testImplementation("org.junit.jupiter:junit-jupiter") testRuntimeOnly("org.junit.platform:junit-platform-launcher") diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index f8edf92ec..fe0b8b6cb 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -38,7 +38,7 @@ org.apache.httpcomponents.client5 httpclient5 - 5.4.2 + 5.4.3 test diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle index c90674fdc..6f3128660 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle @@ -14,7 +14,7 @@ dependencies { ) testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") - testImplementation("org.apache.httpcomponents.client5:httpclient5:5.4.2") + testImplementation("org.apache.httpcomponents.client5:httpclient5:5.4.3") testImplementation(platform("org.junit:junit-bom:5.12.1")) testImplementation("org.junit.jupiter:junit-jupiter") testRuntimeOnly("org.junit.platform:junit-platform-launcher") diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml index 8e2648a9e..091d1ad17 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml @@ -41,7 +41,7 @@ org.apache.httpcomponents.client5 httpclient5 - 5.4.2 + 5.4.3 test diff --git a/pom.xml b/pom.xml index 7693ddf9d..e01461df4 100644 --- a/pom.xml +++ b/pom.xml @@ -119,7 +119,7 @@ org.apache.httpcomponents.client5 httpclient5 - 5.4.2 + 5.4.3 test From 02f36fb9891d0d6fac25e78de1c582bae178cc6c Mon Sep 17 00:00:00 2001 From: deki Date: Sat, 5 Apr 2025 07:37:23 +0000 Subject: [PATCH 835/888] chore: release - prepare release aws-serverless-java-container-2.1.3 --- aws-serverless-java-container-core/pom.xml | 4 ++-- aws-serverless-java-container-jersey/pom.xml | 8 ++++---- aws-serverless-java-container-spring/pom.xml | 8 ++++---- aws-serverless-java-container-springboot3/pom.xml | 8 ++++---- aws-serverless-jersey-archetype/pom.xml | 6 +++--- aws-serverless-spring-archetype/pom.xml | 6 +++--- aws-serverless-springboot3-archetype/pom.xml | 6 +++--- pom.xml | 4 ++-- 8 files changed, 25 insertions(+), 25 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 1fd00e484..0e33fc12b 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Core Allows Java applications written for a servlet container to run in AWS Lambda https://aws.amazon.com/lambda - 2.2.0-SNAPSHOT + 2.1.3 com.amazonaws.serverless aws-serverless-java-container - 2.2.0-SNAPSHOT + 2.1.3 .. diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index 80e99330d..2777d8d5e 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Jersey implementation Allows Java applications written for Jersey to run in AWS Lambda https://aws.amazon.com/lambda - 2.2.0-SNAPSHOT + 2.1.3 com.amazonaws.serverless aws-serverless-java-container - 2.2.0-SNAPSHOT + 2.1.3 .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.2.0-SNAPSHOT + 2.1.3 com.fasterxml.jackson.core @@ -35,7 +35,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.2.0-SNAPSHOT + 2.1.3 tests test-jar test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index ee7935d43..dc6e49cda 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spring implementation Allows Java applications written for the Spring framework to run in AWS Lambda https://aws.amazon.com/lambda - 2.2.0-SNAPSHOT + 2.1.3 com.amazonaws.serverless aws-serverless-java-container - 2.2.0-SNAPSHOT + 2.1.3 .. @@ -25,12 +25,12 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.2.0-SNAPSHOT + 2.1.3 com.amazonaws.serverless aws-serverless-java-container-core - 2.2.0-SNAPSHOT + 2.1.3 tests test-jar test diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index 236e173f4..02b12448a 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -3,7 +3,7 @@ aws-serverless-java-container com.amazonaws.serverless - 2.2.0-SNAPSHOT + 2.1.3 4.0.0 @@ -12,7 +12,7 @@ AWS Serverless Java container support - SpringBoot 3 implementation Allows Java applications written for SpringBoot 3 to run in AWS Lambda https://aws.amazon.com/lambda - 2.2.0-SNAPSHOT + 2.1.3 6.2.5 @@ -30,12 +30,12 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.2.0-SNAPSHOT + 2.1.3 com.amazonaws.serverless aws-serverless-java-container-core - 2.2.0-SNAPSHOT + 2.1.3 tests test-jar test diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index 412459c41..0cbd9a835 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.2.0-SNAPSHOT + 2.1.3 com.amazonaws.serverless.archetypes aws-serverless-jersey-archetype - 2.2.0-SNAPSHOT + 2.1.3 maven-archetype https://github.com/aws/serverless-java-container.git - HEAD + aws-serverless-java-container-2.1.3 diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index 8b95c5332..0e4e892a5 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.2.0-SNAPSHOT + 2.1.3 com.amazonaws.serverless.archetypes aws-serverless-spring-archetype - 2.2.0-SNAPSHOT + 2.1.3 maven-archetype https://github.com/aws/serverless-java-container.git - HEAD + aws-serverless-java-container-2.1.3 diff --git a/aws-serverless-springboot3-archetype/pom.xml b/aws-serverless-springboot3-archetype/pom.xml index 89469c2e4..ed23960ce 100644 --- a/aws-serverless-springboot3-archetype/pom.xml +++ b/aws-serverless-springboot3-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.2.0-SNAPSHOT + 2.1.3 com.amazonaws.serverless.archetypes aws-serverless-springboot3-archetype - 2.2.0-SNAPSHOT + 2.1.3 maven-archetype https://github.com/aws/serverless-java-container.git - HEAD + aws-serverless-java-container-2.1.3 diff --git a/pom.xml b/pom.xml index 6bc2ff232..9ac118694 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazonaws.serverless aws-serverless-java-container pom - 2.2.0-SNAPSHOT + 2.1.3 AWS Serverless Java container A Java framework to run Spring, Spring Boot, Jersey, Spark, and Struts applications inside AWS Lambda https://github.com/aws/serverless-java-container @@ -37,7 +37,7 @@ https://github.com/aws/serverless-java-container scm:git:https://github.com/aws/serverless-java-container.git - HEAD + aws-serverless-java-container-2.1.3 From 7d20289b26ba3e0a02d9393ccd234b04a0d909b9 Mon Sep 17 00:00:00 2001 From: deki Date: Sat, 5 Apr 2025 07:37:24 +0000 Subject: [PATCH 836/888] chore: release - prepare for next development iteration --- aws-serverless-java-container-core/pom.xml | 4 ++-- aws-serverless-java-container-jersey/pom.xml | 8 ++++---- aws-serverless-java-container-spring/pom.xml | 8 ++++---- aws-serverless-java-container-springboot3/pom.xml | 8 ++++---- aws-serverless-jersey-archetype/pom.xml | 6 +++--- aws-serverless-spring-archetype/pom.xml | 6 +++--- aws-serverless-springboot3-archetype/pom.xml | 6 +++--- pom.xml | 4 ++-- 8 files changed, 25 insertions(+), 25 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 0e33fc12b..15cd203ab 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Core Allows Java applications written for a servlet container to run in AWS Lambda https://aws.amazon.com/lambda - 2.1.3 + 2.1.4-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 2.1.3 + 2.1.4-SNAPSHOT .. diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index 2777d8d5e..905f4d463 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Jersey implementation Allows Java applications written for Jersey to run in AWS Lambda https://aws.amazon.com/lambda - 2.1.3 + 2.1.4-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 2.1.3 + 2.1.4-SNAPSHOT .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.1.3 + 2.1.4-SNAPSHOT com.fasterxml.jackson.core @@ -35,7 +35,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.1.3 + 2.1.4-SNAPSHOT tests test-jar test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index dc6e49cda..eeaf7a2a9 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spring implementation Allows Java applications written for the Spring framework to run in AWS Lambda https://aws.amazon.com/lambda - 2.1.3 + 2.1.4-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 2.1.3 + 2.1.4-SNAPSHOT .. @@ -25,12 +25,12 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.1.3 + 2.1.4-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container-core - 2.1.3 + 2.1.4-SNAPSHOT tests test-jar test diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index 02b12448a..0186a3802 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -3,7 +3,7 @@ aws-serverless-java-container com.amazonaws.serverless - 2.1.3 + 2.1.4-SNAPSHOT 4.0.0 @@ -12,7 +12,7 @@ AWS Serverless Java container support - SpringBoot 3 implementation Allows Java applications written for SpringBoot 3 to run in AWS Lambda https://aws.amazon.com/lambda - 2.1.3 + 2.1.4-SNAPSHOT 6.2.5 @@ -30,12 +30,12 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.1.3 + 2.1.4-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container-core - 2.1.3 + 2.1.4-SNAPSHOT tests test-jar test diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index 0cbd9a835..c85993a40 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.1.3 + 2.1.4-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-jersey-archetype - 2.1.3 + 2.1.4-SNAPSHOT maven-archetype https://github.com/aws/serverless-java-container.git - aws-serverless-java-container-2.1.3 + HEAD diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index 0e4e892a5..46e3d8dbc 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.1.3 + 2.1.4-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-spring-archetype - 2.1.3 + 2.1.4-SNAPSHOT maven-archetype https://github.com/aws/serverless-java-container.git - aws-serverless-java-container-2.1.3 + HEAD diff --git a/aws-serverless-springboot3-archetype/pom.xml b/aws-serverless-springboot3-archetype/pom.xml index ed23960ce..01b157e58 100644 --- a/aws-serverless-springboot3-archetype/pom.xml +++ b/aws-serverless-springboot3-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.1.3 + 2.1.4-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-springboot3-archetype - 2.1.3 + 2.1.4-SNAPSHOT maven-archetype https://github.com/aws/serverless-java-container.git - aws-serverless-java-container-2.1.3 + HEAD diff --git a/pom.xml b/pom.xml index 9ac118694..d679e20a4 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazonaws.serverless aws-serverless-java-container pom - 2.1.3 + 2.1.4-SNAPSHOT AWS Serverless Java container A Java framework to run Spring, Spring Boot, Jersey, Spark, and Struts applications inside AWS Lambda https://github.com/aws/serverless-java-container @@ -37,7 +37,7 @@ https://github.com/aws/serverless-java-container scm:git:https://github.com/aws/serverless-java-container.git - aws-serverless-java-container-2.1.3 + HEAD From 215b15e90f24c8bdf6dace204cc41b82a983aab4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Apr 2025 04:14:00 +0000 Subject: [PATCH 837/888] chore(deps): bump org.owasp:dependency-check-maven from 12.1.0 to 12.1.1 Bumps [org.owasp:dependency-check-maven](https://github.com/dependency-check/DependencyCheck) from 12.1.0 to 12.1.1. - [Release notes](https://github.com/dependency-check/DependencyCheck/releases) - [Changelog](https://github.com/dependency-check/DependencyCheck/blob/main/CHANGELOG.md) - [Commits](https://github.com/dependency-check/DependencyCheck/compare/v12.1.0...v12.1.1) --- updated-dependencies: - dependency-name: org.owasp:dependency-check-maven dependency-version: 12.1.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index d679e20a4..7b4aea560 100644 --- a/pom.xml +++ b/pom.xml @@ -77,7 +77,7 @@ 0.7 - 12.1.0 + 12.1.1 2.18.3 2.0.17 5.12.1 From 50c2ccd0b4ce469f7155c0706dedfacaf0974ff1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Apr 2025 04:14:16 +0000 Subject: [PATCH 838/888] chore(deps): bump org.owasp:dependency-check-maven Bumps [org.owasp:dependency-check-maven](https://github.com/dependency-check/DependencyCheck) from 12.1.0 to 12.1.1. - [Release notes](https://github.com/dependency-check/DependencyCheck/releases) - [Changelog](https://github.com/dependency-check/DependencyCheck/blob/main/CHANGELOG.md) - [Commits](https://github.com/dependency-check/DependencyCheck/compare/v12.1.0...v12.1.1) --- updated-dependencies: - dependency-name: org.owasp:dependency-check-maven dependency-version: 12.1.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index d679e20a4..7b4aea560 100644 --- a/pom.xml +++ b/pom.xml @@ -77,7 +77,7 @@ 0.7 - 12.1.0 + 12.1.1 2.18.3 2.0.17 5.12.1 From 2e0d79048dfd9b3ee7534959d00678d4c153a7b1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Apr 2025 04:14:26 +0000 Subject: [PATCH 839/888] chore(deps): bump org.owasp:dependency-check-maven Bumps [org.owasp:dependency-check-maven](https://github.com/dependency-check/DependencyCheck) from 12.1.0 to 12.1.1. - [Release notes](https://github.com/dependency-check/DependencyCheck/releases) - [Changelog](https://github.com/dependency-check/DependencyCheck/blob/main/CHANGELOG.md) - [Commits](https://github.com/dependency-check/DependencyCheck/compare/v12.1.0...v12.1.1) --- updated-dependencies: - dependency-name: org.owasp:dependency-check-maven dependency-version: 12.1.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index d679e20a4..7b4aea560 100644 --- a/pom.xml +++ b/pom.xml @@ -77,7 +77,7 @@ 0.7 - 12.1.0 + 12.1.1 2.18.3 2.0.17 5.12.1 From 8a7d9031b211ff9a3355489083f2a7702af1deed Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Apr 2025 04:14:37 +0000 Subject: [PATCH 840/888] chore(deps): bump org.owasp:dependency-check-maven Bumps [org.owasp:dependency-check-maven](https://github.com/dependency-check/DependencyCheck) from 12.1.0 to 12.1.1. - [Release notes](https://github.com/dependency-check/DependencyCheck/releases) - [Changelog](https://github.com/dependency-check/DependencyCheck/blob/main/CHANGELOG.md) - [Commits](https://github.com/dependency-check/DependencyCheck/compare/v12.1.0...v12.1.1) --- updated-dependencies: - dependency-name: org.owasp:dependency-check-maven dependency-version: 12.1.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index d679e20a4..7b4aea560 100644 --- a/pom.xml +++ b/pom.xml @@ -77,7 +77,7 @@ 0.7 - 12.1.0 + 12.1.1 2.18.3 2.0.17 5.12.1 From 9088431d352db09e54d0cab55e1a312533c525c7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Apr 2025 04:14:47 +0000 Subject: [PATCH 841/888] chore(deps): bump org.owasp:dependency-check-maven Bumps [org.owasp:dependency-check-maven](https://github.com/dependency-check/DependencyCheck) from 12.1.0 to 12.1.1. - [Release notes](https://github.com/dependency-check/DependencyCheck/releases) - [Changelog](https://github.com/dependency-check/DependencyCheck/blob/main/CHANGELOG.md) - [Commits](https://github.com/dependency-check/DependencyCheck/compare/v12.1.0...v12.1.1) --- updated-dependencies: - dependency-name: org.owasp:dependency-check-maven dependency-version: 12.1.1 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index d679e20a4..7b4aea560 100644 --- a/pom.xml +++ b/pom.xml @@ -77,7 +77,7 @@ 0.7 - 12.1.0 + 12.1.1 2.18.3 2.0.17 5.12.1 From 41f67a57b649882e933d5fc6c35bb5f3d7252de1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 14 Apr 2025 04:14:02 +0000 Subject: [PATCH 842/888] chore(deps): bump org.junit:junit-bom Bumps [org.junit:junit-bom](https://github.com/junit-team/junit5) from 5.12.1 to 5.12.2. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.12.1...r5.12.2) --- updated-dependencies: - dependency-name: org.junit:junit-bom dependency-version: 5.12.2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- .../src/main/resources/archetype-resources/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index 1897c2d05..f6ff59963 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -19,7 +19,7 @@ dependencies { testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") testImplementation("org.apache.httpcomponents.client5:httpclient5:5.4.3") - testImplementation(platform("org.junit:junit-bom:5.12.1")) + testImplementation(platform("org.junit:junit-bom:5.12.2")) testImplementation("org.junit.jupiter:junit-jupiter") testRuntimeOnly("org.junit.platform:junit-platform-launcher") } From a58d611dbdf97d87b348dd0e800cddb64d51b2f4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 14 Apr 2025 04:26:06 +0000 Subject: [PATCH 843/888] chore(deps): bump the junit group across 8 directories with 1 update Bumps the junit group with 1 update in the / directory: [org.junit:junit-bom](https://github.com/junit-team/junit5). Bumps the junit group with 1 update in the /aws-serverless-java-container-core directory: [org.junit:junit-bom](https://github.com/junit-team/junit5). Bumps the junit group with 1 update in the /aws-serverless-java-container-jersey directory: [org.junit:junit-bom](https://github.com/junit-team/junit5). Bumps the junit group with 1 update in the /aws-serverless-java-container-spring directory: [org.junit:junit-bom](https://github.com/junit-team/junit5). Bumps the junit group with 1 update in the /aws-serverless-java-container-springboot3 directory: [org.junit:junit-bom](https://github.com/junit-team/junit5). Bumps the junit group with 1 update in the /aws-serverless-jersey-archetype directory: [org.junit:junit-bom](https://github.com/junit-team/junit5). Bumps the junit group with 1 update in the /aws-serverless-spring-archetype directory: [org.junit:junit-bom](https://github.com/junit-team/junit5). Bumps the junit group with 1 update in the /aws-serverless-springboot3-archetype directory: [org.junit:junit-bom](https://github.com/junit-team/junit5). Updates `org.junit:junit-bom` from 5.12.1 to 5.12.2 - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.12.1...r5.12.2) Updates `org.junit:junit-bom` from 5.12.1 to 5.12.2 - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.12.1...r5.12.2) Updates `org.junit:junit-bom` from 5.12.1 to 5.12.2 - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.12.1...r5.12.2) Updates `org.junit:junit-bom` from 5.12.1 to 5.12.2 - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.12.1...r5.12.2) Updates `org.junit:junit-bom` from 5.12.1 to 5.12.2 - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.12.1...r5.12.2) Updates `org.junit:junit-bom` from 5.12.1 to 5.12.2 - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.12.1...r5.12.2) Updates `org.junit:junit-bom` from 5.12.1 to 5.12.2 - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.12.1...r5.12.2) Updates `org.junit:junit-bom` from 5.12.1 to 5.12.2 - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.12.1...r5.12.2) --- updated-dependencies: - dependency-name: org.junit:junit-bom dependency-version: 5.12.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: junit - dependency-name: org.junit:junit-bom dependency-version: 5.12.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: junit - dependency-name: org.junit:junit-bom dependency-version: 5.12.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: junit - dependency-name: org.junit:junit-bom dependency-version: 5.12.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: junit - dependency-name: org.junit:junit-bom dependency-version: 5.12.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: junit - dependency-name: org.junit:junit-bom dependency-version: 5.12.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: junit - dependency-name: org.junit:junit-bom dependency-version: 5.12.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: junit - dependency-name: org.junit:junit-bom dependency-version: 5.12.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: junit ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index d679e20a4..33bef240a 100644 --- a/pom.xml +++ b/pom.xml @@ -80,7 +80,7 @@ 12.1.0 2.18.3 2.0.17 - 5.12.1 + 5.12.2 5.17.0 1.3 UTF-8 From dc9c63b491b41d691a1e3ce16a7bc2410d7d11e9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 21 Apr 2025 05:43:05 +0000 Subject: [PATCH 844/888] chore(deps): bump com.h3xstream.findsecbugs:findsecbugs-plugin Bumps [com.h3xstream.findsecbugs:findsecbugs-plugin](https://github.com/find-sec-bugs/find-sec-bugs) from 1.13.0 to 1.14.0. - [Release notes](https://github.com/find-sec-bugs/find-sec-bugs/releases) - [Changelog](https://github.com/find-sec-bugs/find-sec-bugs/blob/master/CHANGELOG.md) - [Commits](https://github.com/find-sec-bugs/find-sec-bugs/commits) --- updated-dependencies: - dependency-name: com.h3xstream.findsecbugs:findsecbugs-plugin dependency-version: 1.14.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index be3e8ff83..a076fa924 100644 --- a/pom.xml +++ b/pom.xml @@ -270,7 +270,7 @@ com.h3xstream.findsecbugs findsecbugs-plugin - 1.13.0 + 1.14.0 From 53beaa1b6c5a8bf2125d1dee5ae0550b5581773b Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Tue, 6 May 2025 14:49:21 +0200 Subject: [PATCH 845/888] chore(deps): Update Spring dependencies (framework to 6.2.6, security to 6.4.5, boot to 3.4.5) --- aws-serverless-java-container-core/pom.xml | 2 +- aws-serverless-java-container-spring/pom.xml | 4 ++-- aws-serverless-java-container-springboot3/pom.xml | 6 +++--- .../src/main/resources/archetype-resources/build.gradle | 4 ++-- .../src/main/resources/archetype-resources/pom.xml | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/pom.xml | 2 +- samples/spring/pet-store/build.gradle | 4 ++-- samples/spring/pet-store/pom.xml | 2 +- samples/springboot3/alt-pet-store/build.gradle | 2 +- samples/springboot3/alt-pet-store/pom.xml | 2 +- samples/springboot3/graphql-pet-store/pom.xml | 2 +- samples/springboot3/pet-store-native/pom.xml | 2 +- samples/springboot3/pet-store/build.gradle | 2 +- samples/springboot3/pet-store/pom.xml | 2 +- 15 files changed, 20 insertions(+), 20 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 15cd203ab..fa34e8d88 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -60,7 +60,7 @@ org.springframework.security spring-security-web - 6.4.4 + 6.4.5 test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index eeaf7a2a9..f26cc578d 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -16,8 +16,8 @@ - 6.2.5 - 6.4.4 + 6.2.6 + 6.4.5 diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index 619cdaa91..b09d851b0 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -15,9 +15,9 @@ 2.1.4-SNAPSHOT - 6.2.5 - 3.4.4 - 6.4.4 + 6.2.6 + 3.4.5 + 6.4.5 diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index f6ff59963..026885dd5 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -7,8 +7,8 @@ repositories { dependencies { implementation ( - 'org.springframework:spring-webmvc:6.2.5', - 'org.springframework:spring-context:6.2.5', + 'org.springframework:spring-webmvc:6.2.6', + 'org.springframework:spring-context:6.2.6', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[2.0-SNAPSHOT,)', 'org.apache.logging.log4j:log4j-core:2.24.3', 'org.apache.logging.log4j:log4j-api:2.24.3', diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml index fe0b8b6cb..48b70f27f 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ 1.8 1.8 - 6.2.5 + 6.2.6 5.12.1 2.24.2 diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle index 6f3128660..d44a26ccd 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle @@ -9,7 +9,7 @@ repositories { dependencies { implementation ( - 'org.springframework.boot:spring-boot-starter-web:3.4.4', + 'org.springframework.boot:spring-boot-starter-web:3.4.5', 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:[2.0-SNAPSHOT,)', ) diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml index 091d1ad17..73d407dd8 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/pom.xml @@ -16,7 +16,7 @@ org.springframework.boot spring-boot-starter-parent - 3.4.4 + 3.4.5 diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index 0c28ff2b2..4d60cdd08 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -7,8 +7,8 @@ repositories { dependencies { implementation ( - 'org.springframework:spring-webmvc:6.2.5', - 'org.springframework:spring-context:6.2.5', + 'org.springframework:spring-webmvc:6.2.6', + 'org.springframework:spring-context:6.2.6', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[2.0-SNAPSHOT,)', 'org.apache.logging.log4j:log4j-core:2.24.3', 'org.apache.logging.log4j:log4j-api:2.24.3', diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index 4945ba716..d4f230782 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -24,7 +24,7 @@ - 6.2.5 + 6.2.6 2.24.3 17 17 diff --git a/samples/springboot3/alt-pet-store/build.gradle b/samples/springboot3/alt-pet-store/build.gradle index 59352a117..653135db0 100644 --- a/samples/springboot3/alt-pet-store/build.gradle +++ b/samples/springboot3/alt-pet-store/build.gradle @@ -9,7 +9,7 @@ repositories { dependencies { implementation ( - implementation('org.springframework.boot:spring-boot-starter-web:3.4.4') { + implementation('org.springframework.boot:spring-boot-starter-web:3.4.5') { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat' }, 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:[2.0-SNAPSHOT,)', diff --git a/samples/springboot3/alt-pet-store/pom.xml b/samples/springboot3/alt-pet-store/pom.xml index f1f605c6c..0c98f1fe5 100644 --- a/samples/springboot3/alt-pet-store/pom.xml +++ b/samples/springboot3/alt-pet-store/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 3.4.4 + 3.4.5 diff --git a/samples/springboot3/graphql-pet-store/pom.xml b/samples/springboot3/graphql-pet-store/pom.xml index 76b804e51..d3b4ef079 100644 --- a/samples/springboot3/graphql-pet-store/pom.xml +++ b/samples/springboot3/graphql-pet-store/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 3.4.4 + 3.4.5 diff --git a/samples/springboot3/pet-store-native/pom.xml b/samples/springboot3/pet-store-native/pom.xml index 2dc5508d1..960442014 100644 --- a/samples/springboot3/pet-store-native/pom.xml +++ b/samples/springboot3/pet-store-native/pom.xml @@ -6,7 +6,7 @@ org.springframework.boot spring-boot-starter-parent - 3.4.4 + 3.4.5 com.amazonaws.serverless.sample diff --git a/samples/springboot3/pet-store/build.gradle b/samples/springboot3/pet-store/build.gradle index 59352a117..653135db0 100644 --- a/samples/springboot3/pet-store/build.gradle +++ b/samples/springboot3/pet-store/build.gradle @@ -9,7 +9,7 @@ repositories { dependencies { implementation ( - implementation('org.springframework.boot:spring-boot-starter-web:3.4.4') { + implementation('org.springframework.boot:spring-boot-starter-web:3.4.5') { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat' }, 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:[2.0-SNAPSHOT,)', diff --git a/samples/springboot3/pet-store/pom.xml b/samples/springboot3/pet-store/pom.xml index af519947e..2896d90dc 100644 --- a/samples/springboot3/pet-store/pom.xml +++ b/samples/springboot3/pet-store/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 3.4.4 + 3.4.5 From 36bdfb8c12576b13adb8d273538916526c3496ac Mon Sep 17 00:00:00 2001 From: Dennis Kieselhorst Date: Tue, 6 May 2025 21:29:03 +0200 Subject: [PATCH 846/888] doc: add 3.x version (#1207) --- README.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 9df70fdff..3f26e0c1b 100644 --- a/README.md +++ b/README.md @@ -5,10 +5,11 @@ Serverless Java Container natively supports API Gateway's proxy integration mode Currently the following versions are maintained: -| Version | Branch | Java Enterprise support | Spring versions | JAX-RS/ Jersey version | Struts support | Spark support | -|---------|--------|-------------------------|-----------------|------------------------|----------------|---------------| -| 1.x | [1.x](https://github.com/aws/serverless-java-container/tree/1.x) | Java EE (javax.*) | 5.x (Boot 2.x) | 2.x | :white_check_mark: | :white_check_mark: | -| 2.x | [main](https://github.com/aws/serverless-java-container/tree/main) | Jakarta EE (jakarta.*) | 6.x (Boot 3.x) | 3.x | :x: | :x: | +| Version | Branch | Java Enterprise support | Spring versions | JAX-RS/ Jersey version | Struts support | Spark support | +|---------|--------|-----------------------------|-----------------|------------------------|----------------|---------------| +| 1.x | [1.x](https://github.com/aws/serverless-java-container/tree/1.x) | Java EE (javax.*) | 5.x (Boot 2.x) | 2.x | :white_check_mark: | :white_check_mark: | +| 2.x | [main](https://github.com/aws/serverless-java-container/tree/main) | Jakarta EE 9-10 (jakarta.*) | 6.x (Boot 3.x) | 3.x | :x: | :x: | +| 3.x | | Jakarta EE 11 (jakarta.*) | 7.x (Boot 4.x) | 4.x | :x: | :x: | Follow the quick start guides in [our wiki](https://github.com/aws/serverless-java-container/wiki) to integrate Serverless Java Container with your project: * [Spring quick start](https://github.com/aws/serverless-java-container/wiki/Quick-start---Spring) From faf0d48e3a3cbf95b9a80ca28c9a5b3d6b066da8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 May 2025 04:30:36 +0000 Subject: [PATCH 847/888] chore(deps): bump org.apache.maven.archetype:archetype-packaging Bumps [org.apache.maven.archetype:archetype-packaging](https://github.com/apache/maven-archetype) from 3.3.1 to 3.4.0. - [Release notes](https://github.com/apache/maven-archetype/releases) - [Commits](https://github.com/apache/maven-archetype/compare/maven-archetype-3.3.1...maven-archetype-3.4.0) --- updated-dependencies: - dependency-name: org.apache.maven.archetype:archetype-packaging dependency-version: 3.4.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- aws-serverless-jersey-archetype/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index c85993a40..1b50cbfa6 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -48,7 +48,7 @@ org.apache.maven.archetype archetype-packaging - 3.3.1 + 3.4.0 From 7d1b723e52a5bde74e96907cb1abbeba2f31feb0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 May 2025 04:30:43 +0000 Subject: [PATCH 848/888] chore(deps): bump org.apache.maven.plugins:maven-archetype-plugin Bumps [org.apache.maven.plugins:maven-archetype-plugin](https://github.com/apache/maven-archetype) from 3.3.1 to 3.4.0. - [Release notes](https://github.com/apache/maven-archetype/releases) - [Commits](https://github.com/apache/maven-archetype/compare/maven-archetype-3.3.1...maven-archetype-3.4.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-archetype-plugin dependency-version: 3.4.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- aws-serverless-jersey-archetype/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index c85993a40..806371691 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -65,7 +65,7 @@ org.apache.maven.plugins maven-archetype-plugin - 3.3.1 + 3.4.0 From 4486eb4b56b702e1d16411963030d01dd2eb9f31 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 May 2025 04:30:56 +0000 Subject: [PATCH 849/888] chore(deps): bump org.apache.maven.plugins:maven-archetype-plugin Bumps [org.apache.maven.plugins:maven-archetype-plugin](https://github.com/apache/maven-archetype) from 3.3.1 to 3.4.0. - [Release notes](https://github.com/apache/maven-archetype/releases) - [Commits](https://github.com/apache/maven-archetype/compare/maven-archetype-3.3.1...maven-archetype-3.4.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-archetype-plugin dependency-version: 3.4.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- aws-serverless-spring-archetype/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index 46e3d8dbc..543fb735c 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -66,7 +66,7 @@ org.apache.maven.plugins maven-archetype-plugin - 3.3.1 + 3.4.0 From af5bf64344a7e6cce416ae99d3ee1f0c120b9e68 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 May 2025 04:31:00 +0000 Subject: [PATCH 850/888] chore(deps): bump org.apache.maven.archetype:archetype-packaging Bumps [org.apache.maven.archetype:archetype-packaging](https://github.com/apache/maven-archetype) from 3.3.1 to 3.4.0. - [Release notes](https://github.com/apache/maven-archetype/releases) - [Commits](https://github.com/apache/maven-archetype/compare/maven-archetype-3.3.1...maven-archetype-3.4.0) --- updated-dependencies: - dependency-name: org.apache.maven.archetype:archetype-packaging dependency-version: 3.4.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- aws-serverless-spring-archetype/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index 46e3d8dbc..7b2eac6c5 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -48,7 +48,7 @@ org.apache.maven.archetype archetype-packaging - 3.3.1 + 3.4.0 From 327851297abf67e808195feff193a96c08f53fdf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 May 2025 04:31:06 +0000 Subject: [PATCH 851/888] chore(deps): bump org.apache.maven.plugins:maven-archetype-plugin Bumps [org.apache.maven.plugins:maven-archetype-plugin](https://github.com/apache/maven-archetype) from 3.3.1 to 3.4.0. - [Release notes](https://github.com/apache/maven-archetype/releases) - [Commits](https://github.com/apache/maven-archetype/compare/maven-archetype-3.3.1...maven-archetype-3.4.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-archetype-plugin dependency-version: 3.4.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- aws-serverless-springboot3-archetype/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws-serverless-springboot3-archetype/pom.xml b/aws-serverless-springboot3-archetype/pom.xml index 01b157e58..a6abbb25f 100644 --- a/aws-serverless-springboot3-archetype/pom.xml +++ b/aws-serverless-springboot3-archetype/pom.xml @@ -65,7 +65,7 @@ org.apache.maven.plugins maven-archetype-plugin - 3.3.1 + 3.4.0 From 4916e68a790cf8509f7b980493b2e6ee135c30d9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 May 2025 04:31:13 +0000 Subject: [PATCH 852/888] chore(deps): bump org.apache.maven.archetype:archetype-packaging Bumps [org.apache.maven.archetype:archetype-packaging](https://github.com/apache/maven-archetype) from 3.3.1 to 3.4.0. - [Release notes](https://github.com/apache/maven-archetype/releases) - [Commits](https://github.com/apache/maven-archetype/compare/maven-archetype-3.3.1...maven-archetype-3.4.0) --- updated-dependencies: - dependency-name: org.apache.maven.archetype:archetype-packaging dependency-version: 3.4.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- aws-serverless-springboot3-archetype/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws-serverless-springboot3-archetype/pom.xml b/aws-serverless-springboot3-archetype/pom.xml index 01b157e58..a37fee350 100644 --- a/aws-serverless-springboot3-archetype/pom.xml +++ b/aws-serverless-springboot3-archetype/pom.xml @@ -48,7 +48,7 @@ org.apache.maven.archetype archetype-packaging - 3.3.1 + 3.4.0 From 17201462aed05e360ce33cef3a3b8a512e3a534f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 May 2025 04:35:30 +0000 Subject: [PATCH 853/888] chore(deps-dev): bump the httpclient group across 8 directories with 1 update Bumps the httpclient group with 1 update in the / directory: [org.apache.httpcomponents.client5:httpclient5](https://github.com/apache/httpcomponents-client). Bumps the httpclient group with 1 update in the /aws-serverless-java-container-core directory: [org.apache.httpcomponents.client5:httpclient5](https://github.com/apache/httpcomponents-client). Bumps the httpclient group with 1 update in the /aws-serverless-java-container-jersey directory: [org.apache.httpcomponents.client5:httpclient5](https://github.com/apache/httpcomponents-client). Bumps the httpclient group with 1 update in the /aws-serverless-java-container-spring directory: [org.apache.httpcomponents.client5:httpclient5](https://github.com/apache/httpcomponents-client). Bumps the httpclient group with 1 update in the /aws-serverless-java-container-springboot3 directory: [org.apache.httpcomponents.client5:httpclient5](https://github.com/apache/httpcomponents-client). Bumps the httpclient group with 1 update in the /aws-serverless-jersey-archetype directory: [org.apache.httpcomponents.client5:httpclient5](https://github.com/apache/httpcomponents-client). Bumps the httpclient group with 1 update in the /aws-serverless-spring-archetype directory: [org.apache.httpcomponents.client5:httpclient5](https://github.com/apache/httpcomponents-client). Bumps the httpclient group with 1 update in the /aws-serverless-springboot3-archetype directory: [org.apache.httpcomponents.client5:httpclient5](https://github.com/apache/httpcomponents-client). Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) --- updated-dependencies: - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:development update-type: version-update:semver-minor dependency-group: httpclient ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index be3e8ff83..41e74d07c 100644 --- a/pom.xml +++ b/pom.xml @@ -119,7 +119,7 @@ org.apache.httpcomponents.client5 httpclient5 - 5.4.3 + 5.5 test From 972c0bcd755e6027358275c12a40107446b4b085 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 May 2025 04:38:23 +0000 Subject: [PATCH 854/888] chore(deps): bump org.springframework.boot:spring-boot-starter-parent Bumps [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from 3.4.5 to 3.5.0. - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.4.5...v3.5.0) --- updated-dependencies: - dependency-name: org.springframework.boot:spring-boot-starter-parent dependency-version: 3.5.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- samples/springboot3/alt-pet-store/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/springboot3/alt-pet-store/pom.xml b/samples/springboot3/alt-pet-store/pom.xml index 0c98f1fe5..64cbb083c 100644 --- a/samples/springboot3/alt-pet-store/pom.xml +++ b/samples/springboot3/alt-pet-store/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 3.4.5 + 3.5.0 From 56e355ca3f53358aa690a7a5aba6527e60f8b9de Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 May 2025 04:38:32 +0000 Subject: [PATCH 855/888] chore(deps): bump org.springframework.boot:spring-boot-starter-parent Bumps [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from 3.4.5 to 3.5.0. - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.4.5...v3.5.0) --- updated-dependencies: - dependency-name: org.springframework.boot:spring-boot-starter-parent dependency-version: 3.5.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- samples/springboot3/graphql-pet-store/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/springboot3/graphql-pet-store/pom.xml b/samples/springboot3/graphql-pet-store/pom.xml index d3b4ef079..23ac0bae6 100644 --- a/samples/springboot3/graphql-pet-store/pom.xml +++ b/samples/springboot3/graphql-pet-store/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 3.4.5 + 3.5.0 From 1781631ed76477385f73df2fe19d386edd5e000a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 May 2025 04:38:43 +0000 Subject: [PATCH 856/888] chore(deps): bump org.springframework.boot:spring-boot-starter-parent Bumps [org.springframework.boot:spring-boot-starter-parent](https://github.com/spring-projects/spring-boot) from 3.4.5 to 3.5.0. - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.4.5...v3.5.0) --- updated-dependencies: - dependency-name: org.springframework.boot:spring-boot-starter-parent dependency-version: 3.5.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- samples/springboot3/pet-store/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/springboot3/pet-store/pom.xml b/samples/springboot3/pet-store/pom.xml index 2896d90dc..4126ead75 100644 --- a/samples/springboot3/pet-store/pom.xml +++ b/samples/springboot3/pet-store/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 3.4.5 + 3.5.0 From bb226134ce9c00e032049621d9834255b55cb65a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 May 2025 05:04:14 +0000 Subject: [PATCH 857/888] chore(deps): bump the httpclient group across 3 directories with 1 update Bumps the httpclient group with 1 update in the /aws-serverless-jersey-archetype/src/main/resources/archetype-resources directory: [org.apache.httpcomponents.client5:httpclient5](https://github.com/apache/httpcomponents-client). Bumps the httpclient group with 1 update in the /aws-serverless-spring-archetype/src/main/resources/archetype-resources directory: [org.apache.httpcomponents.client5:httpclient5](https://github.com/apache/httpcomponents-client). Bumps the httpclient group with 1 update in the /aws-serverless-springboot3-archetype/src/main/resources/archetype-resources directory: [org.apache.httpcomponents.client5:httpclient5](https://github.com/apache/httpcomponents-client). Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) Updates `org.apache.httpcomponents.client5:httpclient5` from 5.4.3 to 5.5 - [Changelog](https://github.com/apache/httpcomponents-client/blob/master/RELEASE_NOTES.txt) - [Commits](https://github.com/apache/httpcomponents-client/compare/rel/v5.4.3...rel/v5.5) --- updated-dependencies: - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:production update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:production update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:production update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:production update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:production update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:production update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:production update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:production update-type: version-update:semver-minor dependency-group: httpclient - dependency-name: org.apache.httpcomponents.client5:httpclient5 dependency-version: '5.5' dependency-type: direct:production update-type: version-update:semver-minor dependency-group: httpclient ... Signed-off-by: dependabot[bot] --- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle index aec63fe5e..c7c013f6a 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle @@ -22,7 +22,7 @@ dependencies { } testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") - testImplementation("org.apache.httpcomponents.client5:httpclient5:5.4.3") + testImplementation("org.apache.httpcomponents.client5:httpclient5:5.5") testImplementation(platform("org.junit:junit-bom:5.12.1")) testImplementation("org.junit.jupiter:junit-jupiter") testRuntimeOnly("org.junit.platform:junit-platform-launcher") diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index 026885dd5..076a9bcf4 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -18,7 +18,7 @@ dependencies { ) testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") - testImplementation("org.apache.httpcomponents.client5:httpclient5:5.4.3") + testImplementation("org.apache.httpcomponents.client5:httpclient5:5.5") testImplementation(platform("org.junit:junit-bom:5.12.2")) testImplementation("org.junit.jupiter:junit-jupiter") testRuntimeOnly("org.junit.platform:junit-platform-launcher") diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle index d44a26ccd..b9e084170 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle @@ -14,7 +14,7 @@ dependencies { ) testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") - testImplementation("org.apache.httpcomponents.client5:httpclient5:5.4.3") + testImplementation("org.apache.httpcomponents.client5:httpclient5:5.5") testImplementation(platform("org.junit:junit-bom:5.12.1")) testImplementation("org.junit.jupiter:junit-jupiter") testRuntimeOnly("org.junit.platform:junit-platform-launcher") From eef712ffbb45e8e84a9e97cab2f6eccc2f366c21 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Jun 2025 04:15:43 +0000 Subject: [PATCH 858/888] chore(deps): bump the spring group across 2 directories with 2 updates Bumps the spring group with 2 updates in the /aws-serverless-spring-archetype/src/main/resources/archetype-resources directory: [org.springframework:spring-webmvc](https://github.com/spring-projects/spring-framework) and [org.springframework:spring-context](https://github.com/spring-projects/spring-framework). Bumps the spring group with 2 updates in the /samples/spring/pet-store directory: [org.springframework:spring-webmvc](https://github.com/spring-projects/spring-framework) and [org.springframework:spring-context](https://github.com/spring-projects/spring-framework). Updates `org.springframework:spring-webmvc` from 6.2.6 to 6.2.8 - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.6...v6.2.8) Updates `org.springframework:spring-context` from 6.2.6 to 6.2.8 - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.6...v6.2.8) Updates `org.springframework:spring-webmvc` from 6.2.6 to 6.2.8 - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.6...v6.2.8) Updates `org.springframework:spring-context` from 6.2.6 to 6.2.8 - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.6...v6.2.8) Updates `org.springframework:spring-webmvc` from 6.2.6 to 6.2.8 - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.6...v6.2.8) Updates `org.springframework:spring-context` from 6.2.6 to 6.2.8 - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.6...v6.2.8) Updates `org.springframework:spring-webmvc` from 6.2.6 to 6.2.8 - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.6...v6.2.8) Updates `org.springframework:spring-context` from 6.2.6 to 6.2.8 - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.6...v6.2.8) --- updated-dependencies: - dependency-name: org.springframework:spring-webmvc dependency-version: 6.2.8 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: spring - dependency-name: org.springframework:spring-context dependency-version: 6.2.8 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: spring - dependency-name: org.springframework:spring-webmvc dependency-version: 6.2.8 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: spring - dependency-name: org.springframework:spring-context dependency-version: 6.2.8 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: spring - dependency-name: org.springframework:spring-webmvc dependency-version: 6.2.8 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: spring - dependency-name: org.springframework:spring-context dependency-version: 6.2.8 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: spring - dependency-name: org.springframework:spring-webmvc dependency-version: 6.2.8 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: spring - dependency-name: org.springframework:spring-context dependency-version: 6.2.8 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: spring ... Signed-off-by: dependabot[bot] --- .../src/main/resources/archetype-resources/build.gradle | 4 ++-- samples/spring/pet-store/build.gradle | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index 026885dd5..f8983d185 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -7,8 +7,8 @@ repositories { dependencies { implementation ( - 'org.springframework:spring-webmvc:6.2.6', - 'org.springframework:spring-context:6.2.6', + 'org.springframework:spring-webmvc:6.2.8', + 'org.springframework:spring-context:6.2.8', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[2.0-SNAPSHOT,)', 'org.apache.logging.log4j:log4j-core:2.24.3', 'org.apache.logging.log4j:log4j-api:2.24.3', diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index 4d60cdd08..921239722 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -7,8 +7,8 @@ repositories { dependencies { implementation ( - 'org.springframework:spring-webmvc:6.2.6', - 'org.springframework:spring-context:6.2.6', + 'org.springframework:spring-webmvc:6.2.8', + 'org.springframework:spring-context:6.2.8', 'com.amazonaws.serverless:aws-serverless-java-container-spring:[2.0-SNAPSHOT,)', 'org.apache.logging.log4j:log4j-core:2.24.3', 'org.apache.logging.log4j:log4j-api:2.24.3', From 32984f09d9e9a6a56572995b066f4b46adcc403f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Jun 2025 04:15:45 +0000 Subject: [PATCH 859/888] chore(deps): bump the jackson group across 4 directories with 1 update Bumps the jackson group with 1 update in the /aws-serverless-jersey-archetype/src/main/resources/archetype-resources directory: [com.fasterxml.jackson.core:jackson-databind](https://github.com/FasterXML/jackson). Bumps the jackson group with 1 update in the /aws-serverless-spring-archetype/src/main/resources/archetype-resources directory: [com.fasterxml.jackson.core:jackson-databind](https://github.com/FasterXML/jackson). Bumps the jackson group with 1 update in the /samples/jersey/pet-store directory: [com.fasterxml.jackson.core:jackson-databind](https://github.com/FasterXML/jackson). Bumps the jackson group with 1 update in the /samples/spring/pet-store directory: [com.fasterxml.jackson.core:jackson-databind](https://github.com/FasterXML/jackson). Updates `com.fasterxml.jackson.core:jackson-databind` from 2.18.3 to 2.19.1 - [Commits](https://github.com/FasterXML/jackson/commits) Updates `com.fasterxml.jackson.core:jackson-databind` from 2.18.3 to 2.19.1 - [Commits](https://github.com/FasterXML/jackson/commits) Updates `com.fasterxml.jackson.core:jackson-databind` from 2.18.3 to 2.19.1 - [Commits](https://github.com/FasterXML/jackson/commits) Updates `com.fasterxml.jackson.core:jackson-databind` from 2.18.3 to 2.19.1 - [Commits](https://github.com/FasterXML/jackson/commits) Updates `com.fasterxml.jackson.core:jackson-databind` from 2.18.3 to 2.19.1 - [Commits](https://github.com/FasterXML/jackson/commits) Updates `com.fasterxml.jackson.core:jackson-databind` from 2.18.3 to 2.19.1 - [Commits](https://github.com/FasterXML/jackson/commits) Updates `com.fasterxml.jackson.core:jackson-databind` from 2.18.3 to 2.19.1 - [Commits](https://github.com/FasterXML/jackson/commits) Updates `com.fasterxml.jackson.core:jackson-databind` from 2.18.3 to 2.19.1 - [Commits](https://github.com/FasterXML/jackson/commits) Updates `com.fasterxml.jackson.core:jackson-databind` from 2.18.3 to 2.19.1 - [Commits](https://github.com/FasterXML/jackson/commits) Updates `com.fasterxml.jackson.core:jackson-databind` from 2.18.3 to 2.19.1 - [Commits](https://github.com/FasterXML/jackson/commits) Updates `com.fasterxml.jackson.core:jackson-databind` from 2.18.3 to 2.19.1 - [Commits](https://github.com/FasterXML/jackson/commits) Updates `com.fasterxml.jackson.core:jackson-databind` from 2.18.3 to 2.19.1 - [Commits](https://github.com/FasterXML/jackson/commits) Updates `com.fasterxml.jackson.core:jackson-databind` from 2.18.3 to 2.19.1 - [Commits](https://github.com/FasterXML/jackson/commits) Updates `com.fasterxml.jackson.core:jackson-databind` from 2.18.3 to 2.19.1 - [Commits](https://github.com/FasterXML/jackson/commits) Updates `com.fasterxml.jackson.core:jackson-databind` from 2.18.3 to 2.19.1 - [Commits](https://github.com/FasterXML/jackson/commits) Updates `com.fasterxml.jackson.core:jackson-databind` from 2.18.3 to 2.19.1 - [Commits](https://github.com/FasterXML/jackson/commits) --- updated-dependencies: - dependency-name: com.fasterxml.jackson.core:jackson-databind dependency-version: 2.19.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: jackson - dependency-name: com.fasterxml.jackson.core:jackson-databind dependency-version: 2.19.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: jackson - dependency-name: com.fasterxml.jackson.core:jackson-databind dependency-version: 2.19.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: jackson - dependency-name: com.fasterxml.jackson.core:jackson-databind dependency-version: 2.19.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: jackson - dependency-name: com.fasterxml.jackson.core:jackson-databind dependency-version: 2.19.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: jackson - dependency-name: com.fasterxml.jackson.core:jackson-databind dependency-version: 2.19.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: jackson - dependency-name: com.fasterxml.jackson.core:jackson-databind dependency-version: 2.19.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: jackson - dependency-name: com.fasterxml.jackson.core:jackson-databind dependency-version: 2.19.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: jackson - dependency-name: com.fasterxml.jackson.core:jackson-databind dependency-version: 2.19.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: jackson - dependency-name: com.fasterxml.jackson.core:jackson-databind dependency-version: 2.19.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: jackson - dependency-name: com.fasterxml.jackson.core:jackson-databind dependency-version: 2.19.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: jackson - dependency-name: com.fasterxml.jackson.core:jackson-databind dependency-version: 2.19.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: jackson - dependency-name: com.fasterxml.jackson.core:jackson-databind dependency-version: 2.19.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: jackson - dependency-name: com.fasterxml.jackson.core:jackson-databind dependency-version: 2.19.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: jackson - dependency-name: com.fasterxml.jackson.core:jackson-databind dependency-version: 2.19.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: jackson - dependency-name: com.fasterxml.jackson.core:jackson-databind dependency-version: 2.19.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: jackson ... Signed-off-by: dependabot[bot] --- .../src/main/resources/archetype-resources/build.gradle | 2 +- .../src/main/resources/archetype-resources/build.gradle | 2 +- samples/jersey/pet-store/build.gradle | 2 +- samples/spring/pet-store/build.gradle | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle index aec63fe5e..cbe29ab1a 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle @@ -8,7 +8,7 @@ repositories { dependencies { implementation ( 'com.amazonaws.serverless:aws-serverless-java-container-jersey:[2.0-SNAPSHOT,)', - 'com.fasterxml.jackson.core:jackson-databind:2.18.3', + 'com.fasterxml.jackson.core:jackson-databind:2.19.1', ) implementation("org.glassfish.jersey.media:jersey-media-json-jackson:3.1.10") { diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index 026885dd5..f489ab2c4 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -13,7 +13,7 @@ dependencies { 'org.apache.logging.log4j:log4j-core:2.24.3', 'org.apache.logging.log4j:log4j-api:2.24.3', 'org.apache.logging.log4j:log4j-slf4j-impl:2.24.3', - 'com.fasterxml.jackson.core:jackson-databind:2.18.3', + 'com.fasterxml.jackson.core:jackson-databind:2.19.1', 'com.amazonaws:aws-lambda-java-log4j2:1.6.0', ) diff --git a/samples/jersey/pet-store/build.gradle b/samples/jersey/pet-store/build.gradle index 0829175e8..0194402b2 100644 --- a/samples/jersey/pet-store/build.gradle +++ b/samples/jersey/pet-store/build.gradle @@ -8,7 +8,7 @@ repositories { dependencies { implementation ( 'com.amazonaws.serverless:aws-serverless-java-container-jersey:[2.0-SNAPSHOT,)', - 'com.fasterxml.jackson.core:jackson-databind:2.18.3', + 'com.fasterxml.jackson.core:jackson-databind:2.19.1', ) implementation("org.glassfish.jersey.media:jersey-media-json-jackson:3.1.10") { diff --git a/samples/spring/pet-store/build.gradle b/samples/spring/pet-store/build.gradle index 4d60cdd08..211f621c8 100644 --- a/samples/spring/pet-store/build.gradle +++ b/samples/spring/pet-store/build.gradle @@ -13,7 +13,7 @@ dependencies { 'org.apache.logging.log4j:log4j-core:2.24.3', 'org.apache.logging.log4j:log4j-api:2.24.3', 'org.apache.logging.log4j:log4j-slf4j-impl:2.24.3', - 'com.fasterxml.jackson.core:jackson-databind:2.18.3', + 'com.fasterxml.jackson.core:jackson-databind:2.19.1', 'com.amazonaws:aws-lambda-java-log4j2:1.6.0', ) } From 4fb251ee9b493b69201ffc110c02faa1f2ee9eb9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Jun 2025 04:35:32 +0000 Subject: [PATCH 860/888] chore(deps): bump the jackson group across 5 directories with 2 updates Bumps the jackson group with 2 updates in the / directory: [com.fasterxml.jackson.core:jackson-databind](https://github.com/FasterXML/jackson) and [com.fasterxml.jackson.module:jackson-module-afterburner](https://github.com/FasterXML/jackson-modules-base). Bumps the jackson group with 2 updates in the /aws-serverless-java-container-core directory: [com.fasterxml.jackson.core:jackson-databind](https://github.com/FasterXML/jackson) and [com.fasterxml.jackson.module:jackson-module-afterburner](https://github.com/FasterXML/jackson-modules-base). Bumps the jackson group with 1 update in the /aws-serverless-java-container-jersey directory: [com.fasterxml.jackson.core:jackson-databind](https://github.com/FasterXML/jackson). Bumps the jackson group with 1 update in the /aws-serverless-java-container-spring directory: [com.fasterxml.jackson.core:jackson-databind](https://github.com/FasterXML/jackson). Bumps the jackson group with 1 update in the /samples/jersey/pet-store directory: [com.fasterxml.jackson.core:jackson-databind](https://github.com/FasterXML/jackson). Updates `com.fasterxml.jackson.core:jackson-databind` from 2.18.3 to 2.19.1 - [Commits](https://github.com/FasterXML/jackson/commits) Updates `com.fasterxml.jackson.module:jackson-module-afterburner` from 2.18.3 to 2.19.1 - [Commits](https://github.com/FasterXML/jackson-modules-base/compare/jackson-modules-base-2.18.3...jackson-modules-base-2.19.1) Updates `com.fasterxml.jackson.module:jackson-module-afterburner` from 2.18.3 to 2.19.1 - [Commits](https://github.com/FasterXML/jackson-modules-base/compare/jackson-modules-base-2.18.3...jackson-modules-base-2.19.1) Updates `com.fasterxml.jackson.core:jackson-databind` from 2.18.3 to 2.19.1 - [Commits](https://github.com/FasterXML/jackson/commits) Updates `com.fasterxml.jackson.module:jackson-module-afterburner` from 2.18.3 to 2.19.1 - [Commits](https://github.com/FasterXML/jackson-modules-base/compare/jackson-modules-base-2.18.3...jackson-modules-base-2.19.1) Updates `com.fasterxml.jackson.core:jackson-databind` from 2.18.3 to 2.19.1 - [Commits](https://github.com/FasterXML/jackson/commits) Updates `com.fasterxml.jackson.core:jackson-databind` from 2.18.3 to 2.19.1 - [Commits](https://github.com/FasterXML/jackson/commits) Updates `com.fasterxml.jackson.core:jackson-databind` from 2.18.3 to 2.19.1 - [Commits](https://github.com/FasterXML/jackson/commits) Updates `com.fasterxml.jackson.core:jackson-databind` from 2.18.3 to 2.19.1 - [Commits](https://github.com/FasterXML/jackson/commits) Updates `com.fasterxml.jackson.module:jackson-module-afterburner` from 2.18.3 to 2.19.1 - [Commits](https://github.com/FasterXML/jackson-modules-base/compare/jackson-modules-base-2.18.3...jackson-modules-base-2.19.1) Updates `com.fasterxml.jackson.module:jackson-module-afterburner` from 2.18.3 to 2.19.1 - [Commits](https://github.com/FasterXML/jackson-modules-base/compare/jackson-modules-base-2.18.3...jackson-modules-base-2.19.1) Updates `com.fasterxml.jackson.core:jackson-databind` from 2.18.3 to 2.19.1 - [Commits](https://github.com/FasterXML/jackson/commits) Updates `com.fasterxml.jackson.module:jackson-module-afterburner` from 2.18.3 to 2.19.1 - [Commits](https://github.com/FasterXML/jackson-modules-base/compare/jackson-modules-base-2.18.3...jackson-modules-base-2.19.1) Updates `com.fasterxml.jackson.core:jackson-databind` from 2.18.3 to 2.19.1 - [Commits](https://github.com/FasterXML/jackson/commits) Updates `com.fasterxml.jackson.core:jackson-databind` from 2.18.3 to 2.19.1 - [Commits](https://github.com/FasterXML/jackson/commits) Updates `com.fasterxml.jackson.core:jackson-databind` from 2.18.3 to 2.19.1 - [Commits](https://github.com/FasterXML/jackson/commits) Updates `com.fasterxml.jackson.core:jackson-databind` from 2.18.3 to 2.19.1 - [Commits](https://github.com/FasterXML/jackson/commits) Updates `com.fasterxml.jackson.core:jackson-databind` from 2.18.3 to 2.19.1 - [Commits](https://github.com/FasterXML/jackson/commits) Updates `com.fasterxml.jackson.core:jackson-databind` from 2.18.3 to 2.19.1 - [Commits](https://github.com/FasterXML/jackson/commits) Updates `com.fasterxml.jackson.core:jackson-databind` from 2.18.3 to 2.19.1 - [Commits](https://github.com/FasterXML/jackson/commits) Updates `com.fasterxml.jackson.core:jackson-databind` from 2.18.3 to 2.19.1 - [Commits](https://github.com/FasterXML/jackson/commits) Updates `com.fasterxml.jackson.core:jackson-databind` from 2.18.3 to 2.19.1 - [Commits](https://github.com/FasterXML/jackson/commits) Updates `com.fasterxml.jackson.core:jackson-databind` from 2.18.3 to 2.19.1 - [Commits](https://github.com/FasterXML/jackson/commits) Updates `com.fasterxml.jackson.core:jackson-databind` from 2.18.3 to 2.19.1 - [Commits](https://github.com/FasterXML/jackson/commits) Updates `com.fasterxml.jackson.core:jackson-databind` from 2.18.3 to 2.19.1 - [Commits](https://github.com/FasterXML/jackson/commits) Updates `com.fasterxml.jackson.core:jackson-databind` from 2.18.3 to 2.19.1 - [Commits](https://github.com/FasterXML/jackson/commits) Updates `com.fasterxml.jackson.core:jackson-databind` from 2.18.3 to 2.19.1 - [Commits](https://github.com/FasterXML/jackson/commits) Updates `com.fasterxml.jackson.core:jackson-databind` from 2.18.3 to 2.19.1 - [Commits](https://github.com/FasterXML/jackson/commits) Updates `com.fasterxml.jackson.core:jackson-databind` from 2.18.3 to 2.19.1 - [Commits](https://github.com/FasterXML/jackson/commits) Updates `com.fasterxml.jackson.core:jackson-databind` from 2.18.3 to 2.19.1 - [Commits](https://github.com/FasterXML/jackson/commits) Updates `com.fasterxml.jackson.core:jackson-databind` from 2.18.3 to 2.19.1 - [Commits](https://github.com/FasterXML/jackson/commits) --- updated-dependencies: - dependency-name: com.fasterxml.jackson.core:jackson-databind dependency-version: 2.19.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: jackson - dependency-name: com.fasterxml.jackson.module:jackson-module-afterburner dependency-version: 2.19.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: jackson - dependency-name: com.fasterxml.jackson.module:jackson-module-afterburner dependency-version: 2.19.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: jackson - dependency-name: com.fasterxml.jackson.core:jackson-databind dependency-version: 2.19.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: jackson - dependency-name: com.fasterxml.jackson.module:jackson-module-afterburner dependency-version: 2.19.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: jackson - dependency-name: com.fasterxml.jackson.core:jackson-databind dependency-version: 2.19.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: jackson - dependency-name: com.fasterxml.jackson.core:jackson-databind dependency-version: 2.19.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: jackson - dependency-name: com.fasterxml.jackson.core:jackson-databind dependency-version: 2.19.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: jackson - dependency-name: com.fasterxml.jackson.core:jackson-databind dependency-version: 2.19.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: jackson - dependency-name: com.fasterxml.jackson.module:jackson-module-afterburner dependency-version: 2.19.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: jackson - dependency-name: com.fasterxml.jackson.module:jackson-module-afterburner dependency-version: 2.19.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: jackson - dependency-name: com.fasterxml.jackson.core:jackson-databind dependency-version: 2.19.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: jackson - dependency-name: com.fasterxml.jackson.module:jackson-module-afterburner dependency-version: 2.19.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: jackson - dependency-name: com.fasterxml.jackson.core:jackson-databind dependency-version: 2.19.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: jackson - dependency-name: com.fasterxml.jackson.core:jackson-databind dependency-version: 2.19.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: jackson - dependency-name: com.fasterxml.jackson.core:jackson-databind dependency-version: 2.19.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: jackson - dependency-name: com.fasterxml.jackson.core:jackson-databind dependency-version: 2.19.1 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: jackson - dependency-name: com.fasterxml.jackson.core:jackson-databind dependency-version: 2.19.1 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: jackson - dependency-name: com.fasterxml.jackson.core:jackson-databind dependency-version: 2.19.1 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: jackson - dependency-name: com.fasterxml.jackson.core:jackson-databind dependency-version: 2.19.1 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: jackson - dependency-name: com.fasterxml.jackson.core:jackson-databind dependency-version: 2.19.1 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: jackson - dependency-name: com.fasterxml.jackson.core:jackson-databind dependency-version: 2.19.1 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: jackson - dependency-name: com.fasterxml.jackson.core:jackson-databind dependency-version: 2.19.1 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: jackson - dependency-name: com.fasterxml.jackson.core:jackson-databind dependency-version: 2.19.1 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: jackson - dependency-name: com.fasterxml.jackson.core:jackson-databind dependency-version: 2.19.1 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: jackson - dependency-name: com.fasterxml.jackson.core:jackson-databind dependency-version: 2.19.1 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: jackson - dependency-name: com.fasterxml.jackson.core:jackson-databind dependency-version: 2.19.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: jackson - dependency-name: com.fasterxml.jackson.core:jackson-databind dependency-version: 2.19.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: jackson - dependency-name: com.fasterxml.jackson.core:jackson-databind dependency-version: 2.19.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: jackson - dependency-name: com.fasterxml.jackson.core:jackson-databind dependency-version: 2.19.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: jackson - dependency-name: com.fasterxml.jackson.core:jackson-databind dependency-version: 2.19.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: jackson ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- samples/jersey/pet-store/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index be3e8ff83..313969dc7 100644 --- a/pom.xml +++ b/pom.xml @@ -78,7 +78,7 @@ 0.7 12.1.1 - 2.18.3 + 2.19.1 2.0.17 5.12.2 5.17.0 diff --git a/samples/jersey/pet-store/pom.xml b/samples/jersey/pet-store/pom.xml index dc29c9f6f..aa3e1caee 100644 --- a/samples/jersey/pet-store/pom.xml +++ b/samples/jersey/pet-store/pom.xml @@ -27,7 +27,7 @@ 1.8 1.8 3.1.10 - 2.18.3 + 2.19.1 From 2d958f10c45a9377776e46db7d698080dbf709a2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Jun 2025 04:36:49 +0000 Subject: [PATCH 861/888] chore(deps): bump the spring group across 3 directories with 6 updates Bumps the spring group with 2 updates in the / directory: [org.springframework:spring-webmvc](https://github.com/spring-projects/spring-framework) and [org.springframework:spring-test](https://github.com/spring-projects/spring-framework). Bumps the spring group with 2 updates in the /aws-serverless-java-container-spring directory: [org.springframework:spring-webmvc](https://github.com/spring-projects/spring-framework) and [org.springframework:spring-test](https://github.com/spring-projects/spring-framework). Bumps the spring group with 3 updates in the /samples/spring/pet-store directory: [org.springframework:spring-webmvc](https://github.com/spring-projects/spring-framework), [org.springframework:spring-context](https://github.com/spring-projects/spring-framework) and [org.springframework:spring-context-indexer](https://github.com/spring-projects/spring-framework). Updates `org.springframework:spring-webmvc` from 6.2.6 to 6.2.8 - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.6...v6.2.8) Updates `org.springframework:spring-test` from 6.2.6 to 6.2.8 - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.6...v6.2.8) Updates `org.springframework:spring-test` from 6.2.6 to 6.2.8 - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.6...v6.2.8) Updates `org.springframework:spring-webflux` from 6.2.6 to 6.2.8 - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.6...v6.2.8) Updates `org.springframework:spring-core` from 6.2.6 to 6.2.8 - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.6...v6.2.8) Updates `org.springframework:spring-context` from 6.2.6 to 6.2.8 - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.6...v6.2.8) Updates `org.springframework:spring-webmvc` from 6.2.6 to 6.2.8 - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.6...v6.2.8) Updates `org.springframework:spring-test` from 6.2.6 to 6.2.8 - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.6...v6.2.8) Updates `org.springframework:spring-webmvc` from 6.2.6 to 6.2.8 - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.6...v6.2.8) Updates `org.springframework:spring-context` from 6.2.6 to 6.2.8 - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.6...v6.2.8) Updates `org.springframework:spring-webmvc` from 6.2.6 to 6.2.8 - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.6...v6.2.8) Updates `org.springframework:spring-test` from 6.2.6 to 6.2.8 - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.6...v6.2.8) Updates `org.springframework:spring-test` from 6.2.6 to 6.2.8 - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.6...v6.2.8) Updates `org.springframework:spring-webmvc` from 6.2.6 to 6.2.8 - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.6...v6.2.8) Updates `org.springframework:spring-test` from 6.2.6 to 6.2.8 - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.6...v6.2.8) Updates `org.springframework:spring-webmvc` from 6.2.6 to 6.2.8 - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.6...v6.2.8) Updates `org.springframework:spring-webmvc` from 6.2.6 to 6.2.8 - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.6...v6.2.8) Updates `org.springframework:spring-context` from 6.2.6 to 6.2.8 - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.6...v6.2.8) Updates `org.springframework:spring-context-indexer` from 6.2.6 to 6.2.8 - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.6...v6.2.8) Updates `org.springframework:spring-context` from 6.2.6 to 6.2.8 - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.6...v6.2.8) Updates `org.springframework:spring-webmvc` from 6.2.6 to 6.2.8 - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.6...v6.2.8) Updates `org.springframework:spring-webmvc` from 6.2.6 to 6.2.8 - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.6...v6.2.8) Updates `org.springframework:spring-context` from 6.2.6 to 6.2.8 - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.6...v6.2.8) Updates `org.springframework:spring-context-indexer` from 6.2.6 to 6.2.8 - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.6...v6.2.8) --- updated-dependencies: - dependency-name: org.springframework:spring-webmvc dependency-version: 6.2.8 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: spring - dependency-name: org.springframework:spring-test dependency-version: 6.2.8 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: spring - dependency-name: org.springframework:spring-test dependency-version: 6.2.8 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: spring - dependency-name: org.springframework:spring-webflux dependency-version: 6.2.8 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: spring - dependency-name: org.springframework:spring-core dependency-version: 6.2.8 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: spring - dependency-name: org.springframework:spring-context dependency-version: 6.2.8 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: spring - dependency-name: org.springframework:spring-webmvc dependency-version: 6.2.8 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: spring - dependency-name: org.springframework:spring-test dependency-version: 6.2.8 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: spring - dependency-name: org.springframework:spring-webmvc dependency-version: 6.2.8 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: spring - dependency-name: org.springframework:spring-context dependency-version: 6.2.8 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: spring - dependency-name: org.springframework:spring-webmvc dependency-version: 6.2.8 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: spring - dependency-name: org.springframework:spring-test dependency-version: 6.2.8 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: spring - dependency-name: org.springframework:spring-test dependency-version: 6.2.8 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: spring - dependency-name: org.springframework:spring-webmvc dependency-version: 6.2.8 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: spring - dependency-name: org.springframework:spring-test dependency-version: 6.2.8 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: spring - dependency-name: org.springframework:spring-webmvc dependency-version: 6.2.8 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: spring - dependency-name: org.springframework:spring-webmvc dependency-version: 6.2.8 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: spring - dependency-name: org.springframework:spring-context dependency-version: 6.2.8 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: spring - dependency-name: org.springframework:spring-context-indexer dependency-version: 6.2.8 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: spring - dependency-name: org.springframework:spring-context dependency-version: 6.2.8 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: spring - dependency-name: org.springframework:spring-webmvc dependency-version: 6.2.8 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: spring - dependency-name: org.springframework:spring-webmvc dependency-version: 6.2.8 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: spring - dependency-name: org.springframework:spring-context dependency-version: 6.2.8 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: spring - dependency-name: org.springframework:spring-context-indexer dependency-version: 6.2.8 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: spring ... Signed-off-by: dependabot[bot] --- aws-serverless-java-container-spring/pom.xml | 2 +- aws-serverless-java-container-springboot3/pom.xml | 2 +- samples/spring/pet-store/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index f26cc578d..2b455f4c4 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -16,7 +16,7 @@ - 6.2.6 + 6.2.8 6.4.5 diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index b09d851b0..8035cb86e 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -15,7 +15,7 @@ 2.1.4-SNAPSHOT - 6.2.6 + 6.2.8 3.4.5 6.4.5 diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index d4f230782..3603df159 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -24,7 +24,7 @@ - 6.2.6 + 6.2.8 2.24.3 17 17 From 5f14b7d3fc2a3ec33a3c75ef7d1756943e515af2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 17 Jun 2025 23:29:22 +0000 Subject: [PATCH 862/888] chore(deps-dev): bump spring-security.version Bumps `spring-security.version` from 6.4.5 to 6.5.0. Updates `org.springframework.security:spring-security-config` from 6.4.5 to 6.5.0 - [Release notes](https://github.com/spring-projects/spring-security/releases) - [Changelog](https://github.com/spring-projects/spring-security/blob/main/RELEASE.adoc) - [Commits](https://github.com/spring-projects/spring-security/compare/6.4.5...6.5.0) Updates `org.springframework.security:spring-security-web` from 6.4.5 to 6.5.0 - [Release notes](https://github.com/spring-projects/spring-security/releases) - [Changelog](https://github.com/spring-projects/spring-security/blob/main/RELEASE.adoc) - [Commits](https://github.com/spring-projects/spring-security/compare/6.4.5...6.5.0) --- updated-dependencies: - dependency-name: org.springframework.security:spring-security-config dependency-version: 6.5.0 dependency-type: direct:development update-type: version-update:semver-minor - dependency-name: org.springframework.security:spring-security-web dependency-version: 6.5.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- aws-serverless-java-container-spring/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 2b455f4c4..f4e34ddc5 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -17,7 +17,7 @@ 6.2.8 - 6.4.5 + 6.5.1 From 824689c5f8377bdc95c774be416742d2e3456680 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 17 Jun 2025 23:29:23 +0000 Subject: [PATCH 863/888] chore(deps): bump spring-security.version from 6.4.5 to 6.5.0 Bumps `spring-security.version` from 6.4.5 to 6.5.0. Updates `org.springframework.security:spring-security-web` from 6.4.5 to 6.5.0 - [Release notes](https://github.com/spring-projects/spring-security/releases) - [Changelog](https://github.com/spring-projects/spring-security/blob/main/RELEASE.adoc) - [Commits](https://github.com/spring-projects/spring-security/compare/6.4.5...6.5.0) Updates `org.springframework.security:spring-security-config` from 6.4.5 to 6.5.0 - [Release notes](https://github.com/spring-projects/spring-security/releases) - [Changelog](https://github.com/spring-projects/spring-security/blob/main/RELEASE.adoc) - [Commits](https://github.com/spring-projects/spring-security/compare/6.4.5...6.5.0) --- updated-dependencies: - dependency-name: org.springframework.security:spring-security-web dependency-version: 6.5.0 dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: org.springframework.security:spring-security-config dependency-version: 6.5.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- aws-serverless-java-container-core/pom.xml | 2 +- aws-serverless-java-container-spring/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index fa34e8d88..3c2334922 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -60,7 +60,7 @@ org.springframework.security spring-security-web - 6.4.5 + 6.5.1 test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 2b455f4c4..f4e34ddc5 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -17,7 +17,7 @@ 6.2.8 - 6.4.5 + 6.5.1 From f1399c48e26d22fb97754b01999305035082b8cf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 17 Jun 2025 23:30:09 +0000 Subject: [PATCH 864/888] chore(deps): bump org.junit:junit-bom Bumps [org.junit:junit-bom](https://github.com/junit-team/junit5) from 5.12.1 to 5.13.1. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.12.1...r5.13.1) --- updated-dependencies: - dependency-name: org.junit:junit-bom dependency-version: 5.13.1 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .../src/main/resources/archetype-resources/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle index b9e084170..3aa54825c 100644 --- a/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-springboot3-archetype/src/main/resources/archetype-resources/build.gradle @@ -15,7 +15,7 @@ dependencies { testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") testImplementation("org.apache.httpcomponents.client5:httpclient5:5.5") - testImplementation(platform("org.junit:junit-bom:5.12.1")) + testImplementation(platform("org.junit:junit-bom:5.13.1")) testImplementation("org.junit.jupiter:junit-jupiter") testRuntimeOnly("org.junit.platform:junit-platform-launcher") } From 305060aa1364b2125abd60a2666669c7f80299a1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 17 Jun 2025 23:30:09 +0000 Subject: [PATCH 865/888] chore(deps): bump org.junit:junit-bom Bumps [org.junit:junit-bom](https://github.com/junit-team/junit5) from 5.12.2 to 5.13.1. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.12.2...r5.13.1) --- updated-dependencies: - dependency-name: org.junit:junit-bom dependency-version: 5.13.1 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .../src/main/resources/archetype-resources/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle index 96bf77447..a7c4098e5 100644 --- a/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-spring-archetype/src/main/resources/archetype-resources/build.gradle @@ -19,7 +19,7 @@ dependencies { testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") testImplementation("org.apache.httpcomponents.client5:httpclient5:5.5") - testImplementation(platform("org.junit:junit-bom:5.12.2")) + testImplementation(platform("org.junit:junit-bom:5.13.1")) testImplementation("org.junit.jupiter:junit-jupiter") testRuntimeOnly("org.junit.platform:junit-platform-launcher") } From ce4e6039b946a6082c535c9c87d5b46fa7128d3d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 17 Jun 2025 23:30:14 +0000 Subject: [PATCH 866/888] chore(deps): bump org.junit:junit-bom Bumps [org.junit:junit-bom](https://github.com/junit-team/junit5) from 5.12.1 to 5.13.1. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.12.1...r5.13.1) --- updated-dependencies: - dependency-name: org.junit:junit-bom dependency-version: 5.13.1 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .../src/main/resources/archetype-resources/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle index 922c719a7..34ddfa299 100644 --- a/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle +++ b/aws-serverless-jersey-archetype/src/main/resources/archetype-resources/build.gradle @@ -23,7 +23,7 @@ dependencies { testImplementation("com.amazonaws.serverless:aws-serverless-java-container-core:[2.0-SNAPSHOT,):tests") testImplementation("org.apache.httpcomponents.client5:httpclient5:5.5") - testImplementation(platform("org.junit:junit-bom:5.12.1")) + testImplementation(platform("org.junit:junit-bom:5.13.1")) testImplementation("org.junit.jupiter:junit-jupiter") testRuntimeOnly("org.junit.platform:junit-platform-launcher") } From cc0e12720c0ab138e60df5c3d509fdc020543928 Mon Sep 17 00:00:00 2001 From: Vichym Date: Tue, 17 Jun 2025 16:31:10 -0700 Subject: [PATCH 867/888] fix build failure. --- .../proxy/internal/servlet/AwsHttpServletRequest.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java index bde53961f..c52a17d07 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java @@ -517,7 +517,10 @@ protected Map> getMultipartFormParametersMap() { newPart.setContentType(item.getContentType()); newPart.setSize(item.getSize()); item.getHeaders().getHeaderNames().forEachRemaining(h -> { - newPart.addHeader(h, item.getHeaders().getHeader(h)); + String headerValue = item.getHeaders().getHeader(h); + if (headerValue != null) { + newPart.addHeader(h, headerValue); + } }); addPart(multipartFormParameters, item.getFieldName(), newPart); From 29072d3d138ce001a2b00a533b670b277d0a23d4 Mon Sep 17 00:00:00 2001 From: Vichym Date: Tue, 17 Jun 2025 16:01:32 -0700 Subject: [PATCH 868/888] update commons-fileupload2-jakarta-servlet6 to 2.0.0-M4 This is to update dependency on commons-fileupload2-core from 2.0.0-M2 to 2.0.0-M4 --- aws-serverless-java-container-core/pom.xml | 2 +- .../servlet/AwsHttpServletRequest.java | 29 ++++++++++--------- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index fa34e8d88..9fe565eea 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -54,7 +54,7 @@ org.apache.commons commons-fileupload2-jakarta-servlet6 - 2.0.0-M2 + 2.0.0-M4 diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java index c52a17d07..1807fcd37 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java @@ -493,7 +493,7 @@ public Part getPart(String s) } @SuppressFBWarnings({"FILE_UPLOAD_FILENAME", "WEAK_FILENAMEUTILS"}) - protected Map> getMultipartFormParametersMap() { + protected Map> getMultipartFormParametersMap() throws RuntimeException { if (multipartFormParameters != null) { return multipartFormParameters; } @@ -511,19 +511,20 @@ protected Map> getMultipartFormParametersMap() { List items = upload.parseRequest(this); for (FileItem item : items) { String fileName = FilenameUtils.getName(item.getName()); - AwsProxyRequestPart newPart = new AwsProxyRequestPart(item.get()); - newPart.setName(item.getFieldName()); - newPart.setSubmittedFileName(fileName); - newPart.setContentType(item.getContentType()); - newPart.setSize(item.getSize()); - item.getHeaders().getHeaderNames().forEachRemaining(h -> { - String headerValue = item.getHeaders().getHeader(h); - if (headerValue != null) { - newPart.addHeader(h, headerValue); - } - }); - - addPart(multipartFormParameters, item.getFieldName(), newPart); + try { + AwsProxyRequestPart newPart = new AwsProxyRequestPart(item.get()); + newPart.setName(item.getFieldName()); + newPart.setSubmittedFileName(fileName); + newPart.setContentType(item.getContentType()); + newPart.setSize(item.getSize()); + item.getHeaders().getHeaderNames().forEachRemaining(h -> { + newPart.addHeader(h, item.getHeaders().getHeader(h)); + }); + addPart(multipartFormParameters, item.getFieldName(), newPart); + } catch (Exception e) { + log.error("Encounter issue adding form multipart", e); + throw new RuntimeException(e); + } } } catch (FileUploadException e) { Timer.stop("SERVLET_REQUEST_GET_MULTIPART_PARAMS"); From db4aaa070951c8968fe37d677b16cfd2b606c597 Mon Sep 17 00:00:00 2001 From: vicheey <181402101+vicheey@users.noreply.github.com> Date: Tue, 17 Jun 2025 17:48:49 -0700 Subject: [PATCH 869/888] Update aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java --- .../proxy/internal/servlet/AwsHttpServletRequest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java index 1807fcd37..68a339bd5 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java @@ -521,7 +521,7 @@ protected Map> getMultipartFormParametersMap() throws Runtime newPart.addHeader(h, item.getHeaders().getHeader(h)); }); addPart(multipartFormParameters, item.getFieldName(), newPart); - } catch (Exception e) { + } catch (IOException e) { log.error("Encounter issue adding form multipart", e); throw new RuntimeException(e); } From 8b7e7ff9a0f4278874658781199dcbc2debb71c1 Mon Sep 17 00:00:00 2001 From: Vichym Date: Wed, 18 Jun 2025 06:52:31 -0700 Subject: [PATCH 870/888] update to rethrow IOException --- .../proxy/internal/servlet/AwsHttpServletRequest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java index 68a339bd5..43e03f60b 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java @@ -493,7 +493,7 @@ public Part getPart(String s) } @SuppressFBWarnings({"FILE_UPLOAD_FILENAME", "WEAK_FILENAMEUTILS"}) - protected Map> getMultipartFormParametersMap() throws RuntimeException { + protected Map> getMultipartFormParametersMap() throws IOException { if (multipartFormParameters != null) { return multipartFormParameters; } @@ -523,7 +523,7 @@ protected Map> getMultipartFormParametersMap() throws Runtime addPart(multipartFormParameters, item.getFieldName(), newPart); } catch (IOException e) { log.error("Encounter issue adding form multipart", e); - throw new RuntimeException(e); + throw new IOException(e); } } } catch (FileUploadException e) { From d7d4b9dd28a0759a5f194779bb74e9f32f41cc64 Mon Sep 17 00:00:00 2001 From: Vichym Date: Wed, 18 Jun 2025 09:26:39 -0700 Subject: [PATCH 871/888] remove try-catch block --- .../proxy/internal/servlet/AwsHttpServletRequest.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java index 43e03f60b..10fd6fd10 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java @@ -511,7 +511,6 @@ protected Map> getMultipartFormParametersMap() throws IOExcep List items = upload.parseRequest(this); for (FileItem item : items) { String fileName = FilenameUtils.getName(item.getName()); - try { AwsProxyRequestPart newPart = new AwsProxyRequestPart(item.get()); newPart.setName(item.getFieldName()); newPart.setSubmittedFileName(fileName); @@ -521,10 +520,6 @@ protected Map> getMultipartFormParametersMap() throws IOExcep newPart.addHeader(h, item.getHeaders().getHeader(h)); }); addPart(multipartFormParameters, item.getFieldName(), newPart); - } catch (IOException e) { - log.error("Encounter issue adding form multipart", e); - throw new IOException(e); - } } } catch (FileUploadException e) { Timer.stop("SERVLET_REQUEST_GET_MULTIPART_PARAMS"); From 1011155dd43a7709204e872df6298255b14a0fdf Mon Sep 17 00:00:00 2001 From: Vichym Date: Wed, 18 Jun 2025 12:57:43 -0700 Subject: [PATCH 872/888] reset white space. --- .../servlet/AwsHttpServletRequest.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java index 10fd6fd10..0029ee2d4 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletRequest.java @@ -511,15 +511,15 @@ protected Map> getMultipartFormParametersMap() throws IOExcep List items = upload.parseRequest(this); for (FileItem item : items) { String fileName = FilenameUtils.getName(item.getName()); - AwsProxyRequestPart newPart = new AwsProxyRequestPart(item.get()); - newPart.setName(item.getFieldName()); - newPart.setSubmittedFileName(fileName); - newPart.setContentType(item.getContentType()); - newPart.setSize(item.getSize()); - item.getHeaders().getHeaderNames().forEachRemaining(h -> { - newPart.addHeader(h, item.getHeaders().getHeader(h)); - }); - addPart(multipartFormParameters, item.getFieldName(), newPart); + AwsProxyRequestPart newPart = new AwsProxyRequestPart(item.get()); + newPart.setName(item.getFieldName()); + newPart.setSubmittedFileName(fileName); + newPart.setContentType(item.getContentType()); + newPart.setSize(item.getSize()); + item.getHeaders().getHeaderNames().forEachRemaining(h -> { + newPart.addHeader(h, item.getHeaders().getHeader(h)); + }); + addPart(multipartFormParameters, item.getFieldName(), newPart); } } catch (FileUploadException e) { Timer.stop("SERVLET_REQUEST_GET_MULTIPART_PARAMS"); From b96035e7bd6a68346d8668d03f3ff98d0a252a49 Mon Sep 17 00:00:00 2001 From: vicheey Date: Wed, 18 Jun 2025 21:30:07 +0000 Subject: [PATCH 873/888] chore: release - prepare release aws-serverless-java-container-2.1.4 --- aws-serverless-java-container-core/pom.xml | 4 ++-- aws-serverless-java-container-jersey/pom.xml | 8 ++++---- aws-serverless-java-container-spring/pom.xml | 8 ++++---- aws-serverless-java-container-springboot3/pom.xml | 8 ++++---- aws-serverless-jersey-archetype/pom.xml | 6 +++--- aws-serverless-spring-archetype/pom.xml | 6 +++--- aws-serverless-springboot3-archetype/pom.xml | 6 +++--- pom.xml | 4 ++-- 8 files changed, 25 insertions(+), 25 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index f77536a43..5b7d331f4 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Core Allows Java applications written for a servlet container to run in AWS Lambda https://aws.amazon.com/lambda - 2.1.4-SNAPSHOT + 2.1.4 com.amazonaws.serverless aws-serverless-java-container - 2.1.4-SNAPSHOT + 2.1.4 .. diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index 905f4d463..ee776bd61 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Jersey implementation Allows Java applications written for Jersey to run in AWS Lambda https://aws.amazon.com/lambda - 2.1.4-SNAPSHOT + 2.1.4 com.amazonaws.serverless aws-serverless-java-container - 2.1.4-SNAPSHOT + 2.1.4 .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.1.4-SNAPSHOT + 2.1.4 com.fasterxml.jackson.core @@ -35,7 +35,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.1.4-SNAPSHOT + 2.1.4 tests test-jar test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index f4e34ddc5..1f656287d 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spring implementation Allows Java applications written for the Spring framework to run in AWS Lambda https://aws.amazon.com/lambda - 2.1.4-SNAPSHOT + 2.1.4 com.amazonaws.serverless aws-serverless-java-container - 2.1.4-SNAPSHOT + 2.1.4 .. @@ -25,12 +25,12 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.1.4-SNAPSHOT + 2.1.4 com.amazonaws.serverless aws-serverless-java-container-core - 2.1.4-SNAPSHOT + 2.1.4 tests test-jar test diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index 8035cb86e..d9dcc7e1e 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -3,7 +3,7 @@ aws-serverless-java-container com.amazonaws.serverless - 2.1.4-SNAPSHOT + 2.1.4 4.0.0 @@ -12,7 +12,7 @@ AWS Serverless Java container support - SpringBoot 3 implementation Allows Java applications written for SpringBoot 3 to run in AWS Lambda https://aws.amazon.com/lambda - 2.1.4-SNAPSHOT + 2.1.4 6.2.8 @@ -30,12 +30,12 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.1.4-SNAPSHOT + 2.1.4 com.amazonaws.serverless aws-serverless-java-container-core - 2.1.4-SNAPSHOT + 2.1.4 tests test-jar test diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index 31897f300..69fcd0eda 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.1.4-SNAPSHOT + 2.1.4 com.amazonaws.serverless.archetypes aws-serverless-jersey-archetype - 2.1.4-SNAPSHOT + 2.1.4 maven-archetype https://github.com/aws/serverless-java-container.git - HEAD + aws-serverless-java-container-2.1.4 diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index efcd54945..5c15bbd05 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.1.4-SNAPSHOT + 2.1.4 com.amazonaws.serverless.archetypes aws-serverless-spring-archetype - 2.1.4-SNAPSHOT + 2.1.4 maven-archetype https://github.com/aws/serverless-java-container.git - HEAD + aws-serverless-java-container-2.1.4 diff --git a/aws-serverless-springboot3-archetype/pom.xml b/aws-serverless-springboot3-archetype/pom.xml index 61df561fc..50dea38b1 100644 --- a/aws-serverless-springboot3-archetype/pom.xml +++ b/aws-serverless-springboot3-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.1.4-SNAPSHOT + 2.1.4 com.amazonaws.serverless.archetypes aws-serverless-springboot3-archetype - 2.1.4-SNAPSHOT + 2.1.4 maven-archetype https://github.com/aws/serverless-java-container.git - HEAD + aws-serverless-java-container-2.1.4 diff --git a/pom.xml b/pom.xml index b780be8ef..6040b24f0 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazonaws.serverless aws-serverless-java-container pom - 2.1.4-SNAPSHOT + 2.1.4 AWS Serverless Java container A Java framework to run Spring, Spring Boot, Jersey, Spark, and Struts applications inside AWS Lambda https://github.com/aws/serverless-java-container @@ -37,7 +37,7 @@ https://github.com/aws/serverless-java-container scm:git:https://github.com/aws/serverless-java-container.git - HEAD + aws-serverless-java-container-2.1.4 From e8b5aa73852796dd91de1a5c2d7b2884c213fe89 Mon Sep 17 00:00:00 2001 From: vicheey Date: Wed, 18 Jun 2025 21:30:08 +0000 Subject: [PATCH 874/888] chore: release - prepare for next development iteration --- aws-serverless-java-container-core/pom.xml | 4 ++-- aws-serverless-java-container-jersey/pom.xml | 8 ++++---- aws-serverless-java-container-spring/pom.xml | 8 ++++---- aws-serverless-java-container-springboot3/pom.xml | 8 ++++---- aws-serverless-jersey-archetype/pom.xml | 6 +++--- aws-serverless-spring-archetype/pom.xml | 6 +++--- aws-serverless-springboot3-archetype/pom.xml | 6 +++--- pom.xml | 4 ++-- 8 files changed, 25 insertions(+), 25 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 5b7d331f4..9d0ff3cb4 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Core Allows Java applications written for a servlet container to run in AWS Lambda https://aws.amazon.com/lambda - 2.1.4 + 2.1.5-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 2.1.4 + 2.1.5-SNAPSHOT .. diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index ee776bd61..1788a36b8 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Jersey implementation Allows Java applications written for Jersey to run in AWS Lambda https://aws.amazon.com/lambda - 2.1.4 + 2.1.5-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 2.1.4 + 2.1.5-SNAPSHOT .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.1.4 + 2.1.5-SNAPSHOT com.fasterxml.jackson.core @@ -35,7 +35,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.1.4 + 2.1.5-SNAPSHOT tests test-jar test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 1f656287d..f03d9db0a 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spring implementation Allows Java applications written for the Spring framework to run in AWS Lambda https://aws.amazon.com/lambda - 2.1.4 + 2.1.5-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 2.1.4 + 2.1.5-SNAPSHOT .. @@ -25,12 +25,12 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.1.4 + 2.1.5-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container-core - 2.1.4 + 2.1.5-SNAPSHOT tests test-jar test diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index d9dcc7e1e..5dcac1562 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -3,7 +3,7 @@ aws-serverless-java-container com.amazonaws.serverless - 2.1.4 + 2.1.5-SNAPSHOT 4.0.0 @@ -12,7 +12,7 @@ AWS Serverless Java container support - SpringBoot 3 implementation Allows Java applications written for SpringBoot 3 to run in AWS Lambda https://aws.amazon.com/lambda - 2.1.4 + 2.1.5-SNAPSHOT 6.2.8 @@ -30,12 +30,12 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.1.4 + 2.1.5-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container-core - 2.1.4 + 2.1.5-SNAPSHOT tests test-jar test diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index 69fcd0eda..4afdc9996 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.1.4 + 2.1.5-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-jersey-archetype - 2.1.4 + 2.1.5-SNAPSHOT maven-archetype https://github.com/aws/serverless-java-container.git - aws-serverless-java-container-2.1.4 + HEAD diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index 5c15bbd05..2a2f59b8b 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.1.4 + 2.1.5-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-spring-archetype - 2.1.4 + 2.1.5-SNAPSHOT maven-archetype https://github.com/aws/serverless-java-container.git - aws-serverless-java-container-2.1.4 + HEAD diff --git a/aws-serverless-springboot3-archetype/pom.xml b/aws-serverless-springboot3-archetype/pom.xml index 50dea38b1..74fac6156 100644 --- a/aws-serverless-springboot3-archetype/pom.xml +++ b/aws-serverless-springboot3-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.1.4 + 2.1.5-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-springboot3-archetype - 2.1.4 + 2.1.5-SNAPSHOT maven-archetype https://github.com/aws/serverless-java-container.git - aws-serverless-java-container-2.1.4 + HEAD diff --git a/pom.xml b/pom.xml index 6040b24f0..dd73a0404 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazonaws.serverless aws-serverless-java-container pom - 2.1.4 + 2.1.5-SNAPSHOT AWS Serverless Java container A Java framework to run Spring, Spring Boot, Jersey, Spark, and Struts applications inside AWS Lambda https://github.com/aws/serverless-java-container @@ -37,7 +37,7 @@ https://github.com/aws/serverless-java-container scm:git:https://github.com/aws/serverless-java-container.git - aws-serverless-java-container-2.1.4 + HEAD From 18a067ef56a01fb48b980e74d0c73ee121023264 Mon Sep 17 00:00:00 2001 From: ekruczek Date: Mon, 15 Sep 2025 23:10:39 +0200 Subject: [PATCH 875/888] fix: headers with null values removed from response (#1523) Co-authored-by: Emil Kruczek --- .../proxy/internal/servlet/AwsHttpServletResponse.java | 9 ++++++--- .../internal/servlet/AwsHttpServletResponseTest.java | 10 ++++++++++ 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponse.java b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponse.java index 86a72ead6..f5395a0bf 100644 --- a/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponse.java +++ b/aws-serverless-java-container-core/src/main/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponse.java @@ -496,9 +496,12 @@ private void setHeader(String key, String value, boolean overwrite) { values = new ArrayList<>(); } - values.add(encodedValue); - - headers.put(encodedKey, values); + if (value == null && overwrite) { + headers.remove(encodedKey); + } else if (value != null) { + values.add(encodedValue); + headers.put(encodedKey, values); + } } private boolean canSetHeader() { diff --git a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponseTest.java b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponseTest.java index 88d2a5e74..143caab69 100644 --- a/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponseTest.java +++ b/aws-serverless-java-container-core/src/test/java/com/amazonaws/serverless/proxy/internal/servlet/AwsHttpServletResponseTest.java @@ -173,6 +173,16 @@ void responseHeaders_getAwsResponseHeaders_expectLatestHeader() { assertEquals("application/xml", awsResp.getFirst(HttpHeaders.CONTENT_TYPE)); } + @Test + void responseHeaders_setHeaderWithNullValue_expectHeaderRemoved() { + AwsHttpServletResponse resp = new AwsHttpServletResponse(null, null); + resp.setHeader(HttpHeaders.CONTENT_DISPOSITION, "inline"); + resp.setHeader(HttpHeaders.CONTENT_DISPOSITION, null); + + Headers awsResp = resp.getAwsResponseHeaders(); + assertEquals(0, awsResp.size()); + } + @Test void responseHeaders_getAwsResponseHeaders_expectedMultpleCookieHeaders() { AwsHttpServletResponse resp = new AwsHttpServletResponse(null, null); From 30af781d5e143f390db9963a4fd6812f60fd8ff7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 18 Sep 2025 15:18:52 -0700 Subject: [PATCH 876/888] chore(deps): bump com.amazonaws:aws-lambda-java-core from 1.2.3 to 1.4.0 (#1524) Bumps [com.amazonaws:aws-lambda-java-core](https://github.com/aws/aws-lambda-java-libs) from 1.2.3 to 1.4.0. - [Commits](https://github.com/aws/aws-lambda-java-libs/commits) --- updated-dependencies: - dependency-name: com.amazonaws:aws-lambda-java-core dependency-version: 1.4.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- aws-serverless-java-container-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index 9d0ff3cb4..e9aa6bbec 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -24,7 +24,7 @@ com.amazonaws aws-lambda-java-core - 1.2.3 + 1.4.0 From a1c920b88173233493015cb28adf243c61adcd63 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 18 Sep 2025 15:23:32 -0700 Subject: [PATCH 877/888] chore(deps-dev): bump org.mockito:mockito-core from 5.17.0 to 5.19.0 (#1517) Bumps [org.mockito:mockito-core](https://github.com/mockito/mockito) from 5.17.0 to 5.19.0. - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](https://github.com/mockito/mockito/compare/v5.17.0...v5.19.0) --- updated-dependencies: - dependency-name: org.mockito:mockito-core dependency-version: 5.19.0 dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index dd73a0404..ebc634fbb 100644 --- a/pom.xml +++ b/pom.xml @@ -81,7 +81,7 @@ 2.19.1 2.0.17 5.12.2 - 5.17.0 + 5.19.0 1.3 UTF-8 From af5a61d177ab2f3d67371d8fcfecbd776daae631 Mon Sep 17 00:00:00 2001 From: reedham-aws Date: Thu, 18 Sep 2025 22:58:53 +0000 Subject: [PATCH 878/888] chore: release - prepare release aws-serverless-java-container-2.1.5 --- aws-serverless-java-container-core/pom.xml | 4 ++-- aws-serverless-java-container-jersey/pom.xml | 8 ++++---- aws-serverless-java-container-spring/pom.xml | 8 ++++---- aws-serverless-java-container-springboot3/pom.xml | 8 ++++---- aws-serverless-jersey-archetype/pom.xml | 6 +++--- aws-serverless-spring-archetype/pom.xml | 6 +++--- aws-serverless-springboot3-archetype/pom.xml | 6 +++--- pom.xml | 4 ++-- 8 files changed, 25 insertions(+), 25 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index e9aa6bbec..bd4318e82 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Core Allows Java applications written for a servlet container to run in AWS Lambda https://aws.amazon.com/lambda - 2.1.5-SNAPSHOT + 2.1.5 com.amazonaws.serverless aws-serverless-java-container - 2.1.5-SNAPSHOT + 2.1.5 .. diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index 1788a36b8..e90446a3b 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Jersey implementation Allows Java applications written for Jersey to run in AWS Lambda https://aws.amazon.com/lambda - 2.1.5-SNAPSHOT + 2.1.5 com.amazonaws.serverless aws-serverless-java-container - 2.1.5-SNAPSHOT + 2.1.5 .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.1.5-SNAPSHOT + 2.1.5 com.fasterxml.jackson.core @@ -35,7 +35,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.1.5-SNAPSHOT + 2.1.5 tests test-jar test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index f03d9db0a..9ab8a97ec 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spring implementation Allows Java applications written for the Spring framework to run in AWS Lambda https://aws.amazon.com/lambda - 2.1.5-SNAPSHOT + 2.1.5 com.amazonaws.serverless aws-serverless-java-container - 2.1.5-SNAPSHOT + 2.1.5 .. @@ -25,12 +25,12 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.1.5-SNAPSHOT + 2.1.5 com.amazonaws.serverless aws-serverless-java-container-core - 2.1.5-SNAPSHOT + 2.1.5 tests test-jar test diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index 5dcac1562..a41c3a72d 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -3,7 +3,7 @@ aws-serverless-java-container com.amazonaws.serverless - 2.1.5-SNAPSHOT + 2.1.5 4.0.0 @@ -12,7 +12,7 @@ AWS Serverless Java container support - SpringBoot 3 implementation Allows Java applications written for SpringBoot 3 to run in AWS Lambda https://aws.amazon.com/lambda - 2.1.5-SNAPSHOT + 2.1.5 6.2.8 @@ -30,12 +30,12 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.1.5-SNAPSHOT + 2.1.5 com.amazonaws.serverless aws-serverless-java-container-core - 2.1.5-SNAPSHOT + 2.1.5 tests test-jar test diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index 4afdc9996..9f1862e40 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.1.5-SNAPSHOT + 2.1.5 com.amazonaws.serverless.archetypes aws-serverless-jersey-archetype - 2.1.5-SNAPSHOT + 2.1.5 maven-archetype https://github.com/aws/serverless-java-container.git - HEAD + aws-serverless-java-container-2.1.5 diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index 2a2f59b8b..d3cdb9f15 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.1.5-SNAPSHOT + 2.1.5 com.amazonaws.serverless.archetypes aws-serverless-spring-archetype - 2.1.5-SNAPSHOT + 2.1.5 maven-archetype https://github.com/aws/serverless-java-container.git - HEAD + aws-serverless-java-container-2.1.5 diff --git a/aws-serverless-springboot3-archetype/pom.xml b/aws-serverless-springboot3-archetype/pom.xml index 74fac6156..02c3738a9 100644 --- a/aws-serverless-springboot3-archetype/pom.xml +++ b/aws-serverless-springboot3-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.1.5-SNAPSHOT + 2.1.5 com.amazonaws.serverless.archetypes aws-serverless-springboot3-archetype - 2.1.5-SNAPSHOT + 2.1.5 maven-archetype https://github.com/aws/serverless-java-container.git - HEAD + aws-serverless-java-container-2.1.5 diff --git a/pom.xml b/pom.xml index ebc634fbb..c4bb9b906 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazonaws.serverless aws-serverless-java-container pom - 2.1.5-SNAPSHOT + 2.1.5 AWS Serverless Java container A Java framework to run Spring, Spring Boot, Jersey, Spark, and Struts applications inside AWS Lambda https://github.com/aws/serverless-java-container @@ -37,7 +37,7 @@ https://github.com/aws/serverless-java-container scm:git:https://github.com/aws/serverless-java-container.git - HEAD + aws-serverless-java-container-2.1.5 From 4696691989cfcd5d8957dbdfc280018aa267c8ba Mon Sep 17 00:00:00 2001 From: reedham-aws Date: Thu, 18 Sep 2025 22:58:55 +0000 Subject: [PATCH 879/888] chore: release - prepare for next development iteration --- aws-serverless-java-container-core/pom.xml | 4 ++-- aws-serverless-java-container-jersey/pom.xml | 8 ++++---- aws-serverless-java-container-spring/pom.xml | 8 ++++---- aws-serverless-java-container-springboot3/pom.xml | 8 ++++---- aws-serverless-jersey-archetype/pom.xml | 6 +++--- aws-serverless-spring-archetype/pom.xml | 6 +++--- aws-serverless-springboot3-archetype/pom.xml | 6 +++--- pom.xml | 4 ++-- 8 files changed, 25 insertions(+), 25 deletions(-) diff --git a/aws-serverless-java-container-core/pom.xml b/aws-serverless-java-container-core/pom.xml index bd4318e82..e9aa6bbec 100644 --- a/aws-serverless-java-container-core/pom.xml +++ b/aws-serverless-java-container-core/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Core Allows Java applications written for a servlet container to run in AWS Lambda https://aws.amazon.com/lambda - 2.1.5 + 2.1.5-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 2.1.5 + 2.1.5-SNAPSHOT .. diff --git a/aws-serverless-java-container-jersey/pom.xml b/aws-serverless-java-container-jersey/pom.xml index e90446a3b..1788a36b8 100644 --- a/aws-serverless-java-container-jersey/pom.xml +++ b/aws-serverless-java-container-jersey/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Jersey implementation Allows Java applications written for Jersey to run in AWS Lambda https://aws.amazon.com/lambda - 2.1.5 + 2.1.5-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 2.1.5 + 2.1.5-SNAPSHOT .. @@ -24,7 +24,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.1.5 + 2.1.5-SNAPSHOT com.fasterxml.jackson.core @@ -35,7 +35,7 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.1.5 + 2.1.5-SNAPSHOT tests test-jar test diff --git a/aws-serverless-java-container-spring/pom.xml b/aws-serverless-java-container-spring/pom.xml index 9ab8a97ec..f03d9db0a 100644 --- a/aws-serverless-java-container-spring/pom.xml +++ b/aws-serverless-java-container-spring/pom.xml @@ -6,12 +6,12 @@ AWS Serverless Java container support - Spring implementation Allows Java applications written for the Spring framework to run in AWS Lambda https://aws.amazon.com/lambda - 2.1.5 + 2.1.5-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container - 2.1.5 + 2.1.5-SNAPSHOT .. @@ -25,12 +25,12 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.1.5 + 2.1.5-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container-core - 2.1.5 + 2.1.5-SNAPSHOT tests test-jar test diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index a41c3a72d..5dcac1562 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -3,7 +3,7 @@ aws-serverless-java-container com.amazonaws.serverless - 2.1.5 + 2.1.5-SNAPSHOT 4.0.0 @@ -12,7 +12,7 @@ AWS Serverless Java container support - SpringBoot 3 implementation Allows Java applications written for SpringBoot 3 to run in AWS Lambda https://aws.amazon.com/lambda - 2.1.5 + 2.1.5-SNAPSHOT 6.2.8 @@ -30,12 +30,12 @@ com.amazonaws.serverless aws-serverless-java-container-core - 2.1.5 + 2.1.5-SNAPSHOT com.amazonaws.serverless aws-serverless-java-container-core - 2.1.5 + 2.1.5-SNAPSHOT tests test-jar test diff --git a/aws-serverless-jersey-archetype/pom.xml b/aws-serverless-jersey-archetype/pom.xml index 9f1862e40..4afdc9996 100644 --- a/aws-serverless-jersey-archetype/pom.xml +++ b/aws-serverless-jersey-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.1.5 + 2.1.5-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-jersey-archetype - 2.1.5 + 2.1.5-SNAPSHOT maven-archetype https://github.com/aws/serverless-java-container.git - aws-serverless-java-container-2.1.5 + HEAD diff --git a/aws-serverless-spring-archetype/pom.xml b/aws-serverless-spring-archetype/pom.xml index d3cdb9f15..2a2f59b8b 100644 --- a/aws-serverless-spring-archetype/pom.xml +++ b/aws-serverless-spring-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.1.5 + 2.1.5-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-spring-archetype - 2.1.5 + 2.1.5-SNAPSHOT maven-archetype https://github.com/aws/serverless-java-container.git - aws-serverless-java-container-2.1.5 + HEAD diff --git a/aws-serverless-springboot3-archetype/pom.xml b/aws-serverless-springboot3-archetype/pom.xml index 02c3738a9..74fac6156 100644 --- a/aws-serverless-springboot3-archetype/pom.xml +++ b/aws-serverless-springboot3-archetype/pom.xml @@ -4,17 +4,17 @@ com.amazonaws.serverless aws-serverless-java-container - 2.1.5 + 2.1.5-SNAPSHOT com.amazonaws.serverless.archetypes aws-serverless-springboot3-archetype - 2.1.5 + 2.1.5-SNAPSHOT maven-archetype https://github.com/aws/serverless-java-container.git - aws-serverless-java-container-2.1.5 + HEAD diff --git a/pom.xml b/pom.xml index c4bb9b906..ebc634fbb 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.amazonaws.serverless aws-serverless-java-container pom - 2.1.5 + 2.1.5-SNAPSHOT AWS Serverless Java container A Java framework to run Spring, Spring Boot, Jersey, Spark, and Struts applications inside AWS Lambda https://github.com/aws/serverless-java-container @@ -37,7 +37,7 @@ https://github.com/aws/serverless-java-container scm:git:https://github.com/aws/serverless-java-container.git - aws-serverless-java-container-2.1.5 + HEAD From a55a57af609c71c03142c6a9b62bb432746aca29 Mon Sep 17 00:00:00 2001 From: Adnan Khan Date: Tue, 21 Oct 2025 17:26:15 -0400 Subject: [PATCH 880/888] ci: scope down permissions for owasp-dependency-check.yml --- .github/workflows/owasp-dependency-check.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/owasp-dependency-check.yml b/.github/workflows/owasp-dependency-check.yml index fa2657740..b7df2a770 100644 --- a/.github/workflows/owasp-dependency-check.yml +++ b/.github/workflows/owasp-dependency-check.yml @@ -3,6 +3,9 @@ on: schedule: - cron: "10 10 * * 3" +permissions: + contents: read + jobs: owasp-dependency-check: name: Verify dependencies with OWASP checker From 0c2f8dfe6a61d5b1ac73a1a85832e67241af6fce Mon Sep 17 00:00:00 2001 From: Adnan Khan Date: Tue, 21 Oct 2025 17:26:17 -0400 Subject: [PATCH 881/888] ci: scope down permissions for release.yml --- .github/workflows/release.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 7ff2bea79..9faff653b 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -10,6 +10,9 @@ on: description: "Version to use for further development" required: true default: "X.Y.Z-SNAPSHOT" +permissions: + contents: write + jobs: release: runs-on: ubuntu-latest From 2816aae7a701bc0c934b050fc0f067a34d36c6a4 Mon Sep 17 00:00:00 2001 From: Adnan Khan Date: Tue, 21 Oct 2025 17:26:19 -0400 Subject: [PATCH 882/888] ci: scope down permissions for continuous-integration-workflow.yml --- .github/workflows/continuous-integration-workflow.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/continuous-integration-workflow.yml b/.github/workflows/continuous-integration-workflow.yml index 2785cd3dc..08fe294d4 100644 --- a/.github/workflows/continuous-integration-workflow.yml +++ b/.github/workflows/continuous-integration-workflow.yml @@ -8,6 +8,9 @@ on: - 1.x workflow_dispatch: +permissions: + contents: read + jobs: build_core: name: Build and test core From 8f98eea56204fb51194f0007452877829eb93f74 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 27 Oct 2025 04:18:39 +0000 Subject: [PATCH 883/888] chore(deps): bump org.springframework.boot:spring-boot-starter-web Bumps [org.springframework.boot:spring-boot-starter-web](https://github.com/spring-projects/spring-boot) from 3.4.5 to 3.5.7. - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.4.5...v3.5.7) --- updated-dependencies: - dependency-name: org.springframework.boot:spring-boot-starter-web dependency-version: 3.5.7 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- samples/springboot3/alt-pet-store/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/springboot3/alt-pet-store/build.gradle b/samples/springboot3/alt-pet-store/build.gradle index 653135db0..d2c99b907 100644 --- a/samples/springboot3/alt-pet-store/build.gradle +++ b/samples/springboot3/alt-pet-store/build.gradle @@ -9,7 +9,7 @@ repositories { dependencies { implementation ( - implementation('org.springframework.boot:spring-boot-starter-web:3.4.5') { + implementation('org.springframework.boot:spring-boot-starter-web:3.5.7') { exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat' }, 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:[2.0-SNAPSHOT,)', From 890ee2d77ec981ef5bdef58182381eff62008fdb Mon Sep 17 00:00:00 2001 From: andreossido Date: Wed, 12 Nov 2025 10:04:10 +0100 Subject: [PATCH 884/888] fix: added missing main class to SpringApplicationBuilder (#1580) fix: replaced `AnnotationConfigServletWebServerApplicationContext` with `ConfigurableWebApplicationContext` (#1580) --- .../proxy/spring/SpringBootLambdaContainerHandler.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java index 6b3dd5ca2..cf4e5842f 100644 --- a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java +++ b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java @@ -18,7 +18,7 @@ import org.slf4j.LoggerFactory; import org.springframework.boot.WebApplicationType; import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext; +import org.springframework.web.context.ConfigurableWebApplicationContext; import org.springframework.context.ConfigurableApplicationContext; import com.amazonaws.serverless.exceptions.ContainerInitializationException; @@ -192,12 +192,15 @@ public void initialize() SpringApplicationBuilder builder = new SpringApplicationBuilder(getEmbeddedContainerClasses()) .web(springWebApplicationType); // .REACTIVE, .SERVLET + if(springBootInitializer != null) { + builder.main(springBootInitializer); + } if (springProfiles != null) { builder.profiles(springProfiles); } applicationContext = builder.run(); if (springWebApplicationType == WebApplicationType.SERVLET) { - ((AnnotationConfigServletWebServerApplicationContext)applicationContext).setServletContext(getServletContext()); + ((ConfigurableWebApplicationContext)applicationContext).setServletContext(getServletContext()); AwsServletRegistration reg = (AwsServletRegistration)getServletContext().getServletRegistration(DISPATCHER_SERVLET_REGISTRATION_NAME); if (reg != null) { reg.setLoadOnStartup(1); From 9c18414d5ce24b86bfd33055b57b97e88bc485d1 Mon Sep 17 00:00:00 2001 From: tobixlea Date: Thu, 11 Dec 2025 12:53:52 -0800 Subject: [PATCH 885/888] update spring boot to version v3.5 to prepare support for v4.0 --- aws-serverless-java-container-springboot3/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aws-serverless-java-container-springboot3/pom.xml b/aws-serverless-java-container-springboot3/pom.xml index 5dcac1562..dc9ffca03 100644 --- a/aws-serverless-java-container-springboot3/pom.xml +++ b/aws-serverless-java-container-springboot3/pom.xml @@ -16,7 +16,7 @@ 6.2.8 - 3.4.5 + 3.5.8 6.4.5 From 9a02c12505057042c254f1155678e7ba957dc00c Mon Sep 17 00:00:00 2001 From: tobixlea Date: Thu, 11 Dec 2025 15:02:06 -0800 Subject: [PATCH 886/888] verify sample projects work; update dockerfile architecture --- samples/springboot3/pet-store-native/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/springboot3/pet-store-native/Dockerfile b/samples/springboot3/pet-store-native/Dockerfile index 4fb614e3f..7d5833bfe 100644 --- a/samples/springboot3/pet-store-native/Dockerfile +++ b/samples/springboot3/pet-store-native/Dockerfile @@ -8,7 +8,7 @@ RUN yum -y update \ # Graal VM ENV GRAAL_VERSION 21.0.2 -ENV ARCHITECTURE x64 +ENV ARCHITECTURE aarch64 ENV GRAAL_FILENAME graalvm-community-jdk-${GRAAL_VERSION}_linux-${ARCHITECTURE}_bin.tar.gz RUN curl -4 -L https://github.com/graalvm/graalvm-ce-builds/releases/download/jdk-${GRAAL_VERSION}/${GRAAL_FILENAME} | tar -xvz RUN mv graalvm-community-openjdk-${GRAAL_VERSION}* /usr/lib/graalvm From 397e459903ecb2ab0bf1057cd21c393f08df0c56 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 11 Dec 2025 23:23:45 +0000 Subject: [PATCH 887/888] chore(deps): bump org.springframework:spring-webmvc Bumps [org.springframework:spring-webmvc](https://github.com/spring-projects/spring-framework) from 6.2.8 to 6.2.10. - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.8...v6.2.10) --- updated-dependencies: - dependency-name: org.springframework:spring-webmvc dependency-version: 6.2.10 dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- samples/spring/pet-store/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/spring/pet-store/pom.xml b/samples/spring/pet-store/pom.xml index 3603df159..27a49d371 100644 --- a/samples/spring/pet-store/pom.xml +++ b/samples/spring/pet-store/pom.xml @@ -24,7 +24,7 @@ - 6.2.8 + 6.2.10 2.24.3 17 17 From 27d2f8df47f68edd55821fe9684e8c693401661b Mon Sep 17 00:00:00 2001 From: andreossido Date: Tue, 13 Jan 2026 12:31:14 +0100 Subject: [PATCH 888/888] test: added unit tests for `SpringBootLambdaContainerHandler.initialize` --- .../SpringBootLambdaContainerHandler.java | 5 +- .../SpringBootLambdaContainerHandlerTest.java | 76 +++++++++++++++++++ 2 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandlerTest.java diff --git a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java index cf4e5842f..45bf28efe 100644 --- a/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java +++ b/aws-serverless-java-container-springboot3/src/main/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandler.java @@ -184,13 +184,16 @@ protected void handleRequest(HttpServletRequest containerRequest, AwsHttpServlet Timer.stop("SPRINGBOOT2_HANDLE_REQUEST"); } + SpringApplicationBuilder getSpringApplicationBuilder(Class... sources) { + return new SpringApplicationBuilder(sources); + } @Override public void initialize() throws ContainerInitializationException { Timer.start("SPRINGBOOT2_COLD_START"); - SpringApplicationBuilder builder = new SpringApplicationBuilder(getEmbeddedContainerClasses()) + SpringApplicationBuilder builder = getSpringApplicationBuilder(getEmbeddedContainerClasses()) .web(springWebApplicationType); // .REACTIVE, .SERVLET if(springBootInitializer != null) { builder.main(springBootInitializer); diff --git a/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandlerTest.java b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandlerTest.java new file mode 100644 index 000000000..871a751bb --- /dev/null +++ b/aws-serverless-java-container-springboot3/src/test/java/com/amazonaws/serverless/proxy/spring/SpringBootLambdaContainerHandlerTest.java @@ -0,0 +1,76 @@ +package com.amazonaws.serverless.proxy.spring; + +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; + +import com.amazonaws.serverless.exceptions.ContainerInitializationException; +import com.amazonaws.serverless.proxy.AwsProxyExceptionHandler; +import com.amazonaws.serverless.proxy.AwsProxySecurityContextWriter; +import com.amazonaws.serverless.proxy.InitializationWrapper; +import com.amazonaws.serverless.proxy.internal.servlet.AwsProxyHttpServletRequestReader; +import com.amazonaws.serverless.proxy.internal.servlet.AwsProxyHttpServletResponseWriter; +import com.amazonaws.serverless.proxy.model.AwsProxyRequest; +import com.amazonaws.serverless.proxy.model.AwsProxyResponse; +import com.amazonaws.serverless.proxy.spring.servletapp.ServletApplication; +import com.amazonaws.serverless.proxy.spring.webfluxapp.WebFluxTestApplication; +import java.util.Collection; +import java.util.List; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.EnumSource; +import org.junit.jupiter.params.provider.MethodSource; +import org.mockito.Mockito; +import org.springframework.boot.WebApplicationType; +import org.springframework.boot.builder.SpringApplicationBuilder; + +class SpringBootLambdaContainerHandlerTest { + + SpringBootLambdaContainerHandler handler; + SpringApplicationBuilder springApplicationBuilder; + + public static Collection data() { + return List.of(new TestData(WebApplicationType.SERVLET, ServletApplication.class), + new TestData(WebApplicationType.REACTIVE, WebFluxTestApplication.class)); + } + + private void initSpringBootLambdaContainerHandlerTest(Class springBootInitializer, + WebApplicationType applicationType) { + handler = Mockito.spy(new SpringBootLambdaContainerHandler<>(AwsProxyRequest.class, + AwsProxyResponse.class, + new AwsProxyHttpServletRequestReader(), + new AwsProxyHttpServletResponseWriter(), + new AwsProxySecurityContextWriter(), + new AwsProxyExceptionHandler(), + springBootInitializer, + new InitializationWrapper(), + applicationType)); + + doAnswer(d -> { + springApplicationBuilder = ((SpringApplicationBuilder) Mockito.spy(d.callRealMethod())); + return springApplicationBuilder; + }).when(handler).getSpringApplicationBuilder(any(Class[].class)); + } + + @ParameterizedTest + @MethodSource("data") + void initialize_withSpringBootInitializer(TestData data) throws ContainerInitializationException { + initSpringBootLambdaContainerHandlerTest(data.springBootApplication(), data.applicationType()); + handler.initialize(); + + verify(springApplicationBuilder, times(1)).main(data.springBootApplication()); + } + + @ParameterizedTest + @EnumSource(WebApplicationType.class) + void initialize_withoutSpringBootInitializer(WebApplicationType webApplicationType) { + initSpringBootLambdaContainerHandlerTest(null, webApplicationType); + assertThrows(IllegalArgumentException.class, handler::initialize, "Source must not be null"); + + verify(springApplicationBuilder, never()).main(any()); + } + + record TestData(WebApplicationType applicationType, Class springBootApplication) {} +} \ No newline at end of file